主要内容

主机外部音频插件

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

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

Audio Toolbox支持三种与宿主音频插件交互的方式:

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

属性显示模式(默认)

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

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

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

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

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

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
highPassSetting = 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)

您可以在音频流循环中修改属性。控制湿属性的音频流循环,创建audioOscillator系统对象™。使用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对象,并使用“欧洲模式”可视化监控音量输出由托管插件。使用fileReaderdeviceWriterosc,hostedPlugin您先前创建的用于处理音频的对象。

范围= timescope (“SampleRate”sampleRate,...“TimeSpanSource”“属性”...“TimeSpanOverrunAction”“滚动”...“时间间隔”5,...“BufferLength”5 * 2 * sampleRate,...“YLimits”[1]);loudMtr = loudnessMeter (“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 parameterIndex)
normParamValue = 1
paramInfo =结构体字段:DisplayName: 'Wet' DisplayValue: '+0.0' Label: '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。AudioFileReaderaudioDeviceWriter对象分别作为音频流循环的输入和输出。将托管插件的采样率设置为音频文件的采样率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)

您可以在音频流循环中修改参数。控制湿参数你的插件在音频流循环,创建audioOscillator系统对象™。使用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对象,并使用“欧洲模式”可视化监控音量输出由托管插件。使用fileReaderdeviceWriterosc,hostedPlugin您先前创建的用于处理音频的对象。

范围= timescope (“SampleRate”sampleRate,...“TimeSpanSource”“属性”...“TimeSpanOverrunAction”“滚动”...“时间间隔”5,...“BufferLength”5 * 2 * sampleRate,...“YLimits”[1]);loudMtr = loudnessMeter (“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函数在当前文件夹中。这个函数执行一个简化版本的参数扫描,用于创建托管插件的属性显示模式。

函数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(张));oldIndx =我;txtOld = txtNew;结束结束流('%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。”结束情节(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

另请参阅

功能

相关的话题