Укажите параметры аудиоплагина
pluginParameter = audioPluginParameter( возвращает объект, propertyName)pluginParameter, который связывает параметр аудиоплагина со свойством аудиоплагина, указанным propertyName. Используйте объект параметра плагина, pluginParameter, в качестве аргумента для audioPluginInterface в определении класса плагина.
В среде цифровой звуковой рабочей станции (DAW) или при использовании Audio Test Bench или parameterTuner В среде MATLAB ® параметры подключаемых модулей настраиваются, обращенные к пользователю значения с определенными диапазонами, сопоставленными с элементами управления. При изменении значения параметра с помощью элемента управления соответствующее свойство подключаемого модуля также изменяется. Если алгоритм обработки звука плагина зависит от свойств, алгоритм также изменяется.
Чтобы визуализировать взаимосвязь между свойствами, параметрами и средой, в которой выполняется подключаемый модуль, см. раздел Реализация параметров аудиоплагина.
pluginParameter = audioPluginParameter( определяет propertyName,Name,Value)audioPluginParameter свойства с использованием одного или нескольких Name,Value аргументы пары.
Создайте базовый файл определения класса аудиоплагина. Укажите свойство, Gainи функция обработки, которая умножает ввод на Gain.
classdef myAudioPlugin < audioPlugin properties Gain = 1; end methods function out = process(plugin,in) out = in*plugin.Gain; end end end
Добавление свойства константы, PluginInterface, который указан как audioPluginInterface объект.
classdef myAudioPlugin < audioPlugin properties Gain = 1; end properties (Constant) PluginInterface = audioPluginInterface; end methods function out = process(plugin,in) out = in*plugin.Gain; end end end
Проход audioPluginParameter кому audioPluginInterface. Чтобы связать свойство плагина, Gain, для параметра плагина укажите первый аргумент audioPluginParameter в качестве имени свойства, 'Gain'.
classdef myAudioPlugin < audioPlugin properties Gain = 1; end properties (Constant) PluginInterface = audioPluginInterface( ... audioPluginParameter('Gain')); end methods function out = process(plugin,in) out = in*plugin.Gain; end end end
Создайте базовый файл определения класса подключаемого модуля. Определить 'DisplayName' как 'Awesome Gain', 'Label' как 'linear', и 'Mapping' как {'lin',0,20}.
classdef myAudioPlugin < audioPlugin properties Gain = 1; end properties (Constant) PluginInterface = audioPluginInterface( ... audioPluginParameter('Gain', ... 'DisplayName','Awesome Gain', ... 'Label','linear', ... 'Mapping',{'lin',0,20})); end methods function out = process(plugin,in) out = in*plugin.Gain; end end end
В следующем определении класса для определения связи между свойством и параметром используется целочисленное сопоставление параметров. Вы можете использовать плагин, созданный из этого класса, чтобы настроить линейное усиление аудиосигнала целыми шагами от 0 до 3.
classdef pluginWithIntegerMapping < audioPlugin properties Gain = 1; end properties (Constant) PluginInterface = audioPluginInterface( ... audioPluginParameter('Gain', ... 'Mapping',{'int',0,4}, ... 'Layout',[1,1], ... 'Style','vslider'), ... audioPluginGridLayout('RowHeight',[400,20])); end methods function out = process(plugin,in) out = in*plugin.Gain; end end end
Чтобы запустить плагин, сохраните определение класса в локальной папке, а затем вызовите аудиотестер.
audioTestBench(pluginWithIntegerMapping)

В следующем определении класса для определения взаимосвязи между свойством и параметром используется сопоставление параметров мощности. Для настройки усиления звукового сигнала в дБ можно использовать плагин, созданный из этого класса.
classdef pluginWithPowerMapping < audioPlugin properties Gain = 0; end properties (Constant) PluginInterface = audioPluginInterface( ... audioPluginParameter('Gain', ... 'Label','dB', ... 'Mapping',{'pow', 1/3, -140, 12}, ... 'Style','rotary', ... 'Layout',[1,1]), ... audioPluginGridLayout); end methods function out = process(plugin,in) dBGain = 10^(plugin.Gain/20); out = in*dBGain; end end end
Чтобы запустить плагин, сохраните определение класса в локальной папке, а затем вызовите аудиотестер.
audioTestBench(pluginWithPowerMapping)

В следующем определении класса для определения взаимосвязи между свойством и параметром используется логарифмическое сопоставление параметров. Вы можете использовать плагин, созданный из этого класса, чтобы настроить центральную частоту однополосного EQ-фильтра от 100 до 10000.
classdef pluginWithLogMapping < audioPlugin properties EQ CenterFrequency = 1000; end properties (Constant) PluginInterface = audioPluginInterface( ... audioPluginParameter('CenterFrequency', ... 'Mapping', {'log',100,10000})); end methods function plugin = pluginWithLogMapping plugin.EQ = multibandParametricEQ('NumEQBands',1, ... 'PeakGains',20, ... 'Frequencies',plugin.CenterFrequency); end function out = process(plugin,in) out = plugin.EQ(in); end function set.CenterFrequency(plugin,val) plugin.CenterFrequency = val; plugin.EQ.Frequencies = val; end function reset(plugin) plugin.EQ.SampleRate = getSampleRate(plugin); end end end
Чтобы запустить плагин, сохраните определение класса в локальной папке, а затем вызовите аудиотестер.
audioTestBench(pluginWithLogMapping)

Следующее определение класса использует сопоставление параметров перечисления для определения взаимосвязи между свойством и параметром. Вы можете использовать плагин, созданный из этого класса, чтобы блокировать или пропускать аудиосигнал, настроив PassThrough параметр.
classdef pluginWithLogicalEnumMapping < audioPlugin properties PassThrough = true; end properties (Constant) PluginInterface = audioPluginInterface( ... audioPluginParameter('PassThrough', ... 'Mapping', {'enum','Block signal','Pass through'}, ... 'Layout',[1,1], ... 'Style','vtoggle', ... 'DisplayNameLocation','none'), ... audioPluginGridLayout); end methods function out = process(plugin,in) if plugin.PassThrough out = in; else out = zeros(size(in)); end end end end
Чтобы запустить подключаемый модуль, сохраните определение класса в локальной папке, а затем создайте цикл аудиопотока ввода-вывода.
Сначала создайте объекты для чтения из файла и записи на устройство.
fileReader = dsp.AudioFileReader('Engine-16-44p1-stereo-20sec.wav'); deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate);
Создайте объект подключаемого модуля и задайте частоту дискретизации файла.
passThrough = pluginWithLogicalEnumMapping; setSampleRate(passThrough,fileReader.SampleRate)
Открыть parameterTuner чтобы можно было переключить логический параметр плагина во время обработки потока.
parameterTuner(passThrough)
В то время как файл содержит непрочитанные данные:
Прочтите кадр из файла.
Подача кадра через подключаемый модуль
Запишите обработанный звук на устройство.
Во время работы аудиопотока переключите переключатель PassThrough параметр и прослушивание эффекта.
while ~isDone(fileReader) audioIn = fileReader(); audioOut = process(passThrough,audioIn); deviceWriter(audioOut); drawnow limitrate end

Следующие определения классов содержат простой пример сопоставления параметров перечисления для свойств, определенных классом перечисления. Можно указать режим работы плагина, созданного из этого класса, настроив Mode параметр.
Определение класса подключаемого модуля
classdef pluginWithEnumMapping < audioPlugin properties Mode = OperatingMode.boost; end properties (Constant) PluginInterface = audioPluginInterface(... audioPluginParameter('Mode',... 'Mapping',{'enum','+6 dB','-6 dB','silence','white noise'})); end methods function out = process(plugin,in) switch (plugin.Mode) case OperatingMode.boost out = in * 2; case OperatingMode.cut out = in / 2; case OperatingMode.mute out = zeros(size(in)); case OperatingMode.noise out = rand(size(in)) - 0.5; otherwise out = in; end end end end
Определение класса перечисления
classdef OperatingMode < int8 enumeration boost (0) cut (1) mute (2) noise (3) end end
Чтобы запустить плагин, сохраните файлы определения плагина и класса перечисления в локальной папке. Затем вызовите Audio Test Bench в классе плагинов.
audioTestBench(pluginWithEnumMapping)

propertyName - Имя свойства аудиоплагинаИмя свойства аудиоплагина, которое требуется связать с параметром, указанным как символьный вектор или строка. Введите имя свойства точно так, как оно определено в разделе свойств класса аудиоплагинов.
Типы данных: char | string
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'DisplayName','Gain','Label','dB' задает отображаемое имя параметра как 'Gain' и отображаемая метка для единиц значения параметра как 'dB'.'Mapping' - Сопоставление между свойством и диапазоном параметровСопоставление между свойством и диапазоном параметров, указанным как разделенная запятыми пара, состоящая из 'Mapping' и массив ячеек.
Сопоставление диапазона параметров определяет сопоставление между свойством и соответствующим диапазоном параметров.
Первый элемент массива ячеек является символьным вектором, определяющим тип отображения. Допустимые значения: 'lin', 'log', 'pow', 'int', и 'enum'. Последующие элементы массива ячеек зависят от вида отображения. Допустимые сопоставления зависят от типа данных свойства.
| Тип данных свойства | Допустимые сопоставления | Дефолт |
|---|---|---|
| дважды | 'lin', 'log', 'pow', 'int' | {'lin', 0, 1} |
| логичный | 'enum' | {'enum', 'off', 'on'} |
| класс перечисления | 'enum' | имена перечислений |
| Отображение | Описание | Пример |
|---|---|---|
'lin' | Задает линейное отношение с заданными минимальными и максимальными значениями. значение параметра) | { |
'log' | Задает логарифмическое отношение с заданными минимальными и максимальными значениями, где положение элемента управления соответствует логарифму значения свойства. Минимальное значение должно быть больше 0. ) | { |
'pow' |
Задает связь степенного закона с заданными значениями степени, минимума и максимума. Значение свойства связано с положением элемента управления, возведенным в степень: exp | { |
'int' |
Квантует положение управления и отображает его в диапазон последовательных целых чисел с заданными минимальными и максимальными значениями. значение параметра)) | { |
|
| Дополнительно предоставляет векторы символов для отображения в диалоговом окне подключаемого модуля. |
Пример: Перечисление для сопоставления параметров логических свойств |
|
| Дополнительно предоставляет векторы символов для членов класса перечисления. | { Пример «» enum «» для сопоставления параметров класса перечисления |
'Layout' - Ячейки сетки, занятые контролем параметровЯчейки сетки, занятые управлением параметрами, заданными как разделенная запятыми пара, состоящая из 'Layout' и двухэлементный вектор строки или матрица 2 на 2. Чтобы использовать одну ячейку, укажите [строку, столбец] ячейки. Чтобы охватить несколько ячеек, укажите верхнюю левую и нижнюю правую ячейки как [верхняя, левая; ниже, справа].
Пример: 'Layout',[2,3]
Пример: 'Layout',[2,3;3,6]
Чтобы включить эту пару имя-значение, передайте audioPluginGridLayout объект в audioPluginInterface.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
'DisplayName' - Отображаемое имя параметраОтображаемое имя параметра, указанное как разделенная запятыми пара, состоящая из 'DisplayName' и символьный вектор или строку. Если 'DisplayName' не указано, используется имя связанного свойства.
Типы данных: char | string
'DisplayNameLocation' - Расположение отображаемого имени'left' | 'right' | 'above' | 'below' | 'none'Расположение DisplayName, указанная как пара, разделенная запятыми, состоящая из 'DisplayNameLocation' и 'left', 'right', 'above', 'below', или 'none'. Местоположение отображаемого имени определяется относительно Layout:
'left' - Отображаемое имя находится в столбце слева от Layout и охватывает те же строки, что и Layout.
'right' - Отображаемое имя находится в столбце справа от Layout и охватывает те же строки, что и Layout.
'above' - Отображаемое имя находится в строке выше Layout и охватывает те же столбцы, что и Layout
'below' - Отображаемое имя находится в строке ниже Layout и охватывает те же столбцы, что и Layout.
'none' –– DisplayName подавляется.
Пример: 'DisplayNameLocation','left'
Чтобы включить эту пару имя-значение, передайте audioPluginGridLayout объект в audioPluginInterface.
Типы данных: char | string
'Label' - Отображение метки для единиц значения параметраОтображать метку для единиц значения параметра, заданную как разделенная запятыми пара, состоящая из 'Label' и символьный вектор или строку.
'Label' пара имя-значение игнорируется для нечисловых параметров.
Типы данных: char | string
'Style' - Визуальный контроль параметра плагина'hslider' | 'vslider' | 'rotaryknob' | 'checkbox' | 'vrocker' | 'vtoggle' | 'dropdown'Визуальный контроль для параметра плагина, заданного как пара, разделенная запятыми, состоящая из 'Style' и вектор строки или символа:
| Стиль | Описание |
|---|---|
'hslider' | Горизонтальный ползунок |
'vslider' | Вертикальный ползунок |
'rotaryknob' | Поворотная ручка |
'checkbox' | Флажок |
'vrocker' | Вертикальный коромысло |
'vtoggle' | Тумблер вертикальный |
'dropdown' | Dropdown |
Стили по умолчанию и допустимые стили зависят от параметра плагина Mapping и соответствующий класс свойства:
| Отображение | Класс свойств | Стиль по умолчанию | Дополнительные допустимые стили |
|---|---|---|---|
| одинок дважды |
|
|
| логичный |
|
|
| перечисление с 2 значениями |
|
|
| перечисление |
|
Чтобы включить эту пару имя-значение, передайте audioPluginGridLayout объект в audioPluginInterface.
Типы данных: char | string
'Filmstrip' - Имя графического файла PNG, GIF или JPGИмя графического файла PNG, GIF или JPG, указанного как разделенная запятыми пара, состоящая из 'Filmstrip' и символьный вектор или строку. Графический файл содержит последовательность изображений элементов управления.
Кинопленки позволяют заменить стандартную управляющую графику собственными пользовательскими изображениями. Кинопленки поддерживают все элементы управления Style значения, за исключением выпадающих. Фильмстрайп - это одно изображение, созданное путем объединения меньших изображений, называемых кадрами. Каждый кадр представляет собой изображение элемента управления в определенном положении. Например, кинолента для переключателя содержит два кадра: один, изображающий состояние «off», и другой, изображающий состояние «on». Рамки могут быть соединены вертикально или горизонтально. Предположим, что кадры переключателя имеют ширину 50 пикселей на 100 пикселей в высоту. Затем вертикальная конкатенация создает изображение кинопленки размером 50 на 200 пикселей с верхним кадром, используемым для состояния выключения. Горизонтальная конкатенация создает изображение размером 100 на 100 пикселей с левым кадром, используемым для выключенного состояния. Полоски для ползунков и ручек обычно содержат гораздо больше кадров. Верхний/левый кадр соответствует минимальному положению управления, а нижний/правый кадр соответствует максимальному положению управления. Относительная позиция управления определяет, какой кадр отображается для данного значения параметра.
Чтобы включить эту пару имя-значение, передайте audioPluginGridLayout объект в audioPluginInterface и указать 'FilmstripFrameSize'.
Типы данных: char | string
'FilmstripFrameSize' - Размер отдельных кадров (пикселей)Размер отдельных кадров в пленочной полосе в пикселях, определяемый как разделенная запятыми пара, состоящая из 'FilmstripFrameSize' и двухэлементный вектор строк целых чисел, задающих [width, height].
Чтобы включить эту пару имя-значение, передайте audioPluginGridLayout объект в audioPluginInterface и укажите 'Filmstrip'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
Сведения о проектировании графического пользовательского интерфейса см. в разделе Разработка пользовательского интерфейса для аудиоплагина.
Параметры аудиоплагина видны и настраиваются как в среде MATLAB, так и в среде цифровой звуковой рабочей станции (DAW). Здесь описываются различные среды и соответствующие визуализации параметров аудиоплагина. Пример сопоставления определения класса с пользовательским интерфейсом см. в разделе Разработка пользовательского интерфейса для аудиоплагина.
Среда MATLAB с использованием аудиотестирования. Используйте Audio Test Bench для взаимодействия с параметрами плагина в среде MATLAB в полном рабочем процессе на основе графического интерфейса пользователя. Используя Audio Test Bench, вы можете указать вход и выход звука, проанализировать ваш плагин с помощью областей времени и частотной области, подключиться к элементам управления MIDI, а также проверить и создать ваш плагин. Стенд аудиотестирования соответствует графическому пользовательскому интерфейсу, указанному в audioPluginParameter, audioPluginGridLayout, и audioPluginInterface (кроме кинопленок).

Среда MATLAB с использованием parameterTuner. Использовать parameterTuner взаимодействие с параметрами плагина в среде MATLAB при разработке, анализе или использовании плагина в программном рабочем процессе. parameterTuner чтит графический интерфейс пользователя, указанный в audioPluginParameter, audioPluginGridLayout, и audioPluginInterface (кроме кинопленок).

Среда DAW. Использовать generateAudioPlugin для развертывания аудиоплагина в среде DAW. Среда DAW определяет точное расположение параметров плагина, видимое пользователю плагина.

Стенд аудиотестирования | audioPlugin | audioPluginInterface | audioPluginSource | generateAudioPlugin | parameterTuner | validateAudioPlugin
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.