0001 function varargout = wave_browser(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030 gui_Singleton = 1;
0031 gui_State = struct('gui_Name', mfilename, ...
0032 'gui_Singleton', gui_Singleton, ...
0033 'gui_OpeningFcn', @wave_browser_OpeningFcn, ...
0034 'gui_OutputFcn', @wave_browser_OutputFcn, ...
0035 'gui_LayoutFcn', [] , ...
0036 'gui_Callback', []);
0037 if nargin && ischar(varargin{1})
0038 gui_State.gui_Callback = str2func(varargin{1});
0039 end
0040
0041 if nargout
0042 [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
0043 else
0044 gui_mainfcn(gui_State, varargin{:});
0045 end
0046
0047
0048
0049
0050 function wave_browser_OpeningFcn(hObject, eventdata, handles, varargin)
0051
0052
0053
0054
0055
0056
0057
0058 handles.output = hObject;
0059
0060
0061 guidata(hObject, handles);
0062
0063
0064
0065
0066
0067
0068 function varargout = wave_browser_OutputFcn(hObject, eventdata, handles)
0069
0070
0071 varargout{1} = handles.output;
0072
0073
0074
0075 function Frequency_Callback(hObject, eventdata, handles)
0076 handles.Fs = eval(get(hObject,'String'));
0077 guidata(gcbo,handles);
0078
0079 function Frequency_CreateFcn(hObject, eventdata, handles)
0080 set(hObject,'String', '44100');
0081 handles.Fs = 44100;
0082 guidata(gcbo,handles);
0083 if ispc
0084 set(hObject,'BackgroundColor','white');
0085 else
0086 set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
0087 end
0088
0089
0090 function LoadFile_Callback(hObject, eventdata, handles)
0091 [fname pname]=uigetfile('*.*','Load Time Series');
0092 set( handles.FileNameString, 'String',fname);
0093 handles.filename = [pname fname];
0094 [path] = cell2mat(regexp( handles.filename, '^.*\', 'match' ));
0095 [extension] = cell2mat(regexp( handles.filename, '\w+$', 'match' ));
0096 set(handles.Path,'String',path);
0097 set(handles.Extensions,'String',extension);
0098
0099 guidata(gcbo,handles);
0100 loadfile( hObject, eventdata, handles );
0101
0102 function loadfile( hObject, eventdata, handles )
0103
0104 fid=fopen(handles.filename,'r');
0105 contents=get(handles.endian,'String');
0106 precision=contents{get(handles.endian,'Value')};
0107 hw=waitbar(0,'Loading ...'); waitbar(0.5,hw); drawnow
0108 [handles.ts,count]=fread(fid,inf,'short',precision);
0109 fclose(fid);
0110 handles.ts = handles.ts/std(handles.ts);
0111 handles.Fs = eval(get(handles.Frequency,'String'));
0112 set( handles.Duration, 'String', count/handles.Fs );
0113 Tim=eval(get(handles.DisplayWindow,'String'));
0114 display_frac = 1;
0115 set( handles.slider1, 'Value', 0 );
0116 set( handles.SegmentButton, 'Enable', 'on' );
0117 set( handles.LoadNext, 'Enable', 'on' );
0118 set( handles.PlayAll, 'Enable', 'on' );
0119 set( handles.PlayWindow, 'Enable', 'on' );
0120 set( handles.Plot, 'Enable', 'on' );
0121 handles.segments = [];
0122
0123 guidata(gcbo,handles);
0124 close(hw);
0125 Plot_Callback(hObject, eventdata, handles)
0126
0127
0128 function endian_Callback(hObject, eventdata, handles)
0129
0130
0131 function endian_CreateFcn(hObject, eventdata, handles)
0132 if ispc
0133 set(hObject,'BackgroundColor','white');
0134 else
0135 set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
0136 end
0137
0138
0139 function edit2_Callback(hObject, eventdata, handles)
0140 function edit2_CreateFcn(hObject, eventdata, handles)
0141 if ispc
0142 set(hObject,'BackgroundColor','white');
0143 else
0144 set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
0145 end
0146
0147 function FileNameString_Callback(hObject, eventdata, handles)
0148
0149 function FileNameString_CreateFcn(hObject, eventdata, handles)
0150 if ispc
0151 set(hObject,'BackgroundColor','white');
0152 else
0153 set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
0154 end
0155
0156 function WinSize_Callback(hObject, eventdata, handles)
0157
0158 function WinSize_CreateFcn(hObject, eventdata, handles)
0159 if ispc
0160 set(hObject,'BackgroundColor','white');
0161 else
0162 set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
0163 end
0164
0165
0166
0167 function slider1_Callback(hObject, eventdata, handles)
0168
0169 function slider1_CreateFcn(hObject, eventdata, handles)
0170 usewhitebg = 1;
0171 if usewhitebg
0172 set(hObject,'BackgroundColor',[.9 .9 .9]);
0173 else
0174 set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
0175 end
0176
0177 function StepSize_Callback(hObject, eventdata, handles)
0178
0179 function StepSize_CreateFcn(hObject, eventdata, handles)
0180 if ispc
0181 set(hObject,'BackgroundColor','white');
0182 else
0183 set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
0184 end
0185
0186 function TW_Callback(hObject, eventdata, handles)
0187
0188 function TW_CreateFcn(hObject, eventdata, handles)
0189 if ispc
0190 set(hObject,'BackgroundColor','white');
0191 else
0192 set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
0193 end
0194
0195 function DisplayWindow_Callback(hObject, eventdata, handles)
0196
0197 function DisplayWindow_CreateFcn(hObject, eventdata, handles)
0198 set(hObject, 'String', '4');
0199 if ispc
0200 set(hObject,'BackgroundColor','white');
0201 else
0202 set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
0203 end
0204
0205
0206
0207
0208
0209
0210 function Plot_Callback(hObject, eventdata, handles)
0211
0212 hw=waitbar(0.5,'Spectrogram calculation');drawnow
0213
0214 params.Fs=handles.Fs;
0215
0216 window=eval(get(handles.WinSize,'String'));
0217 winstep=eval(get(handles.StepSize,'String'));
0218 movingwin=[window winstep]*0.001;
0219
0220 fmin=eval(get(handles.MinFreq,'String'));
0221 fmax=eval(get(handles.MaxFreq,'String'));
0222 params.fpass=[fmin fmax];
0223
0224 p=eval(get(handles.TW,'String'));
0225 params.tapers=[p floor(2*p-1)];
0226
0227 params.pad=1;
0228
0229 Tslider=get(handles.slider1,'Value');
0230 Tim=eval(get(handles.DisplayWindow,'String'));
0231 NT=min(round(Tim*handles.Fs),length(handles.ts));
0232 handles.Tmin=1+floor(Tslider*length(handles.ts));
0233 handles.Tmax=min(handles.Tmin+NT,length(handles.ts));
0234
0235 if handles.Tmax < length(handles.ts)
0236 set( handles.Jump, 'Enable', 'on' );
0237 else
0238 set( handles.Jump, 'Enable', 'off' );
0239 end
0240 if handles.Tmin > 1
0241 set( handles.JumpBack, 'Enable', 'on' );
0242 else
0243 set( handles.JumpBack, 'Enable', 'off' );
0244 end
0245
0246 data=handles.ts(handles.Tmin:handles.Tmax);data=data(:);
0247
0248
0249
0250 contents=get(handles.SpectrumType,'String');
0251 stype=contents{get(handles.SpectrumType,'Value')};
0252
0253 axes(handles.axesW); plot([handles.Tmin:handles.Tmax]/handles.Fs,handles.ts(handles.Tmin:handles.Tmax)); axis tight;
0254
0255 switch stype
0256 case 'Original'
0257
0258 [S,t,f]=mtspecgramc(diff(data),movingwin,params);cmap='default';
0259 timeax=handles.Tmin/handles.Fs+t;
0260 th=eval(get(handles.AmpThresh,'String'));
0261 Stot=sum(S,2); tmp=Stot; smax=max(Stot); tmp(find(Stot<th*smax))=smax*th;
0262 tmp(find(Stot>th*smax))=smax;
0263 axes(handles.axesP); semilogy(timeax,Stot); axis tight;
0264 hold on; semilogy(timeax,tmp,'r'); hold off;
0265 axes(handles.axesS);
0266 imagesc(timeax,f,log(S)'); axis xy; colormap(cmap);
0267
0268
0269
0270 case 'Time Derivative'
0271
0272 [S,t,f]=mtdspecgramc(diff(data),movingwin,0,params);S=S';cmap='gray';
0273 timeax=handles.Tmin/handles.Fs+t;
0274 th=eval(get(handles.TDerThresh,'String'));
0275 Stot=sum(S,2); tmp=Stot; smax=max(abs(Stot)); tmp(find(abs(Stot)<th*smax))=0;
0276 tmp(find(abs(Stot)>th*smax))=smax;
0277 axes(handles.axesP); plot(timeax,sum(S,2)); axis tight;
0278 hold on; plot(timeax,tmp,'r'); hold off;
0279 axes(handles.axesS);
0280 imagesc(timeax,f,S'); axis xy; colormap(cmap);
0281 cmin=0.02*min(min(S)); cmax=0.02*max(max(S)); caxis([cmin cmax]);
0282
0283 case 'Frequency Derivative'
0284
0285 [S,t,f]=mtdspecgramc(diff(data),movingwin,pi/2,params);S=S';cmap='gray';
0286 timeax=handles.Tmin/handles.Fs+t;
0287 th=eval(get(handles.TDerThresh,'String'));
0288 Stot=sum(S,2); tmp=Stot; smax=max(abs(Stot)); tmp(find(abs(Stot)<th*smax))=0;
0289 tmp(find(abs(Stot)>th*smax))=smax;
0290 axes(handles.axesP); plot(timeax,sum(S,2)); axis tight;
0291 hold on; plot(timeax,tmp,'r'); hold off;
0292 axes(handles.axesS);
0293 imagesc(timeax,f,S'); axis xy; colormap(cmap);
0294 cmin=0.02*min(min(S)); cmax=0.02*max(max(S)); caxis([cmin cmax]);
0295
0296 end;
0297
0298 handles.times=timeax(:);
0299 handles.transition=[diff(tmp(:)); 0];
0300
0301 set( handles.axesS, 'XTick', [] );
0302 set( handles.axesP, 'XTick', [] );
0303
0304 if exist('handles.datacursor')
0305 delete( handles.datacursor );
0306 delete( handles.segmentLineP );
0307 delete( handles.segmentLineS );
0308 delete( handles.segmentLineW );
0309 end
0310
0311 handles.datacursor=datacursormode(handles.figure1);
0312 axes(handles.axesP);
0313 handles.segmentLineP = line('Visible','off');
0314 axes(handles.axesS);
0315 handles.segmentLineS = line('Visible','off');
0316 axes(handles.axesW);
0317 handles.segmentLineW = line('Visible','off');
0318
0319 if get( handles.SegmentButton, 'Value' )
0320 set(handles.datacursor,'Enable','on','DisplayStyle','datatip','SnapToDataVertex','off','UpdateFcn',@datacursorfunc);
0321 end
0322
0323 guidata(gcbo,handles);
0324 close(hw);
0325 draw_segments(handles);
0326
0327 function MinFreq_Callback(hObject, eventdata, handles)
0328
0329 function MinFreq_CreateFcn(hObject, eventdata, handles)
0330 if ispc
0331 set(hObject,'BackgroundColor','white');
0332 else
0333 set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
0334 end
0335
0336 function MaxFreq_Callback(hObject, eventdata, handles)
0337 function MaxFreq_CreateFcn(hObject, eventdata, handles)
0338 if ispc
0339 set(hObject,'BackgroundColor','white');
0340 else
0341 set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
0342 end
0343
0344
0345 function SpectrumType_Callback(hObject, eventdata, handles)
0346 function SpectrumType_CreateFcn(hObject, eventdata, handles)
0347 if ispc
0348 set(hObject,'BackgroundColor','white');
0349 else
0350 set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
0351 end
0352
0353 function AmpThresh_Callback(hObject, eventdata, handles)
0354 function AmpThresh_CreateFcn(hObject, eventdata, handles)
0355 if ispc
0356 set(hObject,'BackgroundColor','white');
0357 else
0358 set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
0359 end
0360
0361 function TDerThresh_Callback(hObject, eventdata, handles)
0362
0363
0364 function TDerThresh_CreateFcn(hObject, eventdata, handles)
0365 if ispc
0366 set(hObject,'BackgroundColor','white');
0367 else
0368 set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
0369 end
0370
0371
0372 function PlayAll_Callback(hObject, eventdata, handles)
0373 wavplay(handles.ts,handles.Fs);
0374
0375
0376 function PlayWindow_Callback(hObject, eventdata, handles)
0377 wavplay(handles.ts(handles.Tmin:handles.Tmax),handles.Fs,'async');
0378
0379
0380
0381 function txt = datacursorfunc(empt,event_obj)
0382 pos = get(event_obj,'Position');
0383 handles=guidata(get(event_obj,'Target'));
0384
0385 set(handles.segmentLineP,'Xdata',[pos(1) pos(1)],'Ydata',[0.00000000000001*pos(2) 1000000000000*pos(2)],'Visible','on' );
0386 set(handles.segmentLineS,'Xdata',[pos(1) pos(1)],'Ydata',[0.00000000000001*pos(2) 1000000000000*pos(2)],'Visible','on' );
0387 set(handles.segmentLineW,'Xdata',[pos(1) pos(1)],'Ydata',[-100000000000*pos(2) 1000000000000*pos(2)],'Visible','on' );
0388
0389 if handles.start_stop_enable == 1
0390 set( handles.SegStartButton, 'Enable', 'on' );
0391 else
0392 set( handles.SegEndButton, 'Enable', 'on' );
0393 end
0394
0395 txt = {[num2str(pos(1))]};
0396 guidata(gcbo,handles);
0397
0398 function draw_segments( handles )
0399 n = 1;
0400 while n <= length( handles.segments )
0401 handles.segments(n).lines=[];
0402 handles.segments(n) = draw_all_x( handles, handles.segments(n) );
0403 n = n + 1;
0404 end
0405 guidata(gcbo,handles);
0406
0407
0408 function SegmentButton_Callback(hObject, eventdata, handles)
0409 toggled = get( handles.SegmentButton, 'Value' );
0410
0411 if toggled
0412 handles.segments = [];
0413 set( handles.SegmentButton, 'String', 'Segment On' );
0414 set( handles.SegmentButton, 'Enable', 'off' );
0415 if not(exist([handles.filename '.seg.txt']));
0416 set( handles.LoadSegments, 'Enable', 'off' );
0417 else
0418 set( handles.LoadSegments, 'Enable', 'on' );
0419 end
0420 set( handles.AutoSegButton, 'Enable', 'on' );
0421 set( handles.SegmentLengthEdit, 'Enable', 'on' );
0422 set( handles.SegmentLengthText, 'Enable', 'on ' );
0423 set( handles.SaveSegments, 'Enable', 'on' );
0424 set( handles.DeleteSegment, 'Enable', 'on' );
0425 set( handles.DeleteAllButton, 'Enable', 'on' );
0426 set( handles.SegCancel, 'Enable', 'on' );
0427 set( handles.PlotSegments, 'Enable', 'on' );
0428 set( handles.LoadFile, 'Enable', 'off' );
0429 set( handles.LoadNext, 'Enable', 'off' );
0430 handles.start_stop_enable = 1;
0431 set(handles.datacursor,'Enable','on','DisplayStyle','datatip','SnapToDataVertex','off','UpdateFcn',@datacursorfunc);
0432 fprintf( 'Segment mode on!\n' );
0433 else
0434 set( handles.SegmentButton, 'String', 'Segment Off' );
0435 set( handles.AutoSegButton, 'Enable', 'off' );
0436 set( handles.SegmentLengthEdit, 'Enable', 'off' );
0437 set( handles.SegmentLengthText, 'Enable', 'off' );
0438 set( handles.LoadSegments, 'Enable', 'off' );
0439 set( handles.SaveSegments, 'Enable', 'off' );
0440 set( handles.SegStartButton, 'Enable', 'off' );
0441 set( handles.SegEndButton, 'Enable', 'off' );
0442 set( handles.DeleteSegment, 'Enable', 'off' );
0443 set( handles.DeleteAllButton, 'Enable', 'off' );
0444 set( handles.SegCancel, 'Enable', 'off' );
0445 set( handles.PlotSegments, 'Enable', 'off' );
0446 set( handles.LoadFile, 'Enable', 'on' );
0447 set( handles.LoadNext, 'Enable', 'on' );
0448 set(handles.datacursor,'Enable','off')
0449 fprintf( 'Segment mode off!\n' );
0450 end
0451 guidata(gcbo,handles);
0452
0453
0454
0455 function SegStartButton_Callback(hObject, eventdata, handles)
0456 set( handles.LoadSegments, 'Enable', 'off' );
0457 set( handles.SegStartButton, 'Enable', 'off' );
0458 handles.start_stop_enable = 0;
0459 xy=get(handles.segmentLineP,'Xdata');
0460 handles.segment.start=xy(1);
0461 handles.segment.lines=[];
0462 axes(handles.axesP);
0463 set(handles.segmentLineP,'LineWidth',3);
0464 handles.segment.lines(1) = handles.segmentLineP;
0465 handles.segmentLineP = line('Visible','off');
0466 axes(handles.axesS);
0467 set(handles.segmentLineS,'LineWidth',3);
0468 handles.segment.lines(2) = handles.segmentLineS;
0469 handles.segmentLineS = line('Visible','off');
0470 axes(handles.axesW);
0471 set(handles.segmentLineW,'LineWidth',3);
0472 handles.segment.lines(3) = handles.segmentLineW;
0473 handles.segmentLineW = line('Visible','off');
0474
0475 guidata(gcbo,handles);
0476
0477
0478 function SegEndButton_Callback(hObject, eventdata, handles)
0479 set( handles.SegEndButton, 'Enable', 'off' );
0480 handles.start_stop_enable = 1;
0481 xy=get(handles.segmentLineP,'Xdata');
0482 handles.segment.end=xy(1);
0483 handles.segment=draw_all_x( handles, handles.segment );
0484 handles.segments = [handles.segments handles.segment];
0485 guidata(gcbo,handles);
0486
0487 function out=draw_all_x( handles, segment )
0488 segment=draw_x( handles.axesP, segment );
0489 segment=draw_x( handles.axesS, segment );
0490 segment=draw_x( handles.axesW, segment );
0491 out=segment;
0492
0493 function out=draw_x( theaxes, segment )
0494 axes(theaxes);
0495 ylim = get(theaxes,'YLim');
0496 segment.lines = [segment.lines line('Xdata',[segment.start segment.start],'Ydata',ylim,'LineWidth',3)];
0497 segment.lines = [segment.lines line('Xdata',[segment.end segment.end],'Ydata',ylim,'LineWidth',3)];
0498 segment.lines = [segment.lines line('Xdata',[segment.start segment.end],'Ydata',ylim,'LineWidth',3)];
0499 segment.lines = [segment.lines line('Xdata',[segment.start segment.end],'Ydata',[ylim(2) ylim(1)],'LineWidth',3)];
0500 out=segment;
0501
0502
0503 function JumpBack_Callback(hObject, eventdata, handles)
0504 Jump_shared(hObject, eventdata, handles, -1 )
0505
0506
0507 function Jump_Callback(hObject, eventdata, handles)
0508 Jump_shared(hObject, eventdata, handles, 1 )
0509
0510 function Jump_shared(hObject, eventdata, handles, jump_dir )
0511 Tim=eval(get(handles.DisplayWindow,'String'));
0512 NT=min(round(Tim*handles.Fs),length(handles.ts));
0513 Tslider=get(handles.slider1,'Value');
0514 Tslider = Tslider + jump_dir * Tim * handles.Fs / length(handles.ts);
0515 if Tslider > 1
0516 Tslider = ( length(handles.ts) - NT ) / length(handles.ts);
0517 end
0518 if Tslider < 0
0519 Tslider = 0
0520 end
0521 set(handles.slider1,'Value',Tslider);
0522 guidata(gcbo,handles);
0523 Plot_Callback(hObject, eventdata, handles)
0524
0525
0526 function LoadNext_Callback(hObject, eventdata, handles)
0527
0528
0529
0530
0531 exclude_name = [handles.filename, get(handles.ExcludeExt,'String')];
0532 if not(exist(exclude_name))
0533 fid=fopen( exclude_name, 'w' );
0534 fclose( fid);
0535 end
0536
0537 [path] = cell2mat(regexp( handles.filename, '^.*\', 'match' ));
0538 [extension] = cell2mat(regexp( handles.filename, '\w+$', 'match' ));
0539 dirlist = dir( [path '*' extension] );
0540 ndir = length(dirlist);
0541 n = 1;
0542 while n <= ndir
0543 file = dirlist(n).name;
0544 if not(exist([path file get(handles.ExcludeExt,'String')]))
0545 break;
0546 end
0547 n = n + 1;
0548 end
0549 if n <= ndir
0550 set( handles.FileNameString, 'String',file);
0551 handles.filename = [path file];
0552 guidata(gcbo,handles);
0553 loadfile( hObject, eventdata, handles )
0554 else
0555 error('No more files found matching desired pattern');
0556 end
0557
0558
0559 function Precompute_Callback(hObject, eventdata, handles)
0560 global precompute_yes
0561 toggled = get( hObject, 'Value' );
0562 if toggled
0563
0564 n = 0;
0565 precompute_yes = 1;
0566 while ( n < 10000 )
0567 n = n + 1;
0568 pause(2);
0569 fprintf( 'precompute does nothing yet! %d\n', n );
0570 if precompute_yes == 0
0571 break;
0572
0573 end
0574 end
0575 else
0576
0577 precompute_yes = 0;
0578 end
0579
0580 function Precompute_CreateFcn(hObject, eventdata, handles)
0581 global precompute_yes
0582 precompute_yes = 0;
0583
0584
0585 function Path_Callback(hObject, eventdata, handles)
0586 path=get(hObject,'String')
0587
0588
0589 function Path_CreateFcn(hObject, eventdata, handles)
0590 set(hObject,'String',pwd);
0591 if ispc
0592 set(hObject,'BackgroundColor','white');
0593 else
0594 set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
0595 end
0596
0597 function Extensions_Callback(hObject, eventdata, handles)
0598
0599 function Extensions_CreateFcn(hObject, eventdata, handles)
0600 set(hObject,'String','wav');
0601 if ispc
0602 set(hObject,'BackgroundColor','white');
0603 else
0604 set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
0605 end
0606
0607 function Duration_CreateFcn(hObject, eventdata, handles)
0608 if ispc
0609 set(hObject,'BackgroundColor','white');
0610 else
0611 set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
0612 end
0613
0614 function LoadSegments_Callback(hObject, eventdata, handles)
0615
0616 handles.segments = load_segment( [handles.filename '.seg.txt'] );
0617
0618 set( handles.LoadSegments, 'Enable', 'off' );
0619 guidata(gcbo,handles);
0620 draw_segments( handles )
0621
0622 function segments=load_segment( filename )
0623 fid=fopen( filename, 'r' );
0624 segments = [];
0625 scanned=fscanf( fid, '%g %g',[2 inf] );
0626 n = 1;
0627 while n <= size(scanned, 2)
0628 segment.start = scanned(1,n);
0629 segment.end = scanned(2,n);
0630 segment.lines = [];
0631 segments = [ segments segment ];
0632 n = n + 1;
0633 end
0634
0635
0636
0637 function ExcludeExt_Callback(hObject, eventdata, handles)
0638
0639
0640
0641
0642 function ExcludeExt_CreateFcn(hObject, eventdata, handles)
0643
0644 if ispc
0645 set(hObject,'BackgroundColor','white');
0646 else
0647 set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
0648 end
0649
0650
0651 function DeleteSegment_Callback(hObject, eventdata, handles)
0652
0653
0654 pos=get(handles.segmentLineP,'Xdata');
0655 n = 1;
0656 while n <= length( handles.segments )
0657 if pos(1) >= handles.segments(n).start && pos(1) <= handles.segments(n).end
0658 handles=delete_segment( handles, n );
0659 else
0660 n = n + 1;
0661 end
0662 end
0663 drawnow;
0664 guidata(gcbo,handles);
0665
0666 function handles=delete_segment( handles, n )
0667 nl = 1;
0668 while nl <= length( handles.segments(n).lines )
0669 set( handles.segments(n).lines(nl), 'Visible', 'off');
0670 nl = nl + 1;
0671 end
0672 handles.segments(n) = [];
0673 fprintf('deleted!\n');
0674
0675 function SaveSegments_Callback(hObject, eventdata, handles)
0676 segment_file = fopen( [handles.filename '.seg.txt'], 'w' );
0677 n = 1;
0678 while n <= size(handles.segments, 2)
0679 fprintf( segment_file, '%f %f\n', handles.segments(n).start, handles.segments(n).end );
0680 n = n + 1;
0681 end
0682 fclose(segment_file);
0683 set( handles.SegmentButton, 'Enable', 'on' );
0684 guidata(gcbo,handles);
0685
0686 function SegCancel_Callback(hObject, eventdata, handles)
0687 set( handles.SegmentButton, 'Enable', 'on' );
0688 guidata(gcbo,handles);
0689
0690
0691 function PlotSegments_Callback(hObject, eventdata, handles)
0692
0693
0694
0695 [path] = cell2mat(regexp( handles.filename, '^.*\', 'match' ));
0696 [extension] = cell2mat(regexp( handles.filename, '\w+$', 'match' ));
0697
0698 path=get(handles.Path,'String');
0699 extension=get(handles.Extensions,'String');
0700 dirlist = dir( [path '\*' extension '.seg.txt'] );
0701 ndir = length(dirlist);
0702 n = 1;
0703 all_segments = [];
0704 while n <= ndir
0705 file = dirlist(n).name;
0706 segments = load_segment([path '\' file]);
0707 all_segments = [all_segments segments];
0708 n = n + 1;
0709 end
0710
0711
0712 if length(all_segments) > 2
0713
0714 figure();
0715 axes();
0716 nbin= max(length([all_segments.end])/5,10);
0717 syllable_lengths=[all_segments.end]-[all_segments.start];
0718 hi=hist( syllable_lengths ,nbin);
0719 tl=min( syllable_lengths );
0720 th=max( syllable_lengths );
0721 times=tl:((th-tl)/(nbin-1)):th;
0722 plot(times,hi);
0723 xlabel('Segment Length (s)');
0724 ylabel('N');
0725 title(['All segments in ' path]);
0726 else
0727 error('too few segments to plot');
0728 end
0729 guidata(gcbo,handles);
0730
0731
0732
0733 function AutoSegButton_Callback(hObject, eventdata, handles)
0734
0735 n = 1;
0736 segments = [];
0737 segment.start = 0;
0738 segment.end = 0;
0739 segment.lines = [];
0740 minlen = eval(get( handles.SegmentLengthEdit, 'String' ));
0741 while n < length( handles.times )
0742
0743 if ( handles.transition(n) > 0 )
0744 segment.start = handles.times(n);
0745 end
0746 if ( handles.transition(n) < 0 )
0747 segment.end = handles.times(n);
0748 end
0749 if segment.start>0 && segment.end>0 && segment.end - segment.start > minlen
0750 segments = [ segments segment ];
0751 segment.start = 0;
0752 segment.end = 0;
0753 end
0754 n = n + 1;
0755 end
0756
0757 handles.segments = [handles.segments segments];
0758 guidata(gcbo,handles);
0759 draw_segments( handles );
0760
0761
0762 function DeleteAllButton_Callback(hObject, eventdata, handles)
0763
0764 while length( handles.segments )
0765 handles = delete_segment( handles, 1 );
0766 end
0767 guidata(gcbo,handles);