【问题标题】:Playing Stereo PCM with DirectSound使用 DirectSound 播放立体声 PCM
【发布时间】:2011-04-28 14:44:47
【问题描述】:

嘿,我有一个使用 DirectSound 制作的简单 16 位 PCM 播放器。 但是当它播放时,它似乎只播放一个扬声器而不是两个。

我不知道要准确发布什么代码,所以如果你需要任何代码,你必须告诉我。 我可以说我使用创建声音缓冲区,并使用以下方法锁定流:

 WAVEFORMATEX wfx;  ZeroMemory(&wfx, sizeof(wfx));
 LPDIRECTSOUNDBUFFER pDsb = NULL;

 memset(&wfx, 0, sizeof(WAVEFORMATEX)); 
 wfx.wFormatTag = WAVE_FORMAT_PCM; 
 wfx.nChannels = snd->channels; 
 wfx.nSamplesPerSec = snd->sample_rate; 
 wfx.nBlockAlign = snd->channels * 2; 
 wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign; 
 wfx.wBitsPerSample = 16; 

 DSBUFFERDESC dsbdesc; ZeroMemory(&dsbdesc, sizeof(dsbdesc));

 dsbdesc.dwSize = sizeof(DSBUFFERDESC); 
 dsbdesc.dwFlags = DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY | DSBCAPS_GLOBALFOCUS; 
 dsbdesc.dwBufferBytes = snd->size; 
 dsbdesc.lpwfxFormat = &wfx; 

 SoundMgr->CreateSoundBuffer(&dsbdesc, &pDsb, NULL); 

 pDsb->QueryInterface(IID_IDirectSoundBuffer8, (LPVOID*)&snd->voice);
 pDsb->Release();

 DWORD len;
 snd->voice->Lock(0, 0, (void**)&snd->data, &len, NULL, NULL, DSBLOCK_ENTIREBUFFER);

【问题讨论】:

    标签: c winapi pcm directsound 16-bit


    【解决方案1】:

    您是否尝试过通过其他应用程序(如 Windows Media 播放器)播放声音?

    我遇到了类似的问题,在查看代码一个小时后,我意识到原因是扬声器插孔不可靠。在我摇晃它之后,两个扬声器都开始工作了。

    如果其他应用程序确实有问题,则可能不是硬件。还要检查 Windows 中的左右扬声器音量。

    【讨论】:

      猜你喜欢
      • 2012-05-04
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      • 2012-01-18
      • 1970-01-01
      • 2011-10-25
      • 2021-09-17
      • 1970-01-01
      相关资源
      最近更新 更多