Mercurial > hg > emotion-detection-top-level
diff Code/ProcessDatabase.m @ 4:92ca03a8fa99 tip
Update to ICASSP 2013 benchmark
author | Dawn Black |
---|---|
date | Wed, 13 Feb 2013 11:02:39 +0000 |
parents | a3d62264030c |
children |
line wrap: on
line diff
--- a/Code/ProcessDatabase.m Mon Sep 10 09:20:12 2012 +0100 +++ b/Code/ProcessDatabase.m Wed Feb 13 11:02:39 2013 +0000 @@ -1,6 +1,7 @@ function [] = ProcessDatabase( databaseName, functionName, sampleStartNum, OVERWRITE ) % run from D:\Dropbox\BUPTResearch2011\EmotionDetectionCode\Code machineName = getenv('COMPUTERNAME'); +fclose('all'); switch machineName case 'LAPTOP' @@ -19,13 +20,21 @@ addpath ([root 'BUPTResearch2011\emotionDetectionCode\Code\Descriptors\Matlab\Common']) addpath ([root 'BUPTResearch2011\emotionDetectionCode\Code\Descriptors\Matlab\MPEG7\FromWeb']) addpath ([root 'BUPTResearch2011\emotionDetectionCode\Code\Descriptors\PRAAT']) +addpath ([root 'BUPTResearch2011\emotionDetectionCode\Code\Descriptors\Matlab\Speech']) +addpath ([root 'BUPTResearch2011\emotionDetectionCode\Code\Descriptors\yin\']) addpath ([root 'BUPTResearch2011\emotionDetectionCode\Code\Collation']) addpath ([root 'BUPTResearch2011\emotionDetectionCode\Code\General']) switch databaseName - case 'ChineseOpera' + case 'ChineseOperaTest' cd([root 'BUPTResearch2011/Data/Opera/TestDatabase']) startEmotion = 4; + case 'ChineseOperaFull' + cd([root 'BUPTResearch2011/Data/Opera/FullDatabase']) + startEmotion = 3; + case 'ChineseOperaPaper' + cd([root 'BUPTResearch2011/Data/Opera/PaperDatabase']) + startEmotion = 3; case 'MandarinSpeech' cd([root 'BUPTResearch2011/Data/Database/EditedRecording']) startEmotion = 3; @@ -51,13 +60,14 @@ % how many emotions for that sample? validEmotionList = dir; noOfEmotions = size( validEmotionList ); - +% figure; for emotionNum = startEmotion : noOfEmotions(1) emotionName = validEmotionList(emotionNum).name; cd( emotionName ); % how many samples for that emotion? sampleNames = dir; noOfSamples = size( sampleNames ); + for sampleNumber = 3 : noOfSamples(1) if( sampleNames(sampleNumber).isdir == 0 ) % skip directories @@ -113,45 +123,65 @@ % oldDirName = newDirName; % % fclose( statsFileID ); - % case 'getPitchStatistics' - % statsHeaderFileName = '../../../../FeatureSets/singingHeaderPitchStats.txt'; - % statsHeaderFileID = fopen( statsHeaderFileName, 'w' ); - % if( firstfileOpen == 1 ) - % fprintf( statsHeaderFileID, 'name \t unvoiced to voiced frame ratio \t mean voiced pitch \t median voiced pitch \t stdev voiced pitch \t variance voiced pitch \t min voiced pitch \t max voiced pitch \t range voiced pitch \t mean voiced pitch grad \t median voiced pitch grad \t stdev pitch grad \t variance voiced pitch grad \t min voiced pitch grad \t max voiced pitch grad \t range voiced pitch grad \n'); - % firstfileOpen = 0; - % end - % fclose(statsHeaderFileID); - % - % statsFileName = '../../../../FeatureSets/singingPitchStats.txt'; - % statsFileID = fopen( statsFileName, 'a' ); - % - % [x, fs, frameLength, noOfFrames] = openFile( currentSampleName ); - % getPitchStatistics( newDirName, x, fs, statsFileID, frameLength, noOfFrames ); - % fclose( statsFileID ); - % - % - % - % - % - % %%%%%%%%%%%%%%% careful %%%%%%%%%%%%%%% - % case 'getHNRStatistics' - % statsHeaderFileName = '../../../../FeatureSets/singingHeaderHNRStats.txt'; - % statsHeaderFileID = fopen( statsHeaderFileName, 'w' ); - % if( firstfileOpen == 1 ) - % fprintf( statsHeaderFileID, 'name \t \t \t \t \t \n'); - % firstfileOpen = 0; - % end - % fclose(statsHeaderFileID); - % - % statsFileName = '../../../../FeatureSets/singingHNRStats.txt'; - % statsFileID = fopen( statsFileName, 'a' ); - % - % [x, fs, frameLength, noOfFrames] = openFile( currentSampleName ); - % getHNRStatistics( newDirName, x, fs, statsFileID, frameLength, noOfFrames ); - % fclose( statsFileID ); - % - % - % + case 'getPitchStatistics' + + switch databaseName + case 'ChineseOperaTest' + statsFileName = '../../../../../../../TestResults/test_singingPitchStats_Voiced.txt'; + case 'ChineseOperaFull' + statsFileName = '../../../../../../../TestResults/full_singingPitchStats.txt'; + case 'ChineseOperaPaper' + statsFileName = '../../../../../../../TestResults/paper_singingPitchStats_Voiced.txt'; + case 'MandarinSpeech' + statsFileName = '../../../../../../../TestResults/mandarinPitchStats.txt'; + case 'SpeechTestFiles' + statsFileName = '../../../../../../../TestResults/speechPitchStats.txt'; + end + + statsFileID = fopen( statsFileName, 'a' ); + get_Pitch( newDirName, statsFileID ); + fclose( statsFileID ); + + case 'getHNRStatistics' + switch databaseName + case 'ChineseOperaTest' + statsFileName = '../../../../../../../TestResults/test_singingHNRStats.txt'; + case 'ChineseOperaPaper' + statsFileName = '../../../../../../../TestResults/paper_singingHNRStats.txt'; + case 'ChineseOperaFull' + statsFileName = '../../../../../../../TestResults/full_singingHNRStats.txt' + case 'MandarinSpeech' + statsFileName = '../../../../../../../TestResults/mandarinHNRStats.txt'; + case 'SpeechTestFiles' + statsFileName = '../../../../../../../TestResults/speechHNRStats.txt'; + end + + statsFileID = fopen( statsFileName, 'a' ); + get_HNR( newDirName, statsFileID ); + fclose( statsFileID ); + + case 'getEnergyStatistics' + switch databaseName + case 'ChineseOperaTest' + statsFileName = '../../../../../../../TestResults/test_singingEnergyStats.txt'; + case 'ChineseOperaPaper' + statsFileName = '../../../../../../../TestResults/paper_singingEnergyStats.txt'; + case 'ChineseOperaFull' + statsFileName = '../../../../../../../TestResults/full_singingEnergyStats.txt' + case 'MandarinSpeech' + statsFileName = '../../../../../../../TestResults/mandarinEnergyStats.txt'; + case 'SpeechTestFiles' + statsFileName = '../../../../../../../TestResults/speechEnergyStats.txt'; + end + statsFileID = fopen( statsFileName, 'a' ); + if( firstfileOpen == 1 ) + fprintf( statsFileID, 'name \t mean energy \t energy variance \t min \t max \t mean voiced energy \t mean unvoiced energy \n'); + firstfileOpen = 0; + end + + get_AudioPower( newDirName, statsFileID ); + fclose( statsFileID ); + % % case 'getEnergyStatistics' % statsFileName = '../../../../FeatureSets/singingEnergyStats.txt'; @@ -235,26 +265,46 @@ % % getSpectralTimbralDescriptors( newDirName, statsFileID ); % fclose( statsFileID ); - % case 'getMFCCs' - % if( firstfileOpen ) - % statsFileName = '../../../../FeatureSets/singingMFCCDescriptorsHeader.txt'; - % statsFileID = fopen( statsFileName, 'w' ); - % - % % Add a header file - % % putMFCCHeader( statsFileID ); - % fclose( statsFileID ); - % end - % - % statsFileName = '../../../../FeatureSets/singingMFCCDescriptors.txt'; - % statsFileID = fopen( statsFileName, 'a' ); - % - % getMFCCStatistics( newDirName, statsFileID ); - % fclose( statsFileID ); - % - % %lin + case 'getMFCCs' + + switch databaseName + case 'ChineseOperaTest' + statsFileName = '../../../../../../../TestResults/test_singingMFCCStats_VoicedAndUnvoiced_Unsmoothed.txt'; + case 'ChineseOperaFull' + statsFileName = '../../../../../../../TestResults/full_singingMFCCStats_VoicedAndUnvoiced_Unsmoothed.txt'; + case 'ChineseOperaPaper' + statsFileName = '../../../../../../../TestResults/paper_singingMFCCStats.txt'; + case 'MandarinSpeech' + statsFileName = '../../../../../../../TestResults/mandarinMFCCStats.txt'; + case 'SpeechTestFiles' + statsFileName = '../../../../../../../TestResults/speechMFCCStats.txt'; + end + + if( firstfileOpen == 1 ) + statsFileID = fopen( statsFileName, 'w' ); + firstfileOpen = 0; + else + statsFileID = fopen( statsFileName, 'a' ); + end + + get_MFCCS( newDirName, statsFileID ); + fclose( statsFileID ); + + case 'getPRAAT' - % collate all Shimmer values - statsFileName = '../../../../../../../TestResults/singingPRAATStats.txt'; + % collate all PRAAT values + switch databaseName + case 'ChineseOperaTest' + statsFileName = '../../../../../../../TestResults/test_singingPRAATStats.txt'; + case 'ChineseOperaFull' + statsFileName = '../../../../../../../TestResults/full_singingPRAATStats.txt'; + case 'ChineseOperaPaper' + statsFileName = '../../../../../../../TestResults/paper_singingPRAATStats.txt'; + case 'MandarinSpeech' + statsFileName = '../../../../../../../TestResults/mandarinPRAATStats.txt'; + case 'SpeechTestFiles' + statsFileName = '../../../../../../../TestResults/speechPRAATStats.txt'; + end % Add a header row if( firstfileOpen == 1 ) @@ -278,15 +328,99 @@ get_PRAAT( newDirName, statsFileID ); fclose( statsFileID ); - % case 'getJitter' - % % collate Jitter - % statsFileName = '../../../../FeatureSets/singingJitterStats.txt'; - % statsFileID = fopen( statsFileName, 'a' ); - % - % getJitter( newDirName, statsFileID ); - % fclose( statsFileID ); - % - % + case 'getJitter' + % collate all Jitter values + switch databaseName + case 'ChineseOperaTest' + statsFileName = '../../../../../../../TestResults/test_singingJitterStats.txt'; + case 'ChineseOperaFull' + statsFileName = '../../../../../../../TestResults/full_singingJitterStats.txt'; + case 'ChineseOperaPaper' + statsFileName = '../../../../../../../TestResults/paper_singingJitterStats.txt'; + case 'MandarinSpeech' + statsFileName = '../../../../../../../TestResults/mandarinJitterStats.txt'; + case 'SpeechTestFiles' + statsFileName = '../../../../../../../TestResults/speechJitterStats.txt'; + end + + % Add a header row + if( firstfileOpen == 1 ) + statsFileID = fopen( statsFileName, 'w' ); + fprintf( statsFileID, 'Metrics calculated using the PRAAT software. \n' ); + fprintf( statsFileID, ' name \t JITTER: ddp \t local \t ppq5 \t rap \n'); + firstfileOpen = 0; + else + statsFileID = fopen( statsFileName, 'a' ); + end + + get_Jitter( newDirName, statsFileID ); + fclose( statsFileID ); + + case 'getShimmer' + % collate all Shimmer values + switch databaseName + case 'ChineseOperaTest' + statsFileName = '../../../../../../../TestResults/test_singingShimmerStats.txt'; + case 'ChineseOperaFull' + statsFileName = '../../../../../../../TestResults/full_singingShimmerStats.txt'; + case 'ChineseOperaPaper' + statsFileName = '../../../../../../../TestResults/paper_singingShimmerStats.txt'; + case 'MandarinSpeech' + statsFileName = '../../../../../../../TestResults/mandarinShimmerStats.txt'; + case 'SpeechTestFiles' + statsFileName = '../../../../../../../TestResults/speechShimmerStats.txt'; + end + + % Add a header row + if( firstfileOpen == 1 ) + statsFileID = fopen( statsFileName, 'w' ); + fprintf( statsFileID, 'Metrics calculated using the PRAAT software. \n' ); + fprintf( statsFileID, ' name \t SHIMMER: local \t dda \t apq3 \t apq5 \t apq11 \n'); + firstfileOpen = 0; + else + statsFileID = fopen( statsFileName, 'a' ); + end + + get_Shimmer( newDirName, statsFileID ); + fclose( statsFileID ); + + case 'getFormants' + % collate all Formants values + switch databaseName + case 'ChineseOperaTest' + statsFileName = '../../../../../../../TestResults/test_singingFormantsStats.txt'; + case 'ChineseOperaFull' + statsFileName = '../../../../../../../TestResults/full_singingFormantsStats.txt'; + case 'ChineseOperaPaper' + statsFileName = '../../../../../../../TestResults/paper_singingFormantsStats.txt'; + case 'MandarinSpeech' + statsFileName = '../../../../../../../TestResults/mandarinFormantsStats.txt'; + case 'SpeechTestFiles' + statsFileName = '../../../../../../../TestResults/speechFormantsStats.txt'; + end + + % Add a header row + if( firstfileOpen == 1 ) + statsFileID = fopen( statsFileName, 'w' ); + fprintf( statsFileID, 'Metrics calculated using the PRAAT software. \n' ); + fprintf( statsFileID, 'For each of the BURG FORMANTS: numberOfFormants \t meanFrequency \t varFrequency \t minFrequency \t maxFrequency \n'); + fprintf( statsFileID, 'meanFrequencyDerivative \t varienceFrequencyDerivative \t minFrequencyDerivative \t max FrequencyDerivative \n'); + fprintf( statsFileID, 'meanFrequency2ndDerivative \t varienceFrequency2ndDerivative \t minFrequency2ndDerivative \t max Frequency2ndDerivative \n'); + fprintf( statsFileID, 'meanBandwidth \t varBandwidth \t minBandwidth \t maxBandwidth \n'); + fprintf( statsFileID, 'meanBandwidthDerivative \t varBandwidthDerivative \t minBandwidthDerivative \t maxBandwidthDerivative \n'); + fprintf( statsFileID, 'meanBandwidth2ndDerivative \t varBandwidth2ndDerivative \t minBandwidth2ndDerivative \t maxBandwidth2ndDerivative \n'); + fprintf( statsFileID, 'For the mean of all three formants: meanFrequency \t varFrequency \t minFrequency \t maxFrequency \n'); + fprintf( statsFileID, 'meanFrequencyDerivative \t varienceFrequencyDerivative \t minFrequencyDerivative \t max FrequencyDerivative \n'); + fprintf( statsFileID, 'meanFrequency2ndDerivative \t varienceFrequency2ndDerivative \t minFrequency2ndDerivative \t max Frequency2ndDerivative \n'); + firstfileOpen = 0; + else + statsFileID = fopen( statsFileName, 'a' ); + end + + get_Formants( newDirName, statsFileID ); + fclose( statsFileID ) + + % % %%%%% get all the pitch and energy related features @@ -322,7 +456,7 @@ detect_pitch( currentSampleName, OVERWRITE ); case 'calculateSilence' - detect_silence( currentSampleName, OVERWRITE ); + detect_Silence( currentSampleName, OVERWRITE ); case 'calculateVUV' % find the voiced and unvoiced frames using @@ -350,9 +484,7 @@ % ASB_ASP_Detection( currentSampleName, x, fs, frameLength, noOfFrames ); % case 'calculateAudioPower' - -% [x, fs, frameLength, noOfFrames] = openFile( currentSampleName ); - detect_AudioPower( currentSampleName, x, fs, frameLength, noOfFrames ); + detect_AudioPower( currentSampleName, OVERWRITE ); % % case 'calculateLogAttackTIme' % [x, fs, frameLength, noOfFrames] = openFile( currentSampleName ); @@ -378,15 +510,13 @@ % [x, fs, frameLength, noOfFrames] = openFile( currentSampleName ); % spectralTimbralDescriptors( currentSampleName, x, fs, frameLength, noOfFrames ); - case 'calculateAudioSpectrumFlatness' +% case 'calculateAudioSpectrumFlatness' +% +% [x, fs, frameLength, noOfFrames] = openFile( currentSampleName ); +% AudioSpectralFlatness_Detection( currentSampleName, x, fs, frameLength, noOfFrames ); - [x, fs, frameLength, noOfFrames] = openFile( currentSampleName ); - AudioSpectralFlatness_Detection( currentSampleName, x, fs, frameLength, noOfFrames ); - - % case 'calculateMFCCs' - % - % [x, fs, frameLength, noOfFrames] = openFile( currentSampleName ); - % MFCC_Detection( currentSampleName, x, fs, frameLength, noOfFrames ); + case 'calculateMFCCs' + detect_MFCC( currentSampleName, OVERWRITE ); % % case 'calculatesampleDependantThresholds' %