Talk:Answering Machine
Prototype
#!/bin/bash answer_machine_start() { echo "Begin answering machine..." ffplay $message_start -autoexit -nodisp } answer_machine_finish() { echo "Closing answering machine..." ffplay $message_finish -autoexit -nodisp } record_audio() { echo "Begin recording..." ffmpeg \ -t 90 \ -f pulse \ -i default \ -acodec libspeex \ -y voicemail_$(date +%Y%m%d_%H%M%S).spx } while true; do # sox records for 5 seconds and outputs the max amplitude. amplitude=$(sox -d -n trim 0 5 stat 2>&1| awk '/^Maximum delta/ {print $NF}') # Threshold value set to detect noise threshold=0.1 # Audio to play message_start=/path/to/file.ogg message_finish=/path/to/file.ogg check=$(echo $amplitude'>'$threshold | bc -l) if [ $check -eq 1 ]; then #if [ $check -eq 1 && ! -f output.spx ]; then # There's no need to check for file or pid echo "Noise detected $amplitude" answer_machine_start record_audio answer_machine_finish else echo "No noise $amplitude" fi sleep 1 done
Listener (manual.html)
First install <A HREF="http://www.mega-nerd.com/libsndfile/">libsndfile</A>!
Then:
make install
Then run 'setlistener' with as parameter the device to listen to.
setlistener /dev/dsp
Then, with the left and right arrow keys, move the '|' until the
word "<silence>" appears. No, don't you move the '|' to the maximum
right, move it to the right until the "<silence>" just constantly
appears. Then: remember the value "Current level: ".
Next step is creating the file /usr/local/etc/listener.conf
Copy the example listener.conf to the location mentioned above and
edit it to suit your needs.
For example:
wav_path = /home/folkert/recordings devname = /dev/dsp detect_level = 800 min_duration = 1 max_duration = 300 rec_silence = 5 audio_parameters = 44.1khz,1,wav,pcm16 from_pipe = 0 exec = /home/folkert/encode_sample prerecord_n_seconds = 3
audio_parameters
Format sets what kind of outputfile is generated AND how the sound is recorded.
Run listener with -h to get a list of parameters.
In any order you can set the samplerate (e.g. 44100 or 22.05khz), the number of channels, the output-file-type, the file subtype (e.g. 16 bit or adpcm compressed).
rec_silence
When while recording things become silent, don't stop recording immediately
but keep recording for 'rec_silence' seconds to see if the sound restarts.
min_duration
When the sound starts, record at least that many seconds of audio, measured
relative to the start of the recoding.
E.g. if the sound only sounds for 3 seconds and you've set this value to 5,
still at least 5 seconds of audio will be recorded.
min_triggers
sets how many samples must be above the threshold (the
'detect_level') before recording starts.
The samplerate is set to 44.1kHz so if you set min_duration to
4410, the minimum length (duration) of sound before the recording
starts is: 0.1s (or: one tenth of a second).
max_duration
How long a sample may be before a new file is started.
one_shot
When set to yes/on/1, listener will exit after the first recorded sample.
prerecord_n_seconds
How many seconds to record before the sound starts.
from_pipe
sets wether listener is reading from a pipe fed by
listenersoundpipe. listenersoundpipe lets you split a sound-
device in two so that you can check 2 rooms with only one sound-
card. You need to create two pipes and start 2 listener processes,
each reading from one pipe.
Set this parameter to yes/on/1 for "pipe-mode", no/off/0 for normal mode.
exec
selects the script/program to execute after the sample was
recorded. This first (and only) parameter for that script is the
filename of the sample.
on_event_start
selects the script/program to execute before the sample was recorded.
output_pipe
Instead of writing to a wav-file, listener can also execute an external
program which does the compression and/or file-I/O.
e.g.:
output_pipe=bladeenc -rawstereo -rawsigned -rawchannels=2 STDIN /tmp/my_file.mp3
filter
lets you add one or more filters. these will be used when
detecting sounds. beware: sound is written to the wav-files BEFORE
the filtering is done. See the directory 'filter_lib_example' for
an example on how to write a filter for listener.
amplify
Wether to automatically amplify the sound or not. Use 'on' and 'off' to
toggle.
start_amplify
What amplification to use when the sound starts. This will be adjusted
to something more applicable UNLESS 'fixed_amplify' is set to yes.
max_amplify
Maximum amplification to use.
fixed_amplify
Wether to ONLY use the amplification factor set with 'start_amplify'
(=yes) or let listener do autotuning (=no).
safe_after_filtersets wether to save the audio-data to disk
before or after the filtering. Before the filtering gives you the
original sound while after gives you the sound after processing
with the filter(s).
Enter 'on' or 'off'.
The final step is starting the program:
listener
and that's it!
Status
This page isn't completely ready yet.
Can I have this page here or shall I move it to SoySot/Answering_Machine ?