主要内容

主机外部音频插件

您可以在Matlab中托管VST,VST3和AU插件®通过使用loadAudioPlugin函数的音频工具箱™。

加载外部音频插件后,通过其主要音频处理算法处理音频。

Audio Toolbox启用三种方法可以与托管的音频插件进行交互:

下面的教程(一个版本用于属性显示模式,一个版本用于参数显示模式)将引导您完成托管外部编写的VST插件并在MATLAB命令行中与插件交互的过程。您托管一个插件从ReaPlugs VST插件套件由Cockos Incorporated发布。要下载ReaPlugs VST FX套件,请按照“收割者”网站.本教程中使用了64位Windows平台。这loadAudioPlugin函数无法加载32位插件。

属性显示模式(默认)

将显示模式设置为属性,您可以使用标准点表示法与托管插件对象进行交互。例如:

hostedObject。获得= 5;% D b
财产是托管插件的默认显示模式。

数值参数通过对规范化参数值和相应显示值的启发式解释进行映射。属性显示方式简单直观。然而,由于启发式的映射归一化参数值对实际属性值,属性显示模式可能会分解某些插件。在这种情况下,您应该使用参数显示模式。

主机外部音频插件教程(属性显示模式)

下面的教程将介绍在属性显示模式下加载和配置外部音频插件的步骤。

1.加载外部音频插件

使用loadAudioPlugin函数来托管ReaDelay威仕特插件。如果插件在你的当前文件夹中,你可以只指定文件名。否则,必须指定完整路径。在这个例子中,插件在当前文件夹中。默认情况下,显示模式设置为属性。

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
HIGHPSSOTTING = 120.

可以使用制表符补全来获取枚举属性的可能值列表。

3.使用托管插件来处理音频

使用托管插件处理音频信号过程

audioIn = [1];audioOut =过程(hostedPlugin audioIn);

音频插件专为基于帧帧的处理而设计,这意味着您可以致电过程连续输入不同长度的音频帧。托管插件保存连续处理所需的内部状态。要处理从文件读取的音频信号,然后将其写入音频输出设备,请将托管插件置于音频流循环中。使用dsp。AudioFileWriteraudioDeviceWriter对象分别作为音频流循环的输入和输出。将托管插件的采样率设置为音频文件的采样率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 =过程(hostedPlugin stereoAudioIn);deviceWriter (x);结束发布(FILEREADER)释放(DEVICEWRITER)

您可以修改音频流循环中的属性。控制湿属性的音频流循环,创建纵振镜头系统对象™。使用fileReaderdeviceWriter,hostedPlugin您之前创建的对象以处理音频。

osc = audioOscillator ('正弦'......“频率”,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对象,并使用'ebu mode'可视化以监视托管插件输出的响度。使用fileReaderdeviceWriterosc,hostedPlugin您之前创建的对象以处理音频。

范围= timescope(“SampleRate”sampleRate,......“TimeSpanSource”'财产'......“TimeSpanOverrunAction”“滚动”......“时间间隔”5,......“BufferLength”5 * 2 * sampleRate,......“YLimits”,[ -  1 1]);loudmtr =响度仪(“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”);

默认情况下,显示模式设置为属性。设置这个控件财产参数用于与托管插件的低级交互。

hostedPlugin。这个=“参数”
hostedPlugin = VST plugin 'ReaDelay (ReaPlugs Edition)' 2 in, 2 out显示________________________________ 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]的范围内,并且通常对应于DAW中的用户界面(UI)小部件的位置或MIDI控制表面上的MIDI控制的位置。这参数显示值通过插件内部的未知映射与标准化参数值相关,并且通常反映插件用于处理的内部使用的值。

2.设置并获取托管插件参数值

您可以使用getParametersetParameter与托管插件的参数交互。使用getParametersetParameter在编程上相当于在UI中移动小部件或在MIDI控件表面移动控件。典型的DAW UI提供参数名称、规范化参数值的可视化表示形式、显示的参数值和显示的参数值标签。

例如,湿参数的readelay-standalone.dll有一个标准化的参数值1和显示参数值+ 0.0.这湿参数可能在DAW中显示如下:

使用音频工具箱,您可以使用getParameter返回标准化参数值和关于单个托管插件参数的附加信息。您可以通过参数索引指定要获取的参数。

parameterIndex = 1;[normparamvalue,paraminfo] = getParameter(hostedplugin,paramedIndex)
normParamValue = 1
paramInfo =结构体字段:displayName:'湿'displayValue:'+0.0'标签:'db'

您可以使用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];audioOut =过程(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 =过程(hostedPlugin stereoAudioIn);deviceWriter (x);结束发布(FILEREADER)释放(DEVICEWRITER)

您可以在音频流循环中修改参数。控制湿参数你的插件在音频流循环,创建纵振镜头系统对象™。使用fileReaderdeviceWriter,hostedPlugin您之前创建的对象以处理音频。

osc = audioOscillator ('正弦'......“频率”,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 =过程(hostedPlugin stereoAudioIn);deviceWriter (x);结束发布(FILEREADER)释放(DEVICEWRITER)

4.分析了插件

您可以使用Audio Toolbox测量和可视化工具来显示托管插件的行为信息。要显示托管音频插件的输入和输出,请创建一个时间范围。创建一个loudnessMeter对象,并使用'ebu mode'可视化以监视托管插件输出的响度。使用fileReaderdeviceWriterosc,hostedPlugin您之前创建的对象以处理音频。

范围= timescope(“SampleRate”sampleRate,......“TimeSpanSource”'财产'......“TimeSpanOverrunAction”“滚动”......“时间间隔”5,......“BufferLength”5 * 2 * sampleRate,......“YLimits”,[ -  1 1]);loudmtr =响度仪(“SampleRate”, sampleRate);可视化(loudMtr)~isDone(fileReader) audioIn = fileReader();controlSignal = osc ();setParameter (hostedPlugin 1 controlSignal (1));stereoAudioIn = [audioIn, audioIn];x =过程(hostedPlugin stereoAudioIn);loudMtr (x);范围([x(:,1),AudioIn(:,1)])DeviceWriter(x);结束

发布(FILEREADER)释放(DEVICEWRITER)

图形化交互

您还可以与外部编写的音频插件图形化使用音频测试台上.这音频测试台上模拟大多数数字音频工作站的默认图形用户界面。

启发式的映射

调查参数/属性映射

参数显示值通过插件内部未知的映射规则与规范化参数值相关。您可以通过创建一个扫描函数来研究规范化参数值和显示值之间的关系。您可以使用扫描函数将参数值映射到它们所显示的输出。

托管插件的属性显示模式使用了类似的方法,使您能够直接与真实的(显示的)值交互,而不是标准化的参数值。

保存displayparametermapping.在当前文件夹中的函数。此函数执行用于为托管插件创建属性显示模式的参数Sweeping的简化版本。

函数DisplayParameTermapping(HPLUGIN,PRMINDX)x = 0:0.001:1;%归一化参数范围[〜,prminfo] = getparameter(hplugin,prmindx);如果isnan (str2double (prmInfo.DisplayValue))%非数字显示-打印相关的规范化参数范围百分比与字符串SetParameter(HPLUGIN,PRMINDX,0);[〜,prminfo] = getparameter(hplugin,prmindx);txtold = prminfo.displayvalue;oldindx = 1;i = 2:numel(x) setParameter(hPlugin,prmIndx,x(i)) [~,prmInfo] = getParameter(hPlugin,prmIndx);txtNew = prmInfo.DisplayValue;如果~ strcmp (txtNew txtOld)流('%s: %g - %g\n',txtold,x(oldindx),x(i-1));oldindx = i;txtold = txtnew;结束结束FPRINTF('%s: %g - %g\n'txtOld x (oldIndx) x (i));其他的%数字显示-根据显示绘制规范化参数值%参数值y = 0(元素个数(x) 1);i = 1:numel(x) setParameter(hPlugin,prmIndx,x(i)) [~,prmInfo] = getParameter(hPlugin,prmIndx);y (i) = str2double (prmInfo.DisplayValue);结束如果任何(isnan (y))警告(“在数字显示中发现NaN。”的)结束plot(x,y)xlabel(“归一化参数值”) ylabel (['显示参数值(',prminfo.label,“)”])标题(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

也可以看看

职能

课堂

相关的话题