主要内容

实时音频MATLAB

音频工具箱™是实时音频处理优化。audioDeviceReaderaudioDeviceWriteraudioPlayerRecorderdsp。AudioFileReader,dsp。AudioFileWriter是为多声道音频流设计的,它们提供了必要的参数,以便您可以在吞吐量和延迟之间进行权衡。

有关实时处理和如何优化算法的提示的信息,请参见音频I/O:缓冲,延迟和吞吐量

本教程描述如何在MATLAB中实现音频流处理®.它概述了创建开发测试平台的工作流程,并为工作流程的每个阶段提供了示例。

创建一个开发测试平台

本教程分四个步骤创建一个开发测试平台:

  1. 构建用于从测试台中输入和输出音频的对象。

  2. 创建一个音频流循环,逐帧处理音频。

  3. 添加一个范围来可视化音频流循环的输入和输出。

  4. 为音频流循环添加一个处理算法。

本教程还讨论用于实时可视化和调整处理算法的工具。

对于处理循环的概述,请考虑下面完成的测试平台。您可以通过逐步学习本教程来重新创建这个测试平台。

完成测试台代码

1.创建输入/输出系统对象年代

音频流循环可以从设备或文件读取,也可以写入设备或文件。在本例中,您构建了一个音频流循环,从文件中逐帧读取音频,并逐帧将音频写入设备。看到快速入门示例用于另一种输入/输出配置。

创建一个dsp。AudioFileReader系统对象™并指定一个文件。要减少延迟,请设置SamplesPerFrame的属性dsp。AudioFileReader系统对象的帧大小较小。

接下来,创建一个audioDeviceWriter对象,并将其采样率指定为文件读取器的采样率。

有关如何使用系统对象的详细信息,请参见什么是系统对象?

查看示例代码

2.创建音频流循环

音频流循环迭代地处理音频。它通过以下方式实现:

  • 读取一帧音频信号

  • 处理这一帧音频信号

  • 将音频信号帧写入设备或文件

  • 看下一帧

在本教程中,音频流循环的输入是从文件中读取的。输出被写入设备。

要逐帧读取音频文件,请调用您的dsp。AudioFileReader在你的音频流循环中,并且不提供参数。要逐帧写入音频信号,请调用您的audioDeviceWriter在以音频信号作为参数的音频流循环中。

查看示例代码

所有System对象都有一个释放函数。作为最佳实践,在使用后释放System对象,特别是当这些System对象与声卡等硬件设备通信时。

3.添加范围

有几种可用的作用域。两个常见的作用域是timescope简介.本教程使用timescope使音频信号形象化。

timescope系统对象在时域内显示音频信号。创建System对象。属性的值,以帮助可视化时间间隔BufferLength,YLimits属性。若要逐帧可视化音频信号,请调用timescope在音频流循环中使用音频信号作为参数的系统对象。

查看示例代码

4.开发处理算法

在大多数应用程序中,您希望在音频流循环中处理音频信号。处理阶段可以是:

  • 音频流循环中的MATLAB代码块

  • 在音频流循环中调用的单独函数

  • 在音频流循环中调用的System对象

在本教程中,您将调用反射器在音频流循环中处理信号。

创建一个反射器对象,并指定SampleRate属性作为文件读取器的采样率。要调整混响效果,请为预延迟而且WetDryMix属性。若要逐帧将混响效果应用于音频信号,请调用反射器在以音频信号作为参数的音频流循环中。

查看示例代码

添加可调谐性

音频工具箱用户有几个选项可以向处理算法添加实时可调性。为音频流循环添加可调性,您可以使用:

  • 音频测试台基于ui的练习audioPlugin类和大多数音频工具箱系统对象。

  • 内置函数-音频工具箱中的函数,用于可视化处理算法的关键方面。

  • 定制的用户界面-参见实时参数调优作为教程。

  • MIDI控制器-许多音频工具箱系统对象包括支持MIDI控件的函数。金宝app您可以使用configureMIDI反射器将系统对象属性同步到MIDI控件。属性不具有的系统对象使用MIDI控件configureMIDI功能,请参阅MIDI控制面接口

  • 用户数据报协议(UDP) -您可以在MATLAB中使用UDP进行无连接传输。您还可以使用UDP在环境之间接收或传输数据报。可能的应用包括使用MATLAB工具来调整音频处理算法,同时在第三方环境中播放和可视化音频。有关UDP通信的示例应用,请参见基于UDP的DAW与MATLAB通信

快速入门示例

从设备到文件的音频流

这个例子展示了如何使用麦克风获取音频信号audioDeviceReader,执行基本信号处理,并将信号写入文件使用dsp。AudioFileWriter

构造输入和输出对象。使用输入的抽样率作为输出的抽样率。

deviceReader = audioDeviceReader;fileWriter = dsp.AudioFileWriter(SampleRate=deviceReader.SampleRate);

指定音频处理算法。为了简单起见,只增加增益。

进程= @(x) x.*5;

将以下步骤放入while循环中进行连续流处理:

  1. 调用您的音频设备阅读器,就像一个没有参数的函数,以获取一个输入帧。

  2. 在输入帧上执行信号处理操作。

  3. 像调用函数一样调用音频文件写入器,并将已处理的帧作为参数。

文件被命名为output.wav并默认写入当前文件夹。

disp (开始信号输入…
开始信号输入…
抽搐toc<5 myssignal = deviceReader();myProcessedSignal = process(mySignal);fileWriter (myProcessedSignal)结束disp (“结束信号输入”
信号输入
发布(deviceReader)发布(fileWriter)

相关的话题