Почему добавление рендерера к моему графику фильтра DirectShow сглаживает аудиовход на график? - PullRequest
1 голос
/ 13 января 2012

В моем приложении Delphi 6 есть граф фильтров DirectShow, созданный с помощью библиотеки компонентов DSPACK. Структура графика следующая:

  • Аудиофильтр с произвольным источником
  • Sample Grabber
  • Tee Filter (но только когда я включаю как WAV File Writer, так и Renderer)
  • Renderer (предпочтительное устройство вывода ПК)
  • WAV File Writer

Тройной фильтр добавляется к графику только в том случае, если у меня и включены фильтры Renderer и WAV File Writer. В противном случае я подключаю только фильтр, который включен непосредственно к Sample Grabber.

Звук доставляется через подключенный к WiFi аудиосервер RTSP, который транслирует звук в режиме реального времени. Если я не включаю Wav File Writer, звук, исходящий из моих наушников, имеет типичные звуки накачки и случайные щелчки, связанные с небуферизованным аудиопотоком. Как ни странно, как только я включаю фильтр WAV File Writer, звук становится ровным, как стекло.

У меня есть исходный код для WAV File Writer, и он в основном обрабатывает задачи вывода правильного заголовка WAV-файла, когда это необходимо, и записи аудио-буферов, если необходимо, не намного больше, чем это. Поэтому я нахожу странным, что его включение сглаживает входящий аудиопоток, тем более что он не находится выше по течению от рендерера (фильтра), а вместо этого является одноранговым фильтром, свисающим с конца тройного фильтра рядом с рендерером.

Может кто-нибудь сказать мне, что может произойти, чтобы сделать доставку звука, когда я включаю фильтр File Writer? Фильтр тройника выполняет какую-либо внутреннюю буферизацию? Я хочу продублировать тот же механизм, чтобы иметь ровный звук, когда File Writer не включен. Я пытаюсь избежать добавления своей собственной буферизации, потому что я не хочу добавлять больше задержки в аудиопоток в реальном времени, чем нужно.

1 Ответ

2 голосов
/ 14 января 2012

Если у вас есть живой источник, и вы можете одновременно прослушивать его и доставленное аудио, вы сможете определить, вызывает ли добавление File Writer задержку, что может быть причиной разницы.Или может быть изменение в размере или количестве согласованных буферов в DecideBufferSize.

Я бы предложил ввести явную буферизацию в ваш push-фильтр, например, добавить смещение к временным меткам выборки мультимедиа.Собственная буферизация в фильтре Tee может быть ненадежной.Изменения во времени доставки неизбежны.

Более сложный подход, если вам нужно работать с минимальной буферизацией или без нее, может состоять в растягивании / сжатии звука при сохранении высоты тона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...