audioPluginGridLayout

Задайте размещение для пользовательского интерфейса плагина аудио

Описание

пример

gridLayout = audioPluginGridLayout создает объект, который задает сетку размещения для графического пользовательского интерфейса аудиоплагина. Используйте объект сетки размещения плагина, gridLayout, как аргумент для 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' и вектор-строка из положительных целых чисел.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Ширина в пикселях каждого столбца в сетке, заданная как разделенная разделенными запятой парами, состоящая из 'ColumnWidth' и вектор-строка из положительных целых чисел.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Расстояние между строками в пикселях, заданное как разделенная разделенными запятой парами, состоящая из 'RowSpacing' и неотрицательное целое число.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Расстояние между столбцами в пикселях, заданное как разделенная разделенными запятой парами, состоящая из 'ColumnSpacing' и неотрицательное целое число.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Заполнение по внешнему периметру сетки в пикселях, заданное как разделенная разделенными запятой парами, состоящая из 'Padding' и четырехэлементный вектор-строка из неотрицательных целых чисел. Элементы вектора интерпретируются как [слева, снизу, справа, сверху], где:

  • left -- Расстояние в пикселях от левого края сетки до левого края родительского контейнера.

  • bottom -- Расстояние в пикселях от нижнего ребра сетки до нижнего ребра родительского контейнера.

  • right -- Расстояние в пикселях от правого ребра сетки до правого ребра родительского контейнера.

  • верхняя часть - Расстояние в пикселях от верхнего края сетки до верхнего края родительского контейнера.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Расширенные возможности

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.
Введенный в R2019b