主要内容

audioPlayerRecorder

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

描述

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

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

同时播放和记录:

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

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

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

创建

描述

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

playRec= audioPlayerRecorder (sampleRateValue设置SampleRate财产sampleRateValue

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

例子:playRec = audioPlayerRecorder(48000,'BitDepth','8-bit integer')创建一个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 = [0 (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 确定系统对象正在使用中
释放 释放资源并允许更改系统对象属性值和输入特征
重置 重置的内部状态系统对象
一步 运行系统对象算法
设置 系统对象的一次性设置任务

例子

全部折叠

使用单个音频设备同步播放和录制。如果同步丢失,打印丢失的样本信息。

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

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

在基于帧的循环中:

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

  2. 将音频信号播放到您的设备,并同时从您的设备录制音频。使用可选的nUnderruns而且nOverruns输出参数以跟踪任何同步丢失。

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

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

~isDone(fileReader) audioToPlay = fileReader();[audioRecorded,nUnderruns,nOverruns] = aPR(audioToPlay);fileWriter (audioRecorded)如果bb0 0 fprintf('音频播放器队列被%d个样本占用。\n', nUnderruns);结束如果> 0 fprintf('录音机队列已被%d个样本溢出。\n', nOverruns);结束结束
音频播放器队列被512个样本占用。
release(fileReader) release(fileWriter) release(aPR)

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

使用默认设置

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

aPR = audioPlayerRecorder;

audioPlayerRecorder在一次调用中结合从设备读取和写入设备:audioFromDevice = aPR(audioToDevice).调用audioPlayerRecorder默认设置:

  • 映射列audioToDevice输出您的设备的通道

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

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

aPRInfo =信息(aPR);

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

调用audioPlayerRecorder用一个两列矩阵。默认情况下,列1映射到输出通道1,列2映射到输出通道2。的audioPlayerRecorder属性的行数相同的单列矩阵audioToDevice矩阵。

highToneGenerator = audioooscillator (“频率”, 600,“SamplesPerFrame”, 256);lowToneGenerator = audioooscillator (“频率”, 200,“SamplesPerFrame”, 256);i = 1:250 C = highToneGenerator();D = lowToneGenerator();audioToDevice = [C,D];audioFromDevice = aPR(audioToDevice);结束

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

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

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

release(aPR) april . playerchannelmapping = [2,1];i = 1:250 C = highToneGenerator();D = lowToneGenerator();audioToDevice = [C,D];audioFromDevice = aPR(audioToDevice);结束

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

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

release(aPR) aPR. recorderchannelmapping = 2;audioFromDevice = aPR(audioToDevice);[rows,col] = size(audioFromDevice)
Rows = 256 col = 1

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

发行版(4月)

扩展功能

版本历史

在R2017a中引入