В этих примерах показано, как создавать амбисонические плагины с использованием демонстрационных функций MATLAB ® высшего порядка ambisonic (HOA). Амбизоника - пространственная аудиотехника, представляющая трёхмерное звуковое поле с использованием сферических гармоник. Этот пример содержит подключаемый модуль кодера, функцию формирования пользовательских подключаемых модулей кодера, подключаемый модуль декодера и функцию формирования пользовательских подключаемых модулей декодера. Настройка генерации плагинов позволяет пользователю задавать различные ambisonic порядки и различные списки устройств для данной ambisonic конфигурации.
Амбисоническое кодирование - процесс разложения звукового поля на сферические гармоники. Матрица кодирования представляет собой количество сферических гармоник, присутствующих в определенном положении устройства. При декодировании с согласованием режимов матрица декодирования является псевдоинверсной матрицей кодирования. Амбисоническое декодирование - процесс реконструкции сферических гармоник в звуковое поле.
Этот пример включает в себя амбисоники более высокого порядка, которые включают в себя традиционные амбисоники первого порядка. В амбизонике существует зависимость между числом амбисонических каналов и амбизоническим порядком:
ambisonic_channels = (ambisonic_order + 1)^2
Например: ambisonics первого порядка требует четыре аудиоканала, в то время как ambisonics четвертого порядка требует 25 аудиоканалов.
Поддерживаются следующие условные обозначения
Последовательность каналов ACN
SN3D нормализация
азимут от 0 до 360 градусов
отметка от -90 до 90 градусов
Амбисонические примеры конструкции поддерживают до амбисоники седьмого порядка с псевдоинверсным декодированием.
Ambisonic Devices: элементы и динамики
Амбисонические устройства делятся на две группы: элементы и динамики. Каждое устройство имеет звуковой сигнал и метаданные, описывающие его положение и работу. Элементы соответствуют многоэлементным микрофонным массивам, а динамики - массивам громкоговорителей для амбисонического воспроизведения.
Ambisonic кодер применяет матрицу ambisonic кодирования к необработанному звуку от микрофонных элементов. Для создания матрицы ambisonic-кодирования необходимы положение (азимут, отметка) и тип устройства элементов микрофона вместе с требуемым ambisonic-порядком.
Ambisonic декодер применяет матрицу ambisonic декодирования к ambisonic аудио для воспроизведения на динамиках. Для создания матрицы ambisonic декодирования необходимы положение (азимут, возвышение) и тип устройства динамиков вместе с требуемым ambisonic-порядком.
Звуковое представление поля
Для захвата, представления или воспроизведения звукового поля с помощью амбизоники количество устройств (элементов или динамиков) должно быть больше или равно количеству амбисонических каналов.
В примере кодирования звук, захваченный 32-канальным микрофоном со сферической матрицей, может кодироваться вплоть до амбизоники четвертого порядка (25 каналов). Для примера декодирования массив громкоговорителей, содержащий 64 динамика, сконфигурирован для ambisonic воспроизведения до седьмого порядка. Если содержимое воспроизведения является ambisonics четвертого порядка, то, даже если массив настроен на seventh-order, только ambisonics четвертого порядка реализуется через систему.
number_devices >= number_ambisonic_channels
Для кодера, если количество устройств (элементов) меньше, чем количество амбисонических каналов, то аудиосигнал от устройств (элементов) может быть представлен в амбизонике, но звуковое поле не представлено. Один или более аудиоканалов могут быть закодированы в ambisonic в попытке позиционировать источники в ambisonic поле. Каждый кодер представляет интенсивность звукового поля, подлежащего кодированию в определенном местоположении устройства (элемента).
Для декодера, если количество устройств (динамиков) меньше числа амбисонических каналов, устройства (динамики) не полностью воспроизводят звуковое поле в заданном амбисоническом порядке. Звуковое поле может воспроизводиться в более низком амбисоническом порядке. Например, ambisonics третьего порядка, воспроизводимые на массиве динамиков с 10 динамиками, могут быть реализованы как система второго порядка (9 каналов) с дополнительным динамиком для воспроизведения. Каждый декодер представляет интенсивность амбисонического поля в заданном положении устройства (динамика).
способ псевдоинверсного декодирования
Существует много вариантов декодирования, в этом примере используется псевдоинверсное декодирование, также известное как согласование режимов. Этот способ декодирования благоприятствует компоновкам устройств регулярной формы. Другие способы декодирования могут благоприятствовать компоновкам устройств неправильной формы.
DeviceType
deviceType для кодеров включает или выключает кодировку устройства (элемента) для конкретного элемента. deviceType для декодеров включает или выключает декодирование устройства (динамика) для конкретного динамика. Если вектор deviceType опущен, то для deviceTypes устанавливается значение 1 (on). Назначение deviceType состоит в том, чтобы обеспечить гибкость при заполнении входов кодера или выходов декодера отключенными каналами, чтобы поместить амбисонический кодер или плагин декодера в среду с фиксированными счетчиками каналов, такую как 8-, 16- или 32-канальная звуковая шина.
Например: Амбисонический кодер второго порядка с 14 элементами имеет 14 входов и 9 выходов. Если добавить в кодер ещё два устройства (элемента) с типом устройства 0 (выкл.), то кодер будет иметь 16 входов и 9 выходов. Амбисонический декодер четвертого порядка с 29 устройствами (динамиками) имеет 25 входов и 29 выходов. Если добавить в декодер ещё три устройства (динамики) с deviceType 0 (off), то число каналов станет 25 входов и 32 выхода.
Если параметр deviceType имеет значение 0 (off), азимут и отметка для этого канала игнорируются; однако значение все еще необходимо. Рекомендуется установить азимут и отметку 0 градусов, если для типов устройств установлено значение 0 (выкл.).
audiopluginexample.AmbiEncoderPlugin построен вокруг audioexample.ambisonics.ambiencodemtrx и audioexample.ambisonics.ambiencode функции. Количество устройств (элементов, подлежащих кодированию) - количество входных каналов плагина кодера. Амбисонический порядок определяет количество выходных каналов плагина кодера.
audioexample.ambisonics.ambiencodemtrx генерирует матрицу ambisonic encoder из заданного ambisonic порядка и заданного списка устройств. audioexample.ambisonics.ambiencode применяет матрицу ambisonic кодера к необработанному звуку, что приводит к ambisonic кодированному звуку. Форматирование ambisonic аудио может быть определено с помощью audioexample.ambisonics.ambiencode функция. Количество необработанных аудиоканалов должно равняться количеству устройств в матрице ambisonic encoder.
Подключаемый модуль кодера наследует непосредственно от базового класса audioPlugin. Конструктор плагинов вызывает audioexample.ambisonics.ambiencodemtrx для построения исходной матрицы кодера. Вызов функции процесса audioexample.ambisonics.ambiencode для применения матрицы кодера к входу звука. Выход плагина является ambisonic закодированным аудио. Матрица кодера пересчитывается только при изменении свойства плагина, которое минимизирует вычисления внутри цикла процесса.
Интерфейс плагина заполняет азимут и отметку, но не тип устройства. Идея, лежащая в основе типа устройства, состоит в том, чтобы добавить внеканальные каналы к матрице кодера, чтобы поместить матрицу в кадр 8-кратного канала. Например, второй порядок имеет 9 каналов, создать матрицу кодера 16 каналов, причем первые 9 каналов имеют тип устройства 1 (on), а остальные 7 каналов имеют тип устройства 0 (off).
audioTestBench(audiopluginexample.AmbiEncoderPlugin)

audioTestBench('-close')Проверить код | Запустить подключаемый модуль | Создать подключаемый модуль
Генерация ambisonic плагины может быть вовлеченным процессом. Функция ambiGenerateEncedPlugin упрощает процесс генерации плагинов ambisonic encoder. Эта функция поддерживает до ambisonics седьмого порядка. Поддерживаются форматы acn-sn3d, acn-n3d, acn-fuma, acn-maxn, fuma-sn3d, fuma-n3d, fuma-fuma, fuma-maxn. Для выполнения функции требуются следующие входные данные:
имя класса audioPlugin
список устройств с позициями кодировщика
амбисонический порядок
ambisonic формат
% Provide a name for the audioPlugin class name = 'myEncoderPlugin'; % Include a device list of element positions device = [45 135 225 315 45 135 225 315; -45 -45 -45 -45 45 45 45 45]; % Specify the ambisonic order order = 3; % Specify the ambisonic format format = 'acn-sn3d';
Запустите функцию.
audioexample.ambisonics.ambiGenerateEncoderPlugin(name, device, order, format)
После разработки аудиоплагин может быть проверен, сгенерирован и развернут на сторонней цифровой звуковой рабочей станции (DAW).
audiopluginexample.AmbiDecoderPlugin построен вокруг audioexample.ambisonics.ambidecodemtrx и audioexample.ambisonics.ambidecode функции. Амбисонический порядок определяет количество входных каналов плагина декодера. Количество устройств (местоположения динамиков) - это количество выходных каналов плагина декодера.
audioexample.ambisonics.ambidecodemtrx формирует матрицу ambisonic декодера из заданного ambisonic порядка и заданного списка устройств. audioexample.ambisonics.ambidecode применяет матрицу ambisonic декодера к ambisonic аудио, приводя к декодированному аудио. Форматирование ambisonic аудио может быть определено с помощью audioexample.ambisonics.ambidecode функция. audioexample.ambisonics.ambidecode определяет ambisonic порядок из минимума ambisonic порядка входного аудио и ambisonic порядка матрицы декодера.
Подключаемый модуль декодера наследует непосредственно от базового класса audioPlugin. Конструктор плагинов вызывает audioexample.ambisonics.ambidecodemtrx для построения исходной матрицы декодера. Вызов функции процесса audioexample.ambisonics.ambidecode для применения матрицы декодера к входу звука. Выходной сигнал плагина является декодированным звуковым сигналом. Матрица декодера пересчитывается только при изменении свойства плагина, которое минимизирует вычисления внутри цикла процесса.
Интерфейс плагина заполняет азимут и отметку, но не тип устройства. Идея, лежащая в основе типа устройства, состоит в том, чтобы добавить внеканальные каналы к матрице кодера, чтобы поместить матрицу в кадр 8-кратного канала. Например, второй порядок имеет 9 каналов, создать матрицу кодера 16 каналов, причем первые 9 каналов имеют тип устройства 1 (on), а остальные 7 каналов имеют тип устройства 0 (off).
audioTestBench(audiopluginexample.AmbiDecoderPlugin)

audioTestBench('-close')Проверить код | Запустить подключаемый модуль | Создать подключаемый модуль
Генерация ambisonic плагины может быть вовлеченным процессом. Функция ambiGeneratePlugin упрощает процесс генерации подключаемых модулей ambisonic-декодера. Эта функция поддерживает до ambisonics седьмого порядка. Поддерживаются форматы acn-sn3d, acn-n3d, acn-fuma, acn-maxn, fuma-sn3d, fuma-n3d, fuma-fuma, fuma-maxn. Для выполнения функции требуются следующие входные данные:
наименование audioPlugin класс
список устройств с позициями декодера
амбисонический порядок
ambisonic формат
% Provide a name for the audioPlugin class name = 'myDecoderPlugin'; % Include a device list of speaker positions device = [45 135 225 315 45 135 225 315; -45 -45 -45 -45 45 45 45 45]; % Specify the ambisonic order order = 3; % Specify the ambisonic format format = 'acn-sn3d';
Запустите функцию.
audioexample.ambisonics.ambiGenerateDecoderPlugin(name,device,order,format)
После разработки аудиоплагин может быть проверен, сгенерирован и развернут на сторонней цифровой звуковой рабочей станции (DAW).
Амбисоническое бинауральное декодирование
[1] Кронлахнер, М. (2014). Пространственные преобразования для изменения амбисонических записей (магистерская диссертация).
[2] https://en.wikipedia.org/wiki/Ambisonics
[3] https://en.wikipedia.org/wiki/Ambisonic_data_exchange_formats