📄 mkey.asv
字号:
% --------------------------------------------------------------------
function mkey(cmd, handles)
hf = handles.mcut;
ud = get(hf,'userdata');
hw = handles.axes_wave;
if strcmp( cmd, 'start')
i=0:0.2:1;
plot(i,i,'Parent',hw);
set(hw,'NextPlot','replace');
[ud.fname, ud.pname] = uigetfile('*.wav');
% ud.wave wave data
ud.wave = readwav([ud.pname,ud.fname], 'r');
%滤波
%ud.wave=filter([1 -0.9375],1,ud.wave);
%n = 256;
% inc = 128;
% size_wave = floor((size(ud.wave,1)-n)/inc)*inc + n;
% fprintf('size_wave = %g', size_wave);
% ud.wave = ud.wave(1:size_wave);
%display size of ud.wave
soundsc(ud.wave, 8000);
%ud.index = 1;
ud.x1 = fix(length(ud.wave) * 0.1);
ud.x2 = fix(length(ud.wave) * 0.9);
ud = refresh(ud, handles);
set(hf,'userdata', ud);
return
end
if isempty(ud)
return
end
%index = ud.index;
switch cmd
%case 'previous'
%% previous sample
%if index > 1
% index = index-1;
%end
%ud.index = index;
%ud = loadwave(ud, handles);
%ud = refresh(ud, handles);
%case 'next'
% next sample
%if index < length(waves)
%index = index+1;
%end
%ud.index = index;
%ud = loadwave(ud, handles);
%ud = refresh(ud, handles);
case 'sound'
soundsc(ud.wave(ud.x1 : ud.x2));
%case 'jump'
%while(1)
% answer = inputdlg('输入Word:', '输入欲跳转到的记录号', 1, {'1'});
%if isempty(answer)
% continue;
%end
%index = str2num(answer);
% if index<1 | index>length(waves)
% continue;
%end
% break;
%end
%ud.index = index;
%ud = loadwave(ud, handles);
%ud = refresh(ud, handles);
case 'save'
x = inputdlg('Please input the number and its order:')
if x ~= null
fname1 = [ud.fname(1: findstr(filename1,'.wav')-1),'_',x]
pname1 = 'E:\应用软件\matlab6\work\标准数据库\原始语音数据\龚剑耀\不定长单数字\'
fid1 = writewav(ud.wave(ud.x1 : ud.x2),8000,[pathname, filename1, '_n.wav'], '16', 'r')
c1=melcepst(ud.wave(ud.x1 : ud.x2),8000,'Mpt',16,24,256,64,0,0.5)
fidMel1 = fopen([pname1,'Mel不定长单数字\','Pointset_SphMel',fname1,'_n.h32'],'w')
if fidMel1<0
warndlg('can''t open Pointset_SphMel...n.h32','warn')
return
end
count = fwrite(fidmel1,c1,'float32')
if count<10
warndlg('can''t write Pointset_SphMel...n.h32','warn')
return
end
fclose(fidMel1);
pname1 = 'E:\应用软件\matlab6\work\标准数据库\原始语音数据\龚剑耀\定长单数字\'
if ud.x2 - ud.x1 >= 2239
a = ud.wave(ud.x1 : ud.x1+2239)
else
a = ud.wave(ud.x1:ud.x2)
a(ud.x2-ud.x1+2 : 2240) = 0
end
fid1 = writewav(a,8000,[pathname, filename1,'_e.wav'], '16', 'r')
c1=melcepst(a,8000,'Mpt',16,24,256,64,0,0.5)
fidMel1 = fopen([pname1,'Mel不定长单数字\','Pointset_SphMel',fname1,'_n.h32'],'w')
if fidMel1<0
warndlg('can''t open Pointset_SphMel...n.h32','warn')
return
end
count = fwrite(fidmel1,c1,'float32')
if count<10
warndlg('can''t write Pointset_SphMel...n.h32','warn')
return
end
fclose(fidMel1);
end
case 'set start point'
%set(ud.h1,'Xdata', [ud.x2, ud.x2]);
%set(ud.h2,'Xdata', [ud.x1, ud.x1]);
ii = ud.x1;
ud.x1 = ud.x2;
ud.x2 = ii;
ud = refresh(ud, handles);
otherwise
disp('Unknown method');
end
% modify the userdata
set(hf,'userdata', ud);
% --------------------------------------------------------------------
function ud = refresh(uu, handles)
hf = handles.mcut;
hw = handles.axes_wave;
ht = handles.text_prop;
%uu = loadwave(uu, handles);
plot(uu.wave,'Parent',hw);
set(hw, 'XLim', [1 length(uu.wave)]);
set(hw,'NextPlot','add');
ylim = get(hw, 'YLim');
uu.h1 = plot([uu.x1 uu.x1],ylim, 'Parent',hw, 'Color','red' ,'LineWidth',2);
uu.h2 = plot([uu.x2 uu.x2],ylim, 'Parent',hw, 'Color','green','LineWidth',2);
set(hw,'NextPlot','replace');
uu.drag = 0;
uu.x0 = 0; % where the mouse clicked
txt = sprintf('%s%s', uu.pname, uu.fname);
set(ht, 'String', txt);
ud = uu;
% --------------------------------------------------------------------
%function ud = loadwave(uu, handles)
%global waves
%uu.wave = waves(uu.index).x; % 语音数据
%uu.x1 = waves(uu.index).x1; % 开始点
%uu.x2 = waves(uu.index).x2; % 结束点
%if uu.x1==0 | uu.x2==0 % 未进行自动/手工端点检测前, x1=x2=0
% uu.x1 = fix(length(uu.wave) * 0.1);
% uu.x2 = fix(length(uu.wave) * 0.9);
%end
%ud = uu;
%--------------------------------------------------------------------------
function calculate_MFCC(ud, handles)
hf = handles.mcut;
ud = get(hf,'userdata');
hw = handles.axes_wave;
FrameLen = 256;
FrameInc = 128;
% in the first step see the MFCC of the filtered data,
% in the next step see the MFCC of the unfilered data.
ud.waveFrame = enframe(ud.wave, len, inc)
% display size of ud.waveFrame
size(ud.waveFrame)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -