可以使用audiorecorder函数录制来自输入设备(如麦克风)的音频数据。
myvoice = audiorecorder(Fs,nBits,nChannels)
Fs 采样频率,典型采样率为 8000、11,025、22,050、44,100、48,000、96,000 和 192,000 Hz
nBits 采样位数,指定为 8、16 或 24
nChannels 音频通道数,指定为 1(单声道)或 2(立体声)
代码如下:
%语谱图
clc;clear;
Fs = 44800; %设置采样率,大多数设置支持的典型采样率为 8000、11,025、22,050、44,100、48,000、96,000 和 192,000 Hz。
nBits = 16; %采样位数,指定为 8、16 或 24。
nChannel = 1; %音频通道数,指定为 1(单声道)或 2(立体声)
time = 5; %采样时间
myVoice = audiorecorder(Fs,nBits,nChannel);
disp('Start')
recordblocking(myVoice,time); %开始录制
disp('End')
play(myVoice); %回放录制
myrecording = getaudiodata(myVoice); %将录制的音频信号存储在数值数组中
audiowrite('myvoice.wav',myrecording,Fs); %保存文件
%specgram(x1,N,fs,window,overlap):绘制语谱图
R=1024; %窗长
window=hamming(R); %汉明窗
N=1024; %fft个数,与窗长相同
L=512; %步长
overlap=R-L; %帧长重叠部分,也叫帧移,一般重叠部分为50%
specgram(myrecording,N,Fs,window,overlap); %绘制语谱图
xlabel('时间(s)');ylabel('频率(Hz)');
title('语谱图');
saveas(1,'语谱图.jpg') %保存为图片
specgram函数是绘制语谱图的函数
x1 语音向量,注意单声道双声道的问题
N fft个数
s 采样频率
window 帧长,即加窗处理中的窗长
overlap 帧移,帧长重叠部分,一般重叠部分取50%
运行结果: