Tôi đang cố gắng thực hiện hủy bỏ âm thanh tiếng vọng (AEC) với thư viện codec Speex. Theo tài liệu Speex, tôi cần phải thực hiện hai cuộc gọi:Hủy bỏ âm thanh tiếng vọng (AEC) với Speex và DirectSound
mỗi khi một khung âm thanh được chơi, và
speex_echo_capture(echo_state, input_frame, output_frame);
cho mỗi khung đã chụp.
Kể từ khi tôi đang sử dụng DirectSound, tôi đã suy nghĩ rằng tôi có thể sử dụng bộ đệm DirectSound chính là echo_frame trong cuộc gọi đến speex_echo_playback, ví dụ:
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);
Các tài liệu nào nói rằng đây là những chỉ ghi con trỏ , nhưng không phải là anyway để sử dụng dữ liệu bộ đệm bản thân mình?
này về cơ bản là làm thế nào tôi đang tạo ra bộ đệm:
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);
Việc thay thế, có vẻ như, việc sử dụng bộ đệm DirectSound chính nó là sử dụng đầu ra của speex_decode() và làm trộn phần mềm của riêng tôi.
Bất kỳ gợi ý hay gợi ý nào để Speex và DirectSound hợp tác với nhau? Cảm ơn vì bất kì sự giúp đỡ.
Tại sao bạn đang sử dụng các API cấp thấp của DirectSound? bạn có thể viết một hiệu ứng DMO dễ dàng hơn rất nhiều. –
Cảm ơn bạn đã đề xuất. Bạn có một ví dụ sử dụng cơ bản của một đối tượng truyền thông DirectX (DMO)? Tôi đang làm việc trên đầu trang của một số lượng hợp lý của cơ sở hạ tầng mã, vì vậy tôi không chắc chắn như thế nào dễ dàng tôi có thể sử dụng một DMO. – user19480
> Tại sao bạn sử dụng API cấp thấp của DirectSound? - Bởi vì nó cho phép viết mã di động. –