Задайте размещение для пользовательского интерфейса плагина аудио
создает объект, который задает сетку размещения для графического пользовательского интерфейса аудиоплагина. Используйте объект сетки размещения плагина, gridLayout
= audioPluginGridLayoutgridLayout
, как аргумент для audioPluginInterface
в определении класса плагина. audioPluginGridLayout
задает только сетку. Размещение отдельных графических элементов задается с помощью audioPluginParameter
.
Чтобы узнать, как проектировать графический пользовательский интерфейс, смотрите Design User Interface for Audio Plugin.
Например, плагины см. в Audio Plugin Example Gallery.
задает 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)
Вы можете создать более интуитивно понятный и визуально приятный UI с помощью 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 -- Расстояние в пикселях от нижнего ребра сетки до нижнего ребра родительского контейнера.
right -- Расстояние в пикселях от правого ребра сетки до правого ребра родительского контейнера.
верхняя часть - Расстояние в пикселях от верхнего края сетки до верхнего края родительского контейнера.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Audio Test Bench | audioPlugin
| audioPluginInterface
| audioPluginParameter
| audioPluginSource
| generateAudioPlugin
| parameterTuner
| validateAudioPlugin
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.