您可以在MATLAB中托管VST、VST3和AU插件®通过使用loadAudioPlugin
函数从音频工具箱™。
加载外部音频插件后,通过其主要音频处理算法处理音频。
音频工具箱支持三种与托管音频插件交互的方式:
下面的教程——一个版本的属性显示模式和一个版本的参数显示模式——引导您完成托管外部编写的VST插件的过程,并在MATLAB命令行上与插件交互。您可以从Cockos Incorporated分发的ReaPlugs VST插件套件中托管一个插件。要下载适用于您的系统的ReaPlugs VST FX Suite,请按照“收割者”网站.本教程使用64位Windows平台。的loadAudioPlugin
函数不能加载32位插件。
将显示模式设置为属性使您可以使用标准的点表示法与托管的插件对象交互。例如:
hostedObject。增益= 5;% dB
财产
是托管插件的默认显示模式。
数值参数通过规范化参数值和相应显示值的启发式解释进行映射。属性显示方式简单直观。然而,由于启发式的映射将规范化的参数值转换为真实的属性值,对于某些插件,属性显示模式可能会崩溃。在这种情况下,应该使用参数显示模式。
下面的教程介绍了在属性显示模式下加载和配置外部音频插件的步骤。
1.加载外部音频插件
使用loadAudioPlugin
函数来承载ReaDelay
威仕特插件。如果插件在你的当前文件夹中,你可以只指定文件名。否则,必须指定全路径。在这个例子中,插件在当前文件夹中。缺省情况下,显示模式为property。
hostedPlugin = loadAudioPlugin(“readelay-standalone.dll”)
hostedPlugin = VST插件'ReaDelay (reaplug 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: 20000hz x1_Hipass: 0hz 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.使用托管插件来处理音频
使用托管插件处理音频信号过程
.
audioIn = [1,1];audioOut = process(hostedPlugin,audioIn);
音频插件是为基于可变帧的处理而设计的,这意味着您可以调用过程
连续的不同长度的音频输入帧。托管插件保存持续处理所需的内部状态。要处理从文件中读取并写入音频输出设备的音频信号,请将托管插件置于音频流循环中。使用dsp。AudioFileWriter
和audioDeviceWriter
对象分别作为音频流循环的输入和输出。使用将托管插件的采样率设置为音频文件的采样率setSampleRate
.
fileReader = dsp。AudioFileReader (“Counting-16-44p1-mono-15secs.wav”);sampleRate = fileReader.SampleRate;deviceWriter = audioDeviceWriter(“SampleRate”, sampleRate);setSampleRate (hostedPlugin sampleRate);而~isDone(fileReader) audioIn = fileReader();托管插件需要立体声输入。stereoAudioIn = [audioIn,audioIn];x = process(hostedPlugin,stereoAudioIn);deviceWriter (x);结束发布(fileReader)发布(deviceWriter)
您可以修改音频流循环中的属性。为了控制湿
属性,在音频流循环中创建一个audioOscillator
系统对象™。使用fileReader
,deviceWriter
,hostedPlugin
之前创建用于处理音频的对象。
osc = audio振荡器(的正弦,...“频率”10...“振幅”, 20岁,...“DCOffset”, -20,...“SamplesPerFrame”, fileReader。SamplesPerFrame,...“SampleRate”, sampleRate);而~isDone(fileReader) audioIn = fileReader();controlSignal = osc();hostedPlugin。湿= controlSignal(1); stereoAudioIn = [audioIn,audioIn]; x = process(hostedPlugin,stereoAudioIn); deviceWriter(x);结束发布(fileReader)发布(deviceWriter)
4.分析托管插件
您可以使用Audio Toolbox测量和可视化工具来显示托管插件的行为信息。要显示托管音频插件的输入和输出,请创建一个时间范围。创建一个loudnessMeter
对象,并使用“欧洲模式”
可视化监控承载插件的响度输出。使用fileReader
,deviceWriter
,osc
,hostedPlugin
之前创建用于处理音频的对象。
Scope = timescope(“SampleRate”sampleRate,...“TimeSpanSource”,“属性”,...“TimeSpanOverrunAction”,“滚动”,...“时间间隔”5,...“BufferLength”5 * 2 * sampleRate,...“YLimits”[1]);大声表(“SampleRate”, sampleRate);可视化(loudMtr)而~isDone(fileReader) audioIn = fileReader();controlSignal = osc();hostedPlugin。湿= controlSignal(1); stereoAudioIn = [audioIn,audioIn]; x = process(hostedPlugin,stereoAudioIn); loudMtr(x); scope([x(:,1),audioIn(:,1)]) deviceWriter(x);结束
发布(fileReader)发布(deviceWriter)
将显示模式设置为参数使您能够以最基本的方式与托管插件进行交互:通过设置和获取规范化的参数值。返回的信息getParameter
将规范化的值解释为真实世界的值,如分贝和赫兹。
下面的教程介绍了在参数显示模式下加载和配置外部音频插件的步骤。
1.加载外部音频插件
使用loadAudioPlugin
函数来承载ReaDelay
威仕特插件。如果插件在你的当前文件夹中,你可以只指定文件名。否则,必须指定全路径。在这个例子中,插件在当前文件夹中。
hostedPlugin = loadAudioPlugin(“readelay-standalone.dll”);
缺省情况下,显示模式为property。设置这个控件
财产参数
用于与托管插件的低级交互。
hostedPlugin。这个=“参数”
hostedPlugin = VST plugin 'ReaDelay (ReaPlugs Edition)' 2in, 2out参数值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个参数不显示。查看所有12个参数。
第一行显示插件类型、插件显示名称以及插件的主要音频处理算法的输入和输出通道数量。如果你有一个源插件,输出通道的数量和每帧默认的样本都会显示出来。
缺省情况下,只显示前5个参数。要显示托管插件的所有参数,请单击查看所有12个参数
.
该表提供了参数索引、参数名称、规范化的参数值、显示的参数值和显示的参数值标签。
的归一化参数值总是在[0,1]范围内,通常对应于用户界面(UI)小部件在DAW中的位置或MIDI控件在MIDI控制面上的位置。的参数显示值通过插件内部的未知映射与规范化参数值相关,通常反映插件内部用于处理的值。
2.设置和获取托管插件参数值
你可以使用getParameter
和setParameter
与托管插件的参数交互。使用getParameter
和setParameter
在编程上相当于在UI中移动小部件或在MIDI控制面上移动控件。典型的DAW UI提供参数名、规范化参数值的可视化表示、显示的参数值和显示的参数值标签。
例如,湿
参数的readelay-standalone.dll
有一个规范化的参数值1
的显示参数值+ 0.0
.的湿
参数可能在DAW中显示如下:
与音频工具箱,您可以使用getParameter
返回规范化的参数值和关于单个托管插件参数的附加信息。您可以通过参数索引指定要获取的参数。
parameterIndex = 1;[normParamValue,paramInfo] = getParameter(hostdplugin,parameterIndex)
normParamValue = 1
paramInfo =带字段的结构:DisplayName: 'Wet' DisplayValue: '+0.0'
你可以使用setParameter
设置托管插件的规范化参数值。可以通过参数索引指定要设置的参数。
normParamValue = 0.5;setParameter (hostedPlugin parameterIndex normParamValue)
将规范化参数值设置为0.5相当于将指示器设置为DAW中滑块的中心。
验证的新规范化参数值湿
,使用getParameter
.
parameterIndex = 1;[normParamValue,paramInfo] = getParameter(hostedPlugin,parameterIndex);
的DisplayValue
为湿
参数更新+ 0.0
来-6.0
因为你设置了相应的标准化参数值。显示值和规范化值之间的关系由托管插件内部的未知映射决定。
3.使用托管插件来处理音频
使用托管插件处理音频信号过程
.
audioIn = [1,1];audioOut = process(hostedPlugin,audioIn);
音频插件是为基于可变帧的处理而设计的,这意味着您可以调用过程
连续的不同长度的音频输入帧。托管插件保存持续处理所需的内部状态。要处理从文件中读取并写入音频输出设备的音频信号,请将托管插件置于音频流循环中。使用dsp。AudioFileReader
和audioDeviceWriter
对象分别作为音频流循环的输入和输出。使用将托管插件的采样率设置为音频文件的采样率setSampleRate
.
fileReader = dsp。AudioFileReader (“Counting-16-44p1-mono-15secs.wav”);sampleRate = fileReader.SampleRate;deviceWriter = audioDeviceWriter(“SampleRate”, sampleRate);setSampleRate (hostedPlugin sampleRate);而~isDone(fileReader) audioIn = fileReader();托管插件需要立体声输入。stereoAudioIn = [audioIn,audioIn];x = process(hostedPlugin,stereoAudioIn);deviceWriter (x);结束发布(fileReader)发布(deviceWriter)
您可以修改音频流循环中的参数。为了控制湿
参数,在音频流循环中创建一个audioOscillator
系统对象™。使用fileReader
,deviceWriter
,hostedPlugin
之前创建用于处理音频的对象。
osc = audio振荡器(的正弦,...“频率”10...“振幅”, 0.5,...“DCOffset”, 0.5,...“SamplesPerFrame”, fileReader。SamplesPerFrame,...“SampleRate”, sampleRate);而~isDone(fileReader) audioIn = fileReader();controlSignal = osc();setParameter (hostedPlugin 1 controlSignal (1));stereoAudioIn = [audioIn,audioIn];x = process(hostedPlugin,stereoAudioIn);deviceWriter (x);结束发布(fileReader)发布(deviceWriter)
4.分析托管插件
您可以使用Audio Toolbox测量和可视化工具来显示托管插件的行为信息。要显示托管音频插件的输入和输出,请创建一个时间范围。创建一个loudnessMeter
对象,并使用“欧洲模式”
可视化监控承载插件的响度输出。使用fileReader
,deviceWriter
,osc
,hostedPlugin
之前创建用于处理音频的对象。
Scope = timescope(“SampleRate”sampleRate,...“TimeSpanSource”,“属性”,...“TimeSpanOverrunAction”,“滚动”,...“时间间隔”5,...“BufferLength”5 * 2 * sampleRate,...“YLimits”[1]);大声表(“SampleRate”, sampleRate);可视化(loudMtr)而~isDone(fileReader) audioIn = fileReader();controlSignal = osc();setParameter (hostedPlugin 1 controlSignal (1));stereoAudioIn = [audioIn,audioIn];x = process(hostedPlugin,stereoAudioIn);loudMtr (x);范围([x (: 1) audioIn (: 1)]) deviceWriter (x);结束
发布(fileReader)发布(deviceWriter)
控件也可以与外部编写的音频插件进行图形化交互音频测试台.的音频测试台模仿大多数数字音频工作站常见的默认图形用户界面。
参数显示值通过插件内部的未知映射规则与规范化参数值相关。您可以通过创建一个扫描函数来研究规范化参数值和显示值之间的关系。可以使用扫描函数将参数值映射到其显示的输出。
托管插件的属性显示模式使用类似的方法,使您能够直接与实际(显示的)值交互,而不是规范化的参数值。
保存displayParameterMapping
函数在当前文件夹中。此函数执行用于为托管插件创建属性显示模式的参数扫描的简化版本。
函数displayParameterMapping(hPlugin,prmIndx) x = 0:0.001:1;归一化参数范围[~,prmInfo] = getParameter(hPlugin, prminx);如果isnan (str2double (prmInfo.DisplayValue))%非数字显示-打印相关的标准化参数范围% with stringsetParameter (hPlugin prmIndx 0);[~,prmInfo] = getParameter(hPlugin, prminx);txtOld = prmInfo.DisplayValue;oldIndx = 1;为i = 2: number (x) setParameter(hPlugin,prmIndx,x(i)) [~,prmInfo] = getParameter(hPlugin,prmIndx);txtNew = prmInfo.DisplayValue;如果~ strcmp (txtNew txtOld)流('%s: %g - %g\n'txtOld x (oldIndx) x(张));oldIndx = i;txtOld = txtNew;结束结束流('%s: %g - %g\n'txtOld x (oldIndx) x (i));其他的%数值显示-根据显示的数值绘制标准化参数值%参数值Y = 0(数字(x),1);为i = 1:数值(x) setParameter(hPlugin,prmIndx,x(i)) [~,prmInfo] = getParameter(hPlugin,prmIndx);y(i) = str2double(prmInfo.DisplayValue);结束如果任何(isnan (y))警告(“数字显示中检测到NaN。”)结束情节(x, y)包含(“规范化参数值”) ylabel (['显示参数值(', prmInfo。标签,“)”])标题(prmInfo.DisplayName)结束结束
加载readelay-standalone.dll
插件到MATLAB®。调用displayParameterMapping
函数使用托管插件和参数索引。
hostedPlugin = loadAudioPlugin(“readelay-standalone.dll”);displayParameterMapping (hostedPlugin, 1);
如果你使用displayParameterMapping
函数中带有非数字形参,则关系显示在命令窗口中:
displayParameterMapping (hostedPlugin, 3)
灭:0 ~ 0.499亮:0.5 ~ 1