我录制的wav文件 为什么用Windows Media Player播放的时候麦克风里只有一边有声音, 而另一边没有声音?
先不附上代码,大家觉得应该是那些原因?

解决方案 »

  1.   

    Windows Media Player 只有一边有声音,用别的软件呢?如果都是一边声音,应该是录制或者保存的问题喽..
      

  2.   

    我的双声道了, m_wavFmt.wFormatTag = WAVE_FORMAT_PCM;
     m_wavFmt.cbSize = 0;
     m_wavFmt.nChannels = nChannel;
     m_wavFmt.nSamplesPerSec = nSample;
     m_wavFmt.wBitsPerSample = nBit;
     m_wavFmt.nBlockAlign = m_wavFmt.nChannels * m_wavFmt.wBitsPerSample / 8; 
     m_wavFmt.nAvgBytesPerSec = m_wavFmt.nBlockAlign * m_wavFmt.nSamplesPerSec;其中 nChannel = 2;
    nSample = 44100;
    nBit = 8;
      

  3.   

    用cooledit或其它的音频编辑工具看一下波形,看看数据有什么样的错误。可能是有一个声道的数据写入错误。
      

  4.   

    用cooledit看过了,只有上面的正区间有声波,而下半区只有一条一条的竖线,有间隔.不知道这里怎么样帖图啊,否则可以帖上图片看一下
      

  5.   

    我是这样写成文件的
    CFile file();
    file.Open("Test.wav", CFile::modeCreate | CFile::modeWrite);然后在OnMM_WIM_DATA()函数中将接收的数据写入文件.
      

  6.   

    Wav文件必须有文件头,下面是它的结构
    typedef struct _WAVE_HEAD
    {
    char flag[4]; //"RIFF"标志
    int nLen;//文件长度
    char name[4];  //"WAVE"标志
    char format[4];//"fmt"标志
    char temp[4];
    //--------------------以下16个字节内空为 WAVEFORMATEX(多 WORD cbSize;)结构的内容
    short nType;//格式类别(10H为PCM形式的声音数据)
    short nChannel;//通道数,单声道为1,双声道为2
    int nSamplerate;//采样率(每秒样本数),表示每个通道的播放速度,
    int   nTransferSpeed;//波形音频数据传送速率,其值为通道数×每秒数据位数×每样本的数据位数/8。播放软件利用此值可以估计缓冲区的大小。
    //数据块的调整数(按字节算的),其值为通道数×每样本的数据位值/8。播放软件需要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整。
    short nAdjust;//每样本字节数
    short nBits;//每样本的数据位数,表示每个声道中各个样本的数据位数。如果有多个声道,对每个声道而言,样本大小都一样。
      //  WORD  cbSize; /* the count in bytes of the size of */   WAVEFORMATEX结构才有,Wave文件头没有   char dataflag[4];//数据标记符"data"
    int nData;//语音数据的长度
    }
      

  7.   

    这一步我已经在OnMM_WIM_OPEN()中做了    DWORD dwWavHdrSize = 38;
        DWORD dwWavFormatSize = 18;
        m_pWaveFile->SeekToBegin();
        m_pWaveFile->Write("RIFF", 4);
        unsigned int Sec = sizeof(PBYTE) + dwWavHdrSize;   
        m_pWaveFile->Write(&Sec, sizeof(Sec));
        m_pWaveFile->Write("WAVE",4);
        m_pWaveFile->Write("fmt ",4);
        m_pWaveFile->Write(&dwWavFormatSize, sizeof(dwWavFormatSize));
        m_pWaveFile->Write(&m_wavFmt.wFormatTag ,sizeof(m_wavFmt.wFormatTag));
        m_pWaveFile->Write(&m_wavFmt.nChannels, sizeof(m_wavFmt.nChannels));
        m_pWaveFile->Write(&m_wavFmt.nSamplesPerSec, sizeof(m_wavFmt.nSamplesPerSec));
        m_pWaveFile->Write(&m_wavFmt.nAvgBytesPerSec, sizeof(m_wavFmt.nAvgBytesPerSec));
        m_pWaveFile->Write(&m_wavFmt.nBlockAlign, sizeof(m_wavFmt.nBlockAlign));
        m_pWaveFile->Write(&m_wavFmt.wBitsPerSample, sizeof(m_wavFmt.wBitsPerSample));
        m_pWaveFile->Write(&m_wavFmt.cbSize, sizeof(m_wavFmt.cbSize));
        m_pWaveFile->Write("data",4);
      

  8.   

    奇怪,
    我把nChannel = 2; 改成nChannel = 1;
    就没有这个问题了,不知道这是什么原因
      

  9.   

    nChannel = 1,wav变成了单声道,播放单声道的音频时,是2个喇叭一起响。你要先确定wav文件的数据有什么错误。
      

  10.   

    nBit = 32 双声道情况下,一个Sample的为数应该是32个,换成字节为4个