7
votes

I'm developing an application in c to read simple PCM WAV files. My question is, how should I interpret the samples from the data chunk, so that I can extract the sample's frequency?

Given a WAV example, how can the original data represent frequencies. E.g. this data chunk, 24 17 1e f3, for stereo, 16 bits, the left channel sample is, 0x1724 = 5924d, means 5924Hz ? How can that be, for samples that are signed or frequencies that humans can´t hear?

2
I'd bet there at least 10 duplicates of this question. - AShelly
@AShelly link me to one of those topics plz - ikyr9999
OK now I'm seriously confused. I asked this question because I'm working on something that will read a wav and, because I cannot use the soundBoard, I want to convert the wav to a list of frequencies (mean among several data samples) and then play it through the Timer2, connected to the speakers. Are you saying that I need to compute FFT to obtain those? - ikyr9999

2 Answers

12
votes

Your assumption is incorrect. The sample data is simply a digital representation of the actual sound wave. The numbers represent wave amplitude, the array offset represents time.

I would suggest reading about How Audio is Represented, specifically PCM.

To convert this data (amplitude-vs-time) to frequency data, you need to understand the basic concepts of The Fourier Transform

I really suggest taking the time to read these before trying to do any audio processing.

1
votes

You can extract the sample rate in the WAV header, but if you need the actual frequency data of the audio that was recorded, i.e. how much energy at 200Hz, how much at 2kHz, how much at 8kHz, etc. you need to do an FFT, or run it through a spectrogram.