主要内容

audioDeviceReader

记录从声卡

描述

audioDeviceReader系统对象™读取音频样本使用你的电脑音频输入设备。

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

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

流数据从一个音频设备:

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

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

了解更多关于系统对象是如何工作的,看到的系统对象是什么?

创建

描述

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

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

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

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

例子:“BitDepth”deviceReader = audioDeviceReader(16000年,8位整数)创建一个系统对象,deviceReader在16千赫采样率和一个8位整数位深度。

属性

全部展开

属性,除非另有注明nontunable后,这意味着你不能改变它们的值调用对象。对象锁当你叫他们,释放函数打开它们。

如果一个属性可调在任何时候,你可以改变它的值。

改变属性值的更多信息,请参阅系统设计在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

设备获取音频数据使用的采样率,在赫兹,指定为一个正整数。的范围SampleRate取决于你的音频硬件。

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

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

数据类型:字符|字符串

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

  • “汽车”——默认设置确定设备通道和输出之间的映射矩阵。例如,假设您的音频设备有6个频道,并设置NumChannels6。读者调用您的音频设备的输出是一个矩阵。列1对应通道1,列2对应通道2,等等。

  • “属性”——这是ChannelMapping属性决定了你的音频设备和渠道之间的映射输出矩阵的列。

数据类型:字符|字符串

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

依赖关系

要启用这个特性,设置ChannelMappingSource“属性”

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

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

请注意

如果OutputDataType被指定为“双”“单一”读者,音频设备输出的数据范围[1]。对于其他数据类型,范围(最小,最大)的指定的数据类型。

数据类型:字符|字符串

使用

描述

例子

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设置为256年SampleRate设置为44100年。调用设置减少计算负荷的初始化音频流循环。

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

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

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

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

totalOverrun = 0;disp (“现在对麦克风说话。”)
现在对麦克风说话。
抽搐toc < 5[输入,numOverrun] = deviceReader ();totalOverrun = totalOverrun + numOverrun;fileWriter(输入);结束流(“录音完成。\ n”)
记录完成。
流(样品的总数量泛滥:% d。\ n”totalOverrun)
样本总数泛滥:0。
流(的总秒泛滥:% d。\ n”双(totalOverrun) /双(deviceReader.SampleRate))
总秒泛滥:0。

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

发布(fileWriter)发布(deviceReader) totalOverrun = 0;

使用暂停添加一个人工计算负载你的音频流循环。计算负载使音频流循环慢于设备,导致获得的样本。

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

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

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

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

disp (“现在对麦克风说话。”)
现在对麦克风说话。
抽搐toc < 5[输入,numOverrun] = deviceReader ();totalOverrun = totalOverrun + 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 =结构体字段:司机:“声音处理软件”设备名称:“主声音捕获驱动程序”MaximumInputChannels: 2

ChannelMappingSource“属性”。的audioDeviceReader改变这个属性对象必须被解锁。

(deviceReader) deviceReader发布。ChannelMappingSource =“属性”
deviceReader = audioDeviceReader属性:司机:“声音处理软件”装置:“违约”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