Можно разместить 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