Home > chronux_1_0 > wave_browser > wave_browser.m

wave_browser

PURPOSE ^

WAVE_BROWSER M-file for wave_browser.fig

SYNOPSIS ^

function varargout = wave_browser(varargin)

DESCRIPTION ^

 WAVE_BROWSER M-file for wave_browser.fig
      WAVE_BROWSER, by itself, creates a new WAVE_BROWSER or raises the existing
      singleton*.

      H = WAVE_BROWSER returns the handle to a new WAVE_BROWSER or the handle to
      the existing singleton*.

      WAVE_BROWSER('CALLBACK',hObject,eventData,handles,...) calls the local
      function named CALLBACK in WAVE_BROWSER.M with the given input arguments.

      WAVE_BROWSER('Property','Value',...) creates a new WAVE_BROWSER or raises the
      existing singleton*.  Starting from the left, property value pairs are
      applied to the GUI before wave_browser_OpeningFunction gets called.  An
      unrecognized property name or invalid value makes property application
      stop.  All inputs are passed to wave_browser_OpeningFcn via varargin.

      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
      instance to run (singleton)".

 See also: GUIDE, GUIDATA, GUIHANDLES

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function varargout = wave_browser(varargin)
0002 % WAVE_BROWSER M-file for wave_browser.fig
0003 %      WAVE_BROWSER, by itself, creates a new WAVE_BROWSER or raises the existing
0004 %      singleton*.
0005 %
0006 %      H = WAVE_BROWSER returns the handle to a new WAVE_BROWSER or the handle to
0007 %      the existing singleton*.
0008 %
0009 %      WAVE_BROWSER('CALLBACK',hObject,eventData,handles,...) calls the local
0010 %      function named CALLBACK in WAVE_BROWSER.M with the given input arguments.
0011 %
0012 %      WAVE_BROWSER('Property','Value',...) creates a new WAVE_BROWSER or raises the
0013 %      existing singleton*.  Starting from the left, property value pairs are
0014 %      applied to the GUI before wave_browser_OpeningFunction gets called.  An
0015 %      unrecognized property name or invalid value makes property application
0016 %      stop.  All inputs are passed to wave_browser_OpeningFcn via varargin.
0017 %
0018 %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
0019 %      instance to run (singleton)".
0020 %
0021 % See also: GUIDE, GUIDATA, GUIHANDLES
0022 
0023 % Copyright 2002-2003 The MathWorks, Inc.
0024 
0025 % Edit the above text to modify the response to help wave_browser
0026 
0027 % Last Modified by GUIDE v2.5 18-Jan-2006 12:01:34
0028 
0029 % Begin initialization code - DO NOT EDIT
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 % End initialization code - DO NOT EDIT
0047 
0048 
0049 % --- Executes just before wave_browser is made visible.
0050 function wave_browser_OpeningFcn(hObject, eventdata, handles, varargin)
0051 % This function has no output args, see OutputFcn.
0052 % hObject    handle to figure
0053 % eventdata  reserved - to be defined in a future version of MATLAB
0054 % handles    structure with handles and user data (see GUIDATA)
0055 % varargin   command line arguments to wave_browser (see VARARGIN)
0056 
0057 % Choose default command line output for wave_browser
0058 handles.output = hObject;
0059 
0060 % Update handles structure
0061 guidata(hObject, handles);
0062 
0063 % UIWAIT makes wave_browser wait for user response (see UIRESUME)
0064 % uiwait(handles.figure1);
0065 
0066 
0067 % --- Outputs from this function are returned to the command line.
0068 function varargout = wave_browser_OutputFcn(hObject, eventdata, handles) 
0069 
0070 % Get default command line output from handles structure
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 % --- Executes on button press in LoadFile.
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); % variance normalisation
0111 handles.Fs = eval(get(handles.Frequency,'String'));  % should not be needed...
0112 set( handles.Duration, 'String', count/handles.Fs );
0113 Tim=eval(get(handles.DisplayWindow,'String'));
0114 display_frac = 1;%max(1,Tim*handles.Fs/count);
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 % --- Executes on selection change in endian.
0128 function endian_Callback(hObject, eventdata, handles)
0129 
0130 % --- Executes during object creation, after setting all properties.
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 % --- Executes on slider movement.
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 %function axes2ButtonDownCallback(hObject, eventdata, handles)
0206 %h=handles.axesS; P=get(h,'CurrentPoint');
0207 %fprintf( 'worked %f %f!\n', P(1),P(2));
0208 
0209 % --- Executes on button press in Plot.
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 % determine spectrum type
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 %    set(h,'ButtonDownFcn',axes2ButtonDownCallback);
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 % --- Executes on selection change in SpectrumType.
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 % --- Executes during object creation, after setting all properties.
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 % --- Executes on button press in PlayAll.
0372 function PlayAll_Callback(hObject, eventdata, handles)
0373 wavplay(handles.ts,handles.Fs);
0374 
0375 % --- Executes on button press in PlayWindow.
0376 function PlayWindow_Callback(hObject, eventdata, handles)
0377 wavplay(handles.ts(handles.Tmin:handles.Tmax),handles.Fs,'async');
0378 
0379 %h=handles.axesP; axes(h); semilogy(timeax,Stot); axis tight;
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 % --- Executes on button press in SegmentButton.
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 % --- Executes on button press in SegStartButton.
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 % --- Executes on button press in SegEndButton.
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 % --- Executes on button press in JumpBack.
0503 function JumpBack_Callback(hObject, eventdata, handles)
0504 Jump_shared(hObject, eventdata, handles, -1 )
0505 
0506 % --- Executes on button press in Jump.
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 % Get filename, extension.  Look for next file with same extension, no seg
0529 % file associated
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 % --- Executes on button press in Precompute.
0559 function Precompute_Callback(hObject, eventdata, handles)
0560 global precompute_yes
0561 toggled = get( hObject, 'Value' );
0562 if toggled 
0563   % Long Run.... quit when asked by another precompute call
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   % quit long runs...
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 % Hints: get(hObject,'String') returns contents of ExcludeExt as text
0640 %        str2double(get(hObject,'String')) returns contents of ExcludeExt as a double
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 % Load Segments in directory
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 % Plot info
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);

Generated on Fri 09-Jun-2006 23:38:05 by m2html © 2003