function varargout = wave_browser(varargin)
% 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
% Copyright 2002-2003 The MathWorks, Inc.
% Edit the above text to modify the response to help wave_browser
% Last Modified by GUIDE v2.5 29-May-2007 16:30:52
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @wave_browser_OpeningFcn, ...
'gui_OutputFcn', @wave_browser_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before wave_browser is made visible.
function wave_browser_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to wave_browser (see VARARGIN)
handles.firsttime = 0; % indicates the firsttime that segment has been precomputed
handles.precomputed_spec = 0; % indicates that the spectra has not been precomputed
handles.longfile = 0; % indicates whether the file is a long file
handles.maxwavsize = 10 * 44100; % I will have to explore what number works best here
handles.maxspec_t = 30; % duration of the max size of a spectra
handles.Fs = 44100; % default size to start with
handles.segments = []; % holds regular segments in the current chunk
handles.allsegments = []; % holds segments across the maximum wave size
handles.loadedsegment = 0; % indicates no segments have been loaded
handles.lastmarkerstart = 1; % largest segment
handles.segmentmode = 0; % by default start off with segmenting turned off
handles.dontcutsegments = 0; % by default do not adapt to segments
handles.automethod = 'threshold'; % use threshold or ratiof method
handles.indexthresh = 10; % for ration method the threshold which to cut the curve off
handles.lower_range = [10 10000]; % the numerator in the ratio
handles.upper_range = [15000 20000]; % the denomitor in the ratio
handles.nsmooth = 0; % moving average parameter for the thresholds curves
positionP = get(handles.OptionsUiPanel,'Position');
positionF = get(gcf,'Position');
positionF(3) = positionF(3) - positionP(3);
% set(gcf,'Position',positionF); % untested
% Choose default command line output for wave_browser
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes wave_browser wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = wave_browser_OutputFcn(hObject, eventdata, handles)
% Get default command line output from handles structure
varargout{1} = handles.output;
function Frequency_Callback(hObject, eventdata, handles)
handles.Fs = eval(get(hObject,'String'));
guidata(gcbo,handles);
function Frequency_CreateFcn(hObject, eventdata, handles)
set(hObject,'String', '44100');
handles.Fs = 44100;
guidata(gcbo,handles);
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
% --- Executes on button press in LoadFile.
function LoadFile_Callback(hObject, eventdata, handles)
[fname pname]=uigetfile({'*.wav';'*.*'},'Load Time Series');
if fname == 0
return
end
set(handles.FileNameString, 'String',fname);
handles.filename = [pname fname];
[path] = cell2mat(regexp( handles.filename, '^.*\', 'match' ));
[extension] = cell2mat(regexp( handles.filename, '\w+$', 'match' ));
set(handles.Path,'String',path);
% set(handles.Extensions,'String',extension);
handles.segments = [];
handles.allsegments = [];
handles = loadfile(hObject, eventdata, handles);
guidata(hObject,handles);
function [wavesize channels] = wavsizeget(filename);
% Provides usable information about a file
wavesize = 0;
[filestatus info] = wavfinfo(filename);
info = regexp(info,'[0-9]+','match');
channels = str2num(info{2});
wavesize = str2num(info{1});
function handles = loadfile(hObject, eventdata, handles, varargin)
% Function for loading a file or using the optional varargin to load a
% specified position and size in the file
% contents=get(handles.endian,'String');
% precision=contents{get(handles.endian,'Value')};
[datasize channels] = wavsizeget(handles.filename);
handles.wavsize = datasize; % total number of samples in the files
try
handles.maxwavsize = round(handles.Fs * str2num(get(handles.MaximumWavSize,'String')));
catch
handles.maxwavsize = 20;
set(handles.MaximumWavSize,'String',num2str(handles.maxwavsize));
handles.maxwavsize = handles.maxwavsize * handles.Fs;
end
if isempty(varargin)
handles.markerstart = 1;
if datasize > handles.maxwavsize
handles.markerend = handles.maxwavsize;
handles.longfile = 1; % indicates that the file is long and will be loaded in chunks
else
handles.markerend = datasize;
end
else % passed in optional parameter
handles.markervec = varargin{1};
handles.markerstart = handles.markervec(1);
handles.markerend = handles.markervec(2);
end
if handles.markerstart <= 1 % make sure the range is possible
handles.markerstart = 1;
set(handles.PreviousChunk,'Enable','off');
else
set(handles.PreviousChunk,'Enable','on');
end
if handles.markerend >= handles.wavsize
handles.markerend = handles.wavsize;
set(handles.NextChunk,'Enable','off');
else
set(handles.NextChunk,'Enable','on');
end
if handles.maxwavsize < handles.wavsize
total_chunk = ceil(handles.wavsize / handles.maxwavsize);
i = 1;
while (i < total_chunk) && (handles.markerend >= (handles.maxwavsize * i))
i = i + 1;
end
current_chunk = i-1;
if handles.markerend == handles.wavsize
current_chunk = total_chunk;
end
set(handles.ChunkText,'String',['Chunk ' num2str(current_chunk) '/' num2str(total_chunk)]);
end
try
handles.maxseglength = round(handles.Fs * str2num(get(handles.MaxSegLength,'String')));
catch
handles.maxseglength = handles.Fs * 1;
end
set(handles.RealDuration,'String',num2str(handles.wavsize/handles.Fs,'%.1f'));
if handles.segmentmode % only if in segment mode make sure segments are not cut
if (handles.markerstart - handles.lastmarkerstart > 0) % only do this in terms of forward movement
if handles.dontcutsegments % this code is added so segments are not cut off when segmenting
if not(isempty(handles.segments)) % at least one segment has been defined previously
maxsegend = handles.segments(1).end; % find last defined segment in previous view
for i = 2:length(handles.segments)
if handles.segments(i).end > maxsegend
maxsegend = handles.segments(i).end;
end
end
maxsegend = round(maxsegend * handles.Fs);
if (handles.lastmarkerend - maxsegend) < (handles.lastmarkerend - handles.maxseglength)
handles.markerstart = (handles.lastmarkerstart + maxsegend) + 1; % defined segment is closer to the end
else
handles.markerstart = handles.lastmarkerend - handles.maxseglength;
end
else
handles.markerstart = handles.lastmarkerend - handles.maxseglength;
end
handles.markerend = handles.markerstart + handles.maxwavsize - 1;
if handles.markerend > handles.wavsize
handles.markerend = handles.wavsize;
end
end
end
end
hw=waitbar(0,'Loading ...'); waitbar(0.5,hw); drawnow;
[handles.markerstart handles.markerend]/handles.Fs
[handles.ts,handles.Fs] = wavread(handles.filename, [handles.markerstart handles.markerend]);
channel = str2double(get(handles.channel,'String'));
handles.ts = handles.ts(:,channel);
count = length(handles.ts);
handles.ts = handles.ts/std(handles.ts); % variance normalisation
set(handles.Frequency,'String', num2str(handles.Fs));
set( handles.Duration, 'String', count/handles.Fs );
Tim=eval(get(handles.DisplayWindow,'String'));
display_frac = 1;%max(1,Tim*handles.Fs/count);
set( handles.slider1, 'Value', 0 );
set( handles.SegmentButton, 'Enable', 'on' );
if handles.longfile
set(handles.SeekButton,'Enable', 'on');
end
set(handles.LoadNext, 'Enable', 'on' );
set(handles.PlayAll, 'Enable', 'on' );
set(handles.PlayWindow, 'Enable', 'on' );
set(handles.Plot, 'Enable', 'on' );
set(handles.PlotAllButton, 'Enable', 'on');
set(handles.Precompute, 'Enable','on');
set(handles.Jump,'Enable','on');
set(handles.JumpBack,'Enable','on');
handles.segments = []; % remove the current segments
handles.segments = filtersegments(handles,handles.allsegments);
set(handles.Precompute,'Value',1); % Set into precompute mode
Precompute_Callback(handles.Precompute, eventdata, handles);
handles = guidata(gcbo);
% set(handles.Precompute,'Value',1);
handles.precomputed_spec = 1;
handles.dontcutsegments = 1; % make sure segments are not cut off
handles.lastmarkerstart = handles.markerstart;
handles.lastmarkerend = handles.markerend;
close(hw);
% guidata(gcbo,handles);
% Plot_Callback(hObject, eventdata, handles);
% --- Executes on selection change in endian.
function endian_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties.
function endian_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function edit2_Callback(hObject, eventdata, handles)
function edit2_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function FileNameString_Callback(hObject, eventdata, handles)
function FileNameString_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function WinSize_Callback(hObject, eventdata, handles)
function WinSize_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
% --- Executes on slider movement.
function slider1_Callback(hObject, eventdata, handles)
function slider1_CreateFcn(hObject, eventdata, handles)
usewhitebg = 1;
if usewhitebg
set(hObject,'BackgroundColor',[.9 .9 .9]);
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function StepSize_Callback(hObject, eventdata, handles)
function StepSize_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function TW_Callback(hObject, eventdata, handles)
function TW_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function DisplayWindow_Callback(hObject, eventdata, handles)
function DisplayWindow_CreateFcn(hObject, eventdata, handles)
set(hObject, 'String', '4');
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
%function axes2ButtonDownCallback(hObject, eventdata, handles)
%h=handles.axesS; P=get(h,'CurrentPoint');
%fprintf( 'worked %f %f!\n', P(1),P(2));
function indexinS = getindexpre_c(t,timestart,timeend)
% A function for indexing correctly in time to a spectra stored in memory
tlen = length(t);
i=1;
while (i <= tlen) && (t(i) < timestart)
i = i + 1;
end
firstindex = i;
while (i <= tlen) && (t(i) < timeend)
i = i + 1;
end
secondindex = i;
indexinS = [firstindex secondindex];
% --- Executes on button press in Plot.
function Plot_Callback(hObject, eventdata, handles)
hw=waitbar(0.5,'Spectrogram calculation');drawnow
params.Fs=handles.Fs;
window=eval(get(handles.WinSize,'String'));
winstep=eval(get(handles.StepSize,'String'));
movingwin=[window winstep]*0.001;
fmin=eval(get(handles.MinFreq,'String'));
fmax=eval(get(handles.MaxFreq,'String'));
params.fpass=[fmin fmax];
p=eval(get(handles.TW,'String'));
params.tapers=[p floor(2*p-1)];
params.pad=1;
Tslider=get(handles.slider1,'Value');
Tim=eval(get(handles.DisplayWindow,'String'));
NT=min(round(Tim*handles.Fs),length(handles.ts));
handles.Tmin=1+floor(Tslider*length(handles.ts));
handles.Tmax=min(handles.Tmin+NT,length(handles.ts));
if handles.Tmax < length(handles.ts)
set( handles.Jump, 'Enable', 'on' );
else
set( handles.Jump, 'Enable', 'off' );
end
if handles.Tmin > 1
set( handles.JumpBack, 'Enable', 'on' );
else
set( handles.JumpBack, 'Enable', 'off' );
end
data=handles.ts(handles.Tmin:handles.Tmax);data=data(:);
handles.upper_range = eval(get(handles.RatioLower,'String'));
handles.lower_range = eval(get(handles.RatioUpper,'String'));
handles.indexthresh = eval(get(handles.RatioThresh,'String'));
handles.nsmooth = eval(get(handles.SmoothFactor,'String'));
% determine spectrum type
contents=get(handles.SpectrumType,'String');
stype=contents{get(handles.SpectrumType,'Value')};
axes(handles.axesW); plot(((handles.markerstart - 1)/handles.Fs) + [handles.Tmin:handles.Tmax]/handles.Fs,handles.ts(handles.Tmin:handles.Tmax)); axis tight;
switch stype
case 'Original'
if not(handles.precomputed_spec) || handles.firsttime
[S,t,f]=mtspecgramc(diff(data),movingwin,params);
timeax=(handles.Tmin/handles.Fs)+t;
else
indexinS = getindexpre_c(handles.t,(handles.Tmin-1)/handles.Fs,(handles.Tmax-1)/handles.Fs);
% indexinS = round(([handles.Tmin-1, handles.Tmax-1]/handles.Fs)/movingwin(2))+1;
if indexinS(1) < 1
indexinS(1) = 1;
end
SLen = length(handles.S(:,1));
if indexinS(2) > SLen
indexinS(2) = SLen;
end
f = handles.f;
t = handles.t(indexinS(1):indexinS(2));
S = handles.S(indexinS(1):indexinS(2),:);
timeax=t;
end
cmap='default';
th=eval(get(handles.AmpThresh,'String'));
% This sets up the automatic segmenting algorithm
if strcmp(handles.automethod,'threshold')
[Stot boxcurve] = compute_threshold_free(S,th,handles.nsmooth);
axes(handles.axesP);
semilogy(timeax,Stot);
axis tight;
elseif strcmp(handles.automethod,'ratiof')
[ratiof boxcurve] = compute_index(S,handles.lower_range,handles.upper_range,fmin,fmax,handles.indexthresh,handles.nsmooth);
axes(handles.axesP);
semilogy(timeax,ratiof);
axis tight;
end
hold on; semilogy(timeax,boxcurve,'r'); hold off;
axes(handles.axesS);
imagesc(timeax,f,log(S)'); axis xy; colormap(cmap);
%imagesc(t,f,log(S)'); axis xy; colormap(cmap);
% set(h,'ButtonDownFcn',axes2ButtonDownCallback);
case 'Time Derivative'
if not(handles.precomputed_spec) || handles.firsttime
[S,t,f]=mtdspecgramc(diff(data),movingwin,0,params);S = S';
timeax=handles.Tmin/handles.Fs+t;
else
indexinS = getindexpre_c(handles.t,(handles.Tmin-1)/handles.Fs,(handles.Tmax-1)/handles.Fs);
% indexinS = round(([handles.Tmin-1, handles.Tmax-1]/handles.Fs)/movingwin(2))+1;
if indexinS(1) < 1
indexinS(1) = 1;
end
SLen = length(handles.S(1,:));
if indexinS(2) > SLen
indexinS(2) = SLen;
end
f = handles.f;
t = handles.t(indexinS(1):indexinS(2));
S = handles.S(:,indexinS(1):indexinS(2));
timeax = t;
end
cmap='gray';
th=eval(get(handles.TDerThresh,'String'));
if strcmp(handles.automethod,'threshold')
[Stot boxcurve] = compute_threshold_free(abs(S'),th.handles.nsmooth);
axes(handles.axesP);
semilogy(timeax,Stot);
axis tight;
elseif strcmp(handles.automethod,'ratiof')
[ratiof boxcurve] = compute_index(abs(S)',handles.lower_range,handles.upper_range,fmin,fmax,handles.indexthresh,handles.nsmooth);
axes(handles.axesP);
semilogy(timeax,ratiof);
axis tight;
end
hold on; semilogy(timeax,boxcurve,'r'); hold off;
axes(handles.axesS);
imagesc(timeax,f,S); axis xy; colormap(cmap);
cmin=0.02*min(min(S)); cmax=0.02*max(max(S)); caxis([cmin cmax]);
case 'Frequency Derivative'
if not(handles.precomputed_spec) || handles.firsttime
[S,t,f]=mtdspecgramc(diff(data),movingwin,pi/2,params);S=S';
timeax=handles.Tmin/handles.Fs+t;
else
indexinS = getindexpre_c(handles.t,(handles.Tmin-1)/handles.Fs,(handles.Tmax-1)/handles.Fs);
if indexinS(1) < 1
indexinS(1) = 1;
end
SLen = length(handles.S(1,:));
if indexinS(2) > SLen
indexinS(2) = SLen;
end
f = handles.f;
t = handles.t(indexinS(1):indexinS(2));
S = handles.S(:,indexinS(1):indexinS(2));
timeax = t;
end
cmap='gray';
th=eval(get(handles.TDerThresh,'String'));
if strcmp(handles.automethod,'threshold')
[Stot boxcurve] = compute_threshold_free(abs(S'),th,handles.nsmooth);
axes(handles.axesP);
semilogy(timeax,Stot);
axis tight;
elseif strcmp(handles.automethod,'ratiof')
[ratiof boxcurve] = compute_index(abs(S)',handles.lower_range,handles.upper_range,fmin,fmax,handles.indexthresh,handles.nsmooth);
axes(handles.axesP);
semilogy(timeax,ratiof);
axis tight;
end
hold on; semilogy(timeax,boxcurve,'r'); hold off;
axes(handles.axesS);
imagesc(timeax,f,S); axis xy; colormap(cmap);
cmin=0.02*min(min(S)); cmax=0.02*max(max(S)); caxis([cmin cmax]);
end;
if handles.firsttime % first time precomputing the spectra
handles.S = S;
handles.t = t;
handles.f = f;
handles.precomputed_spec = 1;
handles.firstime = 0;
end
% S = log(S)';
% Smax = max(max(S));
% Smin = min(min(S));
% Ssmall = uint8(round(((S - Smin)/(Smax-Smin))*255));
%
% save('uint8_test.mat','Ssmall','-mat');
% save('full_rest.mat','S','-mat');
handles.times=timeax(:);
handles.transition=[diff(boxcurve(:)); 0];
set( handles.axesS, 'XTick', [] );
set( handles.axesP, 'XTick', [] );
if exist('handles.datacursor')
delete( handles.datacursor );
delete( handles.segmentLineP );
delete( handles.segmentLineS );
delete( handles.segmentLineW );
end
handles.datacursor=datacursormode(handles.figure1);
axes(handles.axesP);
handles.segmentLineP = line('Visible','off');
axes(handles.axesS);
handles.segmentLineS = line('Visible','off');
axes(handles.axesW);
handles.segmentLineW = line('Visible','off');
if get( handles.SegmentButton, 'Value' )
set(handles.datacursor,'Enable','on','DisplayStyle','datatip','SnapToDataVertex','off','UpdateFcn',@datacursorfunc);
end
guidata(gcbo,handles);
close(hw);
handles = draw_segments(handles);
function [Stot boxcurve] = compute_threshold_free(S,th,n)
% Computes the threshold based on a floating percentage of the maximum
% summed intensity
Stot=sum(S,2);
boxcurve=Stot;
smax=max(Stot);
Stot = smooth_curve(Stot',n); % for removing extremes
boxcurve(find(Stot
th*smax))= smax;
function [ratiof boxcurve] = compute_index(S,lower_range,upper_range,lowerfreq,upperfreq,indexthresh,n)
% This algorithm is based on the method described in Aylin's
% dissertation.
S = S';
nfreqs = length(S(:,1));
freqspern = (upperfreq - lowerfreq) / nfreqs;
indexinlower = fliplr(nfreqs - round((lower_range - lowerfreq)/freqspern));
indexinupper = fliplr(nfreqs - round((upper_range - lowerfreq)/freqspern)) + 1;
nrangelower = indexinlower(2)-indexinlower(1);
nrangeupper = indexinupper(2)-indexinupper(1);
ratiof = ( sum(S(indexinupper(1) : indexinupper(2),:)) / nrangeupper )...
./ ( sum(S( indexinlower(1) : indexinlower(2),:)) / nrangelower );
ratiof = smooth_curve(ratiof,n); % for smoothing the curve
maxrf = max(ratiof);
boxcurve = ratiof;
boxcurve(find(ratiof=indexthresh))= maxrf;
function smoothedcurve = smooth_curve(curve2smooth,n);
% Computes the moving average of the curve where n is an integer
% for example n = 1 averages the current point with the point before and afterwards
m = length(curve2smooth);
if m > 0
curve2smooth = [repmat(curve2smooth(1),1,n) curve2smooth repmat(curve2smooth(m),1,n)];
smoothedcurve = zeros(m,1);
for i = 1:m
smoothedcurve(i) = sum(curve2smooth(i:i + 2 * n)) / (2 * n + 1);
end
else % just to save computation time
smoothed_curve = curve2smooth;
end
function MinFreq_Callback(hObject, eventdata, handles)
function MinFreq_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function MaxFreq_Callback(hObject, eventdata, handles)
function MaxFreq_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
% --- Executes on selection change in SpectrumType.
function SpectrumType_Callback(hObject, eventdata, handles)
function SpectrumType_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function AmpThresh_Callback(hObject, eventdata, handles)
function AmpThresh_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function TDerThresh_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties.
function TDerThresh_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
% --- Executes on button press in PlayAll.
function PlayAll_Callback(hObject, eventdata, handles)
wavplay(handles.ts,handles.Fs);
% --- Executes on button press in PlayWindow.
function PlayWindow_Callback(hObject, eventdata, handles)
wavplay(handles.ts(handles.Tmin:handles.Tmax),handles.Fs,'async');
%h=handles.axesP; axes(h); semilogy(timeax,Stot); axis tight;
function txt = datacursorfunc(empt,event_obj)
pos = get(event_obj,'Position');
handles=guidata(get(event_obj,'Target'));
set(handles.segmentLineP,'Xdata',[pos(1) pos(1)],'Ydata',[0.00000000000001*pos(2) 1000000000000*pos(2)],'Visible','on' );
set(handles.segmentLineS,'Xdata',[pos(1) pos(1)],'Ydata',[0.00000000000001*pos(2) 1000000000000*pos(2)],'Visible','on' );
set(handles.segmentLineW,'Xdata',[pos(1) pos(1)],'Ydata',[-100000000000*pos(2) 1000000000000*pos(2)],'Visible','on' );
if handles.start_stop_enable == 1
set( handles.SegStartButton, 'Enable', 'on' );
else
set( handles.SegEndButton, 'Enable', 'on' );
end
txt = {[num2str(pos(1))]};
guidata(gcbo,handles);
function handles = draw_segments( handles )
n = 1;
while n <= length( handles.segments )
handles.segments(n).lines=[];
handles.segments(n) = draw_all_x( handles, handles.segments(n) );
n = n + 1;
end
guidata(gcbo,handles);
% --- Executes on button press in SegmentButton.
function SegmentButton_Callback(hObject, eventdata, handles)
toggled = get( handles.SegmentButton, 'Value' );
if toggled
handles.segments = [];
handles.segmentmode = 1;
set( handles.SegmentButton, 'String', 'Segment On' );
set( handles.SegmentButton, 'Enable', 'off' );
if not(exist([handles.filename '.seg.txt']));
set( handles.LoadSegments, 'Enable', 'off' );
else
set( handles.LoadSegments, 'Enable', 'on' );
end
set( handles.AutoSegmentFile, 'Enable','on');
set( handles.AutoSegButton, 'Enable', 'on' );
set( handles.SegmentLengthEdit, 'Enable', 'on' );
set( handles.SegmentLengthText, 'Enable', 'on ' );
set( handles.SaveSegments, 'Enable', 'on' );
set( handles.DeleteSegment, 'Enable', 'on' );
set( handles.DeleteAllButton, 'Enable', 'on' );
set( handles.SegCancel, 'Enable', 'on' );
set( handles.PlotSegments, 'Enable', 'on' );
set( handles.LoadFile, 'Enable', 'off' );
set( handles.LoadNext, 'Enable', 'off' );
handles.start_stop_enable = 1;
set(handles.datacursor,'Enable','on','DisplayStyle','datatip','SnapToDataVertex','off','UpdateFcn',@datacursorfunc);
fprintf( 'Segment mode on!\n' );
else
handles.segmentmode = 0;
set( handles.SegmentButton, 'String', 'Segment Off' );
set( handles.AutoSegButton, 'Enable', 'off' );
set( handles.AutoSegmentFile, 'Enable','off');
set( handles.SegmentLengthEdit, 'Enable', 'off' );
set( handles.SegmentLengthText, 'Enable', 'off' );
set( handles.LoadSegments, 'Enable', 'off' );
set( handles.SaveSegments, 'Enable', 'off' );
set( handles.SegStartButton, 'Enable', 'off' );
set( handles.SegEndButton, 'Enable', 'off' );
set( handles.DeleteSegment, 'Enable', 'off' );
set( handles.DeleteAllButton, 'Enable', 'off' );
set( handles.SegCancel, 'Enable', 'off' );
set( handles.PlotSegments, 'Enable', 'off' );
set( handles.LoadFile, 'Enable', 'on' );
set( handles.LoadNext, 'Enable', 'on' );
set(handles.datacursor,'Enable','off')
fprintf( 'Segment mode off!\n' );
end
guidata(gcbo,handles);
% --- Executes on button press in SegStartButton.
function SegStartButton_Callback(hObject, eventdata, handles)
set( handles.LoadSegments, 'Enable', 'off' );
set( handles.SegStartButton, 'Enable', 'off' );
handles.start_stop_enable = 0;
xy=get(handles.segmentLineP,'Xdata');
handles.segment.start=xy(1);
handles.segment.lines=[];
axes(handles.axesP);
set(handles.segmentLineP,'LineWidth',3);
handles.segment.lines(1) = handles.segmentLineP;
handles.segmentLineP = line('Visible','off');
axes(handles.axesS);
set(handles.segmentLineS,'LineWidth',3);
handles.segment.lines(2) = handles.segmentLineS;
handles.segmentLineS = line('Visible','off');
axes(handles.axesW);
set(handles.segmentLineW,'LineWidth',3);
handles.segment.lines(3) = handles.segmentLineW;
handles.segmentLineW = line('Visible','off');
guidata(gcbo,handles);
% --- Executes on button press in SegEndButton.
function SegEndButton_Callback(hObject, eventdata, handles)
set( handles.SegEndButton, 'Enable', 'off' );
handles.start_stop_enable = 1;
xy=get(handles.segmentLineP,'Xdata');
handles.segment.end=xy(1);
handles.segment=draw_all_x( handles, handles.segment );
handles.segments = [handles.segments handles.segment];
guidata(gcbo,handles);
function out=draw_all_x( handles, segment )
segment=draw_x( handles.axesP, segment );
segment=draw_x( handles.axesS, segment );
segment=draw_x( handles.axesW, segment );
out=segment;
function out=draw_x( theaxes, segment )
axes(theaxes);
ylim = get(theaxes,'YLim');
segment.lines = [segment.lines line('Xdata',[segment.start segment.start],'Ydata',ylim,'LineWidth',3)];
segment.lines = [segment.lines line('Xdata',[segment.end segment.end],'Ydata',ylim,'LineWidth',3)];
segment.lines = [segment.lines line('Xdata',[segment.start segment.end],'Ydata',ylim,'LineWidth',3)];
segment.lines = [segment.lines line('Xdata',[segment.start segment.end],'Ydata',[ylim(2) ylim(1)],'LineWidth',3)];
out=segment;
% --- Executes on button press in JumpBack.
function JumpBack_Callback(hObject, eventdata, handles)
Jump_shared(hObject, eventdata, handles, -1 )
% --- Executes on button press in Jump.
function Jump_Callback(hObject, eventdata, handles)
Jump_shared(hObject, eventdata, handles, 1 )
function Jump_shared(hObject, eventdata, handles, jump_dir )
Tim=eval(get(handles.DisplayWindow,'String'));
tDuration = str2num(get(handles.Duration,'String'));
maxTslider = (tDuration - Tim)/tDuration;
NT=min(round(Tim*handles.Fs),length(handles.ts));
Tslider=get(handles.slider1,'Value');
Tslider = Tslider + jump_dir * Tim * handles.Fs / length(handles.ts);
if Tim > tDuration
set(handles.DisplayWindow,'String',num2str(tDuration));
Tslider = 0;
end
if jump_dir == 1 % jumping forward
if Tslider > maxTslider
Tslider = maxTslider;
end
end
if jump_dir == -1 % jumping backwards
if Tslider < 0
Tslider = 0
end
end
% if Tslider > 1
% Tslider = ( length(handles.ts) - NT ) / length(handles.ts);
% end
% if Tslider < 0
% Tslider = 0
% end
set(handles.slider1,'Value',Tslider);
guidata(gcbo,handles);
Plot_Callback(hObject, eventdata, handles)
function LoadNext_Callback(hObject, eventdata, handles)
% Get filename, extension. Look for next file with same extension, no seg
% file associated
exclude_name = [handles.filename, get(handles.ExcludeExt,'String')];
if not(exist(exclude_name))
fid=fopen( exclude_name, 'w' );
fclose( fid);
end
[path] = cell2mat(regexp( handles.filename, '^.*\', 'match' ));
[extension] = cell2mat(regexp( handles.filename, '\w+$', 'match' ));
dirlist = dir( [path '*' extension] );
ndir = length(dirlist);
n = 1;
while n <= ndir
file = dirlist(n).name;
if not(exist([path file get(handles.ExcludeExt,'String')]))
break;
end
n = n + 1;
end
if n <= ndir
set( handles.FileNameString, 'String',file);
handles.filename = [path file];
guidata(gcbo,handles);
handles = loadfile(hObject, eventdata, handles);
else
error('No more files found matching desired pattern');
end
% --- Executes on button press in Precompute.
function Precompute_Callback(hObject, eventdata, handles)
% handles = guidata(gcbo);
toggled = get( hObject, 'Value' );
if toggled
% Disable spectra configuration parameters
% set(handles.DisplayWindow, 'Enable', 'off');
set(handles.WinSize, 'Enable', 'off');
set(handles.StepSize, 'Enable', 'off');
set(handles.TW, 'Enable', 'off');
set(handles.MinFreq, 'Enable', 'off');
set(handles.MaxFreq, 'Enable', 'off');
set(handles.SpectrumType, 'Enable', 'off');
% set(handles.AmpThresh, 'Enable', 'off');
% set(handles.TDerThresh, 'Enable', 'off');
set(handles.LoadNext, 'Enable','off');
% set(handles.LoadFile, 'Enable','off');
valueTslider = get(handles.slider1,'Value');
set(handles.slider1,'Value',0);
strDuration = get(handles.Duration,'String');
strWindow = get(handles.DisplayWindow,'String');
handles.firsttime = 1; % indicates that the spectra need to be calculated
if str2num(strDuration) > handles.maxspec_t
strDuration = num2str(handles.maxspec_t);
end
set(handles.DisplayWindow,'String',strDuration);
Plot_Callback(handles.Plot, eventdata, handles);
handles = guidata(hObject);
handles.firsttime = 0;
handles.precomputed_spec = 1;
set(handles.DisplayWindow,'String',strWindow);
set(handles.slider1,'Value',valueTslider);
Plot_Callback(handles.Plot, eventdata, handles);
handles = guidata(hObject);
handles.precomputed_spec = 1;
else
handles.precomputed_spec = 0;
% Enable spectra configuration parameters
handles.S = []; % release memory
handles.t = [];
handles.f = [];
set(handles.WinSize, 'Enable', 'on');
set(handles.StepSize, 'Enable', 'on');
set(handles.TW, 'Enable', 'on');
set(handles.MinFreq, 'Enable', 'on');
set(handles.MaxFreq, 'Enable', 'on');
set(handles.SpectrumType, 'Enable', 'on');
% set(handles.AmpThresh, 'Enable', 'on');
set(handles.TDerThresh, 'Enable', 'on');
set(handles.LoadNext, 'Enable','on');
set(handles.LoadFile, 'Enable','on');
end
guidata(hObject,handles);
function Precompute_CreateFcn(hObject, eventdata, handles)
function Path_Callback(hObject, eventdata, handles)
path=get(hObject,'String')
function Path_CreateFcn(hObject, eventdata, handles)
set(hObject,'String',pwd);
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function Extensions_Callback(hObject, eventdata, handles)
function Extensions_CreateFcn(hObject, eventdata, handles)
set(hObject,'String','wav');
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function Duration_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function LoadSegments_Callback(hObject, eventdata, handles)
handles = load_segment(handles, [handles.filename '.seg.txt'] );
set( handles.LoadSegments, 'Enable', 'off' );
handles = draw_segments( handles );
guidata(gcbo,handles);
function handles=load_segment(handles,filename)
fid=fopen( filename, 'r' );
segments = [];
scanned=fscanf( fid, '%g %g',[2 inf] );
n = 1;
while n <= size(scanned, 2)
segment.start = scanned(1,n);
segment.end = scanned(2,n);
segment.lines = [];
segments = [ segments segment ];
n = n + 1;
end
handles.allsegments = segments; % all segments holds all segments for the file
handles.segments = filtersegments(handles,handles.allsegments); % get segments for the current chunk
handles.loadedsegment = 1; % indicates segments have been filtered
guidata(gcf,handles);
function filteredsegments = filtersegments(handles,segments)
% Returns segments which are in the current defined view. Returns segments
% which are not cut off.
realstart = handles.markerstart / handles.Fs;
realend = handles.markerend / handles.Fs;
filteredsegments = [];
for i = 1:length(segments) % no garuantee segments are in the same order
if (segments(i).start >= realstart) && (segments(i).end <= realend)
filteredsegments = [filteredsegments segments(i)];
end
end
for i=1:length(filteredsegments)
filteredsegments(i).start = filteredsegments(i).start - realstart;
filteredsegments(i).end = filteredsegments(i).end - realstart;
end
function ExcludeExt_Callback(hObject, eventdata, handles)
% Hints: get(hObject,'String') returns contents of ExcludeExt as text
% str2double(get(hObject,'String')) returns contents of ExcludeExt as a double
function ExcludeExt_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function DeleteSegment_Callback(hObject, eventdata, handles)
pos=get(handles.segmentLineP,'Xdata');
n = 1;
while n <= length( handles.segments )
if pos(1) >= handles.segments(n).start && pos(1) <= handles.segments(n).end
handles=delete_segment( handles, n );
else
n = n + 1;
end
end
drawnow;
guidata(gcbo,handles);
function handles=delete_segment( handles, n )
nl = 1;
while nl <= length( handles.segments(n).lines )
set( handles.segments(n).lines(nl), 'Visible', 'off');
nl = nl + 1;
end
handles.segments(n) = [];
fprintf('deleted!\n');
function SaveSegments_Callback(hObject, eventdata, handles)
% For the currently defined segments append to the segment list
handles = savesegments2mem(handles);
segment_file = fopen( [handles.filename '.seg.txt'], 'wt' );
n = 1;
while n <= size(handles.allsegments, 2)
fprintf( segment_file, '%f %f\n', handles.allsegments(n).start, handles.allsegments(n).end );
n = n + 1;
end
fclose(segment_file);
set( handles.SegmentButton, 'Enable', 'on' );
guidata(gcbo,handles);
function handles=savesegments2mem(handles)
% Updates the handles allsegments in memory
% first remove in all segments all segments which are in the current chunk
oldsegments = [];
realstart = handles.markerstart / handles.Fs; % readjust time
realend = handles.markerend / handles.Fs; % readjust time
for i = 1:length(handles.allsegments)
if not((handles.allsegments(i).start) >= realstart && (handles.allsegments(i).end <= realend))
oldsegments = [oldsegments handles.allsegments(i)];
end
end
% now put in the new segments
newsegments = [];
for i = 1:length(handles.segments)
segment = handles.segments(i);
segment.start = segment.start + realstart;
segment.end = segment.end + realstart;
newsegments = [newsegments segment];
end
handles.allsegments = [oldsegments newsegments];
function SegCancel_Callback(hObject, eventdata, handles)
set( handles.SegmentButton, 'Enable', 'on' );
guidata(gcbo,handles);
function PlotSegments_Callback(hObject, eventdata, handles)
% Load Segments in directory
[path] = cell2mat(regexp( handles.filename, '^.*\', 'match' ));
[extension] = cell2mat(regexp( handles.filename, '\w+$', 'match' ));
path=get(handles.Path,'String');
extension=get(handles.Extensions,'String');
dirlist = dir( [path '\*' extension '.seg.txt'] );
ndir = length(dirlist);
n = 1;
all_segments = [];
while n <= ndir
file = dirlist(n).name;
segments = load_segment([path '\' file]);
all_segments = [all_segments segments];
n = n + 1;
end
% Plot info
if length(all_segments) > 2
figure();
axes();
nbin= max(length([all_segments.end])/5,10);
syllable_lengths=[all_segments.end]-[all_segments.start];
hi=hist( syllable_lengths ,nbin);
tl=min( syllable_lengths );
th=max( syllable_lengths );
times=tl:((th-tl)/(nbin-1)):th;
plot(times,hi);
xlabel('Segment Length (s)');
ylabel('N');
title(['All segments in ' path]);
else
error('too few segments to plot');
end
guidata(gcbo,handles);
function AutoSegButton_Callback(hObject, eventdata, handles)
n = 1;
segments = [];
segment.start = 0;
segment.end = 0;
segment.lines = [];
minlen = eval(get( handles.SegmentLengthEdit, 'String' ));
while n < length( handles.times )
if ( handles.transition(n) > 0 )
segment.start = handles.times(n);
end
if ( handles.transition(n) < 0 )
segment.end = handles.times(n);
end
if (segment.start > 0) && (segment.end) > 0 && (segment.end - segment.start) > minlen
segments = [ segments segment ];
segment.start = 0;
segment.end = 0;
end
n = n + 1;
end
handles.segments = [handles.segments segments];
handles = draw_segments( handles );
guidata(gcbo,handles);
function DeleteAllButton_Callback(hObject, eventdata, handles)
while length( handles.segments )
handles = delete_segment( handles, 1 );
end
guidata(gcf,handles);
% --- Executes on button press in PlotAllButton.
function PlotAllButton_Callback(hObject, eventdata, handles)
% hObject handle to PlotAllButton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
set(handles.slider1,'Value',0);
strDuration = get(handles.Duration,'String');
if str2num(strDuration) > handles.maxspec_t
strDuration = num2str(handles.maxspec_t);
end
set(handles.DisplayWindow,'String',strDuration);
Plot_Callback(hObject, eventdata, handles);
% --- Executes on button press in PreviousChunk.
function PreviousChunk_Callback(hObject, eventdata, handles)
% hObject handle to PreviousChunk (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% [handles.markerstart handles.markerend]
handles = savesegments2mem(handles);
handles = loadfile(hObject, eventdata, handles,[handles.markerstart-handles.maxwavsize-1,handles.markerstart-1]);
% [handles.markerstart handles.markerend]
;
guidata(gcf,handles);
% --- Executes on button press in NextChunk.
function NextChunk_Callback(hObject, eventdata, handles)
% hObject handle to NextChunk (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
handles = savesegments2mem(handles);
handles = loadfile(hObject, eventdata, handles, [handles.markerend+1,handles.markerend+1+handles.maxwavsize]);
guidata(gcf,handles);
% --- Executes on button press in AutoSegmentFile.
function AutoSegmentFile_Callback(hObject, eventdata, handles)
% hObject handle to AutoSegmentFile (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
while (handles.markerend < handles.wavsize)
PlotAllButton_Callback(hObject, eventdata, handles);
handles = guidata(gcbo);
AutoSegButton_Callback(hObject, eventdata, handles);
handles = guidata(gcbo);
NextChunk_Callback(hObject, eventdata, handles);
handles = guidata(gcbo);
end
PlotAllButton_Callback(hObject, eventdata, handles);
handles = guidata(gcbo);
AutoSegButton_Callback(hObject, eventdata, handles);
handles = guidata(gcbo);
guidata(gcbo,handles);
function MaxSegLength_Callback(hObject, eventdata, handles)
% hObject handle to MaxSegLength (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of MaxSegLength as text
% str2double(get(hObject,'String')) returns contents of MaxSegLength as a double
% --- Executes during object creation, after setting all properties.
function MaxSegLength_CreateFcn(hObject, eventdata, handles)
% hObject handle to MaxSegLength (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function MaximumWavSize_Callback(hObject, eventdata, handles)
% hObject handle to MaximumWavSize (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of MaximumWavSize as text
% str2double(get(hObject,'String')) returns contents of MaximumWavSize as a double
% --- Executes during object creation, after setting all properties.
function MaximumWavSize_CreateFcn(hObject, eventdata, handles)
% hObject handle to MaximumWavSize (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
% --- Executes on button press in SeekButton.
function SeekButton_Callback(hObject, eventdata, handles)
% hObject handle to SeekButton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Seek anywhere in a long file
handles = savesegments2mem(handles);
try
timetoseek = str2num(get(handles.SeektoEdit,'String'));
catch
timetoseek = 0;
set(handles.SeektoEdit,'String','0');
end
if timetoseek < 0
timetoseek = 0;
set(handles.SeektoEdit,'String','0');
end
timetoseek = round(timetoseek * handles.Fs);
if timetoseek >= handles.wavsize
timetoseek = timetoseek - handles.maxwavsize;
end
timetoseek = timetoseek + 1;
timetoseekend = timetoseek + handles.maxwavsize;
if timetoseekend > handles.wavsize
timetoseekend = handles.wavsize;
end
oldstate = handles.dontcutsegments;
handles.dontcutsegments = 0;
handles = loadfile(hObject,eventdata,handles,[timetoseek timetoseekend]);
handles.dontcutsegments = oldstate;
guidata(gcbo,handles);
function SeektoEdit_Callback(hObject, eventdata, handles)
% hObject handle to SeektoEdit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of SeektoEdit as text
% str2double(get(hObject,'String')) returns contents of SeektoEdit as a double
% --- Executes during object creation, after setting all properties.
function SeektoEdit_CreateFcn(hObject, eventdata, handles)
% hObject handle to SeektoEdit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function RealDuration_Callback(hObject, eventdata, handles)
% hObject handle to RealDuration (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of RealDuration as text
% str2double(get(hObject,'String')) returns contents of RealDuration as a double
% --- Executes during object creation, after setting all properties.
function RealDuration_CreateFcn(hObject, eventdata, handles)
% hObject handle to RealDuration (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
% --- Executes on selection change in AutoMethodPopupMenu.
function AutoMethodPopupMenu_Callback(hObject, eventdata, handles)
% hObject handle to AutoMethodPopupMenu (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = get(hObject,'String') returns AutoMethodPopupMenu contents as cell array
% contents{get(hObject,'Value')} returns selected item from AutoMethodPopupMenu
contents = get(hObject,'String');
method = contents{get(hObject,'Value')}
if strcmp(method,'Summed intensity')
handles.automethod = 'threshold';
set(handles.AmpThresh,'Visible','on');
set(handles.RatioThresh,'Visible','off');
elseif strcmp(method,'Ratio')
handles.automethod = 'ratiof';
set(handles.AmpThresh,'Visible','off');
set(handles.RatioThresh,'Visible','on');
end
guidata(gcbo,handles);
% --- Executes during object creation, after setting all properties.
function AutoMethodPopupMenu_CreateFcn(hObject, eventdata, handles)
% hObject handle to AutoMethodPopupMenu (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function RatioThresh_Callback(hObject, eventdata, handles)
% hObject handle to RatioThresh (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of RatioThresh as text
% str2double(get(hObject,'String')) returns contents of RatioThresh as a double
% --- Executes during object creation, after setting all properties.
function RatioThresh_CreateFcn(hObject, eventdata, handles)
% hObject handle to RatioThresh (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function RatioLower_Callback(hObject, eventdata, handles)
% hObject handle to RatioLower (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of RatioLower as text
% str2double(get(hObject,'String')) returns contents of RatioLower as a double
% --- Executes during object creation, after setting all properties.
function RatioLower_CreateFcn(hObject, eventdata, handles)
% hObject handle to RatioLower (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function RatioUpper_Callback(hObject, eventdata, handles)
% hObject handle to RatioUpper (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of RatioUpper as text
% str2double(get(hObject,'String')) returns contents of RatioUpper as a double
% --- Executes during object creation, after setting all properties.
function RatioUpper_CreateFcn(hObject, eventdata, handles)
% hObject handle to RatioUpper (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
% --- Executes on button press in OptionsDisplay.
function OptionsDisplay_Callback(hObject, eventdata, handles)
% hObject handle to OptionsDisplay (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of OptionsDisplay
% positionP = get(handles.OptionsUiPanel,'Position');
% positionF = get(gcf,'Position');
state = get(hObject,'Value');
if state
set(handles.OptionsUiPanel,'Visible','on');
% positionF(3) = positionF(3) + positionP(3);
else
set(handles.OptionsUiPanel,'Visible','off');
% positionF(3) = positionF(3) - positionP(3);
end
% set(gcf,'Position',positionF); % untested
guidata(gcbo,handles)
function Duration_Callback(hObject, eventdata, handles)
% hObject handle to Duration (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of Duration as text
% str2double(get(hObject,'String')) returns contents of Duration as a double
function SmoothFactor_Callback(hObject, eventdata, handles)
% hObject handle to SmoothFactor (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of SmoothFactor as text
% str2double(get(hObject,'String')) returns contents of SmoothFactor as a double
% --- Executes during object creation, after setting all properties.
function SmoothFactor_CreateFcn(hObject, eventdata, handles)
% hObject handle to SmoothFactor (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function channel_Callback(hObject, eventdata, handles)
% hObject handle to channel (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of channel as text
% str2double(get(hObject,'String')) returns contents of channel as a double
% --- Executes during object creation, after setting all properties.
function channel_CreateFcn(hObject, eventdata, handles)
% hObject handle to channel (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
|