audioDeviceReader

描述

audioDeviceReader系统对象™使用计算机的音频输入设备读取音频样本。

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

音频设备阅读器指定驱动程序、设备及其属性,以及来自系统对象的数据类型和大小输出。

从音频设备流数据:

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

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

有关系统对象如何工作的更多信息,请参见什么是系统对象?(MATLAB)。

创建

描述

deviceReader= audioDeviceReader返回一个系统对象,deviceReader,它使用音频输入设备实时读取音频样本。

deviceReader= audioDeviceReader (sampleRateValue)设置SampleRate财产sampleRateValue.

deviceReader= audioDeviceReader (sampleRateValue,sampPerFrameValue)设置SamplesPerFrame财产sampPerFrameValue.

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

例子:deviceReader = audioDeviceReader(16000,'BitDepth','8位整数')创建一个系统对象,deviceReader,它以16 kHz采样率和8位整数位深度运行。

属性

全部展开

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

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

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

驱动程序用于访问您的音频设备,指定为声音处理软件的,“ASIO”,或“WASAPI”.

  • ASIO™驱动程序不预装在Windows上®机器。使用“ASIO”驱动程序选项,安装一个ASIO驱动程序以外的MATLAB®.

    请注意

    如果司机被指定为“ASIO”,使用asiosettings将声卡缓冲区大小设置为SamplesPerFrame你的价值audioDeviceReader系统对象。

  • WASAPI驱动程序只支持排他模式。金宝app

ASIO和WASAPI驱动程序不提供采样率转换。对于ASIO和WASAPI驱动器,集SampleRate音频设备支持的采样率。金宝app

此属性仅适用于Windows计算机。Linux®机器总是使用ALSA驱动程序。Mac机器总是使用CoreAudio驱动程序。

数据类型:字符|字符串

用来获取音频样本的设备,指定为字符向量或字符串。使用getAudioDevices列出所选驱动程序的可用设备。

数据类型:字符|字符串

音频设备获取的输入通道数,指定为整数。的范围NumChannels取决于你的音频硬件。

依赖关系

要启用这个特性,集ChannelMappingSource“汽车”.

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

从音频设备读取的帧大小,指定为正整数。SamplesPerFrame您的设备缓冲区的大小和输出矩阵的列数是否也由您的audioDeviceReader对象。

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

采样率:设备用来获取音频数据的采样率,单位为Hz,指定为正整数。的范围SampleRate取决于你的音频硬件。

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

设备用来获取音频数据的数据类型,指定为字符向量或字符串。

数据类型:字符|字符串

音频输入设备的通道与输出矩阵列之间的映射源,指定为“汽车”“属性”.

  • “汽车”- 默认设置确定设备信道和输出矩阵之间的映射。例如,假设您的音频设备有6个通道可用,并设置NumChannels6。对音频设备阅读器的调用的输出是一个六列矩阵。第一列对应通道1,第二列对应通道2,以此类推。

  • “属性”——这是ChannelMapping属性确定音频设备的通道与输出矩阵的列之间的映射。

数据类型:字符|字符串

音频输入设备的通道与输出矩阵列之间的非默认映射,指定为有效通道索引的向量。看到为audioDeviceReader指定通道映射为更多的信息。

依赖关系

要启用这个特性,集ChannelMappingSource“属性”.

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

输出的数据类型,指定为字符向量或字符串。

请注意

如果OutputDataType被指定为“双”“单一”,音频设备阅读器输出范围为[- 1,1]的数据。对于其他数据类型,范围是指定数据类型的[min, max]。

数据类型:字符|字符串

使用

描述

例子

audioFromDevice=deviceReader()从选定的音频输入设备返回一帧音频样本。

例子

(audioFromDevice,numOverrun]=deviceReader()返回自上次调用以来,音频阅读器队列溢出的样本数量deviceReader.

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

输出参数

全部展开

音频信号从设备读取,以矩阵形式返回。指定的通道数目和SamplesPerFrame属性确定矩阵大小。矩阵的数据类型取决于OutputDataType财产。

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

自上次调用以来,音频读取器队列溢出的样本数deviceReader.

数据类型:uint32

对象的功能

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

发行版(obj)

全部展开

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

例子

全部折叠

用麦克风记录10秒的讲话,并将输出发送到WAV文件。

创建一个audioDeviceReader对象的默认设置。调用设置减少音频流循环中初始化的计算负载。

deviceReader = audioDeviceReader;设置(deviceReader)

创建一个dsp.AudioFileWriter系统对象。指定要写入的文件名和类型。

fileWriter = dsp.AudioFileWriter (“mySpeech.wav”,“FileFormat”,“WAV”);

记录10秒钟的演讲。在音频流循环中,从设备读取音频信号帧,并将音频信号帧写入指定的文件。文件保存到当前文件夹。

disp (“现在对着麦克风说。”)
现在对着麦克风说话。
抽搐toc < 10 acquiredAudio = deviceReader();fileWriter (acquiredAudio);结束disp (记录完整。)
记录完成。

释放音频设备并关闭输出文件。

发布(deviceReader)发布(fileWriter)

延迟由于输入设备的缓冲是获取一帧数据的时间延迟。在本例中,您将修改您的默认属性audioDeviceReader对象以减少延迟。

创建一个audioDeviceReader对象的默认设置。

deviceReader = audioDeviceReader
deviceReader = audioDeviceReader与属性:设备:'默认' NumChannels: 1 SamplesPerFrame: 1024 SampleRate: 44100显示所有属性

计算由设备缓冲区引起的延迟。

流('由设备缓冲区引起的延迟:%f秒。\n'deviceReader.SamplesPerFrame / deviceReader.SampleRate)
由设备缓冲区引起的延迟:0.023220秒。

设置SamplesPerFrame你的属性audioDeviceReader对象64.计算延迟。

deviceReader。SamplesPerFrame = 64;流('由设备缓冲区引起的延迟:%f秒。\n'deviceReader.SamplesPerFrame / deviceReader.SampleRate)
由设备缓冲区引起的延迟:0.001451秒。

设置SampleRate你的属性audioDeviceReader系统对象96000.计算延迟。

deviceReader。SampleRate=96000; fprintf('由设备缓冲区引起的延迟:%f秒。\n'deviceReader.SamplesPerFrame / deviceReader.SampleRate)
由设备缓冲区引起的延迟:0.000667秒。

泛滥指输入信号下降,当音频流环路与设备不同步时发生。确定音频流循环的溢出,向音频流循环添加人工计算负载,然后修改您的属性audioDeviceReader对象以减少溢出。你的成绩取决于你的电脑。

创建一个audioDeviceReader系统对象SamplesPerFrame设置为256SampleRate设置为44100.调用设置减少音频流循环中初始化的计算负载。

deviceReader = audioDeviceReader (...“SamplesPerFrame”,256,...“SampleRate”,44100);设置(deviceReader)

创建一个dsp.AudioFileWriter对象。指定要写入的文件名和数据类型。

fileWriter = dsp.AudioFileWriter (“mySpeech.wav”,“FileFormat”,“WAV”);

记录5秒钟的演讲。在音频流循环中,从设备读取音频信号帧,并将音频信号帧写入指定的文件。

totalOverrun = 0;disp (“现在对着麦克风说。”)
现在对着麦克风说话。
抽搐toc < 5 [input,numOverrun] = deviceReader();totaloverflow = totaloverflow + numOverrun;fileWriter(输入);结束流(“录音完成。\ n”)
记录完成。
流('样本超逾的总数目:%d.\n'totalOverrun)
样本超支总数:0。
流(总秒数溢出:%d.\n'双(totalOverrun) /双(deviceReader.SampleRate))
溢出的总秒数:0。

释放你的audioDeviceReaderdsp.AudioDeviceWriter对象和零计数器变量。

释放(fileWriter)释放(deviceReader) totaloverflow = 0;

使用暂停向音频流循环添加人工计算负载。计算负载导致音频流循环比设备运行得慢,从而导致获得的样本被丢弃。

disp (“现在对着麦克风说。”)
现在对着麦克风说话。
抽搐toc < 5 [input,numOverrun] = deviceReader();totaloverflow = totaloverflow + numOverrun;fileWriter(输入);暂停(0.01)结束流(“录音完成。\ n”)
记录完成。
流('样本超逾的总数目:%d.\n'totalOverrun)
样本超支总数:97536。
流(总秒数溢出:%d.\n'双(totalOverrun) /双(deviceReader.SampleRate))
总时间溢出:2.211701e+00。

释放你的audioDeviceReaderdsp.AudioFileWriter对象,并设置SamplePerFrame财产512.设备缓冲区的大小增加,使得设备现在需要更长的时间来获取一帧数据。将计数器变量设置为0。

发布(fileWriter)发布deviceReader (deviceReader)。SamplesPerFrame = 512;totalOverrun = 0;

使用您的修改计算音频流循环的总溢出SamplesPerFrame财产。

disp (“现在对着麦克风说。”)
现在对着麦克风说话。
抽搐toc < 5 [input,numOverrun] = deviceReader();totaloverflow = totaloverflow + numOverrun;fileWriter(输入);暂停(0.01)结束流(“录音完成。\ n”)
记录完成。
流('样本超逾的总数目:%d.\n'totalOverrun)
样本超支总数:0。
流(总秒数溢出:%f.\n'totalOverrun / deviceReader.SampleRate)
总秒超支:0.000000。

属性指定非默认通道映射audioDeviceReader对象。这个例子是特定于硬件的。它假设您的计算机有一个默认的音频输入设备和两个可用的通道。

创建一个audioDeviceReader对象的默认设置。

deviceReader = audioDeviceReader;

通道的默认数量是1。打电话给你的audioDeviceReader对象,比如一个没有参数的函数,可以从音频设备中读取一帧数据。验证输出数据矩阵有一列。

x = deviceReader ();[frameLength, numChannels] =大小(x)
frameLength = 1024
numChannels = 1

使用信息以确定指定的可用输入通道的最大数目司机设备配置。

信息(deviceReader)
ans =结构体字段:驱动程序:'DirectSound' DeviceName: 'Primary Sound Capture Driver' MaximumInputChannels: 2

ChannelMappingSource“属性”.的audioDeviceReader对象必须解除锁定才能更改此属性。

(deviceReader) deviceReader发布。ChannelMappingSource =“属性”
deviceReader = audioDeviceReader with properties: Driver: 'DirectSound' Device: 'Default' SamplesPerFrame: 1024 SampleRate: 44100显示所有属性

默认情况下,如果ChannelMappingSource被设置为“属性”时,所有可用的通道都映射到输出。打电话给你的audioDeviceReader对象从音频设备读取一帧数据。验证输出数据矩阵有两列。

x = deviceReader ();[frameLength, numChannels] =大小(x)
frameLength = 1024
numChannels = 2

使用ChannelMapping属性指定设备的通道与输出矩阵的列之间的可选映射。在与输出列对应的索引处指示输入通道号。若要更改此属性,请首先解锁audioDeviceReader对象。

(deviceReader) deviceReader发布。ChannelMapping = (2, 1);

现在当你呼唤你的audioDeviceReader:

  • 设备的输入信道1映射到您的输出矩阵的第二列中。

  • 设备的输入通道2映射到输出矩阵的第一列。

从输入设备获取特定的通道。

deviceReader。ChannelMapping = 2;

如果你打电话给audioDeviceReader,设备的输入通道2映射到输出向量。

扩展功能

介绍了R2016a