This is my struct
/* wave data block header */
typedef struct wavehdr_tag {
LPSTR lpData; /* pointer to locked data buffer */
DWORD dwBufferLength; /* length of data buffer */
DWORD dwBytesRecorded; /* used for input only */
DWORD_PTR dwUser; /* for client's use */
DWORD dwFlags; /* assorted flags (see defines) */
DWORD dwLoops; /* loop control counter */
struct wavehdr_tag FAR *lpNext; /* reserved for driver */
DWORD_PTR reserved; /* reserved for driver */
} WAVEHDR, *PWAVEHDR, NEAR *NPWAVEHDR, FAR *LPWAVEHDR;
I have this variable WAVEHDR waveHeader;
I record 10 secs from microphone and waveHeader->lpData
has my raw recorded data, and waveHeader->dwBytesRecorded
is the raw data's length
Now I want to calculate the volume in each second to say which second has highest volume and which one has the lowest.
I know I should sum the absolute values and divide by the number of samples
I used sum += abs(waveHeader->lpData[i]);
for i from 0 to length of one secs data, but it doesn't give me a good result
it always gives me the same result for each second, but I am silent in some seconds and speak in some...
I read I have to add samples, not bytes How should I convert waveHeader->lpData[i]
to samples?
//len = length of one secs data (waveHeader->dwBytesRecorded/10)
for (int i=0; i<len; i++)
{
sum += abs(waveHeader->lpData[i]);
}
WAVEFORMATEX
that you passed towaveInOpen
gives younChannels
andwBitsPerSample
. Multiple the two together and divide by 8 and that's the number of bytes per sample. – AnxiousnChannels = 2
andwBitsPerSample = 16
(2*16)/8 is 4 so each sample has 4 bytes, yes? Now what should I do to sum the absolute values and divide by the number of samples? I got confused :( – KirshbaumlpData
to aDWORD*
. But you probably want to handle the two channels individually (i.e. they're not actually 4 byte samples, they're 2x2 byte samples) so you could cast it to aWORD*
and then calculate the average for each channel. – AnxiousWAVEHDR
is a ell known structure on its own but no one knows what format (values) you are using and whether the entire WAV you create is valid. – Neology