gpt4 book ai didi

c - 使用 DirectSound 播放立体声 PCM

转载 作者:太空宇宙 更新时间:2023-11-04 04:07:35 26 4
gpt4 key购买 nike

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

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

 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);

最佳答案

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

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

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

关于c - 使用 DirectSound 播放立体声 PCM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3987741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com