本文介绍了实时音频播放C ++ WaveIn& waveout的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
嗨!
我是VC ++的初学者,我有一点(对我来说是一个很大的)实时音频播放的问题。我使用以下代码:
Hi!
I''m a starter in VC++, and I have a little (for me is a big) problem with real time audio playback. I Use the following code:
#include <windows.h>
#include <mmsystem.h>
#include <stdio.h>
#define SOUNDBUFF 65536;
WAVEFORMATEX wf;
WAVEHDR whdr;
HWAVEIN hWaveIn;
HWAVEOUT hWaveOut;
LPSTR lpData;
int main(void)
{
char clpData[65536];
lpData=clpData;
wf.wFormatTag=WAVE_FORMAT_PCM;
wf.nChannels=1;
wf.nSamplesPerSec=8000;
wf.nAvgBytesPerSec=wf.nSamplesPerSec;
wf.nBlockAlign=1;
wf.wBitsPerSample=8;
wf.cbSize=0;
waveInOpen((LPHWAVEIN)&hWaveIn,WAVE_MAPPER,&wf,0,0,CALLBACK_NULL);
whdr.lpData = lpData;
whdr.dwBufferLength = SOUNDBUFF;
whdr.dwBytesRecorded = 0;
whdr.dwFlags = 0L;
whdr.dwLoops = 0L;
waveInPrepareHeader(hWaveIn,&whdr,sizeof(whdr));
waveInAddBuffer(hWaveIn,&whdr,sizeof(whdr));
waveInStart(hWaveIn);
int n=0;
do {
} while (!(whdr.dwFlags & WHDR_DONE));
waveInUnprepareHeader((HWAVEIN)hWaveOut,&whdr,sizeof(whdr));
waveInClose(hWaveIn);
waveOutOpen(&hWaveOut,WAVE_MAPPER,&wf,0,0,CALLBACK_NULL);
waveOutPrepareHeader(hWaveOut,&whdr,sizeof(whdr));
waveOutWrite(hWaveOut,&whdr,sizeof(whdr));
n=0;
do {
} while (!(whdr.dwFlags & WHDR_DONE));
waveOutUnprepareHeader(hWaveOut,&whdr,sizeof(whdr));
waveOutClose(hWaveOut);
return 0;
}
它工作正常,但我会听到实时,什么是输入缓冲,并且不断。我不知道我怎么能做到,我不明白,我怎么能在写作时读取缓冲区。请帮助,因为我在一周前探测它并没有结果。
感谢大家!
It''s work fine, but I would hear real time, what is input buffer, and continuously. I haven''t idea how can i make it, i don''t understand, how can i read a buffer when is under writing. Please help, cause I probe it a week ago and no results.
Thanks for everyone!
推荐答案
这篇关于实时音频播放C ++ WaveIn& waveout的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!