Mercurial > hg > emotion-detection-top-level
view Code/Collation/get_AudioPower.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 [] = get_AudioPower( dirName, statsFileID ) DEBUG=0; % this function collates the results of all HNR values % identify the speaker in the stats file fprintf( statsFileID, '%s ', dirName ); metricName = '_AP'; metricFileName = [ dirName metricName '.txt']; [ metrics, nanValues ] = readValuesFromFile( statsFileID, metricFileName, metricName ); %---------------- GET THE VOICED FRAME VALUES ------------------- % only wish to consider values from voiced frames. % going to disregard all unvoiced frames as these produce outliers [vuv] = detect_VoicedUnvoiced( [ dirName '.wav' ], 0 ); % if vuv is longer than the pitch array, truncate. if( length(vuv) ~= length(nanValues) ) if( (length(vuv) - length(nanValues)) > 1 ) disp('EEEK!'); end if( length(vuv) > length(nanValues) ) %increase metrics nanValues = [ nanValues; 0 ]; else vuv = [vuv; 0]; end end % % remove any NaN pitch values from the voicing information % i=1; % while( i <= length(vuv) ) % % if( nanValues(i) == 1 ) % if( i == 1 ) % vuv = vuv(2:length(vuv)); % nanValues = nanValues(2:length(nanValues)); % elseif(i == length(vuv) ) % vuv = vuv(1:length(vuv)-1); % nanValues = nanValues(1:length(nanValues)-1); % else % vuv = [ vuv(1: i-1); vuv(i+1:end) ]; % nanValues = [ nanValues(1: i-1); nanValues(i+1:end) ]; % end % else % i=i+1; % end % % end % remove the non-voiced frames (includes unvoiced and silent frames) from the metrics voicedFrames = find( vuv == 1 ); unvoicedFrames = find( vuv == 2 ); % find the average energies for voiced and unvoiced speech voicedEnergy = sum( metrics( voicedFrames )) / length( voicedFrames ); unvoicedEnergy = sum( metrics( unvoicedFrames )) / length( unvoicedFrames ); metrics = metrics( voicedFrames ); if(DEBUG) subplot(211);hold on; if( strfind( dirName, 'neg') ) plot(metrics,'b'); elseif( strfind( dirName, 'pos') ) plot(metrics,'r'); end end % get basic metric set [ metricSet ] = basicMetricSet( metrics, statsFileID ); if(DEBUG) subplot(212); if( strfind( dirName, 'neg') ) plot(metrics, 'xb'); hold on; elseif( strfind( dirName, 'pos') ) plot(metrics, 'xr'); hold on; end end % get basic metric set for the first derivative firstDerivative = gradient( metrics ); [ firstDerivativeMetricSet ] = basicMetricSet( firstDerivative, statsFileID ); % print the average voiced and unvoiced energy to file fprintf( statsFileID, '\t %f \t %f ', voicedEnergy, unvoicedEnergy); fprintf( statsFileID, '\n');