实时音频MATLAB
Audio Toolbox™针对实时音频处理进行了优化。audioDeviceReader
,audioDeviceWriter
,audioPlayerRecorder
,dsp。AudioFileReader
,dsp。AudioFileWriter
是为流媒体多通道音频设计的,它们提供了必要的参数,以便您可以在吞吐量和延迟之间进行权衡。
有关实时处理的信息和如何优化算法的提示,请参见音频I/O:缓冲,延迟和吞吐量.
本教程描述如何在MATLAB中实现音频流处理®.它概述了创建开发测试工作台的工作流程,并为工作流程的每个阶段提供了示例。
创建一个开发测试台架
本教程通过四个步骤创建一个开发测试工作台:
构建从测试台架输入和输出音频的对象。
创建一个音频流循环,逐帧处理音频。
添加一个范围来可视化音频流循环的输入和输出。
为音频流循环添加一个处理算法。
本教程还讨论了实时可视化和调优处理算法的工具。
对于处理循环的概述,请考虑下面完成的测试台架。通过本教程的逐步学习,您可以重新创建这个测试工作台。
1.创建输入/输出系统对象年代
您的音频流循环可以从设备或文件读取,也可以写入设备或文件。在本例中,您构建了一个音频流循环,它逐帧地从文件读取音频,并逐帧地将音频写入设备。看到快速入门示例对于可选的输入/输出配置。
创建一个dsp。AudioFileReader
系统对象™并指定一个文件。要减少延迟,请设置SamplesPerFrame
的属性dsp。AudioFileReader
系统对象设置为较小的帧大小。
接下来,创建一个audioDeviceWriter
系统对象,并将其采样速率指定为文件读取器的采样速率。
有关如何使用System对象的更多信息,请参见什么是系统对象?
2.创建音频流循环
音频流循环迭代地处理音频。它是通过:
读取一帧音频信号
处理那帧音频信号
将音频信号帧写入设备或文件
进入下一帧
在本教程中,音频流循环的输入是从文件中读取的。输出被写入设备。
要逐帧读取音频文件,请调用dsp。AudioFileReader
在你的音频流循环,并提供不参数。要逐帧编写音频信号,请调用您的audioDeviceWriter
在您的音频流循环中,使用音频信号作为参数。
所有System对象都有一个释放
函数。作为一种最佳实践,在使用完System对象后释放它,特别是当这些System对象正在与硬件设备(如声卡)通信时。
3.添加范围
有几种可用的范围。两个常见的作用域是timescope
和简介
.本教程使用timescope
将音频信号可视化。
的timescope
系统对象在时域内显示一个音频信号。创建System对象。属性的值可以帮助可视化时间间隔
,BufferLength
,YLimits
属性。要逐帧可视化音频信号,请调用timescope
使用音频信号作为参数的音频流循环中的系统对象。
4.开发处理算法
在大多数应用程序中,您希望在音频流循环中处理音频信号。处理阶段可以是:
音频流循环中的MATLAB代码块
一个单独的函数在您的音频流循环调用
在音频流循环中调用的系统对象
在本教程中,调用反射器
来处理音频流循环中的信号。
创建一个反射器
对象,并指定SampleRate
属性作为文件读取器的采样速率。若要调整混响效果,请为预延迟
而且WetDryMix
属性。若要逐帧对音频信号应用混响效果,请调用反射器
在您的音频流循环中,使用音频信号作为参数。
添加可调谐性
Audio Toolbox用户有几个选项可以向处理算法添加实时可调性。要添加音频流循环的可调性,你可以使用:
的音频测试台-基于ui的练习
audioPlugin
类和大多数音频工具箱系统对象。内置函数——音频工具箱中的函数,用于可视化处理算法的关键方面。
一个定制的用户界面-参见实时参数调优作为一个教程。
许多音频工具箱系统对象包含支持MIDI控件的函数。您可以使用
功能configureMIDI
反射器
将系统对象属性同步到MIDI控件。使用MIDI控件与不具有configureMIDI
功能,请参阅MIDI控制界面.用户数据报协议(UDP) -你可以在MATLAB中使用UDP进行无连接传输。您还可以使用UDP在环境之间接收或传输数据报。可能的应用包括使用MATLAB工具来优化音频处理算法,同时在第三方环境中播放和可视化音频。有关UDP通信的示例应用程序,请参见DAW与MATLAB之间的UDP通信.
快速入门示例
从设备到文件的音频流
这个例子展示了如何使用你的麦克风获取音频信号audioDeviceReader
,执行基本信号处理,并将信号写入使用dsp。AudioFileWriter
.
构造输入和输出对象。使用输入的抽样率作为输出的抽样率。
deviceReader = audioDeviceReader;fileWriter = dsp.AudioFileWriter(SampleRate=deviceReader.SampleRate);
指定音频处理算法。为了简单起见,只增加增益。
Process = @(x) x.*5;
在while循环中执行以下步骤进行连续流处理:
调用您的音频设备阅读器,就像一个没有参数的函数来获取一个输入帧。
在输入帧上执行信号处理操作。
调用你的音频文件编写器像一个函数处理帧作为一个参数。
文件命名为output.wav
默认情况下写入当前文件夹。
disp (“开始信号输入…”)
开始信号输入…
抽搐而toc<5 myssignal = deviceReader();myProcessedSignal = process(myssignal);fileWriter (myProcessedSignal)结束disp (“结束信号输入”)
结束信号输入
发布(deviceReader)发布(fileWriter)