Je suis en train d'effectuer Acoustic Echo Cancellation (AEC) avec la bibliothèque codec Speex. Selon la documentation Speex, je dois effectuer deux appels:Acoustic Echo Cancellation (AEC) avec Speex et DirectSound
chaque fois qu'une trame audio est joué, et
speex_echo_capture(echo_state, input_frame, output_frame);
pour chaque image capturée.
Depuis que je suis en utilisant DirectSound, je pensais que je pouvais utiliser le tampon primaire DirectSound comme echo_frame dans l'appel à speex_echo_playback, par exemple,
DWORD offset = 0;
DWORD length = 0;
LPVOID block1, block2;
DWORD length1, length2;
DWORD flags = DSBLOCK_ENTIREBUFFER;
HRESULT hr = primary_buffer->Lock(
offset
, length
, &block1
, &length1
, &block2
, &length2
, flags
);
// Would like to convert the buffer into a form that
// speex_echo_capture() can use.
// Why does length1 == length2 == 0 always?
hr = primary_buffer->Unlock(block1, length1, block2, length2);
La documentation ne dit que ce sont des pointeurs d'écriture seule , mais n'y a-t-il pas moyen d'utiliser moi-même les données du tampon?
C'est essentiellement la façon dont je suis en train de créer le tampon:
CComPtr<IDirectSoundBuffer> primary_buffer;
DSBUFFERDESC primarydesc = { sizeof(DSBUFFERDESC),
DSBCAPS_PRIMARYBUFFER | DSBCAPS_CTRL3D | DSBCAPS_LOCHARDWARE,
0, 0, NULL, DS3DALG_HRTF_LIGHT };
HRESULT hr = directsound_->CreateSoundBuffer(
&primarydesc, &primary_buffer, NULL);
L'alternative, il semble, d'utiliser le tampon DirectSound lui-même est d'utiliser la sortie de speex_decode() et faire mon propre mélange de logiciels.
Les pointeurs ou suggestions pour obtenir Speex et DirectSound travailler ensemble? Merci pour toute aide.
Pourquoi vous utilisez l'API de bas niveau de DirectSound? vous pouvez écrire un effet DMO qui est beaucoup plus facile. –
Merci pour la recommandation. Avez-vous un exemple d'utilisation de base d'un objet média DirectX (DMO)? Je travaille sur une bonne partie de l'infrastructure de code, donc je ne suis pas sûr de la facilité avec laquelle je peux utiliser un DMO. – user19480
> Pourquoi utilisez-vous l'API de bas niveau de DirectSound? - Parce qu'il permet d'écrire du code portable. –