首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么录音器代码可以工作8位,却不能工作16位??

为什么录音器代码可以工作8位,却不能工作16位??
EN

Stack Overflow用户
提问于 2012-08-08 15:03:33
回答 1查看 302关注 0票数 0

我正试着在windows上录制音频,这是我的代码。它可以工作在8位,但不能工作在16位。有人能帮我吗?#include #杂注(lib,"winmm.lib")使用命名空间std;

代码语言:javascript
复制
int test(){

    HWAVEIN microHandle;
    WAVEHDR waveHeader;

    MMRESULT result = 0;

    WAVEFORMATEX waveformat;
    waveformat.wFormatTag = WAVE_FORMAT_PCM;

    waveformat.wBitsPerSample=8;
    waveformat.nSamplesPerSec=16000;//8000;
    waveformat.nAvgBytesPerSec=waveformat.nSamplesPerSec*waveformat.nSamplesPerSec/8;

    waveformat.nChannels=1;
    waveformat.nBlockAlign=waveformat.nChannels*waveformat.wBitsPerSample/8;

    waveformat.cbSize=0;

    result = waveInOpen(&microHandle, WAVE_MAPPER, &waveformat, 0L, 0L, CALLBACK_EVENT);

    if (result)
    {
        cout << "Fail step 1" << endl;
        cout << result << endl;
        Sleep(10000);
        return 0; 
    }

    const int BUFSIZE = 16000*4;
    char *  buf = (char *)malloc(BUFSIZE);
    // Set up and prepare header for input
    waveHeader.lpData = (LPSTR)buf;
    waveHeader.dwBufferLength = BUFSIZE;
    waveHeader.dwBytesRecorded=0;
    waveHeader.dwUser = 0L;
    waveHeader.dwFlags = 0L;
    waveHeader.dwLoops = 0L;
    waveInPrepareHeader(microHandle, &waveHeader, sizeof(WAVEHDR));

    // Insert a wave input buffer
    result = waveInAddBuffer(microHandle, &waveHeader, sizeof(WAVEHDR));

    if (result)
    {
        cout << "Fail step 2" << endl;
        cout << result << endl;
        Sleep(10000);
        return 0;
    }

    result = waveInStart(microHandle);

    if (result)
    {
        cout << "Fail step 3" << endl;
        cout << result << endl;
        Sleep(10000);
        return 0;
    }


    // Wait until finished recording
    do {} while (waveInUnprepareHeader(microHandle, &waveHeader, sizeof(WAVEHDR))==WAVERR_STILLPLAYING);

    FILE *fp = fopen("output.pcm","w");
    fwrite(buf,1,BUFSIZE,fp);
    fclose(fp);

    waveInClose(microHandle);

    return 0;
}
void main()
{
    test();
}

如果我设置参数waveformat.wBitsPerSample = 8,它可以正确录制音频,但如果我设置它waveformat.wBitsPerSample = 16,它会录制噪音!有谁可以帮我?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-09 13:11:56

它应该是文件*fp = fopen("output.pcm","wb");而不是文件*fp = fopen("output.pcm","w");

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11859318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档