基础知识
1.MATLAB识别的常用语音信号类型:
WAV格式
TXT格式
2.读取wav格式语音用函数:wavread
常用格式:
y=wavread(‘语音文件名’)
[y,fs]=wavread (‘语音文件名’)
用于读取语音,采样值放在向量y中,fs表示采样频率。
3.读取wav格式语音用函数:audioread
常用格式:
[y,fs]=audioread (‘语音文件名’)
用于读取语音,采样值放在向量y中,fs表示采样频率。
4.语音信号重采样函数:resample
格式:
s=resample(s1,fs,fs1),
将采样率为fs1的s1的信号变成采样率为fs的s信号,而信号的大致形状不变。
5.读取txt格式的语音用函数:
fopen—— 打开文件
fscanf—— 读取文件中数据
常用语法格式
fid = fopen(‘语音文件.txt’)
e = fscanf(fid,'%f');
6.单声道和双声道语音
声音文件有单声道和双声道,MATLAB如何区分单声道和双声道语音。
将语音信号读入到内存,借助“whos”命令在MATLAB工作空间查看存放语音信号变量的属性来区分。
7.双声道分离成单声道
[x,fs]=wavread(‘a123.wav’);
(a123.wav是一个双声道语音)
分离的方法:
left=x( : ,1); %取变量”x”的第一列所有值
right=x( : ,2); %取变量”x”的第二列所有值
分离的声道单独存储
[x,fs]=wavread('a123.wav');
left=x(:,1); % 抽取第 1 声道
right=x(:,2); % 抽取第 2 声道
wavwrite(left,fs,'left.wav');
% 实现1声道保存为语音文件
wavwrite(right,fs,'right.wav');
% 实现2声道保存为语音文件
如果是使用 audioread函数读取语音信号,在将分离的声道信息存储为语音文件,需要按如下格式书写: audiowrite(filename,y,fs)
(说明:filename-存储的语音文件名
y-存储分离的声道变量名
fs-采样频率)
声道分离是利用了MATLAB 的矩阵抽取运算。
声道合并利用了矩阵重组运算。
x_new=[left,right];
代码如下:
clc;clear
[x,fs]=audioread('123.wav');
whos
left=x(:,1); % 抽取第 1 声道
right=x(:,2); % 抽取第 2 声道
audiowrite('left.wav',left,fs); % 实现1声道保存为语音文件
audiowrite('right.wav',right,fs);
% 实现2声道保存为语音文件
结果如下:
分离前:
分离后
9.声音的录制
录制时发现使用matlab录制的声音仅有一个声道(即n*1)矩阵,但在手机上录制的声音使用matlab上处理时,为双声道,原理倒是没有细查,哈哈哈哈
录制的代码如下
Fs=44800;%麦克分采样率
nBits=16;%量化位数
nChannel=1;%录音的通道数,可以设置1或者2
time=5;%录制音频的时间,单位是秒
recObj = audiorecorder(Fs, nBits, nChannel);
disp('Start speaking.')%开始录制声音
recordblocking(recObj, time);
disp('End of Recording.');% 回放录音数据
play(recObj);% 获取录音数据
myRecording = getaudiodata(recObj);% 绘制录音数据波形
plot(myRecording);%存储语音信号
filename = 'audiorecorder_data_1.wav';
audiowrite(filename, myRecording, Fs);
10.将该语音转换成TXT文件
可看成保存矩阵
clc;clear
[x,fs]=audioread('audiorecorder_data_1.wav');
[x,fs]=audioread('玫瑰少年.wav');
left=x(:,1); % 抽取第 1 声道
right=x(:,2); % 抽取第 2 声道
audiowrite('left.wav',left,fs); % 实现1声道保存为语音文件
audiowrite('right.wav',right,fs); % 实现2声道保存为语音文件
x_new=[left,right];
save afile.txt -ascii x_new
使用 save afile.txt -ascii x_new将体现语音信号的矩阵保存为txt文件