Хост внешних аудиоплагинов

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

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

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

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

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

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

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

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

Хост Внешнего Аудио Плагина Руководства (Режим Отображения Свойств)

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

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

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

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

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

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)

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

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

Хост Внешнего Аудио Плагина Руководства (Режим Параметра)

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

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

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

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

По умолчанию для режима отображения задано значение свойства. Установите 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. The 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 эквивалентна установке индикатора в центр ползунка в ДАУ.

Чтобы проверить новое нормированное значение параметров для Wet, использовать getParameter.

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

The 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. Этот 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

См. также

Функции

Классы

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте