audioDeviceReader
从声卡录制
描述
的audioDeviceReader
系统对象™使用计算机的音频输入设备读取音频样本。
看到音频I/O:缓冲,延迟和吞吐量详细说明了音频设备读取器的数据流。
音频设备阅读器指定驱动程序、设备及其属性,以及从System对象输出的数据类型和大小。
从音频设备传输数据:
创建
audioDeviceReader
对象并设置其属性。调用带有参数的对象,就像调用函数一样。
要了解更多关于System对象如何工作的信息,请参见什么是系统对象?
创建
语法
描述
返回一个System对象,deviceReader
= audioDeviceReaderdeviceReader
该软件使用音频输入设备实时读取音频样本。
设置SampleRate财产deviceReader
= audioDeviceReader (sampleRateValue
)sampleRateValue
.
设置SamplesPerFrame财产deviceReader
= audioDeviceReader (sampleRateValue
,sampPerFrameValue
)sampPerFrameValue
.
设置每个属性deviceReader
= audioDeviceReader (___,名称,值
)的名字
到指定的价值
.未指定的属性有默认值。
例子:deviceReader = audioDeviceReader(16000,'BitDepth','8-bit integer')
创建一个System对象,deviceReader
,它在16 kHz采样率和8位整数位深度下工作。
属性
除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放
函数解锁它们。
如果属性是可调,您可以随时更改其值。
有关更改属性值的更多信息,请参见在MATLAB中使用系统对象设计系统.
司机
- - - - - -用于访问音频设备的驱动程序(仅适用于Windows)
声音处理软件的
(默认)|“ASIO”
|“WASAPI”
用于访问您的音频设备的驱动程序,指定为声音处理软件的
,“ASIO”
,或“WASAPI”
.
ASIO™驱动程序没有预先安装在Windows上®机器。要使用
“ASIO”
driver选项,在MATLAB外部安装一个ASIO驱动程序®.请注意
如果
司机
指定为“ASIO”
,使用asiosettings
将声卡缓冲区大小设置为SamplesPerFrame
你的价值audioDeviceReader
系统对象。WASAPI驱动程序只支持独占模式。万博1manbetx
ASIO和WASAPI驱动程序不提供样本速率转换。对于ASIO和WASAPI驱动程序,设置SampleRate
到您的音频设备支持的采样率。万博1manbetx
此属性仅适用于Windows计算机。Linux®机器总是使用ALSA驱动程序。Mac机器总是使用CoreAudio驱动程序。
数据类型:字符
|字符串
设备
- - - - - -用于获取音频样本的设备
默认音频设备(默认)|特征向量|字符串
用于获取音频样本的设备,指定为字符向量或字符串。使用getAudioDevices
列出所选驱动程序的可用设备。
数据类型:字符
|字符串
NumChannels
- - - - - -音频设备获取的输入通道数
1
(默认)|整数
由音频设备获取的输入通道数,指定为整数。的范围NumChannels
这取决于你的音频硬件。
依赖关系
若要启用此属性,请设置ChannelMappingSource来“汽车”
.
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
SamplesPerFrame
- - - - - -从音频设备读取帧大小
1024
(默认)|整数
从音频设备读取的帧大小,指定为正整数。SamplesPerFrame
也是设备缓冲区的大小和输出矩阵的列数audioDeviceReader
对象。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
SampleRate
- - - - - -设备用于获取音频数据的采样率(Hz)
44100
(默认)|正整数
设备用于获取音频数据的采样率,以Hz为单位,指定为正整数。的范围SampleRate
这取决于你的音频硬件。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
BitDepth
- - - - - -设备用于获取音频数据的数据类型
的16位整数
(默认)|8位整数的
|32位浮点数的
|24位整数的
设备用于获取音频数据的数据类型,指定为字符向量或字符串。
数据类型:字符
|字符串
ChannelMappingSource
- - - - - -设备通道和输出矩阵之间的映射源
“汽车”
(默认)|“属性”
音频输入设备的通道与输出矩阵列之间的映射源,指定为“汽车”
或“属性”
.
“汽车”
——默认设置决定了设备通道和输出矩阵之间的映射关系。例如,假设您的音频设备有6个可用频道,并且您设置NumChannels
6。对音频设备阅读器的调用的输出是一个六列矩阵。第1列对应通道1,第2列对应通道2,以此类推。“属性”
——这是ChannelMapping属性确定音频设备的通道与输出矩阵列之间的映射。
数据类型:字符
|字符串
ChannelMapping
- - - - - -设备通道和输出矩阵之间的非默认映射
(1: MaximumInputChannels)
(默认)|标量|向量
音频输入设备的通道和输出矩阵列之间的非默认映射,指定为有效通道索引的向量。看到为audioDeviceReader指定通道映射更多信息。
依赖关系
若要启用此属性,请设置ChannelMappingSource来“属性”
.
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
OutputDataType
- - - - - -输出的数据类型
“双”
(默认)|“单一”
|“int32”
|“int16”
|“uint8”
输出的数据类型,指定为字符向量或字符串。
请注意
如果OutputDataType
指定为“双”
或“单一”
,音频设备阅读器输出范围为[- 1,1]的数据。对于其他数据类型,范围为指定数据类型的[min, max]。
数据类型:字符
|字符串
使用
描述
从选定的音频输入设备返回一帧音频样本。audioFromDevice
=deviceReader
()
[
返回自最后一次调用以来音频阅读器队列溢出的样本数量audioFromDevice
,numOverrun
] =deviceReader
()deviceReader
.
注意:当你打电话给audioDeviceReader
对象指定的音频设备设备财产被锁定。一个音频设备只能被一个人锁定audioDeviceReader
一次。要释放音频设备,请呼叫释放
在你的audioDeviceReader
对象。
输出参数
audioFromDevice
-来自设备的音频
矩阵
从设备读取音频信号,作为矩阵返回。指定的通道数和SamplesPerFrame属性决定矩阵大小。矩阵的数据类型取决于OutputDataType财产。
数据类型:单
|双
|int16
|int32
|uint8
numOverrun
-溢出的样本数量
标量
自最后一次调用以来,音频阅读器队列溢出的样本数deviceReader
.
数据类型:uint32
对象的功能
要使用对象函数,请将System对象指定为第一个输入参数。例如,释放名为obj
,使用以下语法:
发行版(obj)
例子
从麦克风读取并写入音频文件
用麦克风记录10秒的讲话,并将输出发送到WAV文件。
创建一个audioDeviceReader
对象,使用默认设置。调用设置
减少音频流循环中初始化的计算量。
deviceReader = audioDeviceReader;设置(deviceReader)
创建一个dsp。AudioFileWriter
系统对象。指定要写入的文件名和类型。
fileWriter = dsp。AudioFileWriter (“mySpeech.wav”,“FileFormat”,“WAV”);
录音10秒。在音频流循环中,从设备中读取一个音频信号帧,并将该音频信号帧写入指定的文件。文件保存到您的当前文件夹。
disp (“现在对着麦克风说话。”)
现在对着麦克风说话。
抽搐而getredaudio = deviceReader();fileWriter (acquiredAudio);结束disp (记录完整。)
记录完成。
释放音频设备并关闭输出文件。
发布(deviceReader)发布(fileWriter)
减少由于输入设备缓冲区造成的延迟
延迟由于输入设备缓冲区是获取一帧数据的时间延迟。在本例中,您修改的默认属性audioDeviceReader
对象以减少延迟。
创建一个audioDeviceReader
对象,使用默认设置。
deviceReader = audioDeviceReader
deviceReader = audioDeviceReader属性:Device: 'Default' 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
设置为256
而且SampleRate
设置为44100
.调用设置
减少音频流循环中初始化的计算量。
deviceReader = audioDeviceReader(...“SamplesPerFrame”, 256,...“SampleRate”, 44100);设置(deviceReader)
创建一个dsp。AudioFileWriter
对象。指定要写入的文件名和数据类型。
fileWriter = dsp。AudioFileWriter (“mySpeech.wav”,“FileFormat”,“WAV”);
录音5秒。在音频流循环中,从设备中读取音频信号帧,并将音频信号帧写入指定的文件。
totaloverflow = 0;disp (“现在对着麦克风说话。”)
现在对着麦克风说话。
抽搐而toc < 5 [input, nuoverrun] = deviceReader();totaloverflow = totaloverflow + nuoverrun;fileWriter(输入);结束流(“录音完成。\ n”)
记录完成。
流('溢出的样本总数:%d.\n'totalOverrun)
溢出的样本总数:0。
流('总超时时间:%d.\n'双(totalOverrun) /双(deviceReader.SampleRate))
总超时时间:0。
释放你的audioDeviceReader
而且dsp。AudioDeviceWriter
对象,并将计数器变量归零。
release(fileWriter) release(deviceReader) totaloverflow = 0;
使用暂停
为您的音频流循环添加人工计算负载。计算负载导致音频流循环的速度比设备慢,这导致所获取的样本被丢弃。
disp (“现在对着麦克风说话。”)
现在对着麦克风说话。
抽搐而toc < 5 [input, nuoverrun] = deviceReader();totaloverflow = totaloverflow + nuoverrun;fileWriter(输入);暂停(0.01)结束流(“录音完成。\ n”)
记录完成。
流('溢出的样本总数:%d.\n'totalOverrun)
溢出的样本总数:97536。
流('总超时时间:%d.\n'双(totalOverrun) /双(deviceReader.SampleRate))
总超时时间:2.211701e+00。
释放你的audioDeviceReader
而且dsp。AudioFileWriter
对象,并设置SamplePerFrame
财产512
.设备缓冲区的大小增加了,因此设备现在需要更长的时间来获取一帧数据。将计数器变量设置为零。
release(fileWriter) release(deviceReader) deviceReader。SamplesPerFrame = 512;totaloverflow = 0;
使用修改的音频流循环计算总溢出SamplesPerFrame
财产。
disp (“现在对着麦克风说话。”)
现在对着麦克风说话。
抽搐而toc < 5 [input, nuoverrun] = deviceReader();totaloverflow = totaloverflow + nuoverrun;fileWriter(输入);暂停(0.01)结束流(“录音完成。\ n”)
记录完成。
流('溢出的样本总数:%d.\n'totalOverrun)
溢出的样本总数:0。
流('总超时时间:%f.\n'totalOverrun / deviceReader.SampleRate)
总超时时间:0.000000。
指定通道映射audioDeviceReader
指定非默认通道映射audioDeviceReader
对象。这个示例是特定于硬件的。它假设您的计算机有一个默认的音频输入设备,有两个可用的通道。
创建一个audioDeviceReader
对象,使用默认设置。
deviceReader = audioDeviceReader;
默认通道数为1。打电话给你的audioDeviceReader
对象之类的函数,不带参数从音频设备读取一帧数据。验证输出数据矩阵是否有一列。
x = deviceReader();[frameLength,numChannels] = size(x)
frameLength = 1024
numChannels = 1
使用信息
来确定可用的输入通道的最大数量司机
而且设备
配置。
信息(deviceReader)
ans =带有字段的结构:驱动:'DirectSound' DeviceName: 'Primary Sound Capture Driver' MaximumInputChannels: 2
集ChannelMappingSource
来“属性”
.的audioDeviceReader
对象必须解锁才能更改此属性。
(deviceReader) deviceReader发布。ChannelMappingSource =“属性”
deviceReader = audioDeviceReader带有如下属性:Driver: 'DirectSound' Device: 'Default' SamplesPerFrame: 1024 SampleRate: 44100显示所有属性
默认情况下,如果ChannelMappingSource
设置为“属性”
,将所有可用通道映射到输出。打电话给你的audioDeviceReader
对象从您的音频设备读取一帧数据。验证输出数据矩阵是否有两列。
x = deviceReader();[frameLength,numChannels] = size(x)
frameLength = 1024
numChannels = 2
使用ChannelMapping
属性指定设备的通道与输出矩阵的列之间的替代映射。在与输出列对应的索引处指示输入通道号。要更改此属性,首先解锁audioDeviceReader
对象。
(deviceReader) deviceReader发布。ChannelMapping = [2,1];
现在当你叫你的audioDeviceReader
:
设备的输入通道1映射到输出矩阵的第二列。
设备的输入通道2映射到输出矩阵的第一列。
从输入设备获取特定通道。
deviceReader。ChannelMapping = 2;
如果你把你的audioDeviceReader
,设备的输入通道2映射到输出矢量。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
MATLAB代码生成中的系统对象(MATLAB编码器)
从这个System对象生成的可执行文件依赖于预构建的动态库文件(
. dll
MATLAB中包含的文件。使用packNGo
函数将此对象生成的代码和所有相关文件打包到一个压缩zip文件中。使用这个zip文件,您可以在另一个没有安装MATLAB的开发环境中重新定位、解包和重新构建您的项目。有关更多细节,请参见在MATLAB和Simulink之外运行音频I/O功能万博1manbetx.
版本历史
在R2016a中介绍
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
Comando de MATLAB
Ha hecho clic en unenlace que对应一个este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB。Los navegadores web no admit comandos de MATLAB。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。