主要内容

音频I / O:缓冲、延迟和吞吐量

音频工具箱™优化实时流处理。它的输入和输出系统对象有效,低延迟,他们控制所有必要的参数,以便你可以权衡之间的吞吐量和延迟。

本教程描述如何用MATLAB®软件实现实时处理。本教程介绍关键术语和基本技术优化流处理算法。更详细的技术描述和概念,看到音频I / O系统的文档对象本教程中使用。

在本教程中介绍的概念描述的系统对象在MATLAB环境中。相同的概念可以应用到相应模块的仿真软件金宝app®环境。

输入音频流

获得一个音频流从一个文件中,使用dsp.AudioFileReader系统对象™。获取设备的音频流,使用audioDeviceReader系统对象。

这张图和描述表明当收购monochannel信号与数据流audioDeviceReader系统对象。

配置

  • 你的属性audioDeviceReader指定驱动程序,设备(声卡),采样率,比特深度、缓冲区大小,通道之间的映射你的设备的输入通道和列输出audioDeviceReader对象。你的司机一旦对象沟通这些规范设置

实时处理循环

  1. 拿起麦克风的声音和将一个连续的电信号发送给你的声卡。

  2. 声卡的采样率进行模拟数字转换,期间指定的缓冲区大小,和位深度配置。

  3. 模拟-数字转换器写音频样本到声卡缓冲区。如果缓冲区满了,新的样品。这些被称为样本超支

  4. audioDeviceReader使用驱动程序将最古老的帧从声卡缓冲迭代。

输出音频流

发送一个音频流到一个文件中,使用dsp.AudioFileWriter系统对象。发送设备的音频流,使用audioDeviceWriter系统对象。

这张图和描述表明当玩monochannel信号与数据流audioDeviceWriter系统对象。

配置

  • 你的属性audioDeviceWriter指定驱动程序,设备(声卡),采样率,比特深度、缓冲区大小,通道之间的映射你的设备的输入输出通道和列audioDeviceWriter对象。你的司机一旦对象沟通这些规范设置

实时处理循环

  1. 处理阶段通过可变长度的一个框架audioDeviceWriter系统对象。

  2. audioDeviceWriter将帧发送到声卡的缓冲区。

  3. 的声卡拉最古老的帧缓冲区并进行数模转换。声卡将模拟块发送给演讲者。如果缓冲区为空时声卡试图拉,声卡输出地区的沉默。这被称为暗流

同步音频和设备

同时读和写一个音频设备,使用audioPlayerRecorder系统对象。

这个图和描述显示数据流时的播放和录制monochannel信号audioPlayerRecorder系统对象。

配置

  • 你的属性audioPlayerRecorder指定设备(声卡),采样率,比特深度、缓冲区大小,通道设备和对象之间的映射。你的司机一旦对象沟通这些规范设置

实时处理循环

  1. 拿起麦克风的声音和将一个连续的电信号发送给你的声卡。同时,演讲者具有模拟块从声卡接收。

  2. 获得的声卡执行模拟数字转换音频信号和写数字块输入缓冲区。如果输入缓冲区已满,新样品。同时,声卡拉最古老的帧的输出缓冲区和执行接下来的数模转换的音频播放。如果输出缓冲区为空时声卡试图检索数据,声卡输出地区的沉默。

  3. audioPlayerRecorder对象返回了音频信号在MATLAB环境中进行处理。同时,音频播放指定的作为参数audioPlayerRecorder下一个I / O周期的回放。

术语和技术来优化性能

信号下降

  • 暗流沉默是指输出信号。输出信号发生沉默如果设备缓冲区为空时是数模转换的时候了。这个结果在MATLAB处理循环不供应样品在声卡率的要求。样品的数量短货返回,当你打电话给你的audioPlayerRecorderaudioDeviceWriter对象。

  • 泛滥是指输入信号下降。输入信号下降发生在加工阶段不跟上样本的采集。样品的数量被返回,当你打电话给你的audioPlayerRecorderaudioDeviceReader对象。

如果你遇到溢出或短货,试着提高你的I / O系统中的一个或多个下列方法:

  1. 确定当溢出或短货发生。如果它发生在最初几个迭代,考虑调用setupImpl之前在您的系统对象实时处理的循环是必需的。您还可以运行虚拟数据的I / O系统开始真正的前几帧处理。有关更多信息,请参见测量流媒体实时音频算法的性能

  2. 如果您使用的是Windows声音处理软件驱动程序®平台,考虑切换到WASAPI或ASIO™司机。ASIO司机最少的开销。如果您使用的是ASIO司机,确保匹配当前帧大小在MATLAB ASIO缓冲区大小。您可以使用asiosettings从MATLAB打开ASIO偏好UI。

  3. 如果你可以添加更多的延迟您的应用程序,考虑增加对象的缓冲区大小。默认情况下,数据的缓冲区大小是当前帧大小由音频处理对象。

  4. 如果你可以减少信号的分辨率,可以考虑降低采样率。

  5. 关闭所有不必要的流程在您的机器上,比如邮件检查和文件同步工具。这些过程可以异步请求CPU时间通过中断和干扰音频处理循环。

  6. 为了最大化性能,从你的实时循环删除所有策划和可视化。如果你需要一个可视化处理循环更新,使用DSP系统工具箱™等范围timescope,简介,或dsp.ArrayPlot。按照1中列出的建议设置和跑前你的范围。如果你需要自定义图形或处理回调的循环,使用drawnow命令并指定一个有限的更新率优化事件队列。

  7. 如果处理循环算法重,试分析你的循环查找瓶颈,然后采用适当的措施:

    • 取代手写代码与MATLAB的特性,优化了速度。

    • 遵循最佳实践的性能:技术来提高性能

    • 使用MATLAB生成可执行文件(墨西哥人文件)MATLAB编码器™可能会导致更快的执行。看到消除干扰的语气从音频流了一个例子。

      你也可以生成独立的可执行文件(EXE文件)。看到为参数音频均衡器生成独立的可执行文件了一个例子。

    • 如果你正在考虑把你的算法变成一个威仕特插件,然后试着运行它在MATLAB作为威仕特插件。威仕特插件生成使用C代码生成技术在引擎盖下,并在MATLAB运行生成的威仕特插件可能会导致更快的比原来的MATLAB代码执行。看到在MATLAB音频插件主机外部音频插件学习如何设计,生成,然后举办一个威仕特插件。

延迟

  • 输出延迟测量之间的时间延迟的时间代音频帧在MATLAB和音频的时间通过扬声器听到。

  • 输入延迟测量时间之间的时间延迟,音频输入声卡和时间框架是输出的处理阶段。

如果属性和帧大小保持一致,的比例输入延迟输出延迟调用一个之间是一致的吗audioPlayerRecorder对象。

减少延迟,您可以:

  1. 优化处理阶段。如果你已经达到了一个峰值算法处理阶段,MATLAB代码编译C代码使用MATLAB编码器可能会导致更快的执行。

  2. 提高采样率。

  3. 减少帧大小。

对于一个教程测量系统的往返延迟,明白了测量音频延迟

另请参阅

||||||||||

相关的话题