记录和播放音频数据处理在MATLAB®从系统上的音频输入和输出设备。从R2020b开始,支持音频回放金宝appMATLAB在线™.
从音频输入设备(如连接到系统的麦克风)记录数据:
创建一个audiorecorder
对象。
调用记录
或recordblocking
方法,地点:
记录
即使在录制过程中,也立即返回对调用函数或命令提示符的控制。指定记录的长度(以秒为单位),或使用停止
方法。可选地,叫暂停
和重新开始
方法。记录是异步执行的。
recordblocking
保留控制直到记录完成。指定记录的长度,以秒为单位。录音是同步进行的。
方法创建与信号数据对应的数字数组getaudiodata
方法。
下面的例子展示了如何使用recordblocking
和记录
方法。
这个例子展示了如何记录麦克风输入,回放记录,并将记录的音频信号存储在一个数字数组中。您必须首先将一个麦克风连接到您的系统。
创建一个audiorecorder
对象命名recObj
用于记录音频输入。
recObj = audiorecorder
recbj = audiorecorder with properties: SampleRate: 8000 BitsPerSample: 8 NumChannels: 1 DeviceID: -1 CurrentSample: 1 TotalSamples: 0 Running: 'off' StartFcn: [] StopFcn: [] TimerFcn: [] TimerPeriod: 0.0500 Tag: " UserData: [] Type: 'audiorecorder'
audiorecorder
创建8000hz, 8位,1通道audiorecorder
对象。
录下你的声音5秒钟。
disp (开始说话。5) recordblocking (recObj);disp (结束录音。);
回放录音。
玩(recObj);
以双精度数组存储数据,y
.
y = getaudiodata (recObj);
绘制音频样本。
情节(y);
用麦克风从两个不同的声卡上分别记录声音:
调用audiodevinfo
列出可用的声卡。例如,这段代码返回一个结构数组,其中包含系统上所有的输入和输出音频设备:
信息= audiodevinfo;
ID
值。创建两个audiorecorder
对象。例如,这段代码创建audiorecorder
对象,recorder1
,用于记录设备3的单个通道,频率为44.1 kHz,每个样本16位。的audiorecorder
对象,recorder2
,用于记录设备4的单声道,频率为48khz:
recorder1 = audiorecorder(44100年,16岁,1,3);recorder2 = audiorecorder(1 48000人,16日,4);
分别记录每个音频通道。
记录(recorder1);记录(recorder2);暂停(5);
记录
不阻止。停止录音。
停止(recorder1);停止(recorder2);
默认情况下,一个audiorecorder
对象使用8000赫兹的采样率,8位的深度(每个采样8位)和单个音频通道。这些设置最小化了所需的数据存储量。对于更高质量的录音,增加采样率或位深。
例如,典型的光盘使用44,100赫兹的采样率和16位深度。创建一个audiorecorder
对象录制立体声(两个通道)与这些设置:
myRecObj = audiorecorder(44100,16, 2);
有关可用属性和值的更多信息,请参见audiorecorder
参考页面。
在您导入或录制音频后,MATLAB支持几种方式来听数据:金宝app
对于使用单个函数调用的简单回放,请使用声音
或soundsc
.例如,加载一个包含信号和采样率数据的mat样本文件,并听音频:
加载chirp.mat;声音(y, Fs);
要在回放过程中获得更大的灵活性,包括暂停、恢复或定义回调的能力,请使用audioplayer
函数。创建一个audioplayer
对象,然后调用方法来播放音频。例如,听龚
示例文件:
加载gong.mat;gong = audioplayer(y, Fs);玩(锣);
有关其他示例,请参见在函数内录制或播放音频.
如果不指定采样率,声音
播放频率为8192赫兹。对于任何回放,指定较小的采样率以播放得更慢,并指定较大的采样率以播放得更快。
请注意
大多数声卡支持大约5000到480金宝app00赫兹之间的采样率。指定超出此范围的抽样率可能会产生意想不到的结果。
如果你创建一个audioplayer
或audiorecorder
对象时,对象仅在函数期间存在。例如,创建一个player函数调用playFile
和一个简单的回调函数showSeconds
:
函数playFile (myfile)负载(myfile);obj = audioplayer(y, Fs);obj。TimerFcn =“showSeconds”;obj。TimerPeriod = 1;玩(obj);function showSeconds显示时间
调用playFile
从命令提示符中播放文件handel.mat
:
playFile(“handel.mat”)
在记录的每秒8192个样本的采样率下,播放73113个样本大约需要8.9秒。然而,playFile
函数通常在回放完成之前结束,并清除audioplayer
对象obj
.
为了确保完整的回放或录音,请考虑以下选项:
使用playblocking
或recordblocking
而不是玩
或记录
.阻塞方法保持控制直到播放或记录完成。如果阻止控制,则不能发出任何其他命令或方法(例如暂停
或重新开始
)。
为函数创建一个输出参数,在基本工作区中生成一个对象。例如,修改playFile
函数包含输出参数:
函数obj = playFile(myfile)
调用函数:
h = playFile(“handel.mat”);
因为h
存在于基本工作区中,您可以从命令提示符暂停回放:
暂停(h)
audioplayer
|声音
|soundsc
|audiorecorder