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

Можно разместить 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 функционируйте, чтобы разместить 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. 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. 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

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

Функции

Классы

Похожие темы