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');