主要内容

audioDeviceWriter

播放声卡

描述

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

音频设备写入器的数据流

  • 对象输入音频信号帧audioDeviceWriter

  • audioDeviceWriter使用指定的驱动程序将帧(设备输入)传递到指定音频设备的缓冲区。

  • 音频设备以指定的采样率和位深度执行数字到模拟转换。

  • 音频设备输出模拟块到您的扬声器。

将数据传输到音频设备:

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

  2. 使用参数调用对象,就像调用函数一样。

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

创建

描述

deviceWriter= audioDeviceWriter返回一个System对象,deviceWriter,它实时地将音频样本写入音频输出设备。

deviceWriter= audioDeviceWriter (sampleRateValue设置SampleRate财产sampleRateValue

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

例子:DeviceWriter = audioViceWriter(48000,'Bitdepth','8位整数')创建一个System对象,deviceWriter,以48 kHz采样率和8位整数位深度运行。

特性

展开全部

除非另有说明,否则属性是不可努力,这意味着在调用对象后无法更改其值。当您调用它们时,对象锁定释放函数打开它们。

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

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

用于访问音频设备的驱动程序指定为'directsound'“ASIO”,或“WASAPI”

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

    请注意

    如果司机被指定为“ASIO”,使用asiosettings(音频工具箱)将声卡缓冲区大小设置为您的缓冲区大小audioDeviceWriter系统对象。

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

ASIO和WASAPI驱动程序不提供采样率转换。适用于Asio和Wasapi司机,套装SampleRate到您的音频设备支持的采样率。金宝app

此属性仅适用于Windows计算机。Linux®机器总是使用ALSA驱动程序。Mac机器总是使用CoreAudio驱动程序。

指定默认的司机值,则必须具有音频工具箱™许可证。如果工具箱未安装,请指定非默认司机值将返回错误。

数据类型:char|细绳

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

数据类型:char|细绳

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

数据类型:|双倍的|int8|int16|INT32.|INT64.|uint8.|uint16|uint32|uint64

设备使用的数据类型,指定为字符向量或字符串标量。在执行数字到模拟转换之前,将输入数据投入到由此指定的数据类型BitDepth

指定非默认展示BitDepth,您必须具有音频工具箱许可证。如果工具箱未安装,请指定非默认值BitDepth返回错误。

数据类型:char|细绳

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

  • ——如果audioDeviceWriter对象被锁定,输入必须在每个呼叫中​​具有相同的帧大小。音频设备的缓冲区大小与输入帧大小相同。

  • 真正的——如果audioDeviceWriter对象被锁定,输入帧大小可以在每个呼叫中​​更改。通过介绍音频设备的缓冲区大小BufferSize财产。

数据类型:char

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

请注意

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

依赖关系

启用此属性,设置金宝appSupportVariableSizeInput真正的

数据类型:|双倍的|int8|int16|INT32.|INT64.|uint8.|uint16|uint32|uint64

输入矩阵的列与音频输出设备的通道之间的映射源,指定为“汽车”'财产'

  • “汽车”——默认设置决定了输入矩阵列和音频输出设备通道之间的映射。例如,假设您的输入是一个有四列的矩阵,您的音频设备有四个可用的通道。输入数据的第一列写入设备的通道1,输入数据的第二列写入设备的通道2,以此类推。

  • '财产'——这是channelmappping.属性确定输入矩阵列和音频输出设备的通道之间的映射。

数据类型:char|细绳

Nondefault映射在输入矩阵和输出设备通道的列之间,指定为有效通道索引的标量或向量。

要有选择地在输入矩阵的列和声卡的输出通道之间进行映射,您必须有一个Audio Toolbox许可证。如果工具箱未安装,请指定非默认值channelmappping.返回错误。

请注意

要确保立体声设备的单声道输出只有一个通道,请使用默认值channelmappping.设置并提供一个立体声信号,其中一个通道都是零。

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

例子:outputraptionsonly = [零(尺寸(x,1),1)x(:,1)];

依赖关系

启用此属性,设置channelmappingsource.'财产'

数据类型:|双倍的|int8|int16|INT32.|INT64.|uint8.|uint16|uint32|uint64

使用

描述

例子

numUnderrun= deviceWriter (录音所写一帧音频样本,录音所,并返回自上次调用以来运行过的音频样本数量deviceWriter

注意:当你呼叫audioDeviceWriter对象指定的音频设备设备属性是锁着的。一个音频设备只能被一个锁定audioDeviceWriter一次。释放音频设备,呼叫释放在你的audioDeviceWriter系统对象。

输入参数

展开全部

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

如果录音所是数据类型“双”'单身的',音频设备写入器剪辑范围[- 1,1]之外的值。对于其他数据类型,允许的输入范围是指定数据类型的[min, max]。

数据类型:|双倍的|int16|INT32.|uint8.

输出参数

展开全部

自最后一次调用以来音频设备写入器队列处于欠运行状态的示例数deviceWriter

数据类型:uint32

对象的功能

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

发行版(obj)

展开全部

getAudioDevices 列出可用的音频设备
信息 关于音频设备写入器的特征信息
克隆 创建重复系统对象
isLocked 确定if.系统对象正在使用中
释放 释放资源并允许更改系统对象属性值和输入特征
重置 使内部状态复位系统对象
运行系统对象算法
设置 一次性为System对象设置任务

例子

全部折叠

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

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

fileReader = dsp。AudioFileReader (“speech_dft.mp3”);fileInfo = audioinfo (“speech_dft.mp3”
fileInfo =结构体字段:文件名:'/mathworks/devel/bat/Bdoc21a/build/matlab/toolbox/dsp/dsp/speech . MP3' CompressionMethod: 'MP3' NumChannels: 1 SampleRate: 22050 TotalSamples: 112320 Duration: 5.0939 Title: [] Comment: [] Artist: [] BitRate: 64

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

deviceWriter = audioDeviceWriter ('采样率',fileinfo.samplerate);

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

设置(deviceWriter 0 (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目的。使用SampleRate文件读取器的SampleRate设备写入器的。调用设置减少音频流循环中的初始化的计算负荷。

deviceWriter = audioDeviceWriter ('采样率',filereader.samplerate);设置(deviceWriter 0 (fileReader.SamplesPerFrame fileInfo.NumChannels))

使用从文件输入和输出到设备的输入运行音频流循环。在几秒钟内打印欠下的总样本和欠下的。

totalUnderrun = 0;~isDone(fileReader) input = fileReader();numUnderrun = deviceWriter(输入);totalUnderrun = totalUnderrun + numUnderrun;结束流('未运行的总样本:%d.\n',普威尔经纪)
总样本欠运行:0。
流('运行总秒数:%d.\n',Double(TotalWerderWrun)/ Double(DeviceWriter.Sampleate))
总落后秒:0。

释放你的dsp。AudioFileReaderaudioDeviceWriter对象,并将计数器变量设置为零。

释放(FILEREADER)释放(DEVICEWRITER)TOTERUNDUNDRUN = 0;

使用暂停来模拟一个需要0.075秒处理的算法。暂停会导致音频流循环比设备慢,从而导致输出音频信号出现一段时间的沉默。

~isDone(fileReader) input = fileReader();numUnderrun = deviceWriter(输入);totalUnderrun = totalUnderrun + numUnderrun;暂停(0.075)结束流('未运行的总样本:%d.\n',普威尔经纪)
欠检样本总数:71680个。
流('运行总秒数:%d.\n',Double(TotalWerderWrun)/ Double(DeviceWriter.Sampleate))
总秒落后:3.250794e+00。

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

释放(FILEREADER)释放(DEVICEWRITER)TOTERUNDUNDRUN = 0;

设置音频流循环的帧大小为2048。因为金宝appSupportVariableSizeInput你的属性audioDeviceWriter系统对象设置为,音频设备的缓冲区大小与输入帧大小相同。增加设备缓冲区大小可以减少欠运行。

fileReader = dsp。AudioFileReader (“speech_dft.mp3”);fileReader。SamplesPerFrame = 2048;fileInfo = audioinfo (“speech_dft.mp3”);deviceWriter = audioDeviceWriter ('采样率',filereader.samplerate);设置(deviceWriter 0 (fileReader.SamplesPerFrame fileInfo.NumChannels))

计算总潜流。

~isDone(fileReader) input = fileReader();numUnderrun = deviceWriter(输入);totalUnderrun = totalUnderrun + numUnderrun;暂停(0.075)结束流('未运行的总样本:%d.\n',普威尔经纪)
总样本欠运行:0。
流('运行总秒数:%d.\n',Double(TotalWerderWrun)/ Double(DeviceWriter.Sampleate))
总落后秒:0。

增加的帧大小减少了音频流循环的总滞后运行。然而,增加帧大小也会增加延迟。其他减少underrun的方法包括:

  • 随着输入帧大小而增加缓冲区大小。要增加自与输入帧大小无关的缓冲区大小,必须先设置金宝appSupportVariableSizeInput真正的.这种方法还会增加延迟。

  • 降低采样率。降低采样率以降低信号分辨率为代价降低了延迟和欠运行。

  • 为系统选择最佳驱动程序和设备。

扩展能力

介绍了R2016a