2010-10-21 5 views
1

Эй, у меня есть простой 16-разрядный PCM-плеер, который я сделал с помощью DirectSound. Но когда он играет, кажется, что он воспроизводит только один динамик вместо обоих.Воспроизведение Stereo 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); 

ответ

1

Вы пробовали играть звук через другое приложение (например, Windows Media Player)?

У меня была аналогичная проблема, и через час, глядя на код, я понял, что причиной было изворотливое гнездо для динамиков. После того, как я потянулся, оба оратора начали работать.

Если у других приложений есть проблемы, это может быть не аппаратное обеспечение. Также проверьте громкость левого и правого динамиков в Windows.

+0

Я пробовал других игроков, и я слышу в обоих динамиках. – 2010-10-26 12:38:11

Смежные вопросы