Mercurial > hg > emotion-detection-top-level
comparison 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 |
comparison
equal
deleted
inserted
replaced
3:e1cfa7765647 | 4:92ca03a8fa99 |
---|---|
1 function [F0, V, err] = func_SnackPitch(wavfile, windowsize, frameshift, maxF0, minF0) | |
2 % [F0, V, err] = func_SnackPitch(wavfile, windowsize, frameshift, maxF0, minF0) | |
3 % Input: wavfile - input wav file | |
4 % windowlength - windowlength in seconds | |
5 % frameshift - in seconds | |
6 % maxF0/minF0 - max and min thresholds | |
7 % Output: F0, V - F0 and voicing vectors | |
8 % err - error flag | |
9 % Notes: If on Windows/PC, this function will call up the Snack executable | |
10 % in the Windows folder. Otherwise, it will try to call up Snack - this | |
11 % require Snack to be installed beforehand. | |
12 % | |
13 % Author: Yen-Liang Shue, Speech Processing and Auditory Perception Laboratory, UCLA | |
14 % Copyright UCLA SPAPL 2009 | |
15 | |
16 | |
17 %settings | |
18 iwantfilecleanup = 1; %delete tcl,f0,frm files when done | |
19 tclfilename = 'tclforsnackpitch.tcl'; %produce tcl file to call snack | |
20 | |
21 % make the wavfile acceptable to tcl in Snack | |
22 wavfile = strrep(wavfile, '[', '\['); | |
23 wavfile = strrep(wavfile, ']', '\]'); | |
24 wavfile = ['"' wavfile '"']; | |
25 %wavfile = strrep(wavfile, '\', '\\'); % for PC | |
26 | |
27 if (ispc) % pc can run snack.exe | |
28 wavfile = strrep(wavfile, '\', '\\'); | |
29 err = system(['Windows\snack.exe pitch ' wavfile ' -method esps -framelength ' num2str(frameshift) ' -windowlength ' num2str(windowsize) ' -maxpitch ' num2str(maxF0) ' -minpitch ' num2str(minF0)]); | |
30 | |
31 else % for macs and possibly others | |
32 %cmd = 'tclsh'; % for older Macs and 'nixes | |
33 cmd = 'wish8.4'; % seems to work for OSX Snow Leopard | |
34 %cmd = 'wish84'; % for pc | |
35 | |
36 fid = fopen(tclfilename, 'wt'); | |
37 | |
38 fprintf(fid, '#!/bin/sh\n'); | |
39 fprintf(fid, '# the next line restarts with wish \\\n'); | |
40 fprintf(fid, 'exec wish8.4 "$0" "$@"\n\n'); | |
41 fprintf(fid, 'package require snack\n\n'); | |
42 fprintf(fid, 'snack::sound s\n\n'); | |
43 fprintf(fid, 's read %s\n\n', wavfile); | |
44 fprintf(fid, 'set fd [open [file rootname %s].f0 w]\n', wavfile); | |
45 fprintf(fid, 'puts $fd [join [s pitch -method esps -framelength %f -windowlength %f -maxpitch %d -minpitch %d] \\n]\n', frameshift, windowsize, maxF0, minF0); | |
46 fprintf(fid, 'close $fd\n\n'); | |
47 fprintf(fid, 'exit'); | |
48 fclose(fid); | |
49 | |
50 err = system([cmd ' ' tclfilename]); | |
51 | |
52 end | |
53 | |
54 % change back into original file | |
55 wavfile = strrep(wavfile, '\[', '['); | |
56 wavfile = strrep(wavfile, '\]', ']'); | |
57 pitchfile = [wavfile(2:end-4) 'f0']; % this should be where the F0's are stored | |
58 | |
59 % oops, exit now | |
60 if (err ~= 0) | |
61 F0 = NaN; | |
62 V = NaN; | |
63 if (iwantfilecleanup) | |
64 pitchfile = strrep(pitchfile, '\\', '\'); | |
65 if (exist(pitchfile, 'file') ~= 0) | |
66 delete(pitchfile); | |
67 end | |
68 | |
69 if (exist(tclfilename, 'file') ~= 0) | |
70 delete(tclfilename); | |
71 end | |
72 end | |
73 return; | |
74 end | |
75 | |
76 % snack executed successfully, read out the F0 values | |
77 [F0, V, dummy1, dummy2] = textread(pitchfile, '%f %f %f %f'); | |
78 | |
79 if (iwantfilecleanup) | |
80 pitchfile = strrep(pitchfile, '\\', '\'); | |
81 if (exist(pitchfile, 'file') ~= 0) | |
82 delete(pitchfile); | |
83 end | |
84 | |
85 if (exist(tclfilename, 'file') ~= 0) | |
86 delete(tclfilename); | |
87 end | |
88 end | |
89 | |
90 |