How to record mic input and pipe the output to another program

audio recordingrandom number generatorsox

Hi everyone Im trying to follow a tutorial on generating truly random bits

How To Generate Truly Random Bits

This is the command from the tutorial but it does not work

rec -c 1 -d /dev/dsp -r 8000 -t wav -s w  - | ./noise-filter >bits

I know i can record my mic input using

rec -c 1 no.wav

this is the command i tried using

rec -c 1 -r 8000 -t wav -s noise.wav | ./noise-filter >bits

but i get

root@xxc:~/cc# rec -c 1 -r 8000 -t wav -s noise.wav  - | ./noise-filter >bits
rec WARN formats: can't set sample rate 8000; using 48000
rec FAIL sox: Input files must have the same sample-rate

I have complied noise-filter


I think the tutorial is using an older version of SOX and REC I'm using

sox: SoX v14.3.2 on Ubuntu 12.04 server

Can someone please help me ?

Best Answer

This command line has too many outputs listed:

rec -c 1 -r 8000 -t wav -s noise.wav - | ./noise-filter >bits
                           ^file     ^standard output

For a command pipeline, the only output should be the - at the end. The rec command interprets the noise.wav parameter as an additional input, which will fail or produce bogus output. Try removing the extra filename (and other unnecessary/incompatible options):

rec -c 1 -t wav - | ./noise-filter > bits