Воспроизведение стерео PCM с DirectSound - PullRequest
1 голос
/ 21 октября 2010

Эй, у меня есть простой 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);

1 Ответ

1 голос
/ 24 октября 2010

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

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

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

...