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

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

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

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

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

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

1 Ответ

0 голосов
/ 01 декабря 2011

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

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

Эта проблема известна как «согласование скоростей» и обсуждается в MSDN в Live Sources. раздел.

...