主要内容

audioDeviceWriter

发挥声卡

描述

audioDeviceWriter系统对象™写音频样本音频输出设备。音频设备的作家的属性指定驱动程序,设备,如采样率和设备属性,深度,和缓冲区大小。

看到音频I / O:缓冲、延迟和吞吐量音频设备的详细解释作家数据流。

流数据到音频设备:

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

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

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

创建

描述

deviceWriter= audioDeviceWriter返回一个系统对象,deviceWriter,写音频样本实时音频输出设备。

deviceWriter= audioDeviceWriter (sampleRateValue)设置SampleRate财产sampleRateValue

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

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

属性

全部展开

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

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

改变属性值的更多信息,请参阅系统设计在MATLAB使用系统对象

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

  • ASIO预装Windows™司机不来®机器。使用“ASIO”驱动程序选项,安装ASIO司机以外的MATLAB®

    请注意

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

  • WASAPI司机只支持独占模式。金宝app

ASIO和WASAPI司机不提供采样率转换。ASIO和WASAPI司机,集SampleRate采样率由您的音频设备。金宝app

这个属性只在Windows机器。Linux®机器一直使用ALSA驱动程序。Mac机器总是使用CoreAudio驱动程序。

指定默认的司机值,您必须有一个音频工具箱™许可证。如果没有安装工具箱,指定默认的司机值返回一个错误。

数据类型:字符|字符串

设备用于播放音频样本,指定为一个特征向量或字符串标量。使用getAudioDevices为所选择的驱动程序可用设备列表。

数据类型:字符|字符串

采样率信号发送到音频设备,在赫兹,指定为一个正整数。的范围SampleRate取决于你的音频硬件。

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

设备,所使用的数据类型指定为一个特征向量或字符串标量。之前进行数模转换,输入数据到指定的数据类型BitDepth

指定一个默认的BitDepth,你必须有一个音频工具箱许可证。如果没有安装工具箱,指定一个默认的BitDepth返回一个错误。

数据类型:字符|字符串

选择支持可变帧大小,金宝app指定为真正的

  • ——如果audioDeviceWriter对象被锁定,输入必须具有相同的帧大小在每个调用。音频设备的缓冲区大小是一样的输入帧大小。

  • 真正的——如果audioDeviceWriter对象被锁定,输入帧尺寸可以改变在每个调用。您的音频设备指定的缓冲区大小BufferSize财产。

数据类型:字符

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

请注意

如果司机被指定为“ASIO”,打开ASIO UI设置声卡的缓冲区大小BufferSize你的价值audioDeviceWriter系统对象。

依赖关系

要启用这个特性,设置金宝appSupportVariableSizeInput真正的

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

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

  • “汽车”——默认设置确定输入矩阵的列之间的映射和通道的音频输出设备。例如,假设您的输入与四列是一个矩阵,和您的音频设备有四个频道。第1列的输入设备的数据写入通道1,第2列输入数据写入通道2的设备,等等。

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

数据类型:字符|字符串

默认的输入矩阵的列和渠道之间的映射输出设备,指定为一个标量或矢量的有效通道指数。看到为audioDeviceWriter指定通道映射例子以获取更多信息。

列之间的选择性映射输入矩阵和声卡的输出渠道,你必须有一个音频工具箱许可证。如果没有安装工具箱,指定一个默认的ChannelMapping返回一个错误。

请注意

以确保单声道输出只有一个频道的音响设备,使用默认值ChannelMapping设置和提供一个立体声信号通道都是零。

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

例子:outputRightOnly =[0(大小(x, 1), 1) x (: 1)];

依赖关系

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

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

使用

描述

例子

numUnderrun= deviceWriter (audioToDevice)写一帧音频样本,audioToDevice,选中的音频设备和返回音频样本数量的暗流自从上次打电话deviceWriter

注意:当你打电话给audioDeviceWriter系统对象,指定的音频设备设备属性是锁着的。一个音频设备可以被只有一个锁audioDeviceWriter在一个时间。发布音频设备,电话释放在你的audioDeviceWriter系统对象。

输入参数

全部展开

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

如果audioToDevice的数据类型“双”“单一”、音频设备作家剪辑值范围之外的[1]。对于其他数据类型,允许输入范围(最小,最大)的指定数据类型。

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

输出参数

全部展开

样本数的音频设备作家队列是暗流自从上次打电话deviceWriter

数据类型:uint32

对象的功能

使用一个目标函数,指定系统对象作为第一个输入参数。例如,释放系统资源的系统对象命名obj使用这个语法:

发行版(obj)

全部展开

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

例子

全部折叠

读一个MP3音频文件,播放通过默认的音频输出设备。

创建一个dsp.AudioFileReader对象的默认设置。使用audioinfo函数返回一个包含音频文件的信息结构。

fileReader = dsp.AudioFileReader (“speech_dft.mp3”);fileInfo = audioinfo (“speech_dft.mp3”)
fileInfo =结构体字段:文件名:“mathworks /猛击/棒/ Bdoc21b /构建/ matlab工具箱/ dsp / dsp / speech_dft。mp3的CompressionMethod:“mp3”NumChannels: 1 SampleRate: 22050 TotalSamples: 112320时间:5.0939标题:[]评论:[]艺术家:[]比特率:64

创建一个audioDeviceWriter对象和指定采样率。

deviceWriter = audioDeviceWriter (“SampleRate”,fileInfo.SampleRate);

调用设置减少计算负荷的初始化音频流循环。

设置(deviceWriter 0 (fileReader.SamplesPerFramefileInfo.NumChannels))

使用信息函数来获得特征信息设备的作家。

信息(deviceWriter)
ans =结构体字段:司机:“ALSA”设备名称:“ALSAdefault”MaximumOutputChannels: 32

在一个音频流循环,从文件读取一个音频信号帧,帧写入你的设备。

~结束(fileReader) audioData = fileReader ();deviceWriter (audioData);结束

关闭输入文件并释放装置。

发布(fileReader)发布(deviceWriter)

延迟由于输出设备缓冲区是写作的时间延迟一帧的数据。修改默认的属性audioDeviceWriter系统对象™减少延迟由于设备缓冲区大小。

创建一个dsp.AudioFileReader系统对象与默认设置读取一个音频文件。

fileReader = dsp.AudioFileReader (“speech_dft.mp3”);

创建一个audioDeviceWriter系统对象并指定采样率相匹配的音频文件阅读器。

deviceWriter = audioDeviceWriter (“SampleRate”,fileReader.SampleRate);

计算延迟由于设备缓冲区,在几秒钟内。

bufferLatency = fileReader.SamplesPerFrame / deviceWriter.SampleRate% #好吧
bufferLatency = 0.0464

设置SamplesPerFrame你的属性dsp.AudioFileReader系统对象到256。计算的缓冲延迟秒数。

fileReader。SamplesPerFrame = 256;bufferLatency = fileReader.SamplesPerFrame / deviceWriter.SampleRate
bufferLatency = 0.0116

暗流是指输出信号的沉默,这发生在音频流循环不跟上输出设备。确定一个音频流循环的暗流,音频流中添加人工计算负载循环,然后修改你的属性audioDeviceWriter对象减少暗流。你的结果取决于你的电脑。

创建一个dsp.AudioFileReader对象,并指定阅读的文件。使用audioinfo函数返回一个包含音频文件的信息结构。

fileReader = dsp.AudioFileReader (“speech_dft.mp3”);fileInfo = audioinfo (“speech_dft.mp3”);

创建一个audioDeviceWriter对象。使用SampleRate文件的读者的SampleRate设备的作家。调用设置减少计算负荷的初始化音频流循环。

deviceWriter = audioDeviceWriter (“SampleRate”,fileReader.SampleRate);设置(deviceWriter 0 (fileReader.SamplesPerFramefileInfo.NumChannels))

运行您的音频流回路的输入文件和输出设备。打印总样本暗流和暗流在秒。

totalUnderrun = 0;~结束(fileReader)输入= fileReader ();numUnderrun = deviceWriter(输入);totalUnderrun = totalUnderrun + numUnderrun;结束流(的总样本暗流:% d。\ n”totalUnderrun)
总样本暗流:0。
流(的总秒暗流:% d。\ n”双(totalUnderrun) /双(deviceWriter.SampleRate))
总秒暗流:0。

释放你的dsp.AudioFileReaderaudioDeviceWriter对象和设置计数器变量为零。

发布(fileReader)发布(deviceWriter) totalUnderrun = 0;

使用暂停模仿一个算法,需要0.075秒的过程。停顿使音频流循环慢于设备,导致时间的沉默在输出音频信号。

~结束(fileReader)输入= fileReader ();numUnderrun = deviceWriter(输入);totalUnderrun = totalUnderrun + numUnderrun;暂停(0.075)结束流(的总样本暗流:% d。\ n”totalUnderrun)
总样本暗流:68608。
流(的总秒暗流:% d。\ n”双(totalUnderrun) /双(deviceWriter.SampleRate))
总秒暗流:3.111474 e + 00。

释放你的audioDeviceReaderdsp.AudioFileWriter并设置计数器变量为零。

发布(fileReader)发布(deviceWriter) totalUnderrun = 0;

设置你的音频流的帧大小循环到2048。因为金宝appSupportVariableSizeInput你的属性audioDeviceWriter系统对象设置为您的音频设备的缓冲区大小大小作为输入帧大小是一样的。增加你的设备缓冲区大小减少暗流。

fileReader = dsp.AudioFileReader (“speech_dft.mp3”);fileReader。SamplesPerFrame = 2048;fileInfo = audioinfo (“speech_dft.mp3”);deviceWriter = audioDeviceWriter (“SampleRate”,fileReader.SampleRate);设置(deviceWriter 0 (fileReader.SamplesPerFrame fileInfo.NumChannels))

计算总暗流。

~结束(fileReader)输入= fileReader ();numUnderrun = deviceWriter(输入);totalUnderrun = totalUnderrun + numUnderrun;暂停(0.075)结束流(的总样本暗流:% d。\ n”totalUnderrun)
总样本暗流:0。
流(的总秒暗流:% d。\ n”双(totalUnderrun) /双(deviceWriter.SampleRate))
总秒暗流:0。

增加帧尺寸减少你的总暗流音频流循环。然而,增加帧大小也会增加延迟。其他方法来减少暗流包括:

  • 增加输入帧大小的缓冲区大小无关。增加缓冲区大小独立于输入帧的大小,你必须首先设置金宝appSupportVariableSizeInput真正的。这种方法也会增加延迟。

  • 减少了采样率。减少了采样率减少了延迟和暗流在信号分辨率的成本。

  • 选择一个最优的驱动程序和设备为您的系统。

指定一个默认的信道映射audioDeviceWriter对象。这个例子是硬件具体。它假定你的电脑有一个默认的音频输出设备有两个可用的频道。

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

deviceWriter = audioDeviceWriter;

默认情况下,audioDeviceWriter对象写可用频道的最大数量,对应于输入的列矩阵。使用信息让你的设备的最大数量的渠道。

信息(deviceWriter)
ans =结构体字段:司机:“声音处理软件”设备名称:“主声音驱动程序”MaximumOutputChannels: 2

如果deviceWriter叫做一列的数据,两个渠道被写入你的音频输出设备。两个通道对应一列的数据。

使用audioOscillator对象输出你的语气audioDeviceWriter对象。你的对象,sineGenerator打电话时,返回一个向量。

sineGenerator = audioOscillator;

sin语气写你的音频设备。如果您使用的是耳机,你可以听到基调从两个渠道。

数= 0;数< 500正弦= sineGenerator ();deviceWriter (sin);数=计数+ 1;结束

如果你的audioDeviceWriter对象被称为两列的数据,两个渠道被写入你的音频输出设备。第一列对应通道1你的音频输出设备,和第二列对应通道2的音频输出设备。

写一个两列矩阵到您的音频输出设备。第一列对应于正弦语气,第二列对应于一个静态的信号。如果您使用的是耳机,你可以听到一位发言者的语气和其他静态的演讲者。

数= 0;数< 500正弦= sineGenerator ();静态= randn(长度(sin), 1);deviceWriter ((sin,静态));数=计数+ 1;结束

指定设备的替代渠道之间的映射和列的输出矩阵表示对应于输入输出通道数字索引列。集ChannelMappingSource“属性”。表明,第一列的输入输出设备的数据写入通道2,和第二列的输入数据写入通道1的输出设备。修改通道映射,您必须首先打开audioDeviceReader对象。

(deviceWriter) deviceWriter发布。ChannelMappingSource =“属性”;deviceWriter。ChannelMapping = (2, 1);

玩你的音频信号反向映射。如果您使用的是耳机,注意语气和静态交换扬声器。

数= 0;数< 500正弦= sineGenerator ();静态= randn(长度(sin), 1);deviceWriter ((sin,静态));数=计数+ 1;结束

扩展功能

介绍了R2016a