Konzept
Ein Gast ruft mit einem Wählscheibentelefon die 500 an. Nach einem kurzen Klingeln ertönt eine Ansage. Diese soll ihn dazu bringen etwas zu sagen. Dies wird vom Asterisk aufgenommen und die MD5Summe über die Aufnahme als Hash verwendet.
Ansagetext
Guten Tag! Willkommen beim FullCircle Telefonsystem. Das Ziel dieses Telefonats ist es, eine Aufzeichnung Ihrer Stimme zu erhalten. Sie koennen so kurz oder so lange sprechen wie sie wollen. Wenn sie fertig sind, legen Sie einfach den Hoerer wieder auf. Dann wird ein Zettel mit Ihrer Nutzernummer ausgedruckt, an der sie die Visualisierung ihrer Stimme erkennen koennen. Erzaehlen Sie mir doch beispielsweise, wie Sie auf unsere Installation aufmerksam geworden sind. Wenn Sie Lust haben, koennen sie mir auch etwas vorsingen. Die Aufzeichnung beginnt nun.
Aktueller Stand
- Fritz!Box mit Telefon seht im Raum (10.23.42.31)
- RaspberryPi(10.23.42.32) mit Asterisk liegt daneben (root:uschiscircle)
- /etc/fullcirclerc enthält die config für fc-perlin, fc-getid und fc-badge
- /mnt/input ist das Zielverzeichnis für fc-perlin (da möchte man das NFS mounten)
- in der fstab ist das nfs eingetragen (entweder den pi erst nach dem renderer booten oder einmal mount -a aufrufen)
- Die 500 anrufen startet das ganze
- /home/asterisk/voice-inotify.sh kümmert sich um die Verarbeitung der Aufnahme.
Generieren einer neuen Ansage
Mit einer Sprachsynthesesoftware eine WAV-Datei generieren. Anschließend diese auf dem Pi mit
sox <input> -t raw -r 8000 -s -2 -c 1 <output>
Anschließend muss der Pfad zur Ansagedatei in /etc/asterisk/extensions.conf angepasst werden.
Dateien
/etc/fstab
10.23.42.2:/srv/nfs /mnt nfs4 defaults 0 0
Init-Skript (ArchLinux) [deprecated, wir verwenden jetzt raspbian]
#!/bin/bash # general config . /etc/rc.conf . /etc/rc.d/functions PID=`cat /var/run/fullcircle.pid` case "$1" in start) stat_busy "Starting Fullcircle" if [ -z "$PID" ]; then touch /var/run/fullcircle.pid chown asterisk /var/run/fullcircle.pid su asterisk -c /home/asterisk/voice_inotify.sh -s /bin/bash &> /var/log/fullcircle.log & fi if [ $? -gt 0 ]; then stat_fail else add_daemon fullcircle stat_done fi ;; stop) stat_busy "Stopping Fullcircle" [ ! -z "$PID" ] && kill $PID &> /dev/null if [ $? -gt 0 ]; then stat_fail else rm -f /var/run/fullcircle.pid &>/dev/null rm_daemon fullcircle stat_done fi ;; restart) $0 stop sleep 2 $0 start ;; *) echo "usage: $0 {start|stop|restart}" esac exit 0
Init-Skript (Raspbian)
#!/bin/sh ### BEGIN INIT INFO # Provides: voice-inotify # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: voice-inotify # Description: voice-inotify ### END INIT INFO NAME=voice-inotify USER=asterisk GROUP=asterisk DAEMON=/home/pi/voice-inotify.sh PIDFILE=/var/run/asterisk/fullcircle.pid case "$1" in start) start-stop-daemon --start --group $GROUP \ --background --make-pidfile \ --pidfile "$PIDFILE" \ --exec $DAEMON ;; stop) start-stop-daemon --stop --quiet --oknodo --retry=0/2/TERM/2/KILL/5 --exec $DAEMON ;; restart|force-reload) $0 stop $0 start ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0
inotify-Skript
#!/bin/sh [ ! -z `cat /var/run/fullcircle.pid` ] && echo "already running. if not remove /var/run/fullcircle.pid" && exit echo $$ > /var/run/fullcircle.pid trap "rm /var/run/fullcircle.pid" EXIT inotifywait -m -r -q -e close_write /tmp/fc/ | while read dir event file; do echo $event: $file MD5=$(md5sum $dir$file) ID=$(/home/max/libfullcircle/build/src/fc-getid --config /etc/fullcirclerc) if [ $? -ne 0 ]; then exit 1; fi FILENAME=/mnt/input/$ID.fcs echo $MD5 >> /tmp/sums /home/max/libfullcircle/build/src/fc-perlin -s $FILENAME -x $MD5 --config /etc/fullcirclerc [ $? -eq 0 ] && /home/max/libfullcircle/build/src/fc-badge --config /etc/fullcirclerc -n $ID [ $? -eq 0 ] && rm $dir$file done
Asterisk-Config
/etc/asterisk/extensions.conf
[general] static=yes autofallthrough=no [default] exten => 500,1,Ringing exten => 500,n,Wait(3) exten => 500,n,Answer exten => 500,n,Wait(1) exten => 500,n,Playback("/home/asterisk/ansage2") exten => 500,n,Record("/tmp/fc/fullcircle%d:wav",0,30) exten => 500,n,Wait(2) exten => 500,n,Hangup
/etc/asterisk/sip.conf um folgendes erweitern
[7701] type=friend context=default secret=23test42 host=dynamic [7702] type=friend context=default secret=23test42 host=dynamic