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

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

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

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

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

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

1 ответ

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

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

Эта проблема известна как "подбор скорости" и обсуждается в MSDN в разделе " Источники информации ".

Другие вопросы по тегам