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