Я слышу щелчок в звуке на графике DirectShow, созданном с помощью Graph Edit, но программное обеспечение проигрывателя на моем ПК воспроизводит звук плавно

У меня есть приложение DirectShow, которое я создал с помощью Delphi 6 с использованием библиотеки компонентов DSPACK. Уже два дня пытаюсь решить проблему с воспроизведением аудио. Когда я запускаю граф фильтра, который я создаю, я слышу повторяющиеся щелчки при воспроизведении. Что действительно сбивало с толку, так это то, что аудиофайл, который я создал одновременно с графом фильтра, имел чистый непрерывный звук, а не пробелы. Итак, я знал, что аудиобуферы доставляются правильно, но что-то, что я делал, было «глушением» «живого» воспроизведения. Или я так думал. Я провел два дня, диагностируя проблему в поисках слишком долго удерживаемых семафоров (блокировок) или, возможно, проблем с метками времени, которые я задокументировал в этом другом посте о переполнении стека:

Заикание во время рендеринга моего фильтра DirectShow, несмотря на вывод файл гладкий

Несколько минут назад я решил попробовать утилиту Graph Edit. Я создал очень простой график, состоящий только из устройства захвата, которое я использовал (микрофон телефона VOIP), и устройства рендеринга, которое я использовал (выход HD ATI Rear Audio на наушники). Всего два фильтра. К моему большому удивлению, я услышал тот же щелчок. Итак, это был случай, который вообще не касался моего кода, и я услышал щелчок.

Затем я изменил средство рендеринга звука в созданном графе фильтра Graph Edit на наушник VOIP-телефона. Щелчок ушел.

Теперь я знаю, что есть способ получить плавный звук на устройстве ATI Rear Audio, поскольку это предпочтительное устройство вывода звука, и все, от видео, которые я воспроизводю на своем ПК, до волновых файлов, которые я воспроизводю на нем, звучит безупречно. Значит, другие программы делают что-то другое, а не просто подключают фильтры? Мне интересно, возможно, режим по умолчанию для HD ATI Rear Audio не имеет двойной буферизации, и, возможно, эти другие программы знают, как включить эту функцию? Или они делают что-то еще, возможно, используя другой фильтр или метод DirectShow или DirectSound, например, чтобы обеспечить плавное воспроизведение звука на рендерере HD ATI Rear Audio?


person Robert Oschler    schedule 01.12.2011    source источник


Ответы (1)


Что у вас может быть (хотя зависит от фактического заикания), так это то, что когда вы используете устройства захвата и воспроизведения, поддерживаемые другим оборудованием, их частоты дискретизации немного различаются. Например, вы захватываете 22050 Гц с фактической частотой (22050 - 2%) Гц и воспроизводите ее с аппаратным потреблением байтов на (22050 + 2%) Гц.

Теперь очевидно, что это не сработает гладко: в конечном итоге воспроизведение будет иметь низкий уровень данных ... Если вы сохраните в файл и воспроизведете из файла, все пройдет гладко, поскольку файл сможет предоставлять данные со скоростью устройства воспроизведения. Если устройства захвата и воспроизведения имеют одно и то же аппаратное обеспечение, они, скорее всего, будут использовать общие «аппаратные» часы и скорости.

Эта проблема известна как «сопоставление скорости» и обсуждается в MSDN по адресу Текущие источники.

person Roman R.    schedule 01.12.2011