FullCircle/Voice: Unterschied zwischen den Versionen

Aus C3MAWiki
(Öffentlich)
 
 
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 3: Zeile 3:
=== Konzept ===
=== Konzept ===


Ein Asterisk ruft (zufällig) ein analoges Telefon an, welches in der Nähe der Installation steht. Hebt ein Gast den Hörer ab, hört er eine Ansage. Diese soll ihn dazu bringen etwas zu sagen. Dies wird vom Asterisk aufgenommen und die MD5Summe über die Aufnahme als Hash verwendet.
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 ====
==== Ansagetext ====
Zeile 39: Zeile 39:
=== Dateien ===
=== Dateien ===


==== Init-Skript (ArchLinux) ====
==== /etc/fstab ====
 
  10.23.42.2:/srv/nfs /mnt nfs4 defaults 0 0
 
==== Init-Skript (ArchLinux) [deprecated, wir verwenden jetzt raspbian] ====


   #!/bin/bash
   #!/bin/bash
Zeile 83: Zeile 87:
   esac
   esac
   exit 0
   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 ====
==== inotify-Skript ====


  #!/bin/sh
#!/bin/sh
 
  [ ! -z `cat /var/run/fullcircle.pid` ] && echo "already running. if not remove /var/run/fullcircle.pid" && exit
[ ! -d /tmp/fc ] && mkdir -m 775 /tmp/fc
 
  echo $$ > /var/run/fullcircle.pid
inotifywait -m -r -q -e close_write /tmp/fc/ | while read dir event file;
  trap "rm /var/run/fullcircle.pid" EXIT
do
 
  echo $event: $file
  inotifywait -m -r -q -e close_write /tmp/fc/ | while read dir event file;
  MD5=$(md5sum $dir$file)
  do
  ID=$(/home/pi/fullcircle/build/src/fc-getid --config /etc/fullcirclerc)
    echo $event: $file
  if [ $? -ne 0 ]; then
    MD5=$(md5sum $dir$file)
    exit 1;
    ID=$(/home/max/libfullcircle/build/src/fc-getid --config /etc/fullcirclerc)
  fi
    if [ $? -ne 0 ]; then
  FILENAME=/mnt/input/$ID.fcs
      exit 1;
    fi
  echo $MD5 >> /tmp/sums
    FILENAME=/mnt/input/$ID.fcs
  /home/pi/fullcircle/build/src/fc-perlin -s $FILENAME -x $MD5 --config /etc/fullcirclerc
 
  [ $? -eq 0 ] && /home/pi/fullcircle/build/src/fc-badge --config /etc/fullcirclerc -n $ID
    echo $MD5 >> /tmp/sums
  [ $? -eq 0 ] && rm $dir$file
    /home/max/libfullcircle/build/src/fc-perlin -s $FILENAME -x $MD5 --config /etc/fullcirclerc
done
    [ $? -eq 0 ] && /home/max/libfullcircle/build/src/fc-badge --config /etc/fullcirclerc -n $ID
    [ $? -eq 0 ] && rm $dir$file
  done


==== Asterisk-Config ====
==== Asterisk-Config ====
Zeile 122: Zeile 166:
   exten => 500,n,Answer
   exten => 500,n,Answer
   exten => 500,n,Wait(1)
   exten => 500,n,Wait(1)
   exten => 500,n,Playback("/home/asterisk/ansage2")
   exten => 500,n,Playback("/home/pi/ansage")
   exten => 500,n,Record("/tmp/fc/fullcircle%d:wav",0,30)
   exten => 500,n,Record("/tmp/fc/fullcircle%d:wav",0,30)
   exten => 500,n,Wait(2)
   exten => 500,n,Wait(2)
   exten => 500,n,Hangup
   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

Aktuelle Version vom 4. April 2014, 23:31 Uhr

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

[ ! -d /tmp/fc ] && mkdir -m 775 /tmp/fc

inotifywait -m -r -q -e close_write /tmp/fc/ | while read dir event file;
do
  echo $event: $file
  MD5=$(md5sum $dir$file)
  ID=$(/home/pi/fullcircle/build/src/fc-getid --config /etc/fullcirclerc)
  if [ $? -ne 0 ]; then
    exit 1;
  fi
  FILENAME=/mnt/input/$ID.fcs

  echo $MD5 >> /tmp/sums
  /home/pi/fullcircle/build/src/fc-perlin -s $FILENAME -x $MD5 --config /etc/fullcirclerc
  [ $? -eq 0 ] && /home/pi/fullcircle/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/pi/ansage")
 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