Mercurial > hg > emotion-detection-top-level
view Code/Descriptors/Matlab/MPEG7/FromWeb/VoiceSauce/func_SnackPitch.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 source
function [F0, V, err] = func_SnackPitch(wavfile, windowsize, frameshift, maxF0, minF0) % [F0, V, err] = func_SnackPitch(wavfile, windowsize, frameshift, maxF0, minF0) % Input: wavfile - input wav file % windowlength - windowlength in seconds % frameshift - in seconds % maxF0/minF0 - max and min thresholds % Output: F0, V - F0 and voicing vectors % err - error flag % Notes: If on Windows/PC, this function will call up the Snack executable % in the Windows folder. Otherwise, it will try to call up Snack - this % require Snack to be installed beforehand. % % Author: Yen-Liang Shue, Speech Processing and Auditory Perception Laboratory, UCLA % Copyright UCLA SPAPL 2009 %settings iwantfilecleanup = 1; %delete tcl,f0,frm files when done tclfilename = 'tclforsnackpitch.tcl'; %produce tcl file to call snack % make the wavfile acceptable to tcl in Snack wavfile = strrep(wavfile, '[', '\['); wavfile = strrep(wavfile, ']', '\]'); wavfile = ['"' wavfile '"']; %wavfile = strrep(wavfile, '\', '\\'); % for PC if (ispc) % pc can run snack.exe wavfile = strrep(wavfile, '\', '\\'); err = system(['Windows\snack.exe pitch ' wavfile ' -method esps -framelength ' num2str(frameshift) ' -windowlength ' num2str(windowsize) ' -maxpitch ' num2str(maxF0) ' -minpitch ' num2str(minF0)]); else % for macs and possibly others %cmd = 'tclsh'; % for older Macs and 'nixes cmd = 'wish8.4'; % seems to work for OSX Snow Leopard %cmd = 'wish84'; % for pc fid = fopen(tclfilename, 'wt'); fprintf(fid, '#!/bin/sh\n'); fprintf(fid, '# the next line restarts with wish \\\n'); fprintf(fid, 'exec wish8.4 "$0" "$@"\n\n'); fprintf(fid, 'package require snack\n\n'); fprintf(fid, 'snack::sound s\n\n'); fprintf(fid, 's read %s\n\n', wavfile); fprintf(fid, 'set fd [open [file rootname %s].f0 w]\n', wavfile); fprintf(fid, 'puts $fd [join [s pitch -method esps -framelength %f -windowlength %f -maxpitch %d -minpitch %d] \\n]\n', frameshift, windowsize, maxF0, minF0); fprintf(fid, 'close $fd\n\n'); fprintf(fid, 'exit'); fclose(fid); err = system([cmd ' ' tclfilename]); end % change back into original file wavfile = strrep(wavfile, '\[', '['); wavfile = strrep(wavfile, '\]', ']'); pitchfile = [wavfile(2:end-4) 'f0']; % this should be where the F0's are stored % oops, exit now if (err ~= 0) F0 = NaN; V = NaN; if (iwantfilecleanup) pitchfile = strrep(pitchfile, '\\', '\'); if (exist(pitchfile, 'file') ~= 0) delete(pitchfile); end if (exist(tclfilename, 'file') ~= 0) delete(tclfilename); end end return; end % snack executed successfully, read out the F0 values [F0, V, dummy1, dummy2] = textread(pitchfile, '%f %f %f %f'); if (iwantfilecleanup) pitchfile = strrep(pitchfile, '\\', '\'); if (exist(pitchfile, 'file') ~= 0) delete(pitchfile); end if (exist(tclfilename, 'file') ~= 0) delete(tclfilename); end end