2010-10-21 5 views
1

Hé, j'ai un simple lecteur PCM 16 bits que j'ai fait avec DirectSound. Mais quand il joue, il semble qu'il ne joue qu'un seul haut-parleur au lieu des deux.Lecture de PCM stéréo avec DirectSound

Je ne sais pas quel code publier exactement, donc vous devrez me dire si vous en avez besoin. je peux dire que je crée le tampon sonore à l'aide et verrouiller le flux en utilisant:

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

Répondre

1

Avez-vous essayé de jouer un son dans une autre application (comme Windows Media Player)? J'ai eu un problème similaire et après une heure à regarder le code, j'ai réalisé que la cause était une prise de haut-parleur douteuse. Après que j'ai agité les deux haut-parleurs ont commencé à travailler.

Si d'autres applications ont des problèmes, il se peut que ce ne soit pas le matériel. Vérifiez également le volume du haut-parleur gauche et droit dans Windows.

+0

J'ai essayé d'autres lecteurs, et je peux entendre dans les deux haut-parleurs. –

Questions connexes