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