Разместите внешние аудио плагины

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

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

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

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

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

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

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

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

Разместите внешний аудио сменный пример (режим отображения свойства)

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

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

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

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.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',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 для получения информации о поведении отображения о размещенном плагине. Чтобы отобразить ввод и вывод вашего размещенного аудио плагина, создайте объект dsp.TimeScope. Создайте объект loudnessMeter и используйте визуализацию 'EBU Mode', чтобы контролировать громкость, выведенную размещенным плагином. Используйте fileReader, deviceWriter, osc, и hostedPlugin возражает, что вы создали ранее, чтобы обработать аудио.

scope = dsp.TimeScope(...
    'SampleRate',sampleRate,...
    '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, чтобы разместить плагин VST ReaDelay. Если плагин находится в вашей текущей папке, можно задать только имя файла. В противном случае необходимо задать полный путь. В этом примере плагин находится в текущей папке.

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. Use dispParameter(hostedPlugin) to 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 для получения информации о поведении отображения о размещенном плагине. Чтобы отобразить ввод и вывод вашего размещенного аудио плагина, создайте объект dsp.TimeScope. Создайте объект loudnessMeter и используйте визуализацию 'EBU Mode', чтобы контролировать громкость, выведенную размещенным плагином. Используйте fileReader, deviceWriter, osc, и hostedPlugin возражает, что вы создали ранее, чтобы обработать аудио.

scope = dsp.TimeScope(...
    'SampleRate',sampleRate,...
    '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

Смотрите также

Функции

Классы

Похожие темы