Аудио ввод-вывод: Буферизация, Задержка и Пропускная способность

Audio Toolbox™ оптимизирован для потоковой обработки в реальном времени. Ее Системные объекты ввода и вывода эффективны, низкая задержка, и они управляют всеми необходимыми параметрами так, чтобы можно было обменять между пропускной способностью и задержкой.

Этот пример описывает, как MATLAB реализует потоковую обработку в реальном времени. Пример представляет ключевую терминологию и основные методы для оптимизации вашего обрабатывающего поток алгоритма. Для более подробных технических описаний и концепций, см. документацию для аудио Системных объектов ввода-вывода, используемых в этом примере.

Концепции, представленные в этом примере, описаны с точки зрения Системных объектов в среде MATLAB. Те же концепции могут быть применены к соответствующим блокам в среде Simulink®.

Введите аудиопоток

Чтобы получить аудиопоток из файла, используйте Систему dsp.AudioFileReader object™. Чтобы получить аудиопоток от устройства, используйте Системный объект audioDeviceReader.

Эта схема и описание, которое следует, указывают на поток данных при получении сигнала моноканала с Системным объектом audioDeviceReader.

Настройка

  • Свойства вашего audioDeviceReader задают драйвер, устройство (звуковая карта), частота дискретизации, битовая глубина, buffer size и отображение канала между входными каналами и столбцами вашего устройства вывод от вашего объекта audioDeviceReader. Ваш объект передает эти спецификации к драйверу однажды в setup.

Цикл обработки в режиме реального времени

  1. Микрофон берет звук и отправляет непрерывный электрический сигнал в вашу звуковую карту.

  2. Звуковая карта выполняет аналого-цифровое преобразование на уровне частоты дискретизации, buffer size и битовой глубины, заданной во время настройки.

  3. Аналого-цифровой конвертер пишет аудиосэмплы в буфер звуковой карты. Если буфер полон, новые выборки пропущены. Эти выборки упоминаются как overruns.

  4. audioDeviceReader использует драйвер, чтобы вытянуть самый старый кадр от буфера звуковой карты итеративно.

Выведите аудиопоток

Чтобы отправить аудиопоток в файл, используйте Системный объект dsp.AudioFileWriter. Чтобы отправить аудиопоток в устройство, используйте Системный объект audioDeviceWriter.

Эта схема и описание, которое следует, указывают на поток данных при проигрывании сигнала моноканала с Системным объектом audioDeviceWriter.

Настройка

  • Свойства вашего audioDeviceWriter задают драйвер, устройство (звуковая карта), частота дискретизации, битовая глубина, buffer size и отображение канала между выходным входом каналов и столбцов вашего устройства к вашему объекту audioDeviceWriter. Ваш объект передает эти спецификации к драйверу однажды в setup.

Цикл обработки в режиме реального времени

  1. Этап обработки передает кадр переменной длины до Системного объекта audioDeviceWriter.

  2. audioDeviceWriter передает кадр к буферу звуковой карты.

  3. Звуковая карта вытягивает самый старый кадр от буфера и выполняет цифро-аналоговое преобразование. Звуковая карта отправляет аналоговый фрагмент динамику. Если буфер пуст, когда звуковая карта пытается вытянуть от него, звуковая карта выводит область тишины. Это упоминается как underrun.

Синхронизируйте аудио с и от устройства

Чтобы одновременно читать из и записать в одно аудио устройство, используют Системный объект audioPlayerRecorder.

Эта схема и описание, которое следует, указывают на поток данных при проигрывании и записи сигналов моноканала с Системным объектом audioPlayerRecorder.

Настройка

  • Свойства вашего audioPlayerRecorder задают устройство (звуковая карта), частота дискретизации, битовая глубина, buffer size и отображение канала между вашим устройством и объектом. Ваш объект передает эти спецификации к драйверу однажды в setup.

Цикл обработки в режиме реального времени

  1. Микрофон берет звук и отправляет непрерывный электрический сигнал в вашу звуковую карту. Одновременно, докладчик проигрывает аналоговый фрагмент, полученный от звуковой карты.

  2. Звуковая карта выполняет аналого-цифровое преобразование полученного звукового сигнала и пишет цифровой фрагмент во входной буфер. Если входной буфер полон, новые выборки пропущены. Одновременно, звуковая карта вытягивает самый старый кадр от буфера вывода и выполняет цифро-аналоговое преобразование следующего аудио фрагмента, который будет проигрываться. Если буфер вывода пуст, когда звуковая карта пытается получить данные, звуковая карта выводит область тишины.

  3. Объект audioPlayerRecorder возвращает полученный звуковой сигнал в среду MATLAB для обработки. Одновременно, аудио, которое будет проигрываться, задано в качестве аргумента audioPlayerRecorder для воспроизведения в следующем цикле ввода-вывода.

Терминология и методы, чтобы оптимизировать производительность

Отбрасывания сигнала

  • Underrun относится к тишине выходного сигнала. Тишина выходного сигнала происходит, если буфер устройства пуст, когда время для цифро-аналогового преобразования. Это заканчивается, когда цикл обработки в MATLAB не предоставляет выборки на уровне требования звуковой карты. Количество демонстрационной недогрузки возвращено, когда вы вызываете свой объект audioPlayerRecorder или audioDeviceWriter.

  • Overrun относится к отбрасываниям входного сигнала. Отбрасывания входного сигнала происходят, когда этап обработки не идет в ногу с приобретением выборок. Количество превышенных выборок возвращено, когда вы вызываете свой объект audioPlayerRecorder или audioDeviceReader.

Если вы сталкиваетесь превышенный или недогрузка, попытайтесь улучшить свою систему ввода-вывода одним или несколькими следующих способов:

  1. Идентифицируйте, когда переполнение или недогрузка произойдут. Если это происходит в первых нескольких итерациях, считайте вызов setup на ваших Системных объектах перед циклом, где обработка в режиме реального времени требуется. Можно также запустить систему ввода-вывода с фиктивными данными для нескольких кадров прежде, чем запустить действительную обработку. Для получения дополнительной информации смотрите, Измеряют Уровень Потоковой передачи Аудио Алгоритмов В реальном времени.

  2. Если вы используете драйвер DirectSound на платформе Windows®, рассматриваете переключение на WASAPI или драйвер ASIO™. Драйверы ASIO имеют наименее служебное. Если вы используете драйвер ASIO, убедитесь, что совпадали с форматом кадра в MATLAB к buffer size ASIO. Можно использовать asiosettings, чтобы открыть настройки ASIO пользовательский интерфейс из MATLAB.

  3. Если можно позволить себе добавить больше задержки в приложение, рассмотрите увеличение buffer size объекта. По умолчанию buffer size является форматом кадра данных, обработанных аудио объектом.

  4. Если можно позволить себе уменьшить разрешение сигнала, рассмотрите уменьшение частоты дискретизации.

  5. Закройте все несущественные процессы на своей машине, такие как почтовые средства проверки и утилиты синхронизации файлов. Эти процессы могут асинхронно спросить в течение процессорного времени через прерывания и нарушить цикл обработки аудиоданных.

  6. Чтобы максимизировать производительность, удалите весь графический вывод и визуализацию от вашего цикла в реальном времени. Если вы требуете, чтобы визуализация обновила в вашем цикле обработки, используйте осциллограф DSP System Toolbox™, такой как dsp.TimeScope, dsp.SpectrumAnalyzer или dsp.ArrayPlot. Следуйте рекомендациям, перечисленным в точке 1, чтобы установить и предварительно запустить ваши осциллографы. Если вы требуете индивидуального изображения или обрабатываете коллбэки в цикле, используйте команду drawnow и задайте ограниченную частоту обновления, чтобы оптимизировать вашу очередь событий.

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

Задержка

  • Output latency измеряется как задержка между временем генерации аудио кадра в MATLAB и время, когда аудио слышат через динамик.

  • Input latency измеряется как задержка между временем, когда аудио вводит звуковую карту и время, когда кадр выводится этапом обработки.

Если свойства и формат кадра остаются сопоставимыми, отношение input latency к output latency сопоставимо между вызовами объекта audioPlayerRecorder.

Чтобы минимизировать задержку, вы можете:

  1. Оптимизируйте этап обработки. Если ваш этап обработки достиг пика алгоритмически, компилирование вашего кода MATLAB в код С с помощью MATLAB Coder может привести к более быстрому выполнению.

  2. Увеличьте частоту дискретизации.

  3. Уменьшите формат кадра.

Для примера при измерении задержки туда и обратно вашей системы смотрите Задержку Аудио Меры.

Смотрите также

Функции

Системные объекты

Блоки

Похожие темы