请问如何根据波形片段来播放声音?单通道,单字节,22k采样 请问如何根据波形片段来播放声音?单通道,单字节,22k采样 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 设置waveformat,然后用wave系列函数控制声卡进行输出。 HWAVEOUT m_hwo; WAVEHDR m_wh; WAVEFORMATEX m_wfx; DWORD dwSampleRate = 22000; WORD wChannel = 1; WORD wSampleBits = 8; m_wfx.wFormatTag = WAVE_FORMAT_PCM; m_wfx.nChannels = wChannel; m_wfx.nSamplesPerSec = dwSampleRate; m_wfx.nAvgBytesPerSec = dwSampleRate * wChannel * wSampleBits/8; m_wfx.nBlockAlign = wChannel * wSampleBits/8; m_wfx.wBitsPerSample = wSampleBits; m_wfx.cbSize = 0; if(waveOutOpen( &m_hwo, WAVE_MAPPER, &m_wfx, (UINT)GetDesktopWindow(), 0, CALLBACK_WINDOW) != MMSYSERR_NOERROR) { waveOutUnprepareHeader( m_hwo, &m_wh, sizeof(m_wh) ); m_wh.lpData = NULL; m_wh.dwBufferLength = 0; //下面将你的波形片段数据赋予m_wh, pData 为数据, lDataLen 为数据长度 //m_wh.lpData = pData; //m_wh.dwBufferLength = lDataLen; ATLASSERT(m_wh.lpData!=NULL); m_wh.dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP; m_wh.dwLoops = -1; if(waveOutPrepareHeader( m_hwo, &m_wh, sizeof(m_wh) )== MMSYSERR_NOERROR){ if(waveOutWrite( m_hwo, &m_wh, sizeof(m_wh) ) == MMSYSERR_NOERROR){ m_bIsSend = true; } } } VS2008无法进入断点的问题 如何自定义打印内容? 想做个漂亮的界面,用什么好点。 VC++读取一行的几百兆的计事本数据 我在MFC的DLL中创建一个dialogbar,其中frame是从exe传入的,却不能使用,为什么呢,急!急!急 我想捕获到进程间的窗口切换的动作,请问应该怎么做?谢谢~~ 谁等解释下等同调色板的概念 又要麻烦大家了!关于记时的问题! 一个分割窗口的问题 请指点:函数声明 CEvent被设置了,但是waitforsingleobject为什么没有被激活? 看别人的项目源码,调试不通过,请教!~
WAVEHDR m_wh;
WAVEFORMATEX m_wfx;
DWORD dwSampleRate = 22000;
WORD wChannel = 1;
WORD wSampleBits = 8; m_wfx.wFormatTag = WAVE_FORMAT_PCM;
m_wfx.nChannels = wChannel;
m_wfx.nSamplesPerSec = dwSampleRate;
m_wfx.nAvgBytesPerSec = dwSampleRate * wChannel * wSampleBits/8;
m_wfx.nBlockAlign = wChannel * wSampleBits/8;
m_wfx.wBitsPerSample = wSampleBits;
m_wfx.cbSize = 0;
if(waveOutOpen( &m_hwo, WAVE_MAPPER, &m_wfx, (UINT)GetDesktopWindow(), 0, CALLBACK_WINDOW) != MMSYSERR_NOERROR)
{
waveOutUnprepareHeader( m_hwo, &m_wh, sizeof(m_wh) ); m_wh.lpData = NULL;
m_wh.dwBufferLength = 0; //下面将你的波形片段数据赋予m_wh, pData 为数据, lDataLen 为数据长度
//m_wh.lpData = pData;
//m_wh.dwBufferLength = lDataLen; ATLASSERT(m_wh.lpData!=NULL);
m_wh.dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP;
m_wh.dwLoops = -1;
if(waveOutPrepareHeader( m_hwo, &m_wh, sizeof(m_wh) )== MMSYSERR_NOERROR){
if(waveOutWrite( m_hwo, &m_wh, sizeof(m_wh) ) == MMSYSERR_NOERROR){
m_bIsSend = true;
}
}
}