主要内容

audioPlayerRecorder

使用音频设备同时播放和记录

描述

audioPlayerRecorder系统对象™使用计算机的音频设备读取和写入音频样本。使用audioPlayerRecorder,您必须有一个音频设备和驱动程序,能够同时播放和记录。

看到音频I/O:缓冲、延迟和吞吐量有关数据流的详细说明。

同时播放和录制:

  1. 创建audioPlayerRecorder对象,并设置其属性。

  2. 使用参数调用对象,就像调用函数一样。

要了解更多关于System对象如何工作的信息,请参见什么是系统对象?

创建

描述

playRec= audioPlayerRecorder返回一个System对象,playRec,它将音频样本播放到音频设备,并实时记录来自同一音频设备的样本。

playRec= audioPlayerRecorder (sampleRateValue设置SampleRate财产sampleRateValue

playRec= audioPlayerRecorder (___名称,值每个属性集的名字到指定的价值.未指定的属性具有默认值。

例子:playRec = audioPlayerRecorder(48000,'BitDepth','8位整数')创建一个System对象,playRec,它的采样率为48 kHz,深度为8位整数。

属性

全部展开

除非另有说明,属性是nontunable,这意味着您不能在调用对象之后更改它们的值。对象在调用时锁定,而释放函数打开它们。

如果一个属性是可调,您可以随时更改它的值。

有关更改属性值的更多信息,请参见在MATLAB中使用系统对象进行系统设计

用于播放和记录音频数据的设备,指定为字符向量或字符串。该对象仅支持启用同步播金宝app放和录音(全双工模式)的设备。使用getAudioDevices列出可用设备。

金宝app支持驱动程序audioPlayerRecorder是特定于平台的:

  • 窗户®——ASIO™

  • Mac——CoreAudio

  • Linux®——ALSA

请注意

只有当默认音频设备支持全双工模式时,它才是您机器的默认设备。金宝app如果您的机器的默认音频设备不支持全双工模式,金宝appaudioPlayerRecorder指定它检测到的第一个能够使用全双工模式的可用设备为默认设备。使用信息方法获取与您的audioPlayerRecorder对象。

数据类型:字符|字符串

设备用来记录和播放音频数据的采样率,Hz,指定为一个正整数。的范围SampleRate这取决于你的音频硬件。

数据类型:|

设备使用的数据类型,指定为字符向量或字符串。

数据类型:字符|字符串

选项支持可变的帧大小金宝app,指定为真正的

  • ——如果audioPlayerRecorder对象被锁定时,每次调用的输入必须具有相同的帧大小。音频设备的缓冲区大小与输入帧大小相同。如果你在Windows上使用这个对象,打开ASIO UI设置声卡缓冲区为帧大小值。

  • 真正的——如果audioPlayerRecorder对象被锁定时,输入帧的大小可以在每次调用时改变。属性指定音频设备的缓冲区大小BufferSize财产。

要最小化延迟,请设置金宝appSupportVariableSize.如果您的音频系统需要可变大小的输入,请设置金宝appSupportVariableSize真正的

数据类型:逻辑

音频设备的缓冲区大小,指定为正整数。

请注意

如果您在Windows机器上使用该对象,请使用asiosettings将声卡缓冲区大小设置为BufferSize你的价值audioPlayerRecorder系统对象。

依赖关系

若要启用此属性,请设置金宝appSupportVariableSize真正的

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

播放数据的列和输出设备的通道之间的映射,指定为标量或有效通道索引的向量。此属性的默认值为[],这意味着使用默认的通道映射。

请注意

要确保立体声设备的单声道输出只有一个通道,请使用默认值PlayerChannelMapping设置并提供一个立体声信号,其中一个通道都是零。

例子:outputLeftOnly = [x(:,1) 0 (size(x,1),1)];

例子:outputRightOnly = [zeros(size(x,1),1) x(:,1)];

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

音频设备的通道与记录数据列之间的映射,指定为标量或有效通道索引的向量。默认值为1,这意味着设备上的第一个记录通道用于获取数据,并被映射到一个单列矩阵。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

使用

描述

例子

audioFromDevice= playRec (audioToDevice写一帧音频样本,audioToDevice,并返回一帧音频,audioFromDevice

例子

audioFromDevicenumUnderrun) = playRec (audioToDevice返回自上次调用以来的样本溢出数playRec

例子

audioFromDevicenumUnderrunnumOverrun) = playRec (audioToDevice返回自上次调用以来运行过的样本数playRec

注意:当你呼叫audioPlayerRecorder对象指定的音频设备设备属性是锁着的。一个音频设备只能被一个锁定audioPlayerRecorder在一个时间。要释放音频设备,请调用释放audioPlayerRecorder系统对象。

输入参数

全部展开

要写入设备的音频信号,指定为矩阵。矩阵的列被视为独立的音频通道。

数据类型:||int8|int16|int32|uint8

输出参数

全部展开

从设备读取的音频信号,返回为与设备相同大小和数据类型的矩阵audioToDevice

数据类型:||int16|int32|uint8

自上次调用以来,播放器队列处于欠运行状态的样本数playRec暗流指输出信号沉默。当进行数模转换时,如果设备缓冲区为空,则输出信号将出现沉默。当MATLAB中的处理循环不能以声卡要求的速率提供样本时,就会产生这种结果。

数据类型:uint32

自上次调用以来记录器队列溢出的样本数playRec泛滥指输入信号降。当处理阶段与采集样本的速度不一致时,输入信号就会下降。

数据类型:uint32

对象的功能

要使用对象函数,请指定System对象作为第一个输入参数。例如,释放名为system的对象的系统资源obj,使用下面的语法:

发行版(obj)

全部展开

getAudioDevices 列出可用的音频设备
信息 获取音频设备信息
克隆 创建重复的系统对象
isLocked 确定系统对象在使用
释放 释放资源并允许更改系统对象属性值和输入特征
重置 使内部状态复位系统对象
一步 运行系统对象算法
设置 一次性为System对象设置任务

例子

全部折叠

使用单个音频设备同步播放和录音。如果丢失了同步,则打印丢失的示例信息。

创建从音频文件读取和写入的对象。创建一个audioPlayerRecorder对象向您的设备播放音频信号,并同时从您的设备录制音频。

fileReader = dsp。AudioFileReader (“Counting-16-44p1-mono-15secs.wav”...“SamplesPerFrame”, 512);fs = fileReader.SampleRate;fileWriter = dsp。AudioFileWriter (“Counting-PlaybackRecorded.wav”...“SampleRate”fs);4月= audioPlayerRecorder (“SampleRate”fs);

在基于帧的循环中:

  1. 从文件中读取音频信号。

  2. 播放音频信号到您的设备,并同时记录音频从您的设备。使用可选的nUnderrunsnOverruns输出参数跟踪任何同步丢失。

  3. 将您录制的音频写入文件。

一旦循环完成,释放对象以释放设备和资源。

~isDone(fileReader) audioToPlay = fileReader();[audioRecorded, nUnderruns nOverruns] = 4月(audioToPlay);fileWriter (audioRecorded)如果nUnderruns > 0 fprintf(“音频播放器队列在%d样本下运行。\n”, nUnderruns);结束如果nOverruns > 0 fprintf(“音频记录器队列被%d个样本溢出。\n”, nOverruns);结束结束
音频播放器队列运行不足512个样本。
发行版(fileReader)发布(fileWriter)发布(4月)

audioPlayerRecorderSystem object™允许您指定音频设备的通道与发送到音频设备和从音频设备接收的数据之间的非默认映射。要运行此示例,您的音频设备必须至少有两个通道,并且能够使用全双工模式。

使用默认设置

创建一个audioPlayerRecorder对象的默认设置。的audioPlayerRecorder自动配置为兼容的设备和驱动程序。

4月= audioPlayerRecorder;

audioPlayerRecorder在一个电话中结合从你的设备读取和写入设备:4月(audioToDevice audioFromDevice =).调用audioPlayerRecorder默认设置:

  • 地图的列audioToDevice来输出设备的通道

  • 将设备的输入通道映射到列audioFromDevice

默认情况下,audioFromDevice是一个一列矩阵,对应于音频设备的通道1。要查看设备的最大输入和输出通道数,请使用信息方法。

aPRInfo =信息(4月);

aPRInfo以结构形式返回,其中的字段包含有关所选驱动程序、音频设备以及配置中最大输入和输出通道数量的信息。

调用audioPlayerRecorder用一个两列矩阵。默认情况下,列1映射到输出通道1,列2映射到输出通道2。的audioPlayerRecorder返回一个行数与audioToDevice矩阵。

highToneGenerator = audioOscillator (“频率”, 600,“SamplesPerFrame”, 256);lowToneGenerator = audioOscillator (“频率”, 200,“SamplesPerFrame”, 256);i = 1:20 0 C = highToneGenerator();D = lowToneGenerator ();audioToDevice = (C, D);audioFromDevice = 4月(audioToDevice);结束

音频输出的非默认通道映射

为音频输出指定一个非默认的通道映射。指定的列1audioToDevice映射到通道2,第2列audioToDevice映射到通道1。要修改通道映射,请使用audioPlayerRecorder对象必须解除锁定。

运行audioPlayerRecorder对象。如果您使用耳机或立体声扬声器,请注意高频和低频音调已切换扬声器。

release(aPR) aPR. playerchannelmapping =[2,1]; / /播放i = 1:20 0 C = highToneGenerator();D = lowToneGenerator ();audioToDevice = (C, D);audioFromDevice = 4月(audioToDevice);结束

音频输入的非默认通道映射

为音频输入指定一个非默认的通道映射。只从设备的两个通道记录数据。在本例中,通道2被映射到一个单列矩阵。使用大小来验证audioFromDevice是256 × 1矩阵。

release(aPR) aPR. recorderchannelmapping = 2;audioFromDevice = 4月(audioToDevice);(行,坳)=大小(audioFromDevice)
Rows = 256 col = 1

作为一个最佳实践,一旦完成,释放您的音频设备。

发行版(4月)

扩展功能

介绍了R2017a