none
关于waveInOpen 多通道声卡数据采集 RRS feed

  • 问题

  • #define CHCOUNT 2

           BYTE pBuffer[8][BUFFER_SIZE] = { 0 }; //输入缓冲
    MMRESULT wave_result;
    WAVEFORMATEX waveform;
    waveform.wFormatTag = WAVE_FORMAT_PCM;
    waveform.nSamplesPerSec = 16000 ;//16000; // 采样率 16kHz
    waveform.wBitsPerSample = 16;    // 16位量化
    waveform.nChannels = 2;          // 2多通道
    waveform.nAvgBytesPerSec = 32000*CHCOUNT;// 采样率16k,每秒数据量 16000*16/8 * chcount
    waveform.nBlockAlign = CHCOUNT*16 / 8; //   16/8*chcount
    waveform.cbSize = 0;

         HWAVEIN hWaveIn;

    waveInOpen(&hWaveIn, WAVE_MAPPER, &waveform, (DWORD_PTR)AudioSampleCallback, m_ulDataThreadID,CALLBACK_FUNCTION);

    如果有两个麦克风 可以这样设置

    如果有3个麦克风 或者4个麦克风 需要怎么设置?还是waveinxxx系列api只支持2通道的麦克风数据采集

    2017年3月28日 8:21

全部回复

  • Hi 岁月流年,

    感谢在MSDN论坛发帖。

    >>如果有两个麦克风 可以这样设置

    如果有3个麦克风 或者4个麦克风 需要怎么设置?还是waveinxxx系列api只支持2通道的麦克风数据采集

    waveform.nChannels所设置的通道数并不是音频输入设备的数量。它指的是音频数据中的通道数。根据这篇文档单声道数据使用一个通道,立体声数据使用两个通道。

    你可以使用waveInGetNumDevs函数来确定系统中存在的音频输入设备的数量。 uDeviceID指定的设备标识符的数量可以从0到音频输入设备的数量不等。

    希望对你有所帮助。

    Best Regards,

    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年3月29日 2:07
  • 现在我有三个麦克,我外置的用waveInGetNumDevs得到的数量是9,请问

    WAVEFORMATEX 和waveInOpen里面参数应该怎么具体设置,有没有demo,我设置了。不管用。MM_WIM_DATA这个消息没收到消息

    2017年3月29日 6:11
  • >>现在我有三个麦克,我外置的用waveInGetNumDevs得到的数量是9,请问

    WAVEFORMATEX 和waveInOpen里面参数应该怎么具体设置,有没有demo,我设置了。不管用。MM_WIM_DATA这个消息没收到消息

    请问你调用waveInOpen 后的返回值是什么?

    你可以尝试以下方法。

    WAVEFORMATEX g_WavFmt = {0};
    g_WavFmt.wFormatTag = WAVE_FORMAT_PCM;
    g_WavFmt.nChannels = WAV_CHN;
    g_WavFmt.nSamplesPerSec = WAV_SMP;
    g_WavFmt.wBitsPerSample = WAV_BIT;
    g_WavFmt.nBlockAlign = g_WavFmt.nChannels * g_WavFmt.wBitsPerSample / 8;
    g_WavFmt.nAvgBytesPerSec = g_WavFmt.nChannels * g_WavFmt.wBitsPerSample / 8 * g_WavFmt.nSamplesPerSec;
    g_WavFmt.cbSize = 0;
    ret = waveInOpen(&hWavIn, WAVE_MAPPER, &g_WavFmt, 0, 0, WAVE_FORMAT_QUERY);
    if (MMSYSERR_NOERROR != ret)
    {
        exit(0);
    }

    这里有篇类似的帖子,你可以参考一下。

    https://social.msdn.microsoft.com/Forums/vstudio/en-US/7106267c-ce0e-48bd-b7f9-a3450f0059a2/when-i-use-waveinopen-and-waveinstart-to-record-wave-file-if-bitwbitspersample-set-to-8-it-works?forum=vclanguage

    希望对你有所帮助。

    Best Regards,
    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年4月10日 6:20