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'
     %