Воспроизведение стерео PCM с DirectSound
Привет, у меня есть простой 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 ответ
Вы пытались воспроизводить звук через другое приложение (например, проигрыватель Windows Media)?
У меня была похожая проблема, и через час, глядя на код, я понял, что причина была в изящном разъеме динамика. После того, как я покачнулся, оба динамика начали работать.
Если другие приложения имеют проблемы, это может быть не аппаратное обеспечение. Также проверьте громкость левого и правого динамика в Windows.