主要内容

audioPlayerRecorder

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

描述

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

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

同时播放和记录:

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

  2. 使用参数调用对象,就像它是一个函数。

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

创建

描述

PlayRec.= audioplayerrecorder.返回一个系统对象,PlayRec.,它将音频样本播放到音频设备并实时地记录来自相同音频设备的样本。

PlayRec.= audioplayerrecorder(SampleteValue.设置采样率财产SampleteValue.

PlayRec.= audioplayerrecorder(___名称,值每个属性集姓名到了指定的价值.未指定的属性具有默认值。

例子:PlayRec = audioplayerRecorder(48000,'Bitdepth','8位整数')创建一个系统对象,PlayRec.,以48 kHz采样率和8位整数位深度运行。

特性

展开全部

除非另有说明,否则属性是不可努力,这意味着在调用对象后无法更改其值。当您调用它们时,对象锁定释放功能解锁它们。

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

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

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

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

  • 视窗®- asio™

  • Mac- coreaudio

  • Linux®——ALSA

请注意

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

数据类型:char|细绳

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

数据类型:单身的|双倍的

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

数据类型:char|细绳

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

  • ——如果audioPlayerRecorder对象被锁定,输入必须在每个呼叫中​​具有相同的帧大小。音频设备的缓冲区大小与输入帧大小相同。如果您在Windows上使用该对象,请打开ASIO UI,将声卡缓冲区设置为帧大小值。

  • 真的——如果audioPlayerRecorder对象被锁定,输入帧大小可以在每个呼叫中​​更改。通过介绍音频设备的缓冲区大小BufferSize财产。

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

数据类型:逻辑

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

请注意

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

依赖性

启用此属性,设置金宝appSupportVariableSize真的

数据类型:单身的|双倍的|INT8.|int16|INT32.|INT64.|uint8.|uint16|UINT32|UINT64

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

请注意

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

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

例子:outputraptionsonly = [零(尺寸(x,1),1)x(:,1)];

数据类型:单身的|双倍的|INT8.|int16|INT32.|INT64.|uint8.|uint16|UINT32|UINT64

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

数据类型:单身的|双倍的|INT8.|int16|INT32.|INT64.|uint8.|uint16|UINT32|UINT64

使用

描述

例子

audiofromdevice.= playRec (录音所写一帧音频样本,录音所,到所选的音频设备,并返回一个音频帧,audiofromdevice.

例子

audiofromdevice.numUnderrun) = playRec (录音所返回自上次调用以来的样本溢出数PlayRec.

例子

audiofromdevice.numUnderrunnumOverrun) = playRec (录音所返回自上次调用以来运行过的样本数PlayRec.

笔记:当你打电话的时候audioPlayerRecorder系统对象,由此指定的音频设备设备属性是锁着的。一个音频设备只能被一个锁定audioPlayerRecorder一次。释放音频设备,呼叫释放audioPlayerRecorder系统对象。

输入参数

展开全部

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

数据类型:单身的|双倍的|INT8.|int16|INT32.|uint8.

输出参数

展开全部

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

数据类型:单身的|双倍的|int16|INT32.|uint8.

自上次调用以来,播放器队列处于欠运行状态的样本数PlayRec.欠跑是指输出信号沉默。如果设备缓冲区是空的,则会出现输出信号静音,当数字到模拟转换时为空。这导致MATLAB中的处理循环在声卡需求的速率下不提供样品。

数据类型:UINT32

自上次呼叫以来,录音机队列溢出的样本数PlayRec.超支指输入信号降。当处理阶段与采集样本的速度不一致时,输入信号就会下降。

数据类型:UINT32

对象的功能

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

发行版(obj)

展开全部

GetAudioDevices. 列表可用的音频设备
信息 获取音频设备信息
克隆 创建重复系统对象
锁住了 确定if.系统对象正在使用中
释放 释放资源并允许更改系统对象属性值和输入特征
重启 重置内部状态系统对象
系统对象算法
设置 一次性为System对象设置任务

例子

全部折叠

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

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

fileReader = dsp。AudioFileReader (“Counting-16-44p1-mono-15secs.wav”......“SamplesPerFrame”, 512);fs = fileReader.SampleRate;fileWriter = dsp。AudioFileWriter (“Counting-PlaybackRecorded.wav”......'采样率',fs);APR = audioplayerRecorder('采样率',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自动配置为兼容的设备和驱动程序。

APR = audioltayerrecorder;

audioPlayerRecorder将读取从设备中的读取并在单个呼叫中写入您的设备:4月(audioToDevice audioFromDevice =).打电话给audioPlayerRecorder使用默认设置:

  • 地图列录音所输出设备的通道

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

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

Aprinfo = Info(APR);

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

打电话给audioPlayerRecorder用一个两列矩阵。默认情况下,列1映射到输出通道1,列2映射到输出通道2。的audioPlayerRecorder返回具有相同数量的行数为单列矩阵录音所矩阵。

highToneGenerator = audioOscillator ('频率'600,“SamplesPerFrame”, 256);lowToneGenerator = audioOscillator ('频率', 200,“SamplesPerFrame”, 256);i = 1:250 c = hightonegenerator();d =较低电阻器();录音所= [C,D];audiofromdevice = apr(录音佛);结束

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

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

跑过audioPlayerRecorder目的。如果您使用的耳机或立体声扬声器,请注意高频和低频音调具有切换扬声器。

发布(APR)APR.PlayerChannelMappping = [2,1];i = 1:250 c = hightonegenerator();d =较低电阻器();录音所= [C,D];audiofromdevice = apr(录音佛);结束

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

为音频输入指定非默认频道映射。从您的设备中只记录数据。在这种情况下,信道2被映射到一列矩阵。用大小验证audiofromdevice.是256 × 1矩阵。

发布(APR)APR.RecOrderChannelMappping = 2;audiofromdevice = apr(录音佛);[行,col] = size(audiofromdevice)
Rows = 256 col = 1

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

发行版(4月)

扩展能力

介绍了R2017a