Audio Toolbox™ оптимизирован для потоковой обработки в реальном времени. Ее Системные объекты ввода и вывода эффективны, низкая задержка, и они управляют всеми необходимыми параметрами так, чтобы можно было обменять между пропускной способностью и задержкой.
Этот пример описывает, как MATLAB реализует потоковую обработку в реальном времени. Пример представляет ключевую терминологию и основные методы для оптимизации вашего обрабатывающего поток алгоритма. Для более подробных технических описаний и концепций, см. документацию для аудио Системных объектов ввода-вывода, используемых в этом примере.
Концепции, представленные в этом примере, описаны в терминах Системных объектов в среде MATLAB. Те же концепции могут быть применены к соответствующим блокам в среде Simulink®.
Чтобы получить аудиопоток из файла, используйте dsp.AudioFileReader
Система object™. Чтобы получить аудиопоток от устройства, используйте audioDeviceReader
Системный объект.
Эта схема и описание, которое следует, указывают на поток данных при получении сигнала моноканала с audioDeviceReader
Системный объект.
Настройка
Свойства вашего audioDeviceReader
задайте драйвер, устройство (звуковая карта), частота дискретизации, битовая глубина, buffer size и отображение канала между входными каналами и столбцами вашего устройства выход от вашего audioDeviceReader
объект. Ваш объект передает эти спецификации к драйверу однажды в setup
.
Цикл обработки в режиме реального времени
Микрофон берет звук и отправляет непрерывный электрический сигнал в вашу звуковую карту.
Звуковая карта выполняет аналого-цифровое преобразование на уровне частоты дискретизации, buffer size и битовой глубины, заданной во время настройки.
Аналого-цифровой конвертер пишет аудиосэмплы в буфер звуковой карты. Если буфер полон, новые выборки пропущены. Эти выборки упоминаются как overruns.
audioDeviceReader
использует драйвер, чтобы вытянуть самую старую систему координат от буфера звуковой карты итеративно.
Чтобы отправить аудиопоток в файл, используйте dsp.AudioFileWriter
Системный объект. Чтобы отправить аудиопоток в устройство, используйте audioDeviceWriter
Системный объект.
Эта схема и описание, которое следует, указывают на поток данных при проигрывании сигнала моноканала с audioDeviceWriter
Системный объект.
Настройка
Свойства вашего audioDeviceWriter
задайте драйвер, устройство (звуковая карта), частота дискретизации, битовая глубина, buffer size и отображение канала между выходным входом каналов и столбцов вашего устройства к вашему audioDeviceWriter
объект. Ваш объект передает эти спецификации к драйверу однажды в setup
.
Цикл обработки в режиме реального времени
Этап обработки передает кадр переменной длины до audioDeviceWriter
Системный объект.
audioDeviceWriter
передает кадр к буферу звуковой карты.
Звуковая карта вытягивает самую старую систему координат от буфера и выполняет цифро-аналоговое преобразование. Звуковая карта отправляет аналоговый фрагмент динамику. Если буфер пуст, когда звуковая карта пытается вытянуть от него, звуковая карта выводит область тишины. Это упоминается как underrun.
Чтобы одновременно читать из и записать в одно аудио устройство, используют audioPlayerRecorder
Системный объект.
Эта схема и описание, которое следует, указывают на поток данных при проигрывании и записи сигналов моноканала с audioPlayerRecorder
Системный объект.
Настройка
Свойства вашего audioPlayerRecorder
задайте устройство (звуковая карта), частота дискретизации, битовая глубина, buffer size и отображение канала между вашим устройством и объектом. Ваш объект передает эти спецификации к драйверу однажды в setup
.
Цикл обработки в режиме реального времени
Микрофон берет звук и отправляет непрерывный электрический сигнал в вашу звуковую карту. Одновременно, докладчик проигрывает аналоговый фрагмент, полученный от звуковой карты.
Звуковая карта выполняет аналого-цифровое преобразование полученного звукового сигнала и пишет цифровой фрагмент во входной буфер. Если входной буфер полон, новые выборки пропущены. Одновременно, звуковая карта вытягивает самую старую систему координат от буфера вывода и выполняет цифро-аналоговое преобразование следующего аудио фрагмента, который будет проигрываться. Если буфер вывода пуст, когда звуковая карта пытается получить данные, звуковая карта выводит область тишины.
audioPlayerRecorder
объект возвращает полученный звуковой сигнал в среду MATLAB для обработки. Одновременно, аудио, которое будет проигрываться, задано в качестве аргумента audioPlayerRecorder
для воспроизведения в следующем цикле ввода-вывода.
Underrun относится к тишине выходного сигнала. Тишина выходного сигнала происходит, если буфер устройства пуст, когда время для цифро-аналогового преобразования. Это заканчивается, когда цикл обработки в MATLAB не предоставляет выборки на уровне требования звуковой карты. Количество демонстрационной недогрузки возвращено, когда вы вызываете свой audioPlayerRecorder
или audioDeviceWriter
объект.
Overrun относится к отбрасываниям входного сигнала. Отбрасывания входного сигнала происходят, когда этап обработки не идет в ногу с приобретением выборок. Количество превышенных выборок возвращено, когда вы вызываете свой audioPlayerRecorder
или audioDeviceReader
объект.
Если вы сталкиваетесь превышенный или недогрузка, попытайтесь улучшить свою систему ввода-вывода одним или несколькими следующих способов:
Идентифицируйте, когда переполнение или недогрузка произойдут. Если это происходит в первых нескольких итерациях, считайте вызов setup
на ваших Системных объектах перед циклом, где обработка в режиме реального времени требуется. Можно также запустить систему ввода-вывода с фиктивными данными для нескольких систем координат прежде, чем запустить действительную обработку. Для получения дополнительной информации смотрите, Измеряют Уровень Потоковой передачи Аудио Алгоритмов В реальном времени.
Если вы используете драйвер DirectSound на платформе Windows®, рассматриваете переключение на WASAPI или драйвер ASIO™. Драйверы ASIO имеют наименее служебное. Если вы используете драйвер ASIO, убедитесь, что совпадали с форматом кадра в MATLAB к buffer size ASIO. Можно использовать asiosettings
открыть настройки ASIO пользовательский интерфейс из MATLAB.
Если можно позволить себе добавить больше задержки в приложение, рассмотрите увеличение buffer size объекта. По умолчанию buffer size является форматом кадра данных, обработанных аудио объектом.
Если можно позволить себе уменьшить разрешение сигнала, рассмотрите уменьшение частоты дискретизации.
Закройте все несущественные процессы на своей машине, такие как почтовые средства проверки и утилиты синхронизации файлов. Эти процессы могут асинхронно спросить в течение процессорного времени через прерывания и нарушить цикл обработки аудиоданных.
Чтобы максимизировать производительность, удалите весь графический вывод и визуализацию от вашего цикла в реальном времени. Если вы требуете, чтобы визуализация обновилась в вашем цикле обработки, используйте осциллограф DSP System Toolbox™, такой как dsp.TimeScope
, dsp.SpectrumAnalyzer
, или dsp.ArrayPlot
. Следуйте рекомендациям, перечисленным в точке 1, чтобы установить и предварительно запустить ваши осциллографы. Если вы требуете индивидуального изображения или обрабатываете коллбэки в цикле, используйте drawnow
команда и задает ограниченную частоту обновления, чтобы оптимизировать вашу очередь событий.
Если цикл обработки является тяжелым алгоритмом, попытайтесь профилировать свой цикл, чтобы определить местоположение узких мест, и затем применить соответствующие меры:
Замените рукописный код на функции MATLAB, которые были оптимизированы для скорости.
Примените лучшые методы для производительности: Методы, чтобы Улучшать Производительность (MATLAB).
Генерация исполняемых файлов MATLAB (файлы MEX) с помощью MATLAB Coder™ может привести к более быстрому выполнению. Смотрите Удаляют Вмешивающийся Тон Из Аудиопотока для примера.
Можно также сгенерировать независимые исполняемые файлы (EXE-файлы). Смотрите Генерируют Независимый исполняемый файл для Параметрического Аудио Эквалайзера для примера.
Если вы рассматриваете превращение вашего алгоритма в плагин VST, то попытайтесь запустить его как плагин VST в MATLAB. Генерация плагина VST использует технологию генерации кода C под капотом, и выполнение сгенерированного плагина VST в MATLAB может привести к более быстрому выполнению, чем с вашим оригинальным кодом MATLAB. Смотрите Аудио Плагины в MATLAB и Хосте Внешние Аудио Плагины, чтобы изучить, как спроектировать, сгенерировать, и затем разместить плагин VST.
Output latency измеряется как задержка между временем генерации аудио системы координат в MATLAB и время, когда аудио слышат через динамик.
Input latency измеряется как задержка между временем, когда аудио вводит звуковую карту и время, когда система координат выводится этапом обработки.
Если свойства и формат кадра остаются сопоставимыми, отношение input latency к output latency сопоставимо между вызовами audioPlayerRecorder
объект.
Чтобы минимизировать задержку, вы можете:
Оптимизируйте этап обработки. Если ваш этап обработки достиг пика алгоритмически, компилирование вашего кода MATLAB в код С с помощью MATLAB Coder может привести к более быстрому выполнению.
Увеличьте частоту дискретизации.
Уменьшите формат кадра.
Для примера при измерении задержки туда и обратно вашей системы смотрите Задержку Аудио Меры.
Audio Device Reader | Audio Device Writer | From Multimedia File | To Multimedia File | asiosettings
| audioDeviceReader
| audioDeviceWriter
| audioPlayerRecorder
| dsp.AudioFileReader
| dsp.AudioFileWriter
| getAudioDevices