How to use a Unix PC as a Vocal Monitor

If you have a computer running on Linux or BSD, a microphone connected to it, and a desire not to spend $50 on a very small amplifier, you can use a one line shell script to listen to yourself sing instead.

Listening to yourself through a vocal monitor gives a better indication of the pitch and timbre of your voice than just listening to yourself, as the sound reaching your ears from your mouth is affected by resonating through your head, like listening to someone talk through a bone wall covered by a wet blanket. A monitor will therefore be a more accurate reproduction of what you sound like to everyone else than "directly" listening to your own voice.

WARNING: Make sure you are using earbuds or extremely well enclosed headphones, NOT speakers, so you won't get feedback from the microphone picking up the output. Feedback squeals can quickly ramp up in volume and cause permanent damage to your hearing.

Once you have made sure that all speakers are disconnected, the following PulseAudio command will send the microphone input to the audio output:

$ pacat -r --latency-msec=50 | pacat -p --latency-msec=50

This command requires PulseAudio, but similar ones are available for Jack/ALSA/OSS e.g. the "alsaloop" command.

When done, press ctrl-C in the terminal to stop it.

Adjusting the Latency

You may find that hearing your own voice back makes you feel nauseous or dizzy. Adjusting the latency ("latency-msec" option to pacat) up or down should help - you can experiment with values between around 10-100 msec.

If the delay is too long, the monitor just becomes an echo which isn't useful for hearing yourself sing or talk, but if there is too little, it can be difficult to differentiate your head voice from the headphone voice. Very low latency may also not be supported by your PC and cause the audio output to stutter.

Over time the latency of the monitor may creep up (seems to be something that PulseAudio does when it lags) so if the drift becomes noticeable it may be necessary to quit and restart the monitor command.