waveInOpen的参数问题

zhuojuedian2986 2016-08-18 11:16:00
waveform.wFormatTag=WAVE_FORMAT_PCM; //设置波形的格式 PCM格式
waveform.nChannels=1; //设置音频文件的通道数量
waveform.nSamplesPerSec=8000; //设置每个声道播放和记录时的样本频率
waveform.nAvgBytesPerSec=8000; //设置请求的平均数据传输率
waveform.nBlockAlign=1; //以字节为单位设置块对齐
waveform.wBitsPerSample=8; //根据wFormatTag的类型设置每个样本的位深 如果wFormatTag= WAVE_FORMAT_PCM,此值应该设为8或16
waveform.cbSize=0; //额外信息的大小,以字节为单位
waveInOpen(&hWaveIn,WAVE_MAPPER,&waveform,(DWORD)this->m_hWnd,NULL,CALLBACK_WINDOW)



wBitsPerSample我把这个样本的位深设置为8时,waveInOpen打开正常,设置为16时,就出错了,是怎么回事?
...全文
281 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
满衣兄 2016-08-18
  • 打赏
  • 举报
回复
 
 // Set the input wave format
    //
    WAVEFORMATEX waveFormat;

    waveFormat.wFormatTag      = WAVE_FORMAT_PCM;
    waveFormat.nChannels       = 2;  // mono <=> 1, stereo <=> 2
    waveFormat.nSamplesPerSec  = 44100;
    waveFormat.wBitsPerSample  = 16; // 你这个参数好像填的不正确
    waveFormat.nBlockAlign     = waveFormat.nChannels * (waveFormat.wBitsPerSample/8);
    waveFormat.nAvgBytesPerSec = waveFormat.nSamplesPerSec * waveFormat.nBlockAlign;
    waveFormat.cbSize          = 0;
https://msdn.microsoft.com/zh-HK/library/ms713735
zhuojuedian2986 2016-08-18
  • 打赏
  • 举报
回复
或者说wBitsPerSample设置为8时,打开时返回值是0,设置为16时,返回值为32..
zhuojuedian2986 2016-08-18
  • 打赏
  • 举报
回复
引用 2 楼 yfqvip 的回复:
 
 // Set the input wave format
    //
    WAVEFORMATEX waveFormat;

    waveFormat.wFormatTag      = WAVE_FORMAT_PCM;
    waveFormat.nChannels       = 2;  // mono <=> 1, stereo <=> 2
    waveFormat.nSamplesPerSec  = 44100;
    waveFormat.wBitsPerSample  = 16; // 你这个参数好像填的不正确
    waveFormat.nBlockAlign     = waveFormat.nChannels * (waveFormat.wBitsPerSample/8);
    waveFormat.nAvgBytesPerSec = waveFormat.nSamplesPerSec * waveFormat.nBlockAlign;
    waveFormat.cbSize          = 0;
https://msdn.microsoft.com/zh-HK/library/ms713735
谢谢了,原来参数之间要互相匹配的,我以为直接把8改成16就可以了。。

2,586

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧