Укажите макет пользовательского интерфейса аудиоплагина
создает объект, определяющий разметочную сетку графического интерфейса аудиоплагина. Используйте объект компоновки сетки подключаемого модуля, gridLayout = audioPluginGridLayoutgridLayout, в качестве аргумента для audioPluginInterface в определении класса плагина. audioPluginGridLayout указывает только сетку. Размещение отдельных графических элементов определяется с помощью audioPluginParameter.
Сведения о проектировании графического пользовательского интерфейса см. в разделе Разработка пользовательского интерфейса для аудиоплагина.
Например, подключаемые модули см. в разделе Галерея примеров аудиоплагинов.
определяет gridLayout = audioPluginGridLayout(Name,Value)audioPluginGridLayout свойства с использованием одного или нескольких Name,Value аргументы пары.
Формат сетки аудиоплагина по умолчанию определяет сетку 2 на 2. Звонить audioPluginGridLayout без аргументов для просмотра настроек по умолчанию.
audioPluginGridLayout
ans =
audioPluginGridLayout with properties:
RowHeight: [100 100]
ColumnWidth: [100 100]
RowSpacing: 10
ColumnSpacing: 10
Padding: [10 10 10 10]
noisifyClassic использует компоновку сетки по умолчанию путем передачи audioPluginGridLayout, без каких-либо аргументов, для audioPluginInterface. При использовании audioPluginGridLayout, необходимо указать положение каждого audioPluginParameter на сетке с использованием Layout. Отображаемые имена, соответствующие параметрам, также занимают ячейки сетки. Сетка по умолчанию содержит только четыре ячейки и noisifyClassic имеет четыре параметра, поэтому необходимо установить DisplayNameLocation кому none для размещения всех элементов на сетке. audioPluginGridLayout передается в audioPluginInterface. Сохранить noisifyClassic в текущую папку.
classdef noisifyClassic < audioPlugin properties DropoutLeft = false DropoutRight = false NoiseLeftGain = 0 NoiseRightGain = 0 end properties (Constant) PluginInterface = audioPluginInterface( ... audioPluginParameter('DropoutLeft', ... 'Layout',[2,1], ... 'DisplayNameLocation','none'), ... audioPluginParameter('DropoutRight', ... 'Layout',[2,2], ... 'DisplayNameLocation','none'), ... audioPluginParameter('NoiseLeftGain', ... 'Layout',[1,1], ... 'DisplayNameLocation','none'), ... audioPluginParameter('NoiseRightGain', ... 'Layout',[1,2], ... 'DisplayNameLocation','none'), ... ... audioPluginGridLayout) end methods function out = process(plugin,in) r = size(in,1); dropRate = 0.1; if plugin.DropoutLeft idx = randperm(r,round(r*dropRate)); in(idx,1) = 0; end if plugin.DropoutRight idx = randperm(r,round(r*dropRate)); in(idx,2) = 0; end in(:,1) = in(:,1) + plugin.NoiseLeftGain*(2*rand(r,1,'like',in)-1); in(:,2) = in(:,2) + plugin.NoiseRightGain*(2*rand(r,1,'like',in)-1); out = in; end end end
Вы можете быстро выполнить итерацию в своей конструкции пользовательского интерфейса с помощью parameterTuner для визуализации пользовательского интерфейса плагина. Звонить parameterTuner на noisifyClassic.
parameterTuner(noisifyClassic)

Пример плагина, noisifyдобавляет шум к аудиосигналу по каналу с заданным коэффициентом усиления (на канал) и частотой отсева.
classdef noisifyOriginal < audioPlugin properties DropoutLeft = false; DropoutRight = false; NoiseLeftGain = 0; NoiseRightGain = 0; DropoutRate = 0.1; end properties (Constant) PluginInterface = audioPluginInterface(... audioPluginParameter('DropoutLeft'), ... audioPluginParameter('DropoutRight'), ... audioPluginParameter('NoiseLeftGain'), ... audioPluginParameter('NoiseRightGain'), ... audioPluginParameter('DropoutRate')) end methods function out = process(plugin,in) r = size(in,1); if plugin.DropoutLeft idx = randperm(r,round(r*plugin.DropoutRate)); in(idx,1) = 0; end if plugin.DropoutRight idx = randperm(r,round(r*plugin.DropoutRate)); in(idx,2) = 0; end in(:,1) = in(:,1) + plugin.NoiseLeftGain*randn(r,1,'like',in); in(:,2) = in(:,2) + plugin.NoiseRightGain*randn(r,1,'like',in); out = in; end end end
Для просмотра соответствующего пользовательского интерфейса для плагина вызовите parameterTuner с плагином. Когда вы создаете аудиоплагин и развертываете его на DAW, DAW использует пользовательский интерфейс по умолчанию, аналогичный пользовательскому интерфейсу по умолчанию parameterTuner.
parameterTuner(noisifyOriginal)

Вы можете создать более интуитивно понятный и визуально приятный пользовательский интерфейс с помощью audioPluginInterface, audioPluginGridLayout, и audioPluginParameter. Например, чтобы создать более интуитивный пользовательский интерфейс для noisyOriginal, вы можете обновить audioPluginInterface следующим образом:
classdef noisify < audioPlugin properties DropoutLeft = false; DropoutRight = false; NoiseLeftGain = 0; NoiseRightGain = 0; DropoutRate = 0.1; end properties (Constant) PluginInterface = audioPluginInterface(... audioPluginParameter('DropoutLeft', ... 'Layout',[4,1], ... 'DisplayName','Dropout (L)', ... 'DisplayNameLocation','above', ... 'Style','vrocker'), ... audioPluginParameter('DropoutRight', ... 'Layout',[4,4], ... 'DisplayName','Dropout (R)', ... 'DisplayNameLocation','above', ... 'Style','vrocker'), ... audioPluginParameter('NoiseLeftGain', ... 'DisplayName','Noise Gain (L)', ... 'Layout',[2,1;2,2], ... 'DisplayNameLocation','above', ... 'Style','rotaryknob'), ... audioPluginParameter('NoiseRightGain', ... 'Layout',[2,3;2,4], ... 'DisplayName','Noise Gain (R)', ... 'DisplayNameLocation','above', ... 'Style','rotaryknob'), ... audioPluginParameter('DropoutRate', ... 'Layout',[4,2;4,3], ... 'DisplayName','Droput Rate', ... 'DisplayNameLocation','below', ... 'Style','vslider'), ... ... audioPluginGridLayout( ... 'RowHeight',[15,150,15,150,15], ... 'ColumnWidth',[100,40,40,100], ... 'RowSpacing',30)) end methods function out = process(plugin,in) r = size(in,1); if plugin.DropoutLeft idx = randperm(r,round(r*plugin.DropoutRate)); in(idx,1) = 0; end if plugin.DropoutRight idx = randperm(r,round(r*plugin.DropoutRate)); in(idx,2) = 0; end in(:,1) = in(:,1) + plugin.NoiseLeftGain*randn(r,1,'like',in); in(:,2) = in(:,2) + plugin.NoiseRightGain*randn(r,1,'like',in); out = in; end end end
Вы можете быстро выполнить итерацию в своей конструкции пользовательского интерфейса с помощью parameterTuner для визуализации инкрементных изменений. Звонить parameterTuner на noisify. Когда вы создаете аудиоплагин и развертываете его на DAW, DAW использует расширенный пользовательский интерфейс.
parameterTuner(noisify)

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'RowHeight', [50,200,150] видится сетка с тремя рядами. Первая строка имеет высоту 50 пикселей, вторая строка имеет высоту 200 пикселей, а третья строка имеет высоту 150 пикселей.'RowHeight' - Высота каждой строки (пикселов)[100, 100] (по умолчанию) | вектор строки положительных целых чиселВысота в пикселях каждой строки в сетке, заданная как разделенная запятыми пара, состоящая из 'RowHeight' и вектор строки положительных целых чисел.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
'ColumnWidth' - Ширина каждого столбца (пикселов)[100, 100] (по умолчанию) | вектор строки положительных целых чиселШирина в пикселях каждого столбца в сетке, заданная как разделенная запятыми пара, состоящая из 'ColumnWidth' и вектор строки положительных целых чисел.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
'RowSpacing' - Расстояние между строками (пикселов) 10 (по умолчанию) | неотрицательное целое числоРасстояние между строками в пикселях, указанное как разделенная запятыми пара, состоящая из 'RowSpacing' и неотрицательное целое число.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
'ColumnSpacing' - Расстояние между столбцами (пикселы)10 (по умолчанию) | неотрицательное целое числоРасстояние между столбцами в пикселях, указанное как разделенная запятыми пара, состоящая из 'ColumnSpacing' и неотрицательное целое число.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
'Padding' - Заполнение по внешнему периметру сетки (пикселы)[10, 10, 10, 10] (по умолчанию) | [слева, снизу, справа, сверху]Заполнение по внешнему периметру сетки в пикселях, указанное как разделенная запятыми пара, состоящая из 'Padding' и четырехэлементный вектор строк неотрицательных целых чисел. Элементы вектора интерпретируются как [левый, нижний, правый, верхний], где:
left - расстояние в пикселях от левого края сетки до левого края родительского контейнера.
bottom -- расстояние в пикселях от нижнего края сетки до нижнего края родительского контейнера.
справа -- расстояние в пикселях от правого края сетки до правого края родительского контейнера.
top -- расстояние в пикселях от верхнего края сетки до верхнего края родительского контейнера.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
Стенд аудиотестирования | audioPlugin | audioPluginInterface | audioPluginParameter | audioPluginSource | generateAudioPlugin | parameterTuner | validateAudioPlugin
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.