请问如何根据波形片段来播放声音?单通道,单字节,22k采样

解决方案 »

  1.   

    设置waveformat,然后用wave系列函数控制声卡进行输出。
      

  2.   

    HWAVEOUT m_hwo;
    WAVEHDR m_wh;
    WAVEFORMATEX m_wfx;
    DWORD dwSampleRate = 22000;
    WORD wChannel = 1;
    WORD wSampleBits = 8; m_wfx.wFormatTag = WAVE_FORMAT_PCM;
    m_wfx.nChannels = wChannel;
    m_wfx.nSamplesPerSec = dwSampleRate;
    m_wfx.nAvgBytesPerSec = dwSampleRate * wChannel * wSampleBits/8;
    m_wfx.nBlockAlign = wChannel * wSampleBits/8;
    m_wfx.wBitsPerSample = wSampleBits;
    m_wfx.cbSize = 0;
    if(waveOutOpen( &m_hwo, WAVE_MAPPER, &m_wfx, (UINT)GetDesktopWindow(), 0, CALLBACK_WINDOW) != MMSYSERR_NOERROR)
    {
    waveOutUnprepareHeader( m_hwo, &m_wh, sizeof(m_wh) ); m_wh.lpData = NULL;
    m_wh.dwBufferLength = 0; //下面将你的波形片段数据赋予m_wh, pData 为数据, lDataLen 为数据长度
    //m_wh.lpData = pData;
    //m_wh.dwBufferLength = lDataLen; ATLASSERT(m_wh.lpData!=NULL);
    m_wh.dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP;
    m_wh.dwLoops = -1;
    if(waveOutPrepareHeader( m_hwo, &m_wh, sizeof(m_wh) )== MMSYSERR_NOERROR){
    if(waveOutWrite( m_hwo, &m_wh, sizeof(m_wh) ) == MMSYSERR_NOERROR){
    m_bIsSend = true;
    }
    }
    }