主要内容

audiodevicereader.

从声卡记录

描述

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

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

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

要从音频设备流数据:

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

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

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

创建

描述

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

deviceReader= audioDeviceReader (SampleteValue.设置采样率财产SampleteValue.

deviceReader= audioDeviceReader (SampleteValue.SampperframeValue.设置SamplesPerFrame财产SampperframeValue.

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

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

特性

全部展开

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

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

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

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

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

    请注意

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

  • WASAPI驱动程序仅支持独占模式。金宝app

ASIO和WASAPI驱动程序不提供样本速率转换。对于ASIO和WASAPI驱动程序,设置采样率到您的音频设备支持的采样率。金宝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,指定为正整数。的范围采样率这取决于你的音频硬件。

数据类型:单身的||INT8.|int16|int32|int64|uint8.|uint16|UINT32.|UINT64

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

数据类型:字符|细绳

指定的音频输入设备和输出矩阵列的频道之间的映射源'汽车'或者“属性”

  • '汽车'——默认设置决定设备通道和输出矩阵之间的映射。例如,假设您的音频设备有六个可用的频道,并且您设置了NumChannels到6.呼叫对音频设备读取器的输出是六列矩阵。列1对应于信道1,列2对应于信道2,等等。

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

数据类型:字符|细绳

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

依赖性

若要启用此属性,请设置ChannelMappingSource“属性”

数据类型:单身的||INT8.|int16|int32|int64|uint8.|uint16|UINT32.|UINT64

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

请注意

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

数据类型:字符|细绳

使用

描述

例子

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

例子

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

笔记:当你打电话的时候audiodevicereader.系统对象,由此指定的音频设备设备属性是锁着的。一个音频设备只能被一个锁定audiodevicereader.在一个时间。要释放音频设备,请调用释放在你的audiodevicereader.对象。

输出参数

全部展开

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

数据类型:单身的||int16|int32|uint8.

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

数据类型:UINT32.

对象的功能

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

发行版(obj)

全部展开

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

例子

全部折叠

用麦克风录制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带有属性: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秒。

设置采样率你的属性audiodevicereader.系统对象96000..计算延迟。

deviceReader。采样率=96000.; fprintf('由于设备缓冲区导致的延迟:%f秒.\n'deviceReader.SamplesPerFrame / deviceReader.SampleRate)
由于设备缓冲区导致的延迟:0.000667秒。

泛滥指输入信号丢失,当音频流循环不跟上设备时出现。确定音频流循环的溢出,将人工计算负载添加到音频流循环,然后修改您的音频流循环audiodevicereader.对象以减少溢出。你的成绩取决于你的电脑。

创建一个audiodevicereader.系统对象SamplesPerFrame设置为256.采样率设置为44100.称呼设置减少音频流循环中初始化的计算负载。

deviceReader = audioDeviceReader (......“SamplesPerFrame”, 256,......'采样率',44100);设置(devicereader)

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

fileWriter = dsp。AudioFileWriter ('myspeech.wav'“FileFormat”'wav');

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

totalOverrun = 0;disp (“现在对着麦克风说话。”
现在谈论麦克风。
抽搐尽管toc < 5 [input,numOverrun] = deviceReader();totalOverrun = totalOverrun + nummoverrun;fileWriter(输入);结束流('录制完成。\ n'
录制完成。
流(“样本溢出总数:%d.\n”totalOverrun)
样本溢出总数:0。
流(“超过的总秒数:%d.\n”双(totalOverrun) /双(deviceReader.SampleRate))
累计超限秒:0。

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

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

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

disp (“现在对着麦克风说话。”
现在谈论麦克风。
抽搐尽管toc < 5 [input,numOverrun] = deviceReader();totalOverrun = totalOverrun + nummoverrun;fileWriter(输入);暂停(0.01)结束流('录制完成。\ n'
录制完成。
流(“样本溢出总数:%d.\n”totalOverrun)
样品超限总数:97536
流(“超过的总秒数:%d.\n”双(totalOverrun) /双(deviceReader.SampleRate))
超过总秒数:2.211701e+00。

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

释放(文件夹)释放(devicereader)devicereader.samplesperframe = 512;突然run = 0;

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

disp (“现在对着麦克风说话。”
现在谈论麦克风。
抽搐尽管toc < 5 [input,numOverrun] = deviceReader();totalOverrun = totalOverrun + nummoverrun;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带有属性: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