exponenta event banner

Внешние аудиоплагины хоста

Вы можете разместить подключаемые модули VST, VST3 и AU в MATLAB ® с помощью loadAudioPlugin функция из Audio Toolbox™.

После загрузки внешнего аудиоплагина, вы обрабатываете аудио через его основной алгоритм обработки аудио.

Audio Toolbox предоставляет три способа взаимодействия с размещенным аудиоплагином:

Следующие учебные пособия - одна версия для режима отображения свойств и одна версия для режима отображения параметров - проводят вас через процесс размещения внешнего разработанного плагина VST и взаимодействия с плагином в командной строке MATLAB. Вы размещаете плагин из набора плагинов ReaPlugs VST, распространяемых компанией Cokos Incorporated. Чтобы загрузить ReaPlugs VST FX Suite для вашей системы, следуйте инструкциям на сайте REAPER. В этом руководстве используется 64-разрядная платформа Windows. loadAudioPlugin функция не может загрузить 32-разрядные подключаемые модули.

Режим отображения свойств (по умолчанию)

Установка для режима отображения значения property позволяет взаимодействовать с размещенным объектом плагина с помощью стандартной точечной нотации. Например:

hostedObject.Gain = 5; % dB
Property является режимом отображения по умолчанию размещенных подключаемых модулей.

Числовые параметры отображаются посредством эвристической интерпретации нормализованных значений параметров и соответствующих отображаемых значений. Режим отображения свойств прост и интуитивно понятен. Однако из-за эвристического отображения нормализованных значений параметров на реальные значения свойств режим отображения свойств может нарушиться для некоторых плагинов. В этом случае следует использовать режим отображения параметров.

Руководство по внешним аудиоплагинам хоста (режим отображения свойств)

В следующем учебном пособии рассматриваются этапы загрузки и настройки внешнего аудиоплагина в режиме отображения свойств.

1. Загрузить внешний аудиоплагин

Используйте loadAudioPlugin для размещения функции ReaDelay Подключаемый модуль VST. Если подключаемый модуль находится в текущей папке, можно указать только имя файла. В противном случае необходимо указать полный путь. В этом примере подключаемый модуль находится в текущей папке. По умолчанию для режима отображения установлено значение property.

hostedPlugin = loadAudioPlugin('readelay-standalone.dll')
hostedPlugin = 
  VST plugin 'ReaDelay (ReaPlugs Edition)'  2 in, 2 out

               Wet: 0 dB
               Dry: 0 dB
        x1_Enabled: 'ON'
       x1_Length_4: 0 ms
       x1_Length_5: 4 8N
       x1_Feedback: -Inf dB
        x1_Lowpass: 20000 Hz
         x1_Hipass: 0 Hz
     x1_Resolution: 24 bits
    x1_StereoWidth: 1
         x1_Volume: 0 dB
            x1_Pan: 0 %

В первой строке отображается тип плагина, отображаемое имя плагина, а также количество входных и выходных каналов для основного алгоритма обработки звука плагина. При размещении подключаемого модуля источника отображается количество выходных каналов и выборки по умолчанию для каждого кадра.

По умолчанию отображаются все свойства.

2. Настройка значений свойств размещенного подключаемого модуля

Вы можете взаимодействовать со свойствами размещенного плагина с помощью точечной нотации. Если перейти выше или ниже допустимого диапазона свойства, появится сообщение об ошибке с указанием допустимых границ.

hostedPlugin.x1_Hipass = 120;
highPassSetting = hostedPlugin.x1_Hipass
highPassSetting = 120

Для получения списка возможных значений перечисляемых свойств можно использовать функцию заполнения табуляцией.

3. Использование размещенного подключаемого модуля для обработки звука

Для обработки звукового сигнала с помощью подключаемого модуля process.

audioIn = [1,1];
audioOut = process(hostedPlugin,audioIn);

Аудиоплагины предназначены для обработки на основе переменных кадров, что означает возможность вызова process с последовательными кадрами звукового ввода разной длины. Размещенный плагин сохраняет внутренние состояния, необходимые для непрерывной обработки. Чтобы обработать звуковой сигнал, считанный из файла и записанный на устройство вывода звука, поместите размещенный плагин в цикл аудиопотока. Использовать dsp.AudioFileWriter и audioDeviceWriter объекты как вход и выход в цикл аудиопотока соответственно. Установите частоту дискретизации размещенного подключаемого модуля на частоту дискретизации аудиофайла с помощью setSampleRate.

fileReader = dsp.AudioFileReader('Counting-16-44p1-mono-15secs.wav');
sampleRate = fileReader.SampleRate;

deviceWriter = audioDeviceWriter('SampleRate',sampleRate);
setSampleRate(hostedPlugin,sampleRate);

while ~isDone(fileReader)
    audioIn = fileReader();
    
    % The hosted plugin requires a stereo input.
    stereoAudioIn = [audioIn,audioIn];
    
    x = process(hostedPlugin,stereoAudioIn);
    
    deviceWriter(x);
end

release(fileReader)
release(deviceWriter)

Можно изменить свойства в цикле аудиопотока. Для управления Wet свойство вашего плагина в цикле аудиопотока, создайте audioOscillator object™ системы. Используйте fileReader, deviceWriter, и hostedPlugin объекты, созданные ранее для обработки звука.

osc = audioOscillator('sine', ...
    'Frequency',10, ...
    'Amplitude',20, ...
    'DCOffset',-20, ...
    'SamplesPerFrame',fileReader.SamplesPerFrame, ...
    'SampleRate',sampleRate);

while ~isDone(fileReader)
    audioIn = fileReader();
    
    controlSignal = osc();
    hostedPlugin.Wet = controlSignal(1);
    
    stereoAudioIn = [audioIn,audioIn];
    x = process(hostedPlugin,stereoAudioIn);
    deviceWriter(x);
end

release(fileReader)
release(deviceWriter)

4. Анализ размещенного подключаемого модуля

Для отображения информации о поведении размещенного подключаемого модуля можно использовать инструменты измерения и визуализации Audio Toolbox. Чтобы отобразить входные и выходные данные размещенного аудиоплагина, создайте область времени. Создать loudnessMeter объект и используйте 'EBU Mode' визуализация для мониторинга громкости, выводимой размещенным плагином. Используйте fileReader, deviceWriter, osc, и hostedPlugin объекты, созданные ранее для обработки звука.

scope = timescope('SampleRate',sampleRate, ...
    'TimeSpanSource','property', ...
    'TimeSpanOverrunAction','scroll', ...
    'TimeSpan',5, ...
    'BufferLength',5*2*sampleRate, ...
    'YLimits',[-1 1]);

loudMtr = loudnessMeter('SampleRate',sampleRate);
visualize(loudMtr)

while ~isDone(fileReader)
    audioIn = fileReader();
    
    controlSignal = osc();
    hostedPlugin.Wet = controlSignal(1);
    
    stereoAudioIn = [audioIn,audioIn];
    x = process(hostedPlugin,stereoAudioIn);
    
    loudMtr(x);
    scope([x(:,1),audioIn(:,1)])
    
    deviceWriter(x);
end

release(fileReader)
release(deviceWriter)

Режим отображения параметров

Установка режима отображения в значение parameter позволяет взаимодействовать с размещенным плагином наиболее простым способом: путем установки и получения нормализованных значений параметров. Можно использовать информацию, дополнительно возвращенную getParameter для интерпретации нормализованных значений как реальных значений, таких как децибелы и герц.

Руководство по внешнему аудиоплагину хоста (режим параметров)

В следующем учебном пособии рассматриваются этапы загрузки и настройки внешнего аудиоплагина в режиме отображения параметров.

1. Загрузить внешний аудиоплагин

Используйте loadAudioPlugin для размещения функции ReaDelay Подключаемый модуль VST. Если подключаемый модуль находится в текущей папке, можно указать только имя файла. В противном случае необходимо указать полный путь. В этом примере подключаемый модуль находится в текущей папке.

hostedPlugin = loadAudioPlugin('readelay-standalone.dll');

По умолчанию для режима отображения установлено значение property. Установите DisplayMode свойство для Parameters для низкоуровневого взаимодействия с размещенным плагином.

hostedPlugin.DisplayMode = 'Parameters'
hostedPlugin = 
  VST plugin 'ReaDelay (ReaPlugs Edition)'  2 in, 2 out

          Parameter    Value    Display
        ________________________________
     1          Wet:   1.0000   +0.0 dB
     2          Dry:   1.0000   +0.0 dB
     3   1: Enabled:   1.0000     ON   
     4    1: Length:   0.0000    0.0 ms
     5    1: Length:   0.0156   4.00 8N
   7 parameters not displayed. See all 12 params.

В первой строке отображается тип плагина, отображаемое имя плагина, а также количество входных и выходных каналов для основного алгоритма обработки звука плагина. При размещении подключаемого модуля источника отображается количество выходных каналов и выборки по умолчанию для каждого кадра.

По умолчанию отображаются только первые пять параметров. Чтобы отобразить все параметры размещенного подключаемого модуля, щелкните See all 12 params.

В таблице представлены индекс параметра, имя параметра, нормализованное значение параметра, отображаемое значение параметра и метка отображаемого значения параметра.

Нормализованное значение параметра всегда находится в диапазоне [0,1] и обычно соответствует положению графического элемента пользовательского интерфейса (UI) в DAW или положению элемента управления MIDI на поверхности управления MIDI. Отображаемое значение параметра связано с нормализованным значением параметра неизвестным отображением, внутренним для плагина, и обычно отражает значение, используемое внутри плагина для обработки.

2. Установка и получение значений параметров размещенного подключаемого модуля

Вы можете использовать getParameter и setParameter для взаимодействия с параметрами размещенного плагина. Используя getParameter и setParameter - программный эквивалент движущихся виджетов в интерфейсе пользователя или элементах управления на поверхности управления MIDI. Типичный пользовательский интерфейс DAW предоставляет имя параметра, визуальное представление нормализованного значения параметра, отображаемого значения параметра и метки отображаемого значения параметра.

Например, Wet параметр readelay-standalone.dll имеет нормированное значение параметра, равное 1 и значение параметра отображения +0.0. Wet параметр может отображаться в DAW следующим образом:

С помощью Audio Toolbox можно использовать getParameter для возврата нормализованного значения параметра и дополнительной информации об одном размещенном параметре плагина. Можно указать, какой параметр получить по индексу параметра.

parameterIndex = 1;
[normParamValue,paramInfo] = getParameter(hostedPlugin,parameterIndex)
normParamValue = 1
paramInfo = struct with fields:
     DisplayName: 'Wet'
    DisplayValue: '+0.0'
           Label: 'dB'

Вы можете использовать setParameter для установки значения нормализованного параметра размещенного подключаемого модуля. Можно указать, какой параметр задать по его индексу.

normParamValue = 0.5;
setParameter(hostedPlugin,parameterIndex,normParamValue)

Установка значения нормализованного параметра 0,5 эквивалентна установке индикатора в центр ползунка в DAW.

Проверка нового значения нормализованного параметра для Wet, использовать getParameter.

parameterIndex = 1;
[normParamValue,paramInfo] = getParameter(hostedPlugin,parameterIndex);

DisplayValue для Wet обновления параметров из +0.0 кому -6.0 потому что устанавливается соответствующее нормализованное значение параметра. Взаимосвязь между отображаемым значением и нормализованным значением определяется неизвестным отображением, которое является внутренним для размещенного подключаемого модуля.

3. Использование размещенного подключаемого модуля для обработки звука

Для обработки звукового сигнала с помощью подключаемого модуля process.

audioIn = [1,1];
audioOut = process(hostedPlugin,audioIn);

Аудиоплагины предназначены для обработки на основе переменных кадров, что означает возможность вызова process с последовательными кадрами звукового ввода разной длины. Размещенный плагин сохраняет внутренние состояния, необходимые для непрерывной обработки. Чтобы обработать звуковой сигнал, считанный из файла и записанный на устройство вывода звука, поместите размещенный плагин в цикл аудиопотока. Использовать dsp.AudioFileReader и audioDeviceWriter объекты как вход и выход в цикл аудиопотока соответственно. Установите частоту дискретизации размещенного подключаемого модуля на частоту дискретизации аудиофайла с помощью setSampleRate.

fileReader = dsp.AudioFileReader('Counting-16-44p1-mono-15secs.wav');
sampleRate = fileReader.SampleRate;

deviceWriter = audioDeviceWriter('SampleRate',sampleRate);
setSampleRate(hostedPlugin,sampleRate);

while ~isDone(fileReader)
    audioIn = fileReader();
    
    % The hosted plugin requires a stereo input.
    stereoAudioIn = [audioIn,audioIn];
    
    x = process(hostedPlugin,stereoAudioIn);
    
    deviceWriter(x);
end

release(fileReader)
release(deviceWriter)

Можно изменить параметры в цикле аудиопотока. Для управления Wet параметра вашего плагина в цикле аудиопотока, создайте audioOscillator object™ системы. Используйте fileReader, deviceWriter, и hostedPlugin объекты, созданные ранее для обработки звука.

osc = audioOscillator('sine', ...
    'Frequency',10, ...
    'Amplitude',0.5, ...
    'DCOffset',0.5, ...
    'SamplesPerFrame',fileReader.SamplesPerFrame, ...
    'SampleRate',sampleRate);

while ~isDone(fileReader)
    audioIn = fileReader();
    
    controlSignal = osc();
    setParameter(hostedPlugin,1,controlSignal(1));
    
    stereoAudioIn = [audioIn,audioIn];
    x = process(hostedPlugin,stereoAudioIn);
    deviceWriter(x);
end

release(fileReader)
release(deviceWriter)

4. Анализ размещенного подключаемого модуля

Для отображения информации о поведении размещенного подключаемого модуля можно использовать инструменты измерения и визуализации Audio Toolbox. Чтобы отобразить входные и выходные данные размещенного аудиоплагина, создайте область времени. Создать loudnessMeter объект и используйте 'EBU Mode' визуализация для мониторинга громкости, выводимой размещенным плагином. Используйте fileReader, deviceWriter, osc, и hostedPlugin объекты, созданные ранее для обработки звука.

scope = timescope('SampleRate',sampleRate, ...
    'TimeSpanSource','property', ...
    'TimeSpanOverrunAction','scroll', ...
    'TimeSpan',5, ...
    'BufferLength',5*2*sampleRate, ...
    'YLimits',[-1 1]);

loudMtr = loudnessMeter('SampleRate',sampleRate);
visualize(loudMtr)

while ~isDone(fileReader)
    audioIn = fileReader();
    
    controlSignal = osc();
    setParameter(hostedPlugin,1,controlSignal(1));
    
    stereoAudioIn = [audioIn,audioIn];
    x = process(hostedPlugin,stereoAudioIn);
    
    loudMtr(x);
    scope([x(:,1),audioIn(:,1)])
    
    deviceWriter(x);
end

release(fileReader)
release(deviceWriter)

Графическое взаимодействие

Вы также можете взаимодействовать с аудиоплагином, созданным извне, графически с помощью Audio Test Bench. Звуковой стенд имитирует графический интерфейс пользователя по умолчанию, общий для большинства цифровых звуковых рабочих станций.

Эвристическое отображение

Исследовать сопоставление параметров и свойств

Отображаемые значения параметров связаны с нормализованными значениями параметров по неизвестным правилам сопоставления, внутренним для подключаемого модуля. Можно исследовать взаимосвязь между нормализованными значениями параметров и отображаемыми значениями, создав функцию сдвига. Функцию подметки можно использовать для отображения значений параметров на отображаемые выходные данные.

В режиме отображения свойств подключаемых модулей используется аналогичный подход, позволяющий напрямую взаимодействовать с реальными (отображаемыми) значениями вместо нормализованных значений параметров.

Сохранить displayParameterMapping в текущей папке. Эта функция выполняет упрощенную версию сдвига параметров, используемого для создания режима отображения свойств для размещенных подключаемых модулей.

function displayParameterMapping(hPlugin,prmIndx)
x = 0:0.001:1; % Normalized parameter range

[~,prmInfo] = getParameter(hPlugin,prmIndx);
if isnan(str2double(prmInfo.DisplayValue))
    % Non-Numeric Displays - prints normalized parameter range associated
    % with string
    setParameter(hPlugin,prmIndx,0);
    [~,prmInfo] = getParameter(hPlugin,prmIndx);
    txtOld = prmInfo.DisplayValue;
    oldIndx = 1;
    
    for i = 2:numel(x)
        setParameter(hPlugin,prmIndx,x(i))
        [~,prmInfo] = getParameter(hPlugin,prmIndx);
        txtNew = prmInfo.DisplayValue;
        if ~strcmp(txtNew,txtOld)
            fprintf('%s: %g - %g\n',txtOld, x(oldIndx),x(i-1));
            oldIndx = i;
            txtOld = txtNew;
        end
    end
    fprintf('%s: %g - %g\n',txtOld, x(oldIndx),x(i));
else
    % Numeric Displays - plots normalized parameter value against displayed
    % parameter value
    y = zeros(numel(x),1);
    for i = 1:numel(x)
        setParameter(hPlugin,prmIndx,x(i))
        [~,prmInfo] = getParameter(hPlugin,prmIndx);
        y(i) = str2double(prmInfo.DisplayValue);
    end
    if any(isnan(y))
        warning('NaN detected in numeric display.')
    end
    plot(x,y)
    xlabel('Normalized Parameter Value')
    ylabel(['Displayed Parameter Value (',prmInfo.Label,')'])
    title(prmInfo.DisplayName)   
end

end

Загрузить readelay-standalone.dll подключаемый модуль в MATLAB ®. Позвоните вdisplayParameterMapping с размещенным плагином и индексом параметров.

hostedPlugin = loadAudioPlugin('readelay-standalone.dll');
displayParameterMapping(hostedPlugin,1);

Если вы используете displayParameterMapping функция с нечисловым параметром, связь отображается в окне команд:

displayParameterMapping(hostedPlugin,3)
OFF: 0 - 0.499
ON: 0.5 - 1

См. также

Функции

Классы

Связанные темы