Звуковая Toolbox™ оптимизирована для обработки потока в реальном времени. Его входные и выходные системные объекты являются эффективными, с низкой задержкой, и они управляют всеми необходимыми параметрами, чтобы можно было провести компромисс между пропускной способностью и задержкой.
В этом руководстве описывается, как программное обеспечение MATLAB ® реализует обработку потока в реальном времени. В учебном пособии представлена ключевая терминология и основные методы оптимизации алгоритма обработки потоков. Более подробные технические описания и концепции см. в документации по объектам системы аудио ввода/вывода, используемым в данном учебном пособии .
Концепции, представленные в этом учебном пособии, описаны в терминах системных объектов в среде MATLAB. Те же понятия можно применить к соответствующим блокам в среде Simulink ®.
Для получения аудиопотока из файла используйте dsp.AudioFileReader object™ системы. Для получения аудиопотока с устройства используйте audioDeviceReader Системный объект.
Эта диаграмма и последующее описание указывают поток данных при получении моноканального сигнала с помощью audioDeviceReader Системный объект.

Конфигурация
Свойства вашего audioDeviceReader укажите драйвер, устройство (звуковую карту), частоту дискретизации, битовую глубину, размер буфера и сопоставление каналов между входными каналами устройства и столбцами, выводимыми из audioDeviceReader объект. Объект сообщает эти спецификации драйверу один раз в setup.
Цикл обработки в реальном времени
Микрофон поднимает звук и посылает непрерывный электрический сигнал на звуковую карту.
Звуковая плата выполняет аналого-цифровое преобразование с частотой дискретизации, размером буфера и битовой глубиной, определенной во время конфигурирования.
Аналого-цифровой преобразователь записывает выборки звука в буфер звуковой карты. Если буфер заполнен, новые пробы отбрасываются. Эти образцы называют перерасходом.
audioDeviceReader использует драйвер для итерационного извлечения самого старого кадра из буфера звуковой карты.
Чтобы отправить аудиопоток в файл, используйте dsp.AudioFileWriter Системный объект. Чтобы отправить аудиопоток на устройство, используйте audioDeviceWriter Системный объект.
Эта диаграмма и последующее описание указывают поток данных при воспроизведении моноканального сигнала с помощью audioDeviceWriter Системный объект.

Конфигурация
Свойства вашего audioDeviceWriter укажите драйвер, устройство (звуковую карту), частоту дискретизации, битовую глубину, размер буфера и сопоставление каналов между выходными каналами устройства и столбцами, вводимыми в audioDeviceWriter объект. Объект сообщает эти спецификации драйверу один раз в setup.
Цикл обработки в реальном времени
Этап обработки передает кадр переменной длины в audioDeviceWriter Системный объект.
audioDeviceWriter передает кадр в буфер звуковой платы.
Звуковая карта извлекает самый старый кадр из буфера и выполняет цифроаналоговое преобразование. Звуковая плата передает аналоговый блок на громкоговоритель. Если буфер пуст, когда звуковая карта пытается извлечь из него, звуковая карта выводит область молчания. Это называется недоработкой.
Для одновременного чтения и записи на одно аудиоустройство используйте audioPlayerRecorder Системный объект.
Эта диаграмма и последующее описание указывают поток данных при воспроизведении и записи моноканальных сигналов с помощью audioPlayerRecorder Системный объект.

Конфигурация
Свойства вашего audioPlayerRecorder укажите устройство (звуковую карту), частоту дискретизации, битовую глубину, размер буфера и отображение канала между устройством и объектом. Объект сообщает эти спецификации драйверу один раз в setup.
Цикл обработки в реальном времени
Микрофон поднимает звук и посылает непрерывный электрический сигнал на звуковую карту. Одновременно динамик воспроизводит аналоговый блок, полученный от звуковой платы.
Звуковая карта выполняет аналого-цифровое преобразование полученного звукового сигнала и записывает цифровой блок во входной буфер. Если входной буфер заполнен, новые выборки отбрасываются. Одновременно звуковая плата извлекает самый старый кадр из выходного буфера и выполняет цифроаналоговое преобразование следующего воспроизводимого звукового блока. Если выходной буфер пуст, когда звуковая плата пытается извлечь данные, звуковая плата выводит область молчания.
audioPlayerRecorder объект возвращает полученный звуковой сигнал в среду MATLAB для обработки. Одновременно воспроизводимый звук указывается в качестве аргумента audioPlayerRecorder для воспроизведения в следующем цикле ввода-вывода.
Недозапуск означает молчание выходного сигнала. Молчание выходного сигнала возникает, если буфер устройства пуст, когда наступает время цифроаналогового преобразования. Это происходит в том случае, когда цикл обработки в MATLAB не предоставляет выборки с той скоростью, которая требуется звуковой карте. Количество недоиспользованных образцов возвращается при вызове audioPlayerRecorder или audioDeviceWriter объект.
Переполнение относится к сбросам входного сигнала. Падения входного сигнала происходят, когда этап обработки не успевает за получением выборок. Количество выборок возвращается при вызове audioPlayerRecorder или audioDeviceReader объект.
При возникновении переполнения или недозагрузки попробуйте улучшить систему ввода-вывода одним или несколькими из следующих способов:
Определите, когда происходит переполнение или недоработка. Если это происходит в первых нескольких итерациях, рассмотрите возможность вызова setup на системных объектах перед циклом, где требуется обработка в реальном времени. Перед началом реальной обработки можно также запустить систему ввода-вывода с фиктивными данными для нескольких кадров. Дополнительные сведения см. в разделе Измерение производительности потоковых звуковых алгоритмов реального времени.
Если вы используете драйвер DirectSound на платформе Windows ®, попробуйте переключиться на драйвер WASAPI или ASIO™. Драйверы ASIO имеют наименьшие накладные расходы. При использовании драйвера ASIO убедитесь, что размер кадра в MATLAB соответствует размеру буфера ASIO. Вы можете использоватьasiosettings для открытия пользовательского интерфейса настроек ASIO из MATLAB.
Если вы можете позволить себе увеличить задержку приложения, попробуйте увеличить размер буфера объекта. По умолчанию размер буфера - это размер кадра данных, обрабатываемых звуковым объектом.
Если вы можете позволить себе уменьшить разрешение сигнала, рассмотрите возможность уменьшения частоты дискретизации.
Закройте все несущественные процессы на компьютере, такие как проверка почты и утилиты синхронизации файлов. Эти процессы могут асинхронно запрашивать время ЦП через прерывания и нарушать цикл обработки звука.
Для повышения производительности удалите все операции печати и визуализации из цикла реального времени. Если требуется визуализация для обновления в цикле обработки, используйте область Toolbox™ системы DSP, такую как timescope, dsp.SpectrumAnalyzer, или dsp.ArrayPlot. Следуйте рекомендациям, перечисленным в пункте 1, чтобы настроить и предварительно запустить области. Если требуется пользовательская графика или выполняется обработка обратных вызовов в цикле, используйте drawnow и укажите ограниченную частоту обновления для оптимизации очереди событий.
Если цикл обработки является тяжелым по алгоритму, попробуйте профилировать цикл, чтобы найти узкие места, а затем примените соответствующие меры.
Замените рукописный код на функции MATLAB, оптимизированные под скорость.
Следуйте рекомендациям по повышению производительности: Методы повышения производительности.
Создание исполняемых файлов MATLAB (MEX-файлов) с использованием Coder™ MATLAB может привести к более быстрому выполнению. Пример см. в разделе Удаление мешающего тонального сигнала из аудиопотока.
Можно также создавать автономные исполняемые файлы (EXE-файлы). Пример см. в разделе Создание автономного исполняемого файла для уравнивателя параметрического звука.
Если вы рассматриваете возможность превращения вашего алгоритма в плагин VST, то попробуйте запустить его как плагин VST в MATLAB. Генерация плагинов VST использует технологию генерации кода C под колпаком, и запуск сгенерированного плагина VST в MATLAB может привести к более быстрому выполнению, чем с вашим исходным кодом MATLAB. См. разделы Аудиоплагины в MATLAB и Внешние аудиоплагины хоста, чтобы узнать, как проектировать, генерировать и затем размещать подключаемый модуль VST.
Задержка на выходе измеряется как временная задержка между временем формирования кадра звука в MATLAB и временем, когда звук слышен через громкоговоритель.
Задержка на входе измеряется как временная задержка между временем, когда звук поступает на звуковую карту, и временем, когда кадр выводится этапом обработки.
Если свойства и размер кадра остаются непротиворечивыми, отношение задержки ввода к задержке вывода является непротиворечивым между вызовами audioPlayerRecorder объект.
Чтобы минимизировать задержки, можно:
Оптимизация этапа обработки. Если ваш этап обработки достиг пика алгоритмически, компиляция кода MATLAB в код C с помощью кодера MATLAB может привести к более быстрому выполнению.
Увеличьте частоту выборки.
Уменьшите размер кадра.
Для получения учебного пособия по измерению задержки системы в обоих направлениях см. раздел Измерение задержки звука.
asiosettings | Считыватель аудиоустройств | Устройство записи аудиоустройств | audioDeviceReader | audioDeviceWriter | audioPlayerRecorder | dsp.AudioFileReader | dsp.AudioFileWriter | Из мультимедийного файла | getAudioDevices | В мультимедийный файл