cairongkai1 2014-09-18 03:24 采纳率: 0%
浏览 4488

使用WaveOut播放音频,发声有杂音

新手首发,我用wavein和waveout写了一个非常简单的录制跟播放的程序,但是发现播放的时候一直出现问题(有非常大的杂音,就算不说话也有非常大的杂音),我觉得应该是waveout的问题,想请问一个关于WaveOut的问题,请各位大牛执导下,谢谢代码如下:
#include

#include

#pragma comment(lib, "winmm.lib")

HWAVEIN hWaveIn;
HWAVEOUT hWaveOut; //输入设备
WAVEFORMATEX waveform; //采集音频的格式,结构体
BYTE pBuffer1;//采集音频时的数据缓存
WAVEHDR wHdr1; //采集音频时包含数据缓存的结构体
FILE *pf;
int main(int argc, char
argv[])
{
HANDLE wait;
waveform.wFormatTag = WAVE_FORMAT_PCM;//声音格式为PCM
waveform.nSamplesPerSec = 11111;//采样率,16000次/秒
waveform.wBitsPerSample = 16;//采样比特,16bits/次
waveform.nChannels = 1;//采样声道数,2声道
waveform.nAvgBytesPerSec = 32000;//每秒的数据率,就是每秒能采集多少字节的数据
waveform.nBlockAlign = 2;//一个块的大小,采样bit的字节数乘以声道数
waveform.cbSize = 0;//一般为0

wait = CreateEvent(NULL, 0, 0, NULL);
//使用waveInOpen函数开启音频采集
waveInOpen(&hWaveIn, WAVE_MAPPER, &waveform,(DWORD_PTR)wait, 0L, CALLBACK_EVENT);
waveOutOpen(&hWaveOut, WAVE_MAPPER,&waveform,(DWORD_PTR)wait, 0L, CALLBACK_EVENT);

//建立两个数组(这里可以建立多个数组)用来缓冲音频数据
DWORD bufsize = 1024*100;//每次开辟10k的缓存存储录音数据
int i = 20;
fopen_s(&pf, "录音测试.pcm", "wb");
while (i--)//录制20左右秒声音,结合音频解码和网络传输可以修改为实时录音播放的机制以实现对讲功能
{
    pBuffer1 = new BYTE[bufsize];
    wHdr1.lpData = (LPSTR)pBuffer1;
    wHdr1.dwBufferLength = bufsize;
    wHdr1.dwBytesRecorded = 0;
    wHdr1.dwUser = 0;
    wHdr1.dwFlags = 0;
    wHdr1.dwLoops = 1;
    waveInPrepareHeader(hWaveIn, &wHdr1, sizeof(WAVEHDR));//准备一个波形数据块头用于录音
    waveInAddBuffer(hWaveIn, &wHdr1, sizeof (WAVEHDR));//指定波形数据块为录音输入缓存
    waveInStart(hWaveIn);//开始录音
    Sleep(1000);//等待声音录制1s
    waveInReset(hWaveIn);//停止录音
    waveOutWrite(hWaveOut,&wHdr1,sizeof(WAVEHDR));
    Sleep(1000);
    waveOutReset(hWaveOut);
    fwrite(pBuffer1, 1, wHdr1.dwBytesRecorded, pf);
    delete pBuffer1;    
    printf("%ds  ", i);
}
fclose(pf);

waveInClose(hWaveIn);
return 0;

}

  • 写回答

1条回答 默认 最新

  • 乐乐萍萍爸 2015-12-14 08:22
    关注

    我也遇到了该问题,请问你如何解决的?

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)