Вы можете разместить подключаемые модули 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; % dBProperty является режимом отображения по умолчанию размещенных подключаемых модулей.
Числовые параметры отображаются посредством эвристической интерпретации нормализованных значений параметров и соответствующих отображаемых значений. Режим отображения свойств прост и интуитивно понятен. Однако из-за эвристического отображения нормализованных значений параметров на реальные значения свойств режим отображения свойств может нарушиться для некоторых плагинов. В этом случае следует использовать режим отображения параметров.
В следующем учебном пособии рассматриваются этапы загрузки и настройки внешнего аудиоплагина в режиме отображения свойств.
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