如何在matlab中录制和播放音频?
1、录制音频
记录来自音频输入设备(例如连接到系统的麦克风)的数据:
1、创建一个audiorecorder对象。
2、调用record或recordblocking方法,其中:
record即使记录继续进行,也可以将立即控制返回给调用函数或命令提示符。指定记录长度(以秒为单位),或使用stop方法结束记录。(可选)调用pause和resume方法。记录是异步执行的。
recordblocking保留控制权,直到录制完成。以秒为单位指定记录的长度。记录同步进行。
3、使用该getaudiodata方法创建一个与信号数据相对应的数字数组。
以下示例说明如何使用recordblocking和record方法。
2、记录麦克风输入
本示例说明如何记录麦克风输入,回放记录以及将记录的音频信号存储在数字数组中。您必须首先将麦克风连接到系统。
创建一个audiorecorder名称recObj为记录音频输入的对象。
audiorecorder创建一个8000 Hz,8位1通道audiorecorder对象。
3、录制您的声音5秒钟。
disp('Start speaking.')
recordblocking(recObj, 5);
disp('End of Recording.');
4、播放录音。
play(recObj);
声音还是有的,不过时噪音,我的耳机不太好。
5、将数据存储在双精度数组中y。
y = getaudiodata(recObj);
6、绘制音频样本。
plot(y);
1、从不同的声卡录制两个通道
要独立于两个不同的声卡录制音频,并在每个声卡上连接麦克风,请执行以下操作:
呼叫audiodevinfo以列出可用的声卡。例如,此代码返回一个结构数组,其中包含系统上所有输入和输出音频设备:
info = audiodevinfo;
通过名称标识要使用的声卡,并记下其ID值。
2、创建两个audiorecorder对象。例如,此代码创建audiorecorder对象,recorder1用于以44.1 kHz和每个采样16位的速率记录来自设备3的单个通道。的audiorecorder对象,recorder2是用于在48kHz记录从装置4的单个信道:
recorder1 = audiorecorder(44100,16,1,3);
recorder2 = audiorecorder(48000,16,1,4);
3、分别录制每个音频通道。
record(recorder1);
record(recorder2);
pause(5);
录音会同时发生,因为对的第一个呼叫record不会阻塞。
4、停止录音。
stop(recorder1);
stop(recorder2);
5、指定录音质量
默认情况下,audiorecorder对象使用8000赫兹的采样率,8位深度(每个采样8位)和单个音频通道。这些设置可最大程度地减少所需的数据存储量。对于更高质量的记录,请增加采样率或位深度。
例如,典型的光盘使用44100赫兹的采样率和16位深度。audiorecorder使用以下设置创建一个对象以立体声录制(两个通道):
myRecObj = audiorecorder(44100, 16, 2);
有关可用属性和值的更多信息,请参见audiorecorder参考页。
1、播放音讯
导入或录制音频后,MATLAB支持多种方法来监听数据:
要使用单个功能调用进行简单播放,请使用sound或soundsc。例如,加载包含信号和采样率数据的样本MAT文件,然后收听音频:
load chirp.mat;
sound(y, Fs);
这个是鸟儿的声音。
2、要在播放过程中获得更大的灵活性,包括具有暂停,恢复或定义回调的audioplayer功能,请使用此功能。创建一个audioplayer对象,然后调用方法播放音频。例如,听gong示例文件:
load gong.mat;
gong = audioplayer(y, Fs);
play(gong);
3、有关其他示例,请参见在功能中录制或播放音频。
如果未指定采样率,sound则以8192赫兹的速度播放。对于任何播放,请指定较小的采样率以更慢地回放,而指定较大的采样率以更快地回放。
1、在功能内录制或播放音频
如果在函数内部创建audioplayer或audiorecorder对象,则该对象仅在函数持续时间内存在。例如,创建一个名为的播放器函数playFile和一个简单的回调函数showSeconds:
function playFile(myfile)
load(myfile);
obj = audioplayer(y, Fs);
obj.TimerFcn = 'showSeconds';
obj.TimerPeriod = 1;
play(obj);
end
function showSeconds
disp('tick')
end
2、playFile从命令提示符处调用以播放文件handel.mat:
playFile('handel.mat')
3、以每秒记录的8192个样本的采样率,播放文件中的73113个样本大约需要8.9秒。但是,该playFile功能通常在播放完成之前结束并清除audioplayer对象obj。
为确保完整播放或录制,请考虑以下选项:
使用playblocking或recordblocking代替play或record。阻塞方法将保持控制,直到播放或录制完成。如果阻止控制,则在播放或录制期间无法发出任何其他命令或方法(例如pause或resume)。
为您的函数创建一个输出参数,该参数在基本工作空间中生成一个对象。例如,修改playFile函数以包含输出参数:
function obj = playFile(myfile)
调用函数:
h = playFile('handel.mat');
因为h基本工作空间中存在,所以您可以从命令提示符下暂停播放:
pause(h)