静音时为何有嘟嘟声?在线等待

匪六哥 2003-12-23 09:50:50
我在做音频解码,格式为PCM,在编码器静音时,解出的声音为嘟嘟声,按道理应该没有声音,在有声音时,有杂音,我不知道是为什么。具体实现如下:
LPWAVEFORMATEX lpFormat;
LONG cbFormat;
cbFormat = 50000;
lpFormat = (LPWAVEFORMATEX)malloc(cbFormat);
lpFormat->wFormatTag = WAVE_FORMAT_PCM;
lpFormat->nChannels = 1;
lpFormat->nSamplesPerSec = 8000;
lpFormat->nAvgBytesPerSec = 8000*1*2;
lpFormat->nBlockAlign = 2;
lpFormat->wBitsPerSample = 16;
w = waveOutOpen(&shWaveOut, WAVE_MAPPER, lpFormat,
0, 0L, CALLBACK_NULL);//打开音频设备
for (swBuffers = 0; swBuffers < MAX_AUDIO_BUFFERS; swBuffers++) {
if (!(salpAudioBuf[swBuffers] =(LPWAVEHDR)malloc((DWORD)(sizeof(WAVEHDR) + AUDIO_BUFFER_SIZE*4 ))))//申请buffer
break
salpAudioBuf[swBuffers]->dwFlags = WHDR_DONE;
salpAudioBuf[swBuffers]->lpData = (char*) salpAudioBuf[swBuffers] + sizeof(WAVEHDR);
salpAudioBuf[swBuffers]->dwBufferLength = AUDIO_BUFFER_SIZE;
if (!waveOutPrepareHeader(shWaveOut, salpAudioBuf[swBuffers],sizeof(WAVEHDR)))
continue;
free((LPBYTE) salpAudioBuf[swBuffers]);
break;
}


salpAudioBuf[swNextBuffer]->lpData = (char*) salpAudioBuf[swNextBuffer]
+ sizeof(WAVEHDR);
memcpy((salpAudioBuf[swNextBuffer]->lpData)+bufferNo, s, wParam);//写buffer
waveOutWrite(shWaveOut, salpAudioBuf[swNextBuffer],sizeof(WAVEHDR));//播放音频
...全文
91 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
匪六哥 2004-02-17
  • 打赏
  • 举报
回复
经过考察我觉得是播放的速度与实时收的的速率不匹配。不如按照8000的播放速率,每秒的数据量为64K,而实际上收的的数据量小于64K,所以在下一buffer未写满前,当前buffer的数据便被读完,造成播放过程中产生了间隙,从而产生了噪声。这一问题该如何解决呢?各位大侠帮帮忙吧!
孤必有邻 2003-12-23
  • 打赏
  • 举报
回复
如果你的输出缓冲不够大,且缓冲区个数不够多,就会出现“播放”的间断,音频设备在有无信号的切换过程中,发出轻微的噪音。
解决的最好办法是用两个以上的缓冲区,(大于4个多余),或者增大缓冲区感觉也会好些。
这里有个例子,可惜不是多缓冲区的:
http://www.yangning.com/cgi-bin/topic.cgi?forum=1&topic=92
cadinfo 2003-12-23
  • 打赏
  • 举报
回复
程序有错导致主板上的speaker产生的嘟嘟声
匪六哥 2003-12-23
  • 打赏
  • 举报
回复
修改完buffer后效果好了一些,不过还是有嘟嘟声,只不过频率低了一些,有没有完全没有杂音的办法?实时收、播是这样,可是播放文件效果极差,背景噪音极大,我是按一定的速率读取文件中的数据然后调用播放函数的。烦请再指教!

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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