1

I want to make a sound that is too high to be detected by the human ear. From my understanding, humans can hear sounds between 20hz and 44000hz.

With sox, I am making a sound that is 50000hz. The problem is I can still hear it. The command I am using is this:

sox -n -r 50000 output.wav rate -L -s 50050 synth 3 sine 

Either I have super good hearing or I am doing something wrong. How can I make this sound undetectable with SOX of FFMPEG?

Devin Dixon
  • 11,553
  • 24
  • 86
  • 167
  • They don't have too, I just need to be able to produce audio file that is not detectable. Do you know of a way? – Devin Dixon Oct 28 '16 at 13:41
  • Greg, yes but please understand, its not about the speaker playing being able to play it, that is not important for our use case, just that the audio is able to be created. – Devin Dixon Oct 28 '16 at 14:05

1 Answers1

4

Human hearing is generally considered to range between 20Hz and 20kHz, although most people don't hear much above 16kHz. Digital signals can only represent frequencies up to half of their sampling rate, known as the Nyquist frequency, and so, in order to accurately reproduce audio for the human ear, a sampling rate of at least 40kHz is needed. In practice, a sampling rate of 44.1kHz or 48kHz is almost always used, leaving plenty of space for an inaudable sound somewhere in the 20-22kHz range.

For example, this command generates a WAV file with a sampling rate of 48kHz containing a sine wave at 22kHz that is completely inaudible to me:

sox -n -r 48000 output.wav synth 3 sine 22000

I think part of your problem was that you were using the wrong syntax to specify the pitch to sox. This question has some good information about using SoX to generate simple tones.

Community
  • 1
  • 1
Linuxios
  • 34,849
  • 13
  • 91
  • 116