Mercurial > hg > emotion-detection-top-level
diff Code/Descriptors/Matlab/MPEG7/FromWeb/VoiceSauce/vs_OutputToEMU.m @ 4:92ca03a8fa99 tip
Update to ICASSP 2013 benchmark
author | Dawn Black |
---|---|
date | Wed, 13 Feb 2013 11:02:39 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Code/Descriptors/Matlab/MPEG7/FromWeb/VoiceSauce/vs_OutputToEMU.m Wed Feb 13 11:02:39 2013 +0000 @@ -0,0 +1,438 @@ +function varargout = vs_OutputToEMU(varargin) +% VS_OUTPUTTOEMU M-file for vs_OutputToEMU.fig +% VS_OUTPUTTOEMU, by itself, creates a new VS_OUTPUTTOEMU or raises the existing +% singleton*. +% +% H = VS_OUTPUTTOEMU returns the handle to a new VS_OUTPUTTOEMU or the handle to +% the existing singleton*. +% +% VS_OUTPUTTOEMU('CALLBACK',hObject,eventData,handles,...) calls the local +% function named CALLBACK in VS_OUTPUTTOEMU.M with the given input arguments. +% +% VS_OUTPUTTOEMU('Property','Value',...) creates a new VS_OUTPUTTOEMU or raises the +% existing singleton*. Starting from the left, property value pairs are +% applied to the GUI before vs_OutputToEMU_OpeningFcn gets called. An +% unrecognized property name or invalid value makes property application +% stop. All inputs are passed to vs_OutputToEMU_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 + +% Edit the above text to modify the response to help vs_OutputToEMU + +% Last Modified by GUIDE v2.5 15-Oct-2009 12:44:26 + +% Begin initialization code - DO NOT EDIT +gui_Singleton = 1; +gui_State = struct('gui_Name', mfilename, ... + 'gui_Singleton', gui_Singleton, ... + 'gui_OpeningFcn', @vs_OutputToEMU_OpeningFcn, ... + 'gui_OutputFcn', @vs_OutputToEMU_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 vs_OutputToEMU is made visible. +function vs_OutputToEMU_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 vs_OutputToEMU (see VARARGIN) + +% Choose default command line output for vs_OutputToEMU +handles.output = hObject; + +% YS: get the settings from the main figure +if (~isfield(handles, 'VSHandle')) + VSHandle = VoiceSauce; + handles.VSHandle = VSHandle; +end + +% Update handles structure +guidata(hObject, handles); + +VSData = guidata(handles.VSHandle); +set(handles.edit_matdir, 'String', VSData.vars.OTE_matdir); +set(handles.edit_outputdir, 'String', VSData.vars.OTE_outputdir); + +if (VSData.vars.recursedir) + func_setlistbox(handles.listbox_matfilelist, VSData.vars.OTE_matdir, 'recurse', VSData.vars, '*.mat'); +else + func_setlistbox(handles.listbox_matfilelist, VSData.vars.OTE_matdir, 'none', VSData.vars, '*.mat'); +end + +paramlist = func_getoutputparameterlist(); + +% default is everything selected +if (isempty(VSData.vars.OTE_paramselection)) + VSData.vars.OTE_paramselection = 1:length(paramlist); + guidata(handles.VSHandle, VSData); +end + +set(handles.listbox_paramlist, 'String', paramlist, 'Value', VSData.vars.OTE_paramselection); + +set(handles.checkbox_saveEMUwithmat, 'Value', VSData.vars.OTE_saveEMUwithmat); + +if (VSData.vars.OTE_saveEMUwithmat) + set(handles.edit_outputdir, 'Enable', 'Off'); + set(handles.pushbutton_outputdir_browse, 'Enable', 'Off'); +else + set(handles.edit_outputdir, 'Enable', 'On'); + set(handles.pushbutton_outputdir_browse, 'Enable', 'On'); +end + +set(handles.listbox_matfilelist, 'KeyPressFcn', @filelist_listbox_KeyPressFcn); + + + +% UIWAIT makes vs_OutputToEMU wait for user response (see UIRESUME) +% uiwait(handles.figure_OutputToEMU); + + +% --- Outputs from this function are returned to the command line. +function varargout = vs_OutputToEMU_OutputFcn(hObject, eventdata, handles) +% varargout cell array for returning output args (see VARARGOUT); +% hObject handle to figure +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Get default command line output from handles structure +varargout{1} = handles.output; + + + +function edit_matdir_Callback(hObject, eventdata, handles) +% hObject handle to edit_matdir (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +new_dir = get(handles.edit_matdir, 'String'); +VSData = guidata(handles.VSHandle); + +if (exist(new_dir, 'dir') == 7) + VSData = func_setmatdir('OTE_matdir', new_dir, VSData); + set(handles.edit_matdir, 'String', new_dir); + + if (VSData.vars.recursedir) + func_setlistbox(handles.listbox_matfilelist, VSData.vars.OTE_matdir, 'recurse', VSData.vars, '*.mat'); + else + func_setlistbox(handles.listbox_matfilelist, VSData.vars.OTE_matdir, 'none', VSData.vars, '*.mat'); + end + + if (VSData.vars.OTE_saveEMUwithmat) + set(handles.edit_outputdir, 'String', new_dir); + VSData.vars.OTE_outputdir = new_dir; + end + + guidata(handles.VSHandle, VSData); +else + msgbox('Error: directory not found.', 'Error', 'error', 'modal'); + set(hObject, 'String', VSData.vars.OTE_matdir); +end + +% --- Executes during object creation, after setting all properties. +function edit_matdir_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit_matdir (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 + + +% --- Executes on button press in pushbutton_matdir_browse. +function pushbutton_matdir_browse_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton_matdir_browse (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +current_dir = get(handles.edit_matdir, 'String'); +new_dir = uigetdir(current_dir); +VSData = guidata(handles.VSHandle); + +if (ischar(new_dir)) + VSData = func_setmatdir('OTE_matdir', new_dir, VSData); + set(handles.edit_matdir, 'String', new_dir); + + if (VSData.vars.recursedir) + func_setlistbox(handles.listbox_matfilelist, VSData.vars.OTE_matdir, 'recurse', VSData.vars, '*.mat'); + else + func_setlistbox(handles.listbox_matfilelist, VSData.vars.OTE_matdir, 'none', VSData.vars, '*.mat'); + end + + if (VSData.vars.OTE_saveEMUwithmat) + set(handles.edit_outputdir, 'String', new_dir); + VSData.vars.OTE_outputdir = new_dir; + end + + guidata(handles.VSHandle, VSData); +end + + + +% --- Executes on selection change in listbox_matfilelist. +function listbox_matfilelist_Callback(hObject, eventdata, handles) +% hObject handle to listbox_matfilelist (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 listbox_matfilelist contents as cell array +% contents{get(hObject,'Value')} returns selected item from listbox_matfilelist + + +% --- Executes during object creation, after setting all properties. +function listbox_matfilelist_CreateFcn(hObject, eventdata, handles) +% hObject handle to listbox_matfilelist (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: listbox 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 + + +% --- Executes on selection change in listbox_paramlist. +function listbox_paramlist_Callback(hObject, eventdata, handles) +% hObject handle to listbox_paramlist (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +VSData = guidata(handles.VSHandle); + +inx = get(hObject, 'Value'); +VSData.vars.OTE_paramselection = setxor(VSData.vars.OTE_paramselection, inx); +set(hObject, 'Value', [VSData.vars.OTE_paramselection]); +guidata(handles.VSHandle, VSData); + + +% --- Executes during object creation, after setting all properties. +function listbox_paramlist_CreateFcn(hObject, eventdata, handles) +% hObject handle to listbox_paramlist (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: listbox 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 + + + +function edit_outputdir_Callback(hObject, eventdata, handles) +% hObject handle to edit_outputdir (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +new_dir = get(handles.edit_outputdir, 'String'); +VSData = guidata(handles.VSHandle); + +if (exist(new_dir, 'dir') == 7) + VSData.vars.OTE_outputdir = new_dir; + set(handles.edit_outputdir, 'String', new_dir); + guidata(handles.VSHandle, VSData); +else + msgbox('Error: directory not found.', 'Error', 'error', 'modal'); +end + +% --- Executes during object creation, after setting all properties. +function edit_outputdir_CreateFcn(hObject, eventdata, handles) +% hObject handle to edit_outputdir (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 + + +% --- Executes on button press in pushbutton_outputdir_browse. +function pushbutton_outputdir_browse_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton_outputdir_browse (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +current_dir = get(handles.edit_outputdir, 'String'); +new_dir = uigetdir(current_dir); +VSData = guidata(handles.VSHandle); + +if (ischar(new_dir)) + VSData.vars.OTE_outputdir = new_dir; + set(handles.edit_outputdir, 'String', new_dir); + + guidata(handles.VSHandle, VSData); +end + + +% --- Executes on button press in togglebutton_start. +function togglebutton_start_Callback(hObject, eventdata, handles) +% hObject handle to togglebutton_start (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +VSData = guidata(handles.VSHandle); +matfilelist = get(handles.listbox_matfilelist, 'String'); +if (isempty(matfilelist)) + msgbox('Error: no mat files found.', 'Error', 'error', 'modal'); + return; +end + +if (isempty(VSData.vars.OTE_paramselection)) + msgbox('Error: no parameters selected.', 'Error', 'error', 'modal'); + return; +end + +if (get(hObject, 'Value') == 1) % start the process + set(hObject, 'String', 'Processing...', 'ForegroundColor', 'red'); + + WriteEMUfiles(handles); + + set(hObject, 'String', 'Start!', 'ForegroundColor', 'black', 'Value', 0); +end + + + + +function filelist_listbox_KeyPressFcn(hObject, eventdata) +handles = guidata(hObject); + +key = double(get(gcbf, 'CurrentCharacter')); +if (gcbo == handles.listbox_matfilelist) + if (key == 127) % delete key + + inx = get(handles.listbox_matfilelist, 'Value'); + contents = get(handles.listbox_matfilelist, 'String'); + + %nothing to do + if (isempty(contents)) + return; + end + + newinx = setxor(inx, [1:length(contents)]); + + newcontents = contents(newinx); + set(handles.listbox_matfilelist, 'String', newcontents); + + if (inx(end) > length(newcontents)) + set(handles.listbox_matfilelist, 'Value', length(newcontents)); + else + set(handles.listbox_matfilelist, 'Value', inx(end)); + end + end +end + + +% --- Executes on button press in checkbox_saveEMUwithmat. +function checkbox_saveEMUwithmat_Callback(hObject, eventdata, handles) +% hObject handle to checkbox_saveEMUwithmat (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 checkbox_saveEMUwithmat +VSData = guidata(handles.VSHandle); +VSData.vars.OTE_saveEMUwithmat = get(hObject, 'Value'); + +if (VSData.vars.OTE_saveEMUwithmat) + set(handles.edit_outputdir, 'Enable', 'Off'); + set(handles.pushbutton_outputdir_browse, 'Enable', 'Off'); + + set(handles.edit_outputdir, 'String', VSData.vars.OTE_matdir); + VSData.vars.OTE_outputdir = VSData.vars.OTE_matdir; + +else + set(handles.edit_outputdir, 'Enable', 'On'); + set(handles.pushbutton_outputdir_browse, 'Enable', 'On'); +end + +guidata(handles.VSHandle, VSData); + + +% -- main outputting function +function WriteEMUfiles(handles) + +VSData = guidata(handles.VSHandle); +MBox = MessageBox; +MBoxHandles = guidata(MBox); + +matfilelist = get(handles.listbox_matfilelist, 'String'); +messages = cell(length(matfilelist) + 1, 1); + +paramlist = get(handles.listbox_paramlist, 'String'); +params = paramlist(VSData.vars.OTE_paramselection); + +errcnt = 0; + +for k=1:length(matfilelist) + messages{k} = sprintf('%d/%d. %s: ', k, length(matfilelist), matfilelist{k}); + set(MBoxHandles.listbox_messages, 'String', messages, 'Value', k); + set(handles.listbox_matfilelist, 'Value', k); + drawnow; + + matfile = [VSData.vars.OTE_matdir VSData.vars.dirdelimiter matfilelist{k}]; + mdata = func_buildMData(matfile, VSData.vars.O_smoothwinsize); + + for n=1:length(params) + C = textscan(params{n}, '%s %s', 'delimiter', '('); + param = C{2}{1}(1:end-1); + + if (~isfield(mdata, param)) + messages{k} = [messages{k} param ' not found, ']; + set(MBoxHandles.listbox_messages, 'String', messages, 'Value', k); + set(handles.listbox_matfilelist, 'Value', k); + drawnow; + errcnt = errcnt + 1; + continue; + end + + messages{k} = [messages{k} param ', ']; + set(MBoxHandles.listbox_messages, 'String', messages, 'Value', k); + set(handles.listbox_matfilelist, 'Value', k); + drawnow; + + outfile = [VSData.vars.OTE_outputdir VSData.vars.dirdelimiter matfilelist{k}(1:end-3) param]; + + % check that the outputdir exists + pathname = fileparts(outfile); + if (exist(pathname, 'dir') ~= 7) + mkdir(pathname); + end + + func_VS2ssff(mdata.(param), param, outfile, VSData.vars); + + % check if user has requested a halt + if (get(MBoxHandles.figure_MessageBox, 'UserData') == 1) + messages{k+1} = 'Stop button pressed.'; + set(MBoxHandles.listbox_messages, 'String', messages, 'Value', k+1); + break; + end + + end + + if (get(MBoxHandles.figure_MessageBox, 'UserData') == 1) + break; + end + +end + +messages{length(matfilelist)+1} = sprintf('Completed. %d errors found.', errcnt); +set(MBoxHandles.listbox_messages, 'String', messages, 'Value', k); +set(handles.listbox_matfilelist, 'Value', k); +drawnow; + +set(MBoxHandles.pushbutton_close, 'Enable', 'On'); +set(MBoxHandles.pushbutton_stop, 'Enable', 'Off'); \ No newline at end of file