1

DirectSound を使用して作成した単純な 16 ビット PCM プレーヤーがあります。しかし、再生すると、両方ではなく 1 つのスピーカーだけが再生されるようです。

正確に投稿するコードがわからないので、必要な場合は教えてください。以下を使用してサウンド バッファを作成し、次を使用してストリームをロックすると言えます。

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

1 に答える 1

1

別のアプリケーション (Windows Media Player など) でサウンドを再生してみましたか?

私も同様の問題を抱えていましたが、コードを1時間見て、原因が危険なスピーカージャックであることに気付きました。私がそれを振った後、両方のスピーカーが働き始めました。

他のアプリケーションに問題がある場合、それはハードウェアではない可能性があります。また、Windows で左右のスピーカーの音量を確認します。

于 2010-10-23T20:24:39.357 に答える