audioDeviceWriter

发挥声卡

描述

audioDeviceWriter系统对象™写入音频样本到音频输出装置。该音频设备作家属性指定驱动器,所述设备,并且作为采样率,比特深度设备属性,例如,和缓冲区大小。

看到音频I / O:缓冲,延迟时间和吞吐量用于音频设备写入器的数据流的详细的说明。

要流数据到音频设备:

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

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

要了解更多有关系统对象的方式工作,请参阅什么是系统对象?(MATLAB)。

创建

描述

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

deviceWriter= audioDeviceWriter(sampleRateValue设置采样率属性sampleRateValue

deviceWriter= audioDeviceWriter(___名称,值设置每个属性名称到指定的。未指定的属性具有默认值。

例:deviceWriter = audioDeviceWriter(48000, '位深度', '8位整数')创建一个系统对象,deviceWriter,即工作在48kHz采样率和一个8位的整数位深度。

属性

展开全部

除非另有说明,性质nontunable,这意味着调用对象后,你不能改变它们的值。对象锁,当你打电话给他们,和释放功能解锁他们。

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

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

驱动程序用于访问您的音频设备,指定为'DirectSound的''ASIO', 要么'WASAPI'

  • ASIO™驱动程序不来在Windows预装®机器。要使用'ASIO'驱动程序选项,安装MATLAB的ASIO驱动之外®

    注意

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

  • WASAPI驱动程序仅支持独占模式。万博1manbetx

ASIO和WASAPI驱动程序不提供采样率转换。对于ASIO和WASAPI驱动器,集采样率通过您的音频设备支持的采样率。万博1manbetx

此属性仅在Windows机器上适用。Linux的®机器总是使用ALSA驱动程序。Mac电脑总是使用CoreAudio的驱动程序。

要指定非缺省司机值,你必须有一个音频工具箱™许可证。如果未安装工具箱,指定非默认司机值返回错误。

数据类型:烧焦|

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

数据类型:烧焦|

信号的采样率发送到音频设备,以Hz,指定为正整数。范围采样率取决于你的音频硬件。

数据类型:||INT8|INT16|INT32|Int64的|UINT8|UINT16|UINT32|UINT64

由该装置所使用的数据类型,指定为字符向量或标量的字符串。执行数字 - 模拟转换之前,输入数据被转换为通过指定的数据类型一位深度

要指定一个非默认一位深度,你必须有一个音频工具箱许可证。如果未安装工具箱,指定非默认一位深度返回一个错误。

数据类型:烧焦|

选项,以支持可变帧大万博1manbetx小,指定为真正要么

  • - 如果audioDeviceWriter对象被锁定时,输入必须在每个呼叫的相同的帧大小。音频装置的缓冲器大小是相同的输入帧大小。

  • 真正- 如果audioDeviceWriter对象被锁定,输入帧大小可以在每个呼叫而改变。您的音频设备的缓冲区大小是通过指定缓冲区大小属性。

数据类型:烧焦

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

注意

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

依赖

要启用这个特性,集万博1manbetxSupportVariableSizeInput真正

数据类型:||INT8|INT16|INT32|Int64的|UINT8|UINT16|UINT32|UINT64

和音频输出设备输入通道矩阵的列之间的映射的源,指定为'汽车'要么'属性'

  • '汽车'- 默认设置确定和音频输出设备输入通道矩阵的列之间的映射。例如,假设你的输入是具有四列的矩阵,并且音频设备有四个可用的信道。输入数据的第1列写入到信道设备1中,输入数据的第2列写入到信道设备的2,依此类推。

  • '属性'- 该ChannelMapping属性决定和音频输出装置的通道的输入矩阵的列之间的映射。

数据类型:烧焦|

和输出装置的信道输入矩阵的列之间的映射的非默认,指定为有效信道索引的一个标量或矢量。查看指定通道映射为audioDeviceWriter例如,对于更多的信息。

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

依赖

要启用这个特性,集ChannelMappingSource'属性'

数据类型:||INT8|INT16|INT32|Int64的|UINT8|UINT16|UINT32|UINT64

用法

描述

numUnderrun= deviceWriter(audioToDevice写入音频样本的一帧,audioToDevice到所选择的音频设备和音频返回样本的数目,因为到最后呼叫防钻撞deviceWriter

注意:当调用audioDeviceWriter系统对象,音频装置指定由设备财产被锁定。音频设备可仅通过一个被锁定audioDeviceWriter在一个时间。要释放的音频设备,通话释放在你的audioDeviceWriter系统对象。

输入参数

展开全部

音频信号写入装置,指定为矩阵。矩阵的列被视为独立的音频通道。

如果audioToDevice是数据类型的'双'要么'单'的范围外的音频设备作家剪辑值[-1,1]。对于其它数据类型,所允许的输入范围为[最小值,最大值]指定的数据类型。

数据类型:||INT16|INT32|UINT8

输出参数

展开全部

样本数量由音频设备作家队列中,因为最后的呼叫溢deviceWriter

数据类型:UINT32

对象函数

使用对象函数,指定系统对象作为第一个输入参数。例如,为了释放一个名为System对象的系统资源OBJ,使用此语法:

释放(OBJ)

展开全部

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

例子

全部收缩

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

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

的FileReader = dsp.AudioFileReader('speech_dft.mp3');的fileInfo = audioinfo('speech_dft.mp3'
的fileInfo =同场的结构:文件名: '/mathworks/devel/bat/Bdoc20a/build/matlab/toolbox/dsp/dsp/speech_dft.mp3' CompressionMethod: 'MP3' NumChannels:1 SAMPLERATE:22050个TotalSamples:112320时间:5.0939名称:[]注释:[]艺术家:[]比特率:64

创建audioDeviceWriter对象并指定采样率。

deviceWriter = audioDeviceWriter('采样率',fileInfo.SampleRate);

呼叫建立以减少在音频流环路初始化的计算负荷。

设置(deviceWriter,零(fileReader.SamplesPerFrame,fileInfo.NumChannels))

使用信息函数来获取关于设备写入器的特征信息。

信息(deviceWriter)
ANS =同场的结构:驱动程序: 'ALSA' 的DeviceName: 'ALSAdefault' MaximumOutputChannels:32

在音频流循环,从文件中读取的音频信号帧,并写入帧到设备。

〜isDone(的FileReader)audioData =的FileReader();deviceWriter(audioData);结束

关闭输入文件,并释放设备。

释放(的FileReader)释放(deviceWriter)

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

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

的FileReader = dsp.AudioFileReader('speech_dft.mp3');

创建audioDeviceWriter系统对象,并指定采样率以匹配音频文件阅读器。

deviceWriter = audioDeviceWriter(...'采样率',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目的。使用采样率文件阅读器作为的采样率的设备作家。呼叫建立以减少在音频流环路初始化的计算负荷。

deviceWriter = audioDeviceWriter('采样率',fileReader.SampleRate);设置(deviceWriter,零(fileReader.SamplesPerFrame,fileInfo.NumChannels))

从文件输出到设备运行的输入音频流循环。打印的总样本不足,而在几秒钟内欠载运行。

totalUnderrun = 0;〜isDone(的FileReader)输入的FileReader =();numUnderrun = deviceWriter(输入);totalUnderrun = totalUnderrun + numUnderrun;结束fprintf中('总样品防钻撞:%d \ n'。,totalUnderrun)
总样本欠载:0。
fprintf中('总计秒防钻撞:%d \ n'。,双(totalUnderrun)/双(deviceWriter.SampleRate))
共有秒欠载:0。

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

释放(的FileReader)释放(deviceWriter)totalUnderrun = 0;

暂停到模拟的算法,需要0.075秒加工。暂停使得音频流循环去慢于装置,这导致在输出音频信号的静音期。

〜isDone(的FileReader)输入的FileReader =();numUnderrun = deviceWriter(输入);totalUnderrun = totalUnderrun + numUnderrun;暂停(0.075)结束fprintf中('总样品防钻撞:%d \ n'。,totalUnderrun)
总样本欠载:71680。
fprintf中('总计秒防钻撞:%d \ n'。,双(totalUnderrun)/双(deviceWriter.SampleRate))
共有秒欠载:3.250794e + 00。

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

释放(的FileReader)释放(deviceWriter)totalUnderrun = 0;

您的音频流循环的帧大小设置为2048。由于万博1manbetxSupportVariableSizeInput财产你audioDeviceWriter系统对象设置为,音频装置的缓冲器大小的尺寸与输入帧大小相同。增加您的设备缓冲区的大小减小欠载。

的FileReader = dsp.AudioFileReader('speech_dft.mp3');fileReader.SamplesPerFrame = 2048;的fileInfo = audioinfo('speech_dft.mp3');deviceWriter = audioDeviceWriter('采样率',fileReader.SampleRate);设置(deviceWriter,零(fileReader.SamplesPerFrame,fileInfo.NumChannels))

计算总欠载。

〜isDone(的FileReader)输入的FileReader =();numUnderrun = deviceWriter(输入);totalUnderrun = totalUnderrun + numUnderrun;暂停(0.075)结束fprintf中('总样品防钻撞:%d \ n'。,totalUnderrun)
总样本欠载:0。
fprintf中('总计秒防钻撞:%d \ n'。,双(totalUnderrun)/双(deviceWriter.SampleRate))
共有秒欠载:0。

增加的帧大小减少你的音频流循环的总溢。然而,增加帧大小也增加了等待时间。其他方法来减少溢包括:

  • 增加独立的输入帧大小的缓冲器大小。要加大自主输入帧大小的缓冲区的大小,你必须先设置万博1manbetxSupportVariableSizeInput真正。这种方法也增加了等待时间。

  • 降低采样率。降低采样率降低了在信号分辨率为代价延迟和欠载。

  • 选择适合您的系统的最佳驱动程序和设备。

指定一个非缺省信道映射audioDeviceWriter目的。这个例子是特定硬件。它假定您的计算机有两个可用频道的默认音频输出设备。

创建audioDeviceWriter使用默认设置的对象。

deviceWriter = audioDeviceWriter;

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

信息(deviceWriter)
ANS =同场的结构:司机: 'DirectSound的' 设备名称: '小学声音驱动程序' MaximumOutputChannels:2

如果deviceWriter被调用的一列数据,两个通道被写入到音频输出装置。这两个信道对应于数据的一列。

使用audioOscillator对象输出音您audioDeviceWriter目的。你的对象,sineGenerator在被调用时返回一个向量。

sineGenerator = audioOscillator;

写正弦波音音频设备。如果您正在使用耳机,你可以听到从两个通道的基调。

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

如果你的audioDeviceWriter对象被称为与数据的两列,两个通道被写入到音频输出装置。第一列对应于信道1的音频输出装置,并且所述第二列对应通道的音频输出装置的2。

写一个两列矩阵的音频输出设备。列1个对应于正弦音调,和列2个对应于一个静态信号。如果您正在使用耳机,可以听到一个扬声器发声,并从其它扬声器的静态。

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

通过指示对应于输入列的索引在输出信道号指定您的设备的信道和输出矩阵的列之间的替代映射。组ChannelMappingSource'属性'。表明输入数据写入的第一列到信道输出设备的2,以及输入数据的第二列写入到信道输出设备的1。要修改的通道映射,必须先解锁audioDeviceReader目的。

释放(deviceWriter)deviceWriter.ChannelMappingSource ='属性';deviceWriter.ChannelMapping = [2,1];

与反向映射播放音频信号。如果您正在使用耳机,请注意语气和静态皆已扬声器。

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

扩展功能

介绍了在R2016a