⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mkey.asv

📁 实现语音波形的显示、波形放大及缩小(双击鼠标实现)
💻 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 + -