2013-03-04 2 views
0

У меня возник вопрос о синхронизации двух потоков Directsound.Синхронизация потоков Directsound

Для записи и воспроизведения звука в настоящее время я использую Portaudio для открытия 2 потоков Directsound. Существует 2 функции обратного вызова, которые вызывается каждый раз, когда входной буфер заполняется, а выходной буфер нуждается в данных.

Сейчас здесь `s моя проблема ...

Входной поток работает на 48кГц сэмплов (@ 1024 образцов). Выходной поток работает на частоте 192 кГц (@ 4096 выборок). Каждый раз, когда входной буфер заполняется и вызывается обратный вызов, я делаю некоторый DSP, и после этого я преобразовываю результат в 192 кГц. Выходной поток принимает результат и выводит данные. Теперь 2 потока полностью отключены от синхронизации.

Я просмотрел весь API Portaudio, но я не могу найти опцию синхронизации, чтобы заблокировать 2 потока вместе.

Есть ли способ заблокировать 2 потока Directsound? Мне действительно нужен вход 48 кГц и выход 192 кГц.

Вr,

Винсент Bruinink.

+0

Вы можете * иметь лучшую удачу с некоторым API, отличным от directsound. –

+0

Понятно, но Directsound и ASIO - единственные, которые поддерживают частоту 192 кГц. ASIO может открывать только один поток мгновенно. –

ответ

1

Дело в том, что вы не можете открыть два потока «одновременно» и не можете открыть два устройства (или даже одно устройство с двумя разными частотами выборки) и ожидать, что они останутся по-настоящему синхронными, даже если они были, в свое время, синхронизированы. Чтобы понять, почему, вы можете прочитать что-то о how audio works on a computer. Вы также можете прочитать this document, что характерно для PortAudio.

В качестве альтернативы вам может потребоваться открыть одно устройство в одном потоке и с помощью преобразования частоты дискретизации программного обеспечения.