Repository: naxingyu/opensmile Branch: master Commit: 9291a7663f28 Files: 570 Total size: 4.7 MB Directory structure: gitextract_dxqn2ddf/ ├── .gitignore ├── AUTHORS ├── COPYING ├── CREDITS ├── ChangeLog ├── INSTALL ├── JULIUS_LICENSE ├── Makefile.am ├── NEWS ├── README.md ├── RELEASE_NOTES ├── autogen.sh ├── bin/ │ ├── android-10/ │ │ ├── SMILExtract │ │ └── libopensmile.a │ ├── linux_x64_standalone_libstdc6/ │ │ └── SMILExtract │ └── linux_x64_standalone_static/ │ └── SMILExtract ├── buildAndroid.sh ├── buildStandalone.sh ├── buildWithInstalledPortAudio.sh ├── buildWithJulius.sh ├── buildWithPortAudio.sh ├── config/ │ ├── ComParE_2016.conf │ ├── ComParE_2016_core.func.conf.inc │ ├── ComParE_2016_core.lld.conf.inc │ ├── IS09_emotion.conf │ ├── IS09_emotion_core.func.conf.inc │ ├── IS09_emotion_core.lld.conf.inc │ ├── IS10_paraling.conf │ ├── IS10_paraling_compat.conf │ ├── IS10_paraling_core.func.conf.inc │ ├── IS10_paraling_core.lld.conf.inc │ ├── IS11_speaker_state.conf │ ├── IS12_speaker_trait.conf │ ├── IS12_speaker_trait_compat.conf │ ├── IS13_ComParE.conf │ ├── IS13_ComParE_Voc.conf │ ├── IS13_ComParE_core.func.conf.inc │ ├── IS13_ComParE_core.lld.conf.inc │ ├── MFCC12_0_D_A.conf │ ├── MFCC12_0_D_A_Z.conf │ ├── MFCC12_E_D_A.conf │ ├── MFCC12_E_D_A_Z.conf │ ├── PLP_0_D_A.conf │ ├── PLP_0_D_A_Z.conf │ ├── PLP_E_D_A.conf │ ├── PLP_E_D_A_Z.conf │ ├── arff_targets.conf │ ├── audiovisual/ │ │ ├── arff_targets_age.conf │ │ ├── audio.conf │ │ ├── audiovideo.conf │ │ └── video.conf │ ├── audspec.conf │ ├── audspec_compat.conf │ ├── avec2011.conf │ ├── avec2012.readme │ ├── avec2013.conf │ ├── avec2013_functionals_core.conf.inc │ ├── avec2013_functionals_frame_mode.conf.inc │ ├── avec2013_lld_core.conf.inc │ ├── avec2014.readme │ ├── chroma_fft.conf │ ├── chroma_filt.conf │ ├── demo/ │ │ ├── audioplayer.conf │ │ ├── audiorecorder.conf │ │ ├── demo1_energy.conf │ │ └── signalGenerator.conf │ ├── emo_large.conf │ ├── emobase.conf │ ├── emobase2010.conf │ ├── emobase_live4.conf │ ├── emobase_live4_batch.conf │ ├── emobase_live4_batch_single.conf │ ├── gemaps/ │ │ ├── GeMAPSv01a.conf │ │ ├── GeMAPSv01a_core.func.conf.inc │ │ ├── GeMAPSv01a_core.lld.conf.inc │ │ ├── eGeMAPSv01a.conf │ │ ├── eGeMAPSv01a_core.func.conf.inc │ │ └── eGeMAPSv01a_core.lld.conf.inc │ ├── gui/ │ │ ├── visgui.conf │ │ ├── visgui_cepstr.conf │ │ ├── visgui_chroma.conf │ │ ├── visgui_melspec.conf │ │ ├── visgui_mfcc.conf │ │ ├── visgui_pitch.conf │ │ ├── visgui_pitch_funct.conf │ │ ├── visgui_semitone.conf │ │ └── visgui_spect.conf │ ├── list_audio_devices.conf │ ├── liveProsodyAcf.conf │ ├── mediaeval2012_tum_affect/ │ │ ├── MediaEval_Audio_IS12based_subwin2.conf │ │ ├── MediaEval_Audio_IS12based_subwin2_step0.5.conf │ │ ├── MediaEval_VideoFunctionals.conf │ │ └── MediaEval_VideoFunctionals_subwin.conf │ ├── prosodyAcf.conf │ ├── prosodyShs.conf │ ├── prosodyShsViterbiLoudness.conf │ ├── shared/ │ │ ├── BufferMode.conf.inc │ │ ├── BufferModeLive.conf.inc │ │ ├── BufferModeRb.conf.inc │ │ ├── BufferModeRbLag.conf.inc │ │ ├── FrameModeFunctionals.conf.inc │ │ ├── FrameModeFunctionalsLive.conf.inc │ │ ├── arff_targets.conf.inc │ │ ├── standard_data_output.conf.inc │ │ ├── standard_data_output_lldonly.conf.inc │ │ └── standard_wave_input.conf.inc │ ├── smileF0.conf │ ├── smileF0_base.conf │ └── smileF0_mean.conf ├── configure.ac ├── doc/ │ ├── components.txt │ ├── configfile.txt │ ├── developer/ │ │ ├── classes.txt │ │ ├── component_configuration.txt │ │ ├── dataMemory.txt │ │ ├── defines.txt │ │ ├── implementing_components.txt │ │ └── messages.txt │ ├── knownBugs.txt │ └── logger.txt ├── ide/ │ └── vs10/ │ ├── generalProps.props │ ├── generalPropsDebug.props │ ├── generalPropsDll.props │ ├── generalPropsRelease.props │ ├── lstmRnn.props │ ├── openSmile.sln │ ├── openSmile.vcproj │ ├── openSmile.vcxproj │ ├── openSmileComponents.props │ ├── openSmileLib.vcxproj │ ├── openSmileLibClassif.vcxproj │ ├── openSmileLibLibsvm.vcxproj │ ├── openSmileLibPortaudio.props │ ├── openSmileLibPortaudio.vcproj │ ├── openSmileLibPortaudio.vcxproj │ ├── openSmileLibPortaudio.vsprops │ ├── openSmilePlugin.sln │ ├── openSmilePlugin.vcproj │ ├── openSmilePluginGUI.sln │ ├── openSmilePluginGUI.vcproj │ ├── opencv.props │ ├── portaudio.def │ ├── portaudio.props │ └── portaudio.vcxproj ├── m4/ │ ├── android.m4 │ ├── find_pthread.m4 │ ├── opencv.m4 │ ├── portaudio.m4 │ └── targets.m4 ├── plugindev/ │ ├── AUTHORS │ ├── COPYING │ ├── ChangeLog │ ├── ClassifierResultGUI.cpp │ ├── ClassifierResultGUI.hpp │ ├── INSTALL │ ├── Makefile.am │ ├── NEWS │ ├── README │ ├── autogen.sh │ ├── configure.ac │ ├── exampleGuipluginSink.cpp │ ├── exampleGuipluginSink.hpp │ ├── m4/ │ │ ├── find_pthread.m4 │ │ └── opensmile.m4 │ ├── plug_exampleSink.cpp │ ├── plug_exampleSink.hpp │ ├── pluginGuiMain.cpp │ ├── pluginMain.cpp │ ├── simpleVisualiserGUI.cpp │ └── simpleVisualiserGUI.hpp ├── progsrc/ │ ├── android-template/ │ │ ├── .gitignore │ │ ├── .idea/ │ │ │ ├── .name │ │ │ ├── compiler.xml │ │ │ ├── copyright/ │ │ │ │ └── profiles_settings.xml │ │ │ ├── encodings.xml │ │ │ ├── gradle.xml │ │ │ ├── misc.xml │ │ │ ├── modules.xml │ │ │ ├── runConfigurations.xml │ │ │ └── vcs.xml │ │ ├── README_SETUP.TXT │ │ ├── app/ │ │ │ ├── .gitignore │ │ │ ├── build.gradle │ │ │ ├── proguard-rules.pro │ │ │ └── src/ │ │ │ ├── androidTest/ │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── audeering/ │ │ │ │ └── opensmile/ │ │ │ │ └── androidtemplate/ │ │ │ │ └── ApplicationTest.java │ │ │ ├── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── assets/ │ │ │ │ │ ├── BufferModeRb.conf.inc │ │ │ │ │ ├── features.conf.inc │ │ │ │ │ ├── liveinput_android.conf │ │ │ │ │ └── messages.conf.inc │ │ │ │ ├── java/ │ │ │ │ │ └── com/ │ │ │ │ │ └── audeering/ │ │ │ │ │ └── opensmile/ │ │ │ │ │ └── androidtemplate/ │ │ │ │ │ └── SmileJNI.java │ │ │ │ ├── jni/ │ │ │ │ │ ├── Android.mk │ │ │ │ │ ├── Application.mk │ │ │ │ │ ├── smile_jni.cpp │ │ │ │ │ ├── smile_jni.h │ │ │ │ │ ├── smilextract.cpp │ │ │ │ │ ├── smilextract.h │ │ │ │ │ └── sync-build-libopensmile.sh │ │ │ │ ├── res/ │ │ │ │ │ ├── layout/ │ │ │ │ │ │ ├── fragment_show.xml │ │ │ │ │ │ └── main.xml │ │ │ │ │ ├── menu/ │ │ │ │ │ │ └── toolbar.xml │ │ │ │ │ └── values/ │ │ │ │ │ ├── colors.xml │ │ │ │ │ ├── strings.xml │ │ │ │ │ └── styles.xml │ │ │ │ └── scala/ │ │ │ │ └── com/ │ │ │ │ └── audeering/ │ │ │ │ └── opensmile/ │ │ │ │ └── androidtemplate/ │ │ │ │ ├── MainActivity.scala │ │ │ │ ├── SmileMessage.scala │ │ │ │ ├── SmilePlugin.scala │ │ │ │ └── plugins/ │ │ │ │ ├── Config.scala │ │ │ │ └── Energy.scala │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── audeering/ │ │ │ └── opensmile/ │ │ │ └── androidtemplate/ │ │ │ └── ExampleUnitTest.java │ │ ├── build.gradle │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradle.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ └── settings.gradle │ ├── openSMILEbatchGUI/ │ │ ├── Form1.Designer.cs │ │ ├── Form1.cs │ │ ├── Form1.resx │ │ ├── Form2.Designer.cs │ │ ├── Form2.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── Resources.Designer.cs │ │ │ ├── Resources.resx │ │ │ ├── Settings.Designer.cs │ │ │ └── Settings.settings │ │ ├── openSMILEbatchGUI.csproj │ │ └── openSMILEbatchGUI.sln │ ├── smilextract/ │ │ └── SMILExtract.cpp │ └── tools/ │ ├── compile_libsvmBinaryModelconverter.sh │ ├── convertAllLibsvmModels.sh │ ├── libsvmBinaryModelconverter.cpp │ └── modelmake.c ├── scripts/ │ ├── arff_naninfzero_checker.pl │ ├── avec2012/ │ │ ├── README.txt │ │ ├── avec2011_full.conf │ │ ├── avec2011_list.conf │ │ ├── extr.pl │ │ └── labels.inc │ ├── avec2013/ │ │ ├── avec2013_functionals.conf │ │ ├── avec2013_functionals_core.conf │ │ ├── avec2013_functionals_frame_mode.conf │ │ ├── avec2013_functionals_frame_mode_long.conf │ │ ├── avec2013_functionals_frame_mode_short.conf │ │ ├── avec2013_functionals_frame_mode_short_with_last.conf │ │ ├── avec2013_lld_arff.conf │ │ ├── avec2013_lld_core.conf │ │ ├── avec2013_lld_htk.conf │ │ ├── avec2013_lld_htk_and_arff.conf │ │ ├── extract_all_audio.pl │ │ ├── extractor_script.pl │ │ └── feature_set_news.txt │ ├── clonecomp.pl │ ├── extract_features_batch.pl │ ├── gnuplot/ │ │ ├── gpconvert.pl │ │ ├── gpframeconvert.pl │ │ ├── plotaudspec.sh │ │ ├── plotchroma.sh │ │ ├── plotcontour.gp │ │ ├── plotcontour.sh │ │ ├── plotframe.gp │ │ ├── plotframe.sh │ │ ├── plotmatrix.gp │ │ ├── plotmatrix.sh │ │ ├── plotmatrix_chroma.gp │ │ ├── plotmatrix_spec.gp │ │ ├── transpose.pl │ │ └── transpose_lin.pl │ ├── modeltrain/ │ │ ├── README.txt │ │ ├── arff-functions.pl │ │ ├── arff-standardize.c │ │ ├── arffToLsvm.pl │ │ ├── buildmodel.pl │ │ ├── fsel.pl │ │ ├── libsvm-small/ │ │ │ ├── COPYRIGHT │ │ │ ├── Makefile │ │ │ ├── Makefile.win │ │ │ ├── README │ │ │ ├── svm-predict.c │ │ │ ├── svm-scale.c │ │ │ ├── svm-train.c │ │ │ ├── svm.cpp │ │ │ └── svm.h │ │ ├── makemodel.pl │ │ ├── stddirectory_smileextract.pl │ │ └── txtfile-functions.pl │ └── vad/ │ ├── README.txt │ ├── lstmvad_rplp18d_12.net │ ├── turnDetector.conf.inc │ ├── vad_opensource.conf │ ├── vad_opensource.conf.inc │ └── vad_segmenter.conf ├── src/ │ ├── android/ │ │ ├── jniMessageInterface.cpp │ │ └── openslesSource.cpp │ ├── classifiers/ │ │ ├── julius/ │ │ │ └── juliusSink.cpp │ │ ├── libsvm/ │ │ │ ├── COPYRIGHT │ │ │ └── svm.cpp │ │ ├── libsvmliveSink.cpp │ │ └── svmSink.cpp │ ├── core/ │ │ ├── commandlineParser.cpp │ │ ├── componentManager.cpp │ │ ├── configManager.cpp │ │ ├── dataMemory.cpp │ │ ├── dataProcessor.cpp │ │ ├── dataReader.cpp │ │ ├── dataSelector.cpp │ │ ├── dataSink.cpp │ │ ├── dataSource.cpp │ │ ├── dataWriter.cpp │ │ ├── exceptions.cpp │ │ ├── nullSink.cpp │ │ ├── smileCommon.cpp │ │ ├── smileComponent.cpp │ │ ├── smileLogger.cpp │ │ ├── vecToWinProcessor.cpp │ │ ├── vectorProcessor.cpp │ │ ├── vectorTransform.cpp │ │ ├── winToVecProcessor.cpp │ │ └── windowProcessor.cpp │ ├── dsp/ │ │ ├── dbA.cpp │ │ ├── signalGenerator.cpp │ │ ├── smileResample.cpp │ │ ├── specResample.cpp │ │ ├── specScale.cpp │ │ └── vadV1.cpp │ ├── dspcore/ │ │ ├── acf.cpp │ │ ├── amdf.cpp │ │ ├── contourSmoother.cpp │ │ ├── deltaRegression.cpp │ │ ├── fft4g.c │ │ ├── fftmagphase.cpp │ │ ├── fftsg.c │ │ ├── framer.cpp │ │ ├── fullinputMean.cpp │ │ ├── fullturnMean.cpp │ │ ├── monoMixdown.cpp │ │ ├── preemphasis.cpp │ │ ├── transformFft.cpp │ │ ├── transformFftr.cpp │ │ ├── turnDetector.cpp │ │ ├── vectorMVN.cpp │ │ ├── vectorPreemphasis.cpp │ │ └── windower.cpp │ ├── examples/ │ │ ├── componentTemplate.cpp │ │ ├── exampleProcessor.cpp │ │ ├── exampleSink.cpp │ │ ├── exampleSource.cpp │ │ ├── exampleVectorProcessor.cpp │ │ ├── exampleWindowProcessor.cpp │ │ ├── pitchBaseExample.cpp │ │ ├── simpleMessageSender.cpp │ │ └── smileComponentExample.cpp │ ├── functionals/ │ │ ├── functionalComponent.cpp │ │ ├── functionalCrossings.cpp │ │ ├── functionalDCT.cpp │ │ ├── functionalExtremes.cpp │ │ ├── functionalLpc.cpp │ │ ├── functionalMeans.cpp │ │ ├── functionalModulation.cpp │ │ ├── functionalMoments.cpp │ │ ├── functionalOnset.cpp │ │ ├── functionalPeaks.cpp │ │ ├── functionalPeaks2.cpp │ │ ├── functionalPercentiles.cpp │ │ ├── functionalRegression.cpp │ │ ├── functionalSamples.cpp │ │ ├── functionalSegments.cpp │ │ ├── functionalTimes.cpp │ │ └── functionals.cpp │ ├── include/ │ │ ├── android/ │ │ │ ├── jniMessageInterface.hpp │ │ │ └── openslesSource.hpp │ │ ├── classifiers/ │ │ │ ├── julius/ │ │ │ │ ├── juliusSink.hpp │ │ │ │ └── kwsjKresult.h │ │ │ ├── libsvm/ │ │ │ │ ├── COPYRIGHT │ │ │ │ └── svm.h │ │ │ ├── libsvmliveSink.hpp │ │ │ └── svmSink.hpp │ │ ├── core/ │ │ │ ├── commandlineParser.hpp │ │ │ ├── componentList.hpp │ │ │ ├── componentManager.hpp │ │ │ ├── configManager.hpp │ │ │ ├── dataMemory.hpp │ │ │ ├── dataProcessor.hpp │ │ │ ├── dataReader.hpp │ │ │ ├── dataSelector.hpp │ │ │ ├── dataSink.hpp │ │ │ ├── dataSource.hpp │ │ │ ├── dataWriter.hpp │ │ │ ├── exceptions.hpp │ │ │ ├── nullSink.hpp │ │ │ ├── smileCommon.hpp │ │ │ ├── smileComponent.hpp │ │ │ ├── smileLogger.hpp │ │ │ ├── smileTypes.h │ │ │ ├── svn_version.hpp │ │ │ ├── vecToWinProcessor.hpp │ │ │ ├── vectorProcessor.hpp │ │ │ ├── vectorTransform.hpp │ │ │ ├── versionInfo.hpp │ │ │ ├── winToVecProcessor.hpp │ │ │ └── windowProcessor.hpp │ │ ├── dsp/ │ │ │ ├── dbA.hpp │ │ │ ├── signalGenerator.hpp │ │ │ ├── smileResample.hpp │ │ │ ├── specResample.hpp │ │ │ ├── specScale.hpp │ │ │ └── vadV1.hpp │ │ ├── dspcore/ │ │ │ ├── acf.hpp │ │ │ ├── amdf.hpp │ │ │ ├── contourSmoother.hpp │ │ │ ├── deltaRegression.hpp │ │ │ ├── fftXg.h │ │ │ ├── fftmagphase.hpp │ │ │ ├── framer.hpp │ │ │ ├── fullinputMean.hpp │ │ │ ├── fullturnMean.hpp │ │ │ ├── monoMixdown.hpp │ │ │ ├── preemphasis.hpp │ │ │ ├── transformFft.hpp │ │ │ ├── turnDetector.hpp │ │ │ ├── vectorMVN.hpp │ │ │ ├── vectorPreemphasis.hpp │ │ │ └── windower.hpp │ │ ├── examples/ │ │ │ ├── componentTemplate.hpp │ │ │ ├── exampleProcessor.hpp │ │ │ ├── exampleSink.hpp │ │ │ ├── exampleSource.hpp │ │ │ ├── exampleVectorProcessor.hpp │ │ │ ├── exampleWindowProcessor.hpp │ │ │ ├── pitchBaseExample.hpp │ │ │ ├── simpleMessageSender.hpp │ │ │ └── smileComponentExample.hpp │ │ ├── functionals/ │ │ │ ├── functionalComponent.hpp │ │ │ ├── functionalCrossings.hpp │ │ │ ├── functionalDCT.hpp │ │ │ ├── functionalExtremes.hpp │ │ │ ├── functionalLpc.hpp │ │ │ ├── functionalMeans.hpp │ │ │ ├── functionalModulation.hpp │ │ │ ├── functionalMoments.hpp │ │ │ ├── functionalOnset.hpp │ │ │ ├── functionalPeaks.hpp │ │ │ ├── functionalPeaks2.hpp │ │ │ ├── functionalPercentiles.hpp │ │ │ ├── functionalRegression.hpp │ │ │ ├── functionalSamples.hpp │ │ │ ├── functionalSegments.hpp │ │ │ ├── functionalTimes.hpp │ │ │ └── functionals.hpp │ │ ├── io/ │ │ │ └── libsvmSink.hpp │ │ ├── iocore/ │ │ │ ├── arffSink.hpp │ │ │ ├── arffSource.hpp │ │ │ ├── csvSink.hpp │ │ │ ├── csvSource.hpp │ │ │ ├── datadumpSink.hpp │ │ │ ├── htkSink.hpp │ │ │ ├── htkSource.hpp │ │ │ ├── waveSink.hpp │ │ │ ├── waveSinkCut.hpp │ │ │ └── waveSource.hpp │ │ ├── lld/ │ │ │ ├── cens.hpp │ │ │ ├── chroma.hpp │ │ │ ├── formantLpc.hpp │ │ │ ├── formantSmoother.hpp │ │ │ ├── harmonics.hpp │ │ │ ├── lpc.hpp │ │ │ ├── lsp.hpp │ │ │ ├── pitchDirection.hpp │ │ │ ├── pitchJitter.hpp │ │ │ ├── pitchShs.hpp │ │ │ ├── pitchSmootherViterbi.hpp │ │ │ ├── tonefilt.hpp │ │ │ └── tonespec.hpp │ │ ├── lldcore/ │ │ │ ├── energy.hpp │ │ │ ├── intensity.hpp │ │ │ ├── melspec.hpp │ │ │ ├── mfcc.hpp │ │ │ ├── mzcr.hpp │ │ │ ├── pitchACF.hpp │ │ │ ├── pitchBase.hpp │ │ │ ├── pitchSmoother.hpp │ │ │ ├── plp.hpp │ │ │ └── spectral.hpp │ │ ├── other/ │ │ │ ├── bowProducer.hpp │ │ │ ├── maxIndex.hpp │ │ │ ├── valbasedSelector.hpp │ │ │ ├── vectorConcat.hpp │ │ │ └── vectorOperation.hpp │ │ ├── portaudio/ │ │ │ ├── portaudioDuplex.hpp │ │ │ ├── portaudioSink.hpp │ │ │ ├── portaudioSource.hpp │ │ │ └── portaudioWavplayer.hpp │ │ ├── rapidjson/ │ │ │ ├── document.h │ │ │ ├── filestream.h │ │ │ ├── internal/ │ │ │ │ ├── pow10.h │ │ │ │ ├── stack.h │ │ │ │ └── strfunc.h │ │ │ ├── prettywriter.h │ │ │ ├── rapidjson.h │ │ │ ├── reader.h │ │ │ ├── stringbuffer.h │ │ │ └── writer.h │ │ ├── rnn/ │ │ │ ├── rnn.hpp │ │ │ ├── rnnProcessor.hpp │ │ │ ├── rnnSink.hpp │ │ │ └── rnnVad2.hpp │ │ ├── smileutil/ │ │ │ ├── JsonClasses.hpp │ │ │ ├── JsonClassesForward.hpp │ │ │ ├── smileUtil.h │ │ │ ├── smileUtilSpline.h │ │ │ └── zerosolve.h │ │ └── video/ │ │ ├── openCVSource.hpp │ │ ├── openCV_HSVHistogram.hpp │ │ ├── openCV_LBPHistogram.hpp │ │ └── openCV_OpticalFlow.hpp │ ├── io/ │ │ └── libsvmSink.cpp │ ├── iocore/ │ │ ├── arffSink.cpp │ │ ├── arffSource.cpp │ │ ├── csvSink.cpp │ │ ├── csvSource.cpp │ │ ├── datadumpSink.cpp │ │ ├── htkSink.cpp │ │ ├── htkSource.cpp │ │ ├── waveSink.cpp │ │ ├── waveSinkCut.cpp │ │ └── waveSource.cpp │ ├── lld/ │ │ ├── cens.cpp │ │ ├── chroma.cpp │ │ ├── formantLpc.cpp │ │ ├── formantSmoother.cpp │ │ ├── harmonics.cpp │ │ ├── lpc.cpp │ │ ├── lsp.cpp │ │ ├── pitchDirection.cpp │ │ ├── pitchJitter.cpp │ │ ├── pitchShs.cpp │ │ ├── pitchSmootherViterbi.cpp │ │ ├── tonefilt.cpp │ │ └── tonespec.cpp │ ├── lldcore/ │ │ ├── energy.cpp │ │ ├── intensity.cpp │ │ ├── melspec.cpp │ │ ├── mfcc.cpp │ │ ├── mzcr.cpp │ │ ├── pitchACF.cpp │ │ ├── pitchBase.cpp │ │ ├── pitchSmoother.cpp │ │ ├── plp.cpp │ │ └── spectral.cpp │ ├── other/ │ │ ├── bowProducer.cpp │ │ ├── maxIndex.cpp │ │ ├── valbasedSelector.cpp │ │ ├── vectorConcat.cpp │ │ └── vectorOperation.cpp │ ├── portaudio/ │ │ ├── portaudioDuplex.cpp │ │ ├── portaudioSink.cpp │ │ ├── portaudioSource.cpp │ │ └── portaudioWavplayer.cpp │ ├── rnn/ │ │ ├── rnn.cpp │ │ ├── rnnProcessor.cpp │ │ ├── rnnSink.cpp │ │ └── rnnVad2.cpp │ ├── smileutil/ │ │ ├── smileUtil.c │ │ ├── smileUtilSpline.c │ │ └── zerosolve.cpp │ └── video/ │ └── openCVSource.cpp ├── thirdparty/ │ └── portaudio.tgz └── update_build_version.sh ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ # Prerequisites *.d # Compiled Object files *.lo *.o # Compiled Dynamic libraries *.so # Compiled Static libraries *.a *.la # Generated Makefiles /Makefile /Makefile.in /configure # opensmile executable SMILExtract # generated .m4 macro files /aclocal.m4 /m4/libtool.m4 /m4/ltoptions.m4 /m4/ltsugar.m4 /m4/ltversion.m4 /m4/lt~obsolete.m4 # generated config files /config.guess /config.h /config.h.in /config.log /config.status /config.sub # other generated files *.cache .deps .dirstamp /.libs /inst /install-sh /ltmain.sh /missing /stamp-h1 /compile /depcomp /libtool # android debug gdb.setup gdbserver err_outp_n # IMPORTANT: keep all compiled filed in /bin !/bin/**/* ================================================ FILE: AUTHORS ================================================ openSMILE is maintained by the following people: ============================================================= Dipl.-Ing. Florian Eyben (main code, architecture, most core components, debugging, testing, releases) Dipl.-Ing. Felix Weninger (debugging, IS challenge sets, various components) Dipl.-Ing. Martin Woellmer (testing, and various components as Julius LVCSR interface) Prof. Bjoern Schuller (testing, coordination, and theory) Contact e-mail: info@audeering.com audEERING GmbH Friedrichshafener Str. 3 82205 Gilching GERMANY Please see the file CREDITS for additional contributors! ================================================ FILE: COPYING ================================================ openSMILE - open-source Speech and Music Interpretation by Large-space Extraction - Main authors: Florian Eyben, Felix Weninger, Martin Woellmer, Bjoern Schuller Copyright (c) audEERING GmbH, Gilching, Germany. All rights reserved. http://www.audeeering.com/ Copyright (c) 2016, audEERING GmbH Copyright (c) 2013-2015, audEERING UG (haftungsbeschraenkt) Copyright (c) 2008-2013, Institute for Human-Machine Communication, Technische Universitaet Muenchen, Germany Licensing terms & your rights ============================= ********************************************************************** If you use openSMILE or any code from openSMILE in your research work, you are kindly asked to acknowledge the use of openSMILE in your publications. See the file CITING.txt for details. ********************************************************************** This audEERING Research License Agreement (license, license agreement, or agreement in the ongoing), is a legal agreement between you and audEERING GmbH, Gilching, Germany (audEERING or we in the following) for the software or data identified above, which may include source code, and any associated materials, text or speech files, associated media and "online" or electronic documentation (together, the "Software"). By installing, copying, or otherwise using this Software, you agree to be bound by the terms in this license. If you do not agree, you may not install copy or use the Software. The Software is protected by copyright and other intellectual property laws and is licensed, not sold. This license grants you the following rights: A. You may use, copy, reproduce, and distribute this Software for any non-commercial purpose, subject to the restrictions set out below. Some purposes which can be non-commercial are teaching, academic research, public demonstrations and personal experimentation or personal home use. You may also distribute this Software with books or other teaching materials, or publish the Software on websites, that are intended to teach the use of the Software for academic or other non-commercial purposes. You may NOT use or distribute this Software or any derivative works in any form for commercial purposes, except those outlined in (B). Examples of commercial purposes are running business operations, licensing, leasing, or selling the Software, distributing the Software for use with commercial products (no matter whether free or paid), using the Software in the creation or use of commercial products or any other activity which purpose is to procure a commercial gain to you or others (except for conditions set out in (B)). B. Further, you may use the software for commercial research, which meets the following conditions: commercial research which is not directly associated with product development and has the primary purpose of publishing and sharing results with the academic world; pre-product evaluations of algorithms and methods, as long as these evaluations are more of an evaluatory, planning, and research nature than of a product development nature. Any further commercial use requires you to obtain a commercial license or written approval from audEERING GmbH which grants you extended usage rights for this software. In particular any direct (software) or indirect (models, features extracted with the software) use of the software, parts of the software, or derivatives in a product (no matter whether free or paid), is not allowed without an additional commercial license. C. If the software includes source code or data, you may create derivative works of such portions of the software and distribute the modified software for non-commercial purposes, as provided herein. If you distribute the software or any derivative works of the Software, you must distribute them under the same terms and conditions as in this license, and you must not grant other rights to the software or derivative works that are different from those provided by this license agreement. If you have created derivative works of the software, and distribute such derivative works, you will cause the modified files to carry prominent notices so that recipients know that they are not receiving the original software. Such notices must state: (i) that you have altered the software; and (ii) the date of any changes as well as your name. In return for the above rights, you agree to: 1. That you will not remove any copyright or other notices (authors and citing information, for example) from the software. 2. That if any of the software is in binary format, you will not attempt to modify such portions of the software, or to reverse engineer or decompile them, except and only to the extent authorized by applicable law. 3. That the copyright holders (audEERING) are granted back, without any restrictions or limitations, a non-exclusive, perpetual, irrevocable, royalty-free, assignable and sub-licensable license, to reproduce, publicly perform or display, install, use, modify, post, distribute, make and have made, sell and transfer your modifications to and/or derivative works of the software source code or data, for any purpose. 4. That any feedback about the software provided by you to us is voluntarily given, and audEERING shall be free to use the feedback as they see fit without obligation or restriction of any kind, even if the feedback is designated by you as confidential. 5. THAT THE SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. 6. THAT NEITHER AUDEERING NOR ANY AUTHOR OR CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE, INCLUDING DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. 7. That we have no duty of reasonable care or lack of negligence, and we are not obligated to (and will not) provide technical support for the Software. 8. That if you breach this license agreement or if you sue anyone over patents that you think may apply to or read on the software or anyone's use of the software, this license agreement (and your license and rights obtained herein) terminate automatically. Upon any such termination, you shall destroy all of your copies of the software immediately. Sections 3, 4, 5, 6, 7, 10 and 11 of this license agreement shall survive any termination of this license agreement. 9. That the patent rights, if any, granted to you in this license agreement only apply to the software, not to any derivative works you make. 10.That the software may be subject to European export or import laws or such laws in other places. You agree to comply with all such laws and regulations that may apply to the software after the delivery of the software to you. 11.That all rights not expressly granted to you in this license agreement are reserved by audEERING. 12.That this license agreement shall be construed and controlled by the laws of the Federal Republic of Germany, without regard to conflicts of law. If any provision of this license agreement shall be deemed unenforceable or contrary to law, the rest of this license agreement shall remain in full effect and interpreted in an enforceable manner that most closely captures the intent of the original language. Commerical license options ========================== For commercial and other licensing options, please contact us at audEERING via E-mail: info@audeering.com Third-party contributions and dependencies ========================================== openSMILE contains third-party contributions from the Speex codec package (in the cLsp component), which are distributed unter the following terms: ----------------------------------------------------------------------- Copyright 2002-2008 Xiph.org Foundation Copyright 2002-2008 Jean-Marc Valin Copyright 2005-2007 Analog Devices Inc. Copyright 2005-2008 Commonwealth Scientific and Industrial Research Organisation (CSIRO) Copyright 1993, 2002, 2006 David Rowe Copyright 2003 EpicGames Copyright 1992-1994 Jutta Degener, Carsten Bormann Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------- openSMILE uses rapidjson to read RNN files in json format. Rapidjson can be obtained from: https://code.google.com/p/rapidjson/ It is distributed under the MIT license and included with openSMILE in src/include/rapidjson It is distributed under these terms: ----------------------------------------- Copyright (C) 2011 Milo Yip Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----------------------------------------- openSMILE uses LibSVM (by Chih-Chung Chang and Chih-Jen Lin) for classification tasks. It is distributed with openSMILE and is included in the src/classifiers/libsvm/ directory. See the COPYRIGHT file in that directory for details on license terms of LivSVM. PortAudio is required for live recording from sound card and for the SEMAINE components. You can get the latest version from: http://www.portaudio.com However, we cannot guarantee compatibility with the latest versions. A snapshot of portaudio that is known to work with openSMILE is included in thirdparty/portaudio.tgz. Copyright and licensing information for portaudio is also contained in the .tgz package. Optionally, openSMILE can be linked against the SEMAINE API and the Julius LVCSR engine, enabling an interface to the SEMAINE system and a keyword spotter component. See http://www.semaine-project.eu/ for details on running the SEMAINE system. Only the older versions of openSMILE (1.0.1) are officially supported to be build with the SEMAINE system. For recent developments, check out the status of the ARIA VALUSPA EU-project: http://aria-agent.eu/ -- For Unix platforms, openSMILE relies on automake and autoconf to build. In order to easy compilation against pthreads library, the m4 macro find_pthreads.m4 is shipped with openSMILE to ease the build process. This macro is not part of openSMILE, it is only used to build openSMILE - it is part of autoconf. It is distributed separately under it's own license terms from http://autoconf-archive.cryp.to/acx_pthread.html # Copyright © 2008 Steven G. Johnson # This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. # You should have received a copy of the GNU General Public License along with this program. If not, see . # As a special exception, the respective Autoconf Macro's copyright owner gives unlimited permission to copy, distribute and modify the configure scripts that are the output of Autoconf when processing the Macro. You need not follow the terms of the GNU General Public License when using or distributing such scripts, even though portions of the text of the Macro appear in them. The GNU General Public License (GPL) does govern all other use of the material that constitutes the Autoconf Macro. # This special exception to the GPL applies to versions of the Autoconf Macro released by the Autoconf Macro Archive. When you make and distribute a modified version of the Autoconf Macro, you may extend this special exception to the GPL to apply to your modified version as well. -- ================================================ FILE: CREDITS ================================================ ************* ** Authors ** ************* openSMILE was started in 2008 at TUM-MMK in Munich. The main authors are: Florian Eyben, Felix Weninger, Martin Wöllmer, Björn Schuller There have also been many contributions by various people, which are acknowledged below. ACKNOWLEDEGMENT ============== The development of openSMILE has received funding from the European Community's Seventh Framework Programme (FP7/2007-2013) under grant agreement No. 211486 (SEMAINE) ******************************************************************************* ** We would like to thank the following people for contributing to openSMILE ** ******************************************************************************* Christoph Kozielski (TUM), - helped to fix many bugs in various components (toneSpec, ...), - pointed out some missing essential features, - implemented the Chroma component, - helped with compilation on Windows and Mingw32. Benedikt Gollan (TUM), - helped integrating openSMILE into Qt GUI's (ADMIRE project & openEAR GUI), - implemented the components: chromaFeatures, chordFeatures, chromaPerFrame, channelMixer, and stretchToTime. - added support for negative start index to waveSource component - added support for message based switching of models in libsvmliveSink - helped with compilation under windows/mingw. - various bugfixes Dino Seppi (KU-LEUVEN), - bugfixes in functionalTimes - ideas for duration and onset functionals Dainis Boumber (http://www2.cs.uh.edu/~boumber/) - developed the first Android port for the open-source version (1.0.1 and 2.0) and pointed out required changes to the code. Many thanks for this! Bernd Huber (audEERING), - full integration of Dainis Android ports into the trunk - work on Android clients ================================================ FILE: ChangeLog ================================================ See http://opensmile.audeering.com for more information. ================================================ FILE: INSTALL ================================================ ================================================ openSMILE quick-start installation instructions: ================================================ For comprehensive instructions on how to build and use openSMILE, please refer to the file: >>>> doc/openSMILE_book.pdf <<<<< Quick installation instructions for windows (Visual Studio): open ide\vs10\openSMILE.sln and build the "Release" configuration for the standalone version. For portaudio and/or openCV, read ide\vs10\README_* and build the according configurations (ReleasePortaudio, ReleaseOpenCV, etc.). Quick installation instructions for Linux: unpack the archive (which you obviously already have when you are reading this file): tar-zxvf opensmile-X.X.X.tar.gz cd opensmile-X.X.X (replace X.X.X by the version number of your version) then type: sh buildStandalone.sh to build a standalone, statically linked SMILExtract binary without live audio support (via PortAudio) or type: sh buildWithPortaudio.sh to build the portaudio library, the libopensmile shared library, and a SMILExtract binary linked against both libraries. NOTE: portaudio.tgz (e.g. the current snapshot from their website) must be present in ../thirdparty/portaudio.tgz (relative to this directory). ********************************************************************* Below are generic GNU installation instructions: GENERIC Installation Instructions ********************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 6. Often, you can also type `make uninstall' to remove the installed files again. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. ================================================ FILE: JULIUS_LICENSE ================================================ *** English translation is available in the latter of this file *** ubAFGW Juliusv p Copyright (c) 1991-2009 sw ͌ Copyright (c) 1997-2000 񏈗UƋ(IPA) Copyright (c) 2000-2005 ޗǐ[ȊwZpw@w 쌤 Copyright (c) 2005-2009 ÉHƑw JuliusJ`[ ---------------------------------------------------------------------------- ubAFGW JuliusviJulian܂ށj́Asw ͌ Aޗǐ[ȊwZpw@w 쌤AyіÉHƑw JuliusJ`[ŊJĂ܂B1997Nx3NԁA񏈗U Ƌ(IPA){uƑnIZp琬Ɓv̉󂯂܂B sw ͌AIPAAޗǐ[ȊwZpw@w 쌤Ay ÉHƑw JuliusJ`[iȉ킹āu쌠ҁvƌj́A ҂ł蒘쌠𗯕ۂĂ܂A{p̑SĂ炷 A\[XR[h܂ޖ{vOyуhLe[Viȉ āu{\tgEFAvƌj𖳏łȂɒ񋟂܂BȂ{\ tgEFA𗘗pƂ́A{p̑SĂ̂ƊŘ􂳂 B ypz 1. Ȃ́A{p̑SĂ炷A{\tgEFȂS ͈ꕔɂ‚ĎgpAA|āAύXAg݁A邱Ƃт ̕A|ĕAύXzzAM邱Ƃł܂BA Ȃ܂ߖ{\tgEFA̗p҂́A{\tgEFȂS͂̈ꕔ ύXĂ̕zzAMȂǂđO҂ɒ񋟂Ƃ͑2 \Lڂɉ{\tgEFAύX|AύXҋyт̕ύX𖾊m \̂Ƃ܂B 2. Ȃ́AgpAA|āAύXAg݁Ȃ{\tgEFA ̗pԗl̔@ɂ炸A̕A|ĕAύX̑S͈ O҂ɒ񋟂Ƃ́A{\tgEFAɉL̒쌠\yьJ |܂ޖ{p̑Sāi̕t@CjύX邱 Ȃ̂܂ܕ\YtȂ΂Ȃ܂B L Copyright (c) 1991-2009 sw ͌ Copyright (c) 1997-2000 񏈗UƋ(IPA) Copyright (c) 2000-2005 ޗǐ[ȊwZpw@w 쌤 Copyright (c) 2005-2009 ÉHƑw JuliusJ`[ 3. {\tgEFA𗘗pēꂽmɊւĔ\sȂۂɂ́A ubAFGW Juliusv𗘗pƂ𖾋LĉB 4. {\tgEFÁAJ̎앨ƂĂ邪܂܂̏ԂŖJ 񋟂̂łA{\tgEFAɊւAAَ킸AȂ ɂ闘pł邩킸A܂@߂ɂ萶̂ł邩ۂ 킸A؂̕ۏ؂s܂BŌۏ؂ɂ́A{\tgEFA̕i A\AiAړIKÂׂȂƂё̑O҂̗L 钘쌠AAW̖̍YcƔ閧̑̌vNQ ȂƂ̕ۏ؂܂݂܂AɌ肳̂ł͂܂B ܂ߖ{\tgEFA̗p҂́A{\tgEFAۏ؂ł邱Ƃ A{\tgEFAۏ؂ł邱Ƃ̃XN𗘗pҎgŕ̂ ܂Bٔ̔̑炩̗Rɂ肠Ȃɉۂꂽ`Ɩ{ peȂƂ́A{\tgEFA𗘗pĂ͂Ȃ܂B{\ tgEFA̗p͗płȂƂɊւĂȂyёO҂ɐ 푹QAʑQAړIAԐړIAtIAhIȑQi편v܂ށj ؂ɂ‚Aꂪ_As@sאӔCArSېӔCAӔC 鍑̂Ȃ@ɂ邩킸A܂B 5. {\tgEFA̗pɊւẮA{̖@@ƂAsn ٔR̐ꑮNJٔƂ܂B 6. {\tgEFÃeiXT|[gALȊO̗pɊւ ẮAÉHƑw JuliusJ`[A܂͋sw ͌ɏƉ B *** This is English translation of the Japanese original for reference *** Large Vocabulary Continuous Speech Recognition Engine Julius Copyright (c) 1997-2000 Information-technology Promotion Agency, Japan Copyright (c) 1991-2009 Kawahara Lab., Kyoto University Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology Copyright (c) 2005-2009 Julius project team, Nagoya Institute of Technology "Large Vocabulary Continuous Speech Recognition Engine Julius", including Julian, is being developed at Kawahara Lab., Kyoto University, Shikano Lab., Nara Institute of Science and Technology, and Julius project team, Nagoya Institute of Technology (collectively referred to herein as the "Licensers"). Julius was funded by the Advanced Information Technology Program Project of Information-technology Promotion Agency (IPA), Japan for three years since 1997. The Licensers reserve the copyright thereto. However, as long as you accept and remain in strict compliance with the terms and conditions of the license set forth herein, you are hereby granted a royalty-free license to use "Large Vocabulary Continuous Speech Recognition Engine Julius" including the source code thereof and the documentation thereto (collectively referred to herein as the "Software"). Use by you of the Software shall constitute acceptance by you of all terms and conditions of the license set forth herein. TERMS AND CONDITIONS OF LICENSE 1. So long as you accept and strictly comply with the terms and conditions of the license set forth herein, the Licensers will not enforce the copyright or moral rights in respect of the Software, in connection with the use, copying, duplication, adaptation, modification, preparation of a derivative work, aggregation with another program, or insertion into another program of the Software or the distribution or transmission of the Software. However, in the event you or any other user of the Software revises all or any portion of the Software, and such revision is distributed, then, in addition to the notice required to be affixed pursuant to paragraph 2 below, a notice shall be affixed indicating that the Software has been revised, and indicating the date of such revision and the name of the person or entity that made the revision. 2. In the event you provide to any third party all or any portion of the Software, whether for copying, duplication, adaptation, modification, preparation of a derivative work, aggregation with another program, insertion into another program, or other use, you shall affix the following copyright notice and all terms and conditions of this license (both the Japanese original and English translation) as set forth herein, without any revision or change whatsoever. Form of copyright notice: Copyright (c) 1997-2000 Information-technology Promotion Agency, Japan Copyright (c) 1991-2009 Kawahara Lab., Kyoto University Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology Copyright (c) 2005-2009 Julius project team, Nagoya Institute of Technology 3. When you publish or present any results by using the Software, you must explicitly mention your use of "Large Vocabulary Continuous Speech Recognition Engine Julius". 4. The Licensers are licensing the Software, which is the trial product of research and project, on an "as is" and royalty-free basis, and makes no warranty or guaranty whatsoever with respect to the Software, whether express or implied, irrespective of the nation where used, and whether or not arising out of statute or otherwise, including but not limited to any warranty or guaranty with respect to quality, performance, merchantability, fitness for a particular purpose, absence of defects, or absence of infringement of copyright, patent rights, trademark rights or other intellectual property rights, trade secrets or proprietary rights of any third party. You and every other user of the Software hereby acknowledge that the Software is licensed without any warranty or guaranty, and assume all risks arising out of the absence of any warranty or guaranty. In the event the terms and conditions of this license are inconsistent with the obligations imposed upon you by judgment of a court or for any other reason, you may not use the Software. The Licensers shall not have any liability to you or to any third party for damages or liabilities of any nature whatsoever arising out of your use of or inability to use the Software, whether of an ordinary, special, direct, indirect, consequential or incidental nature (including without limitation lost profits) or otherwise, and whether arising out of contract, negligence, tortuous conduct, product liability or any other legal theory or reason whatsoever of any nation or jurisdiction. 5. This license of use of the Software shall be governed by the laws of Japan, and the Kyoto District Court shall have exclusive primary jurisdiction with respect to all disputes arising with respect thereto. 6. Inquiries for support or maintenance of the Software, or inquiries concerning this license of use besides the conditions above, may be sent to Julius project team, Nagoya Institute of Technology, or Kawahara Lab., Kyoto University. ================================================ FILE: Makefile.am ================================================ ACLOCAL_AMFLAGS = -I m4 AUTOMAKE_OPTIONS = subdir-objects bin_PROGRAMS = SMILExtract #bin_PROGRAMS += SEMAINExtract SMILELIB_SOURCES=\ src/classifiers/julius/juliusSink.cpp \ src/classifiers/libsvm/svm.cpp \ src/classifiers/libsvmliveSink.cpp \ src/classifiers/svmSink.cpp \ src/core/commandlineParser.cpp \ src/core/componentManager.cpp \ src/core/configManager.cpp \ src/core/dataMemory.cpp \ src/core/dataProcessor.cpp \ src/core/dataReader.cpp \ src/core/dataSelector.cpp \ src/core/dataSink.cpp \ src/core/dataSource.cpp \ src/core/dataWriter.cpp \ src/core/exceptions.cpp \ src/core/nullSink.cpp \ src/core/smileCommon.cpp \ src/core/smileComponent.cpp \ src/core/smileLogger.cpp \ src/core/vecToWinProcessor.cpp \ src/core/vectorProcessor.cpp \ src/core/vectorTransform.cpp \ src/core/winToVecProcessor.cpp \ src/core/windowProcessor.cpp \ src/dsp/dbA.cpp \ src/dsp/signalGenerator.cpp \ src/dsp/smileResample.cpp \ src/dsp/specResample.cpp \ src/dsp/vadV1.cpp \ src/dspcore/acf.cpp \ src/dspcore/amdf.cpp \ src/dspcore/contourSmoother.cpp \ src/dspcore/deltaRegression.cpp \ src/dspcore/fftmagphase.cpp \ src/dspcore/fftsg.c \ src/dspcore/framer.cpp \ src/dspcore/fullinputMean.cpp \ src/dspcore/fullturnMean.cpp \ src/dspcore/monoMixdown.cpp \ src/dspcore/preemphasis.cpp \ src/dspcore/transformFft.cpp \ src/dspcore/turnDetector.cpp \ src/dspcore/vectorMVN.cpp \ src/dspcore/vectorPreemphasis.cpp \ src/dspcore/windower.cpp \ src/examples/exampleSink.cpp \ src/examples/exampleSource.cpp \ src/examples/simpleMessageSender.cpp \ src/functionals/functionalComponent.cpp \ src/functionals/functionalCrossings.cpp \ src/functionals/functionalDCT.cpp \ src/functionals/functionalExtremes.cpp \ src/functionals/functionalLpc.cpp \ src/functionals/functionalMeans.cpp \ src/functionals/functionalMoments.cpp \ src/functionals/functionalOnset.cpp \ src/functionals/functionalPeaks.cpp \ src/functionals/functionalPeaks2.cpp \ src/functionals/functionalPercentiles.cpp \ src/functionals/functionalRegression.cpp \ src/functionals/functionalSamples.cpp \ src/functionals/functionalSegments.cpp \ src/functionals/functionalTimes.cpp \ src/functionals/functionals.cpp \ src/lld/lsp.cpp \ src/dsp/specScale.cpp \ src/io/libsvmSink.cpp \ src/iocore/arffSink.cpp \ src/iocore/arffSource.cpp \ src/iocore/csvSink.cpp \ src/iocore/csvSource.cpp \ src/iocore/datadumpSink.cpp \ src/iocore/htkSink.cpp \ src/iocore/htkSource.cpp \ src/iocore/waveSink.cpp \ src/iocore/waveSinkCut.cpp \ src/iocore/waveSource.cpp \ src/lld/cens.cpp \ src/lld/chroma.cpp \ src/lld/harmonics.cpp \ src/lld/formantLpc.cpp \ src/lld/formantSmoother.cpp \ src/lld/lpc.cpp \ src/lld/pitchDirection.cpp \ src/lld/pitchJitter.cpp \ src/lld/pitchShs.cpp \ src/lld/pitchSmootherViterbi.cpp \ src/lld/tonefilt.cpp \ src/lld/tonespec.cpp \ src/lldcore/energy.cpp \ src/lldcore/intensity.cpp \ src/lldcore/melspec.cpp \ src/lldcore/mfcc.cpp \ src/lldcore/mzcr.cpp \ src/lldcore/pitchACF.cpp \ src/lldcore/pitchBase.cpp \ src/lldcore/pitchSmoother.cpp \ src/lldcore/plp.cpp \ src/lldcore/spectral.cpp \ src/other/bowProducer.cpp \ src/other/maxIndex.cpp \ src/other/valbasedSelector.cpp \ src/other/vectorConcat.cpp \ src/other/vectorOperation.cpp \ src/portaudio/portaudioDuplex.cpp \ src/portaudio/portaudioSink.cpp \ src/portaudio/portaudioSource.cpp \ src/portaudio/portaudioWavplayer.cpp \ src/android/openslesSource.cpp \ src/android/jniMessageInterface.cpp \ src/rnn/rnn.cpp \ src/rnn/rnnProcessor.cpp \ src/rnn/rnnSink.cpp \ src/rnn/rnnVad2.cpp \ src/smileutil/smileUtil.c \ src/smileutil/smileUtilSpline.c \ src/smileutil/zerosolve.cpp \ src/video/openCVSource.cpp SMILE_SOURCES=$(SMILELIB_SOURCES) SMILE_CPPFLAGS = -Isrc/include -Iprogsrc/include $(SEMAINEAPI_CPPFLAGS) $(PORTAUDIO_CPPFLAGS) $(OPENCV_CPPFLAGS) -ggdb $(PTHREAD_CFLAGS) SMILE_LIBS = $(PORTAUDIO_LDFLAGS) $(OPENCV_LDFLAGS) -lm $(SEMAINEAPI_LDFLAGS) $(PTHREAD_LIBS) $(DLIB) SMILExtract_SOURCES = progsrc/smilextract/SMILExtract.cpp SMILExtract_CPPFLAGS = $(SMILE_CPPFLAGS) SMILExtract_LDADD = $(SMILE_LIBS) -lopensmile lib_LTLIBRARIES = libopensmile.la libopensmile_la_SOURCES = $(SMILE_SOURCES) libopensmile_la_CPPFLAGS = $(SMILE_CPPFLAGS) libopensmile_la_LIBADD = $(SMILE_LIBS) libopensmile_la_LDFLAGS = --no-undefined # endif ================================================ FILE: NEWS ================================================ See http://opensmile.audeering.com/ for current news. ================================================ FILE: README.md ================================================ # audEERING has published their own openSMILE github repo at [audEERING/openSMILE](https://github.com/audeering/opensmile) which is more updated. This repo will be archived. ----- ## This repository is just a mirror of the openSMILE code. It'll be removed once the openSMILE team use Github to distribute openSMILE code. Responses to issues are not promised. openSMILE - open-source Speech and Music Interpretation by Large-space Extraction - Main authors: Florian Eyben, Felix Weninger, Martin Woellmer, Bjoern Schuller Copyright (C) 2008-2013, Institute for Human-Machine Communication, Technische Universitaet Muenchen, Germany Copyright (C) 2013-2015, audEERING UG (haftungsbeschraenkt) Copyright (C) 2016, audEERING GmbH (C) audEERING GmbH Gilching, Germany http://www.audeeering.com/ All rights reserved. See file COPYING for your rights when using this software. If you do not agree to these licensing terms, your are not allowed to use this software and must destroy all copies immediately. About openSMILE: ================ openSMILE is a complete and open-source toolkit for audio analysis, processing and classification especially targeted at speech and music applications, e.g. automatic speech recognition, speaker identification, emotion recognition, or beat tracking and chord detection. The toolkit was first developed at the Institute for Human-Machine Communication at the Technische Universitaet Muenchen in Munich, Germany. It was started within the SEMAINE EU-FP7 research project. The toolkit is now owned and maintained by audEERING GmbH, who provide intelligent audio analysis solutions, automatic speech emotion recognition, and paralinguistic speech analysis software packages as well as consulting and development services on these topics. An open-source version for private use, education, and research will always be available, next to commercial versions with additional features (such as more interface components) or commercial licenses for the open-source version. Documentation/Installing/Using: =============================== openSMILE is well documented in the openSMILE book, which can be found in doc/openSMILE_book.pdf. For quick-start information on how to compile openSMILE, see the file INSTALL. Developers: =========== Preliminary developer's documentation can be found in "doc/developer" and in the openSMILE book. Information on how to write and compile run-time linkable plug-ins for openSMILE, see the openSMILE book or take a look at the files in the "plugindev" directory, especially the README file. Getting more help: ================== If you encounter problems with openSMILE, and solve them yourself, please tell us via e-mail (info@audeering.com), so we can update the documentation or fix the code! If you cannot solve the problems yourself, please do also contact contact us, so we can solve the problem together and make openSMILE better. ================================================ FILE: RELEASE_NOTES ================================================ openSMILE 2.3 (beta) Major new features: * Android JNI integration. While version 2.2. did provide first support for compilation as static binary for Android, we now offer integration into Apps via the JNI. An example project and a tutorial for Android Studio are provided which shows how to build a live audio analysis app that shows audio parameters in real-time in the App UI. * Configuration file interface updated Commandline options for audio input and data output formats have been standardised through modular config files. This allows all major standard * Batch feature extraction GUI for Windows and batch extraction scripts for Linux * These make it easier for beginners to extract audio features from a collection of audio files. * Improved backwards compatibility * All standard feature sets are verified to be backwards compatible to Version 2.2 and 2.1. The original feature sets of openEAR are also backwards compatible with the original openEAR models. * Updated Version of ComParE 2013-2015 baseline acoustic parameter set * Several optimisations to the feature extraction code were applied and an updated version of ComParE was released. It has the same features as the previous version, but is now numerically optimised. It is referred to as ComParE_2016, as it is released in 2016. It is not the Interspeech ComParE 2016 baseline feature set (this is still the 2013 one)!! * Lots of various fixes and improvements * We've added many minor points, fixed bugs, and improved performance. E.g. we have improved the support for modulation spectra as functionals and optimized Jitter computation through a better pitch period detection algorithm. ================================================ FILE: autogen.sh ================================================ #!/bin/bash # Copyright (C) 2008 Florian Eyben # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. rm -f config.cache echo "- aclocal." aclocal -I m4 echo "- autoconf." autoconf echo "- autoheader." autoheader echo "- automake." automake -a # on Mac libtoolize is called glibtoolize LIBTOOLIZE=libtoolize if [ `uname -s` = Darwin ]; then LIBTOOLIZE=glibtoolize fi echo "- $LIBTOOLIZE" $LIBTOOLIZE exit ================================================ FILE: buildAndroid.sh ================================================ #!/bin/sh # This file is part of openSMILE. # # Copyright (c) audEERING. All rights reserved. # See the file COPYING for details on license terms. STATIC_BIN="no"; Pwdd=`pwd`; if [ "$STATIC_BIN" = "yes" ]; then STATIC_DEFINE="-D__STATIC_LINK"; DYN_LIBS=""; ENABLE_SHARED="no"; else DYN_LIBS="-llog -lOpenSLES"; ENABLE_SHARED="yes"; STATIC_DEFINE=""; fi ##cross compiler variables ./autogen.sh ; ./autogen.sh ; ## cross compiler variables platform=android-21 ############## NOTE: Update the path to your Android NDK. ############## Version 10e is required! export NDK=`realpath ~/android/ndk-r10e`; ######################################################### export CROSS_COMPILE=arm-linux-androideabi STL_VERSION=4.8 export NDK_TOOLCHAIN=${NDK}/toolchains/${CROSS_COMPILE}-4.9/prebuilt/linux-x86_64/bin export CC=${NDK_TOOLCHAIN}/${CROSS_COMPILE}-gcc export CXX=${NDK_TOOLCHAIN}/${CROSS_COMPILE}-g++ export LD=${NDK_TOOLCHAIN}/${CROSS_COMPILE}-ld export AR=${NDK_TOOLCHAIN}/${CROSS_COMPILE}-ar export RANLIB=${NDK_TOOLCHAIN}/${CROSS_COMPILE}-ranlib export STRIP=${NDK_TOOLCHAIN}/${CROSS_COMPILE}-strip export ac_cv_func_malloc_0_nonnull=yes export ac_cv_func_realloc_0_nonnull=yes ##flags export OPTIMISE="-fPIE -pie -ffast-math -ftree-vectorize -march=armv7-a -mthumb -mfloat-abi=softfp -mfpu=vfp -mfpu=neon -funsafe-math-optimizations"; export LDFLAGS="-fPIE -pie -fexceptions -Wl,-rpath-link=${NDK}/platforms/${platform}/arch-arm/usr/lib -L${NDK}/platforms/${platform}/arch-arm/usr/lib -L${NDK}/sources/cxx-stl/gnu-libstdc++/${STL_VERSION}/libs/armeabi" export LDFLAGS_CORE="-fPIE -pie -fexceptions -L${NDK}/platforms/${platform}/arch-arm/usr/lib -L${NDK}/sources/cxx-stl/gnu-libstdc++/${STL_VERSION}/libs/armeabi" export SYSROOT=${NDK}/platforms/${platform}/arch-arm export CXXFLAGS="-I${NDK}/platforms/${platform}/arch-arm/usr/include -I${NDK}/sources/cxx-stl/gnu-libstdc++/${STL_VERSION}/include -I${NDK}/sources/cxx-stl/gnu-libstdc++/${STL_VERSION}/libs/armeabi/include --sysroot=${SYSROOT} -g -O3 $OPTIMISE" DEFINES="-DOPENSMILE_BUILD -DBUILD_LIBSVM -DBUILD_SVMSMO -DBUILD_RNN -DBUILD_WITHOUT_EXPERIMENTAL" export CPPFLAGS="--sysroot=${SYSROOT} -D__ANDROID__ ${DEFINES} -DHAVE_OPENSLES $STATIC_DEFINE" export CFLAGS="--sysroot=${SYSROOT} -nostdlib -g -O3 ${OPTIMISE}" ###add compiler options #export LIBS="-lc -lm -lgcc -lgnustl_shared -lsupc++ -llog -lOpenSLES" export LIBS="-lc -lm -lgcc -lgnustl_static -lsupc++ $DYN_LIBS" ##configure opensmile mkdir -p "$Pwdd/inst/android" ./configure --enable-static --enable-shared=no --host=arm-linux-androideabi --target=arm-linux-androideabi LIBS="$LIBS" --prefix="$Pwdd/inst/android"; if [ $? != 0 ]; then echo "failed to configure openSMILE!"; exit -1; fi make clean && make -j8 make install if [ $? != 0 ]; then echo "failed to build openSMILE!"; exit -1; fi # fully static binary: if [ "$STATIC_BIN" = "yes" ]; then rm SMILExtract $CXX $CXXFLAGS -o $Pwdd/inst/android/SMILExtract-static progsrc/smilextract/SMILExtract-SMILExtract.o .libs/libopensmile.a -static $LDFLAGS $LIBS fi #### chmod 777 SMILExtract chmod 777 inst/android/bin/SMILExtract echo "" if [ "$STATIC_BIN" = "yes" ]; then echo "build successfull. You can now use the inst/android/bin/SMILExtract-static binary for Android. For linking with Android project, use builds in inst/android/lib folder." else echo "build successfull. You can now use the inst/android/bin/SMILExtract binary for Android. For linking with Android project, use builds in inst/android/lib folder." fi echo "" ================================================ FILE: buildStandalone.sh ================================================ #!/bin/bash # This file is part of openSMILE. # # Copyright (c) audEERING. All rights reserved. # See the file COPYING for details on license terms. OPENCV_INST="" INSTPREFIX="" STATIC_BIN="no" while getopts "o:p:h" options; do case $options in o ) OPENCV_INST="$OPTARG";; p ) INSTPREFIX="$OPTARG";; h ) echo "Usage: $0 [-o ] [-p ]"; exit;; esac done Pwd=`pwd`; if [ "$INSTPREFIX" = "" ]; then INSTPREFIX="$Pwd/inst" fi if [ "$OPENCV_INST" != "" ]; then OPENCV_OPT="--with-opencv=$OPENCV_INST" STATIC_BIN="no" else OPENCV_OPT="--enable-static --enable-shared=no" # STATIC_BIN="yes" fi rm SMILExtract 2> /dev/null chmod +x autogen.sh ./autogen.sh ; ./autogen.sh ; chmod +x configure mkdir inst 2> /dev/null ##### DEBUG version: #export CXXFLAGS="-O0" #export CFLAGS="-O0" #export CPPFLAGS="-D_DEBUG -g -D__STATIC_LINK -DOPENSMILE_BUILD -DBUILD_SVMSMO -DBUILD_SVMSMO -DBUILD_LIBSVM -DBUILD_RNN -DBUILD_WITHOUT_EXPERIMENTAL" #### non-debug flags: export CXXFLAGS="-O2 -mfpmath=sse -msse2" export CFLAGS="-O2 -mfpmath=sse -msse2" export CPPFLAGS="-D__STATIC_LINK -DOPENSMILE_BUILD -DBUILD_SVMSMO -DBUILD_SVMSMO -DBUILD_LIBSVM -DBUILD_RNN -DBUILD_WITHOUT_EXPERIMENTAL" export LDFLAGS="-lrt -lm -lpthread -lc" ##### echo ./configure --without-portaudio --prefix=$INSTPREFIX $OPENCV_OPT ./configure --without-portaudio --prefix=$INSTPREFIX $OPENCV_OPT if [ $? != 0 ]; then echo "failed to configure openSMILE!"; exit -1; fi chmod +x update_build_version.sh ./update_build_version.sh make clean && make -j8; make install if [ $? != 0 ]; then echo "failed to build or install openSMILE to '$INSTPREFIX'!"; exit -1; fi # fully static binary: if [ "$STATIC_BIN" = "yes" ]; then rm SMILExtract g++ $CXXFLAGS -static -o SMILExtract progsrc/smilextract/SMILExtract-SMILExtract.o .libs/libopensmile.a $LDFLAGS #-D__STDC_CONSTANT_MACROS cp SMILExtract inst/bin/SMILExtract fi #### echo "" echo "build successfull. You can now use the inst/bin/SMILExtract binary." echo "" ================================================ FILE: buildWithInstalledPortAudio.sh ================================================ #!/bin/sh # This file is part of openSMILE. # # Copyright (c) audEERING. All rights reserved. # See the file COPYING for details on license terms. #Usage buildPA.sh [install-prefix] # Default install prefix is $Pwd/inst # EXPERIMENTAL AND UNSUPPORTED!!!! Update to latest build code in buildWithPortaudio.sh to make it work! Pwd=`pwd`; if [ "$1" != "" ]; then INSTPREFIX=$1; else INSTPREFIX="$Pwd/inst"; fi echo "++++++++++++++ Compiling openSMILE...." ./autogen.sh ; ./autogen.sh ; if [ $? != 0 ]; then echo "autogen.sh failed!"; exit -1; fi mkdir inst export CXXFLAGS="-O2 -mfpmath=sse -march=native" export CFLAGS="-O2 -mfpmath=sse -march=native" #export CXXFLAGS="-O2 -mfpmath=sse -mtune=athlon64" #export CFLAGS="-O2 -mfpmath=sse -mtune=athlon64" #./configure --prefix=$Pwd/inst --enable-static --disable-shared && ./configure --prefix=$INSTPREFIX --with-portaudio="yes" if [ $? != 0 ]; then echo "failed to configure openSMILE!"; exit -1; fi make clean && make -j8 ; make install if [ $? != 0 ]; then echo "failed to build or install openSMILE!"; exit -1; fi mv $INSTPREFIX/bin/SMILExtract $INSTPREFIX/bin/SMILExtract.bin echo "#!/bin/sh" > $INSTPREFIX/bin/SMILExtract echo "export LD_LIBRARY_PATH=\"`dirname \$0`/../lib\" ; \$0.bin \$* " >> $INSTPREFIX/bin/SMILExtract chmod +x $INSTPREFIX/bin/SMILExtract $INSTPREFIX/bin/SMILExtract -H cPortaudio 2> tmp TMP=`cat tmp | grep cPortaudio `; rm tmp if [ "$TMP" = "" ]; then echo "ERROR: PortAudio was not found on your system, please check if you have the development headers installed! If unsure, use the script buildWithPortAudio.sh! openSMILE was built, however without portaudio support!"; else echo "" echo "build successfull." echo " You can now use the $Pwd/inst/bin/SMILExtract executable," echo " and add $Pwd/inst/bin to your path." echo "" echo " Please note that $Pwd/inst/bin/SMILExtract is a wrapper script" echo " which sets up the library path and calls SMILExtract.bin" echo "" fi ================================================ FILE: buildWithJulius.sh ================================================ #!/bin/sh # This file is part of openSMILE. # # Copyright (c) audEERING. All rights reserved. # See the file COPYING for details on license terms. ## set this to the path of your julius installation directory (which contains the lib/ and include sub-directories): ## EXPERIMENTAL AND UNSUPPORTED!!! Pwd=`pwd`; JuliusPath="$Pwd/thirdparty/inst"; ./autogen.sh ; ./autogen.sh ; mkdir inst export CXXFLAGS="-O0 -mfpmath=sse -march=native" export CFLAGS="-O0 -mfpmath=sse -march=native" export CPPFLAGS="-I$JuliusPath/include -DHAVE_JULIUSLIB -DEXTERNAL_FV -D_DEBUG" export LDFLAGS="-L$JuliusPath/lib -ljulius -lsent" ./configure --prefix=$Pwd/inst --enable-static --disable-shared && sh update_build_version.sh make clean && make -j8 ; make install && echo "" echo "build successfull. You can now use the inst/bin/SMILExtract binary." echo "" ================================================ FILE: buildWithPortAudio.sh ================================================ #!/bin/sh # This file is part of openSMILE. # # Copyright (c) audEERING. All rights reserved. # See the file COPYING for details on license terms. #Usage buildWithPortAudio.sh -p [install-prefix] -o [opencv path] # Default install prefix is $Pwd/inst OPENCV_INST="" INSTPREFIX="" while getopts "o:p:" options; do case $options in o ) OPENCV_INST="$OPTARG";; p ) INSTPREFIX="$OPTARG";; \?) echo "Usage: $0 [-o ] [-p ]";; esac done Pwd=`pwd`; if [ "$INSTPREFIX" = "" ]; then INSTPREFIX="$Pwd/inst" fi if [ "$OPENCV_INST" != "" ]; then OPENCV_OPT="--with-opencv=$OPENCV_INST" fi echo "++++++++++++++ Compiling PortAudio...." cd thirdparty ; tar -zxvf portaudio.tgz ; cd portaudio ; ./configure --prefix=$INSTPREFIX ; if [ $? != 0 ]; then echo "failed to configure PortAudio!"; exit -1; fi make ; if [ $? != 0 ]; then echo "failed to build PortAudio!"; exit -1; fi make install ; if [ $? != 0 ]; then echo "failed to install PortAudio to '$Pwd/inst'!"; exit -1; fi cd $Pwd ; echo "++++++++++++++ Compiling openSMILE...." rm SMILExtract 2> /dev/null ./autogen.sh ; ./autogen.sh ; if [ $? != 0 ]; then echo "autogen.sh failed!"; exit -1; fi mkdir inst 2> /dev/null export CXXFLAGS="-O2 -lrt -D__STDC_CONSTANT_MACROS" export CFLAGS="-O2" export CPPFLAGS="-DOPENSMILE_BUILD -DHAVE_PORTAUDIO -DBUILD_LIBSVM -DBUILD_SVMSMO -DBUILD_RNN -DBUILD_WITHOUT_EXPERIMENTAL" echo ./configure --prefix=$INSTPREFIX --with-portaudio="$INSTPREFIX" "$OPENCV_OPT" ./configure --prefix=$INSTPREFIX --with-portaudio="$INSTPREFIX" "$OPENCV_OPT" if [ $? != 0 ]; then echo "failed to configure openSMILE!"; exit -1; fi sh update_build_version.sh make clean && make -j8 ; make install if [ $? != 0 ]; then echo "failed to build or install openSMILE!"; exit -1; fi mv $INSTPREFIX/bin/SMILExtract $INSTPREFIX/bin/SMILExtract.bin echo "#!/bin/sh" > $INSTPREFIX/bin/SMILExtract echo "export LD_LIBRARY_PATH=\"\`dirname \$0\`/../lib\" ; \$0.bin \$* " >> $INSTPREFIX/bin/SMILExtract chmod +x $INSTPREFIX/bin/SMILExtract echo "" echo "build successfull." echo " You can now use the $Pwd/inst/bin/SMILExtract executable," echo " and add $Pwd/inst/bin to your path." echo "" echo " Please note that $Pwd/inst/bin/SMILExtract is a wrapper script" echo " which sets up the library path and calls SMILExtract.bin" echo "" ================================================ FILE: config/ComParE_2016.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for ComParE < ////////////////// ///////// updated version of ComParE 2013 set, numerical fixes ////////////////// ///////// ////////////////// ///////// (c) 2014-2016 by audEERING, ////////////////// ///////// All rights reserverd. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory printLevelStats=0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; main section ;;;;;;;;;;;;;;;;;;;;;;;;;;; \{shared/standard_wave_input.conf.inc} \{ComParE_2016_core.lld.conf.inc} \{ComParE_2016_core.func.conf.inc} ;;;;;;;;; prepare features for standard output module [componentInstances:cComponentManager] instance[is13_lldconcat].type=cVectorConcat instance[is13_llddeconcat].type=cVectorConcat instance[is13_funcconcat].type=cVectorConcat [is13_lldconcat:cVectorConcat] reader.dmLevel = is13_lld_nzsmo;is13_lldA_smo;is13_lldB_smo writer.dmLevel = lld includeSingleElementFields = 1 [is13_llddeconcat:cVectorConcat] reader.dmLevel = is13_lld_nzsmo_de;is13_lldA_smo_de;is13_lldB_smo_de writer.dmLevel = lld_de includeSingleElementFields = 1 [is13_funcconcat:cVectorConcat] reader.dmLevel = is13_functionalsA;is13_functionalsB;is13_functionalsNz;is13_functionalsF0;is13_functionalsLLD;is13_functionalsDelta writer.dmLevel = func includeSingleElementFields = 1 \{shared/standard_data_output.conf.inc} ================================================ FILE: config/ComParE_2016_core.func.conf.inc ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for ComParE < ////////////////// ///////// ////////////////// ///////// (c) 2014 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;;;; functionals / statistics [componentInstances:cComponentManager] instance[is13_functionalsA].type=cFunctionals instance[is13_functionalsB].type=cFunctionals instance[is13_functionalsF0].type=cFunctionals instance[is13_functionalsNz].type=cFunctionals ; shared functionals for LLD instance[is13_functionalsLLD].type=cFunctionals ; shared functionals for Delta LLD instance[is13_functionalsDelta].type=cFunctionals ; functionals for energy related lld [is13_functionalsA:cFunctionals] reader.dmLevel = is13_lldA_smo;is13_lldA_smo_de writer.dmLevel = is13_functionalsA // nameAppend = copyInputName = 1 \{\cm[bufferModeRbConf]} \{\cm[frameModeFunctionalsConf{shared/FrameModeFunctionals.conf.inc}:path to included config to set frame mode for all functionals]} functionalsEnabled = Extremes ; Percentiles ; Moments ; Segments ; Times ; Lpc Extremes.max = 0 Extremes.min = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = relTh Segments.thresholds = 0.25 ; 0.75 Segments.ravgLng = 3 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Moments.doRatioLimit = 1 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 1 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 1 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for spectrum related lld [is13_functionalsB:cFunctionals] reader.dmLevel = is13_lldB_smo;is13_lldB_smo_de writer.dmLevel = is13_functionalsB // nameAppend = copyInputName = 1 \{\cm[bufferModeRbConf]} \{\cm[frameModeFunctionalsConf]} functionalsEnabled = Extremes ; Percentiles ; Moments ; Segments ; Times ; Lpc Extremes.max = 0 Extremes.min = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = relTh Segments.thresholds = 0.25 ; 0.75 Segments.rangeRelThreshold = 0.200000 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Moments.doRatioLimit = 1 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 1 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 1 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch onsets/offsets [is13_functionalsF0:cFunctionals] reader.dmLevel = is13_lld_f0_nzsmo writer.dmLevel = is13_functionalsF0 //nameAppend = ff0 copyInputName = 1 \{\cm[bufferModeRbConf]} \{\cm[frameModeFunctionalsConf]} functionalsEnabled = Means ; Segments Means.amean = 0 Means.absmean = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 1 Means.norm = segment Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = nonX Segments.X = 0.0 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch and vq related lld in voiced regions [is13_functionalsNz:cFunctionals] reader.dmLevel = is13_lld_nzsmo;is13_lld_nzsmo_de writer.dmLevel = is13_functionalsNz // nameAppend = copyInputName = 1 \{\cm[bufferModeRbConf]} \{\cm[frameModeFunctionalsConf]} functionalsEnabled = Means ; Extremes ; Regression ; Percentiles ; Moments ; Times ; Lpc Means.amean = 1 Means.posamean = 1 Means.absmean = 0 Means.qmean = 0 Means.rqmean = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.posrqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.flatness = 1 Means.norm = frames Extremes.max = 0 Extremes.min = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Moments.doRatioLimit = 1 Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 0 Regression.linregerrQ = 1 Regression.qregc1 = 1 Regression.qregc2 = 1 Regression.qregc3 = 1 Regression.qregerrA = 0 Regression.qregerrQ = 1 Regression.oldBuggyQerr = 0 Regression.centroid = 1 Regression.centroidUseAbsValues = 1 Regression.centroidRatioLimit = 1 Regression.normRegCoeff = 0 Regression.normInputs = 1 Regression.doRatioLimit = 1 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 1 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 1 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 1 masterTimeNorm = segment [is13_functionalsLLD:cFunctionals] reader.dmLevel = is13_lldA_smo;is13_lldB_smo writer.dmLevel = is13_functionalsLLD copyInputName = 1 \{\cm[bufferModeRbConf]} \{\cm[frameModeFunctionalsConf]} functionalsEnabled = Means ; Peaks2 ; Regression Means.amean = 1 Means.posamean = 0 Means.absmean = 0 Means.qmean = 0 Means.rqmean = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.posrqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.flatness = 1 Means.norm = frames Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 0 Regression.linregerrQ = 1 Regression.qregc1 = 1 Regression.qregc2 = 1 Regression.qregc3 = 1 Regression.qregerrA = 0 Regression.qregerrQ = 1 Regression.oldBuggyQerr = 0 Regression.centroid = 1 Regression.centroidUseAbsValues = 1 Regression.centroidRatioLimit = 1 Regression.normRegCoeff = 2 Regression.normInputs = 1 Regression.doRatioLimit = 1 Peaks2.doRatioLimit = 1 Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 1 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 1 Peaks2.peakRangeAbs = 1 Peaks2.peakRangeRel = 1 Peaks2.peakMeanAbs = 1 Peaks2.peakMeanMeanDist = 1 Peaks2.peakMeanRel = 1 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 1 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 0 Peaks2.minRisingSlope = 0 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 0 Peaks2.minFallingSlope = 0 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 [is13_functionalsDelta:cFunctionals] reader.dmLevel = is13_lldA_smo_de;is13_lldB_smo_de writer.dmLevel = is13_functionalsDelta copyInputName = 1 \{\cm[bufferModeRbConf]} \{\cm[frameModeFunctionalsConf]} functionalsEnabled = Means ; Peaks2 Means.amean = 0 Means.posamean = 1 Means.absmean = 0 Means.qmean = 0 Means.rqmean = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.posrqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.flatness = 1 Means.norm = frames Peaks2.doRatioLimit = 1 Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 1 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 1 Peaks2.peakRangeAbs = 1 Peaks2.peakRangeRel = 1 Peaks2.peakMeanAbs = 1 Peaks2.peakMeanMeanDist = 1 Peaks2.peakMeanRel = 1 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 1 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 0 Peaks2.minRisingSlope = 0 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 0 Peaks2.minFallingSlope = 0 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 ================================================ FILE: config/ComParE_2016_core.lld.conf.inc ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for ComParE < ////////////////// ///////// ////////////////// ///////// (c) audEERING GmbH, ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[is13_frame60].type=cFramer instance[is13_win60].type=cWindower instance[is13_fft60].type=cTransformFFT instance[is13_fftmp60].type=cFFTmagphase [is13_frame60:cFramer] reader.dmLevel=wave writer.dmLevel=is13_frame60 \{\cm[bufferModeRbConf{shared/BufferModeRb.conf.inc}:path to included config to set the buffer mode for the standard ringbuffer levels]} frameSize = 0.060 frameStep = 0.010 frameCenterSpecial = left [is13_win60:cWindower] reader.dmLevel=is13_frame60 writer.dmLevel=is13_winG60 winFunc=gauss gain=1.0 sigma=0.4 [is13_fft60:cTransformFFT] reader.dmLevel=is13_winG60 writer.dmLevel=is13_fftcG60 zeroPadSymmetric = 1 [is13_fftmp60:cFFTmagphase] reader.dmLevel=is13_fftcG60 writer.dmLevel=is13_fftmagG60 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[is13_frame25].type=cFramer instance[is13_win25].type=cWindower instance[is13_fft25].type=cTransformFFT instance[is13_fftmp25].type=cFFTmagphase [is13_frame25:cFramer] reader.dmLevel=wave writer.dmLevel=is13_frame25 \{\cm[bufferModeRbConf]} frameSize = 0.020 frameStep = 0.010 frameCenterSpecial = left [is13_win25:cWindower] reader.dmLevel=is13_frame25 writer.dmLevel=is13_winH25 winFunc=hamming [is13_fft25:cTransformFFT] reader.dmLevel=is13_winH25 writer.dmLevel=is13_fftcH25 zeroPadSymmetric = 1 [is13_fftmp25:cFFTmagphase] reader.dmLevel=is13_fftcH25 writer.dmLevel=is13_fftmagH25 ;;;;;;;;;;;;;;;;;;;; HPS pitch [componentInstances:cComponentManager] instance[is13_scale].type=cSpecScale instance[is13_shs].type=cPitchShs [is13_scale:cSpecScale] reader.dmLevel=is13_fftmagG60 writer.dmLevel=is13_hpsG60 copyInputName = 1 processArrayFields = 0 scale=octave sourceScale = lin interpMethod = spline minF = 25 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [is13_shs:cPitchShs] reader.dmLevel=is13_hpsG60 writer.dmLevel=is13_pitchShsG60 \{\cm[bufferModeRbLagConf{shared/BufferModeRbLag.conf.inc}:path to included config to set the buffer mode for levels which will be joint with Viterbi smoothed -lagged- F0]} copyInputName = 1 processArrayFields = 0 maxPitch = 620 minPitch = 52 nCandidates = 6 scores = 1 voicing = 1 F0C1 = 0 voicingC1 = 0 F0raw = 1 voicingClip = 1 voicingCutoff = 0.700000 inputFieldSearch = Mag_octScale octaveCorrection = 0 nHarmonics = 15 compressionFactor = 0.850000 greedyPeakAlgo = 1 ;;;;; Pitch with Viterbi smoother [componentInstances:cComponentManager] instance[is13_energy60].type=cEnergy [is13_energy60:cEnergy] reader.dmLevel=is13_winG60 writer.dmLevel=is13_e60 ; This must be > than buffersize of viterbi smoother \{\cm[bufferModeRbLagConf]} rms=1 log=0 [componentInstances:cComponentManager] instance[is13_pitchSmoothViterbi].type=cPitchSmootherViterbi [is13_pitchSmoothViterbi:cPitchSmootherViterbi] reader.dmLevel=is13_pitchShsG60 reader2.dmLevel=is13_pitchShsG60 writer.dmLevel=is13_pitchG60_viterbi \{\cm[bufferModeRbLagConf]} copyInputName = 1 bufferLength=30 F0final = 1 F0finalEnv = 0 voicingFinalClipped = 0 voicingFinalUnclipped = 1 F0raw = 0 voicingC1 = 0 voicingClip = 0 wTvv =10.0 wTvvd= 5.0 wTvuv=10.0 wThr = 4.0 wTuu = 0.0 wLocal=2.0 wRange=1.0 [componentInstances:cComponentManager] instance[is13_volmerge].type = cValbasedSelector [is13_volmerge:cValbasedSelector] reader.dmLevel = is13_e60;is13_pitchG60_viterbi writer.dmLevel = is13_pitchG60 \{\cm[bufferModeRbLagConf]} idx=0 threshold=0.001 removeIdx=1 zeroVec=1 outputVal=0.0 ;;;;;;;;;;;;;;;;;;; Voice Quality (VQ) [componentInstances:cComponentManager] instance[is13_pitchJitter].type=cPitchJitter [is13_pitchJitter:cPitchJitter] reader.dmLevel = wave writer.dmLevel = is13_jitterShimmer \{\cm[bufferModeRbLagConf]} copyInputName = 1 F0reader.dmLevel = is13_pitchG60 F0field = F0final searchRangeRel = 0.250000 jitterLocal = 1 jitterDDP = 1 jitterLocalEnv = 0 jitterDDPEnv = 0 shimmerLocal = 1 shimmerLocalEnv = 0 onlyVoiced = 0 logHNR = 1 inputMaxDelaySec = 2.0 ;periodLengths = 0 ;periodStarts = 0 useBrokenJitterThresh = 0 ;;;;;;;;;;;;;;;;;;;;; Energy / loudness [componentInstances:cComponentManager] instance[is13_energy].type=cEnergy instance[is13_melspec1].type=cMelspec instance[is13_audspec].type=cPlp instance[is13_audspecRasta].type=cPlp instance[is13_audspecSum].type=cVectorOperation instance[is13_audspecRastaSum].type=cVectorOperation [is13_energy:cEnergy] reader.dmLevel = is13_frame25 writer.dmLevel = is13_energy log=0 rms=1 [is13_melspec1:cMelspec] reader.dmLevel=is13_fftmagH25 writer.dmLevel=is13_melspec1 ; htk compatible sample value scaling htkcompatible = 0 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = mel showFbank = 0 ; perform auditory weighting of spectrum [is13_audspec:cPlp] reader.dmLevel=is13_melspec1 writer.dmLevel=is13_audspec firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=0 RASTA=0 ; perform RASTA style filtering of auditory spectra [is13_audspecRasta:cPlp] reader.dmLevel=is13_melspec1 writer.dmLevel=is13_audspecRasta nameAppend = Rfilt firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=1 RASTA=0 [is13_audspecSum:cVectorOperation] reader.dmLevel = is13_audspec writer.dmLevel = is13_audspecSum // nameAppend = copyInputName = 1 processArrayFields = 0 operation = ll1 nameBase = audspec [is13_audspecRastaSum:cVectorOperation] reader.dmLevel = is13_audspecRasta writer.dmLevel = is13_audspecRastaSum // nameAppend = copyInputName = 1 processArrayFields = 0 operation = ll1 nameBase = audspecRasta ;;;;;;;;;;;;;;; spectral [componentInstances:cComponentManager] instance[is13_spectral].type=cSpectral [is13_spectral:cSpectral] reader.dmLevel=is13_fftmagH25 writer.dmLevel=is13_spectral bands[0]=250-650 bands[1]=1000-4000 rollOff[0] = 0.25 rollOff[1] = 0.50 rollOff[2] = 0.75 rollOff[3] = 0.90 flux=1 centroid=1 maxPos=0 minPos=0 entropy=1 variance=1 skewness=1 kurtosis=1 slope=1 harmonicity=1 sharpness=1 ;;;;;;;;;;;;;;; mfcc [componentInstances:cComponentManager] instance[is13_melspecMfcc].type=cMelspec instance[is13_mfcc].type=cMfcc [is13_melspecMfcc:cMelspec] reader.dmLevel=is13_fftmagH25 writer.dmLevel=is13_melspecMfcc copyInputName = 1 processArrayFields = 1 ; htk compatible sample value scaling htkcompatible = 1 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = mel inverse = 0 [is13_mfcc:cMfcc] reader.dmLevel=is13_melspecMfcc writer.dmLevel=is13_mfcc1_12 copyInputName = 0 processArrayFields = 1 firstMfcc = 1 lastMfcc = 14 cepLifter = 22.0 htkcompatible = 1 ;;;;;;;;;;;;;;;; zcr [componentInstances:cComponentManager] instance[is13_mzcr].type=cMZcr [is13_mzcr:cMZcr] reader.dmLevel = is13_frame60 writer.dmLevel = is13_zcr copyInputName = 1 processArrayFields = 1 zcr = 1 mcr = 0 amax = 0 maxmin = 0 dc = 0 ;;;;;;;;;;;;;;;;;;;; smoothing [componentInstances:cComponentManager] instance[is13_smoNz].type=cContourSmoother instance[is13_smoA].type=cContourSmoother instance[is13_smoB].type=cContourSmoother instance[is13_f0sel].type=cDataSelector [is13_smoNz:cContourSmoother] reader.dmLevel = is13_pitchG60;is13_jitterShimmer writer.dmLevel = is13_lld_nzsmo \{\cm[bufferModeConf{shared/BufferMode.conf.inc}:path to included config to set the buffer mode for the levels before the functionals]} nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 1 [is13_f0sel:cDataSelector] reader.dmLevel = is13_lld_nzsmo writer.dmLevel = is13_lld_f0_nzsmo \{\cm[bufferModeConf]} nameAppend = ff0 selected = F0final_sma [is13_smoA:cContourSmoother] reader.dmLevel = is13_audspecSum;is13_audspecRastaSum;is13_energy;is13_zcr writer.dmLevel = is13_lldA_smo \{\cm[bufferModeConf]} nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 [is13_smoB:cContourSmoother] reader.dmLevel = is13_audspecRasta;is13_spectral;is13_mfcc1_12 writer.dmLevel = is13_lldB_smo \{\cm[bufferModeConf]} nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 ;;;;;;;;; deltas [componentInstances:cComponentManager] instance[is13_deNz].type=cDeltaRegression instance[is13_deA].type=cDeltaRegression instance[is13_deB].type=cDeltaRegression instance[is13_def0sel].type=cDeltaRegression [is13_deNz:cDeltaRegression] reader.dmLevel = is13_lld_nzsmo writer.dmLevel = is13_lld_nzsmo_de \{\cm[bufferModeConf]} onlyInSegments = 1 zeroSegBound = 1 [is13_deA:cDeltaRegression] reader.dmLevel = is13_lldA_smo writer.dmLevel = is13_lldA_smo_de \{\cm[bufferModeConf]} [is13_deB:cDeltaRegression] reader.dmLevel = is13_lldB_smo writer.dmLevel = is13_lldB_smo_de \{\cm[bufferModeConf]} [is13_def0sel:cDeltaRegression] reader.dmLevel = is13_lld_f0_nzsmo writer.dmLevel = is13_lld_f0_nzsmo_de \{\cm[bufferModeConf]} onlyInSegments = 1 zeroSegBound = 1 ================================================ FILE: config/IS09_emotion.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for IS09 emotion challenge< ////////////////// ///////// ////////////////// ///////// (c) 2014 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] ; this line configures the default data memory: instance[dataMemory].type=cDataMemory printLevelStats=0 nThreads=1 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// component configuration //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ; the following sections configure the components listed above ; a help on configuration parameters can be obtained with ; SMILExtract -H ; or ; SMILExtract -H configTypeName (= componentTypeName) ///////////////////////////////////////////////////////////////////////////////////////////// \{shared/standard_wave_input.conf.inc} \{IS09_emotion_core.lld.conf.inc} \{IS09_emotion_core.func.conf.inc} ; TODO: alias levels in code: cVectorConcat (if 1:1 input (single level) to output mapping) ; registers an alias level instead of actually copying ; this maintains compatibility with old config files, but is more efficient in new code ;;;;;;;;; prepare features for standard output module [componentInstances:cComponentManager] instance[lldconcat].type=cVectorConcat instance[llddeconcat].type=cVectorConcat instance[funcconcat].type=cVectorConcat [lldconcat:cVectorConcat] reader.dmLevel = is09_lld writer.dmLevel = lld includeSingleElementFields = 1 [llddeconcat:cVectorConcat] reader.dmLevel = is09_lld_de writer.dmLevel = lld_de includeSingleElementFields = 1 [funcconcat:cVectorConcat] reader.dmLevel = is09_func writer.dmLevel = func includeSingleElementFields = 1 \{shared/standard_data_output.conf.inc} ================================================ FILE: config/IS09_emotion_core.func.conf.inc ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for IS09 emotion challenge< ////////////////// ///////// > core features < ////////////////// ///////// (c) 2014 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[is09_functL1].type=cFunctionals [is09_functL1:cFunctionals] reader.dmLevel=is09_lld;is09_lld_de writer.dmLevel=is09_func copyInputName = 1 \{\cm[bufferModeRbConf]} \{\cm[frameModeFunctionalsConf{shared/FrameModeFunctionals.conf.inc}:path to included config to set frame mode for all functionals]} functionalsEnabled=Extremes;Regression;Moments Extremes.max = 1 Extremes.min = 1 Extremes.range = 1 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.amean = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 ; Note: the much better way to normalise the times of maxpos and minpos ; is 'turn', however for compatibility with old files the default 'frame' ; is kept here: Extremes.norm = frame Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 0 Regression.linregerrQ = 1 Regression.qregc1 = 0 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 0 Regression.centroid = 0 Regression.oldBuggyQerr = 1 Regression.normInputs = 0 Regression.normRegCoeff = 0 Regression.centroidRatioLimit = 0 Regression.doRatioLimit = 0 Moments.doRatioLimit = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 ================================================ FILE: config/IS09_emotion_core.lld.conf.inc ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for IS09 emotion challenge< ////////////////// ///////// > core features < ////////////////// ///////// (c) 2014 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[is09_fr1].type=cFramer instance[is09_pe2].type=cVectorPreemphasis instance[is09_w1].type=cWindower instance[is09_fft1].type=cTransformFFT instance[is09_fftmp1].type=cFFTmagphase instance[is09_mspec].type=cMelspec instance[is09_mfcc].type=cMfcc instance[is09_mzcr].type=cMZcr instance[is09_acf].type=cAcf instance[is09_cepstrum].type=cAcf instance[is09_pitchACF].type=cPitchACF instance[is09_energy].type=cEnergy instance[is09_lld].type=cContourSmoother instance[is09_delta1].type=cDeltaRegression ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// component configuration //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ; the following sections configure the components listed above ; a help on configuration parameters can be obtained with ; SMILExtract -H ; or ; SMILExtract -H configTypeName (= componentTypeName) ///////////////////////////////////////////////////////////////////////////////////////////// [is09_fr1:cFramer] reader.dmLevel=wave writer.dmLevel=is09_frames \{\cm[bufferModeRbConf{shared/BufferModeRb.conf.inc}:path to included config to set the buffer mode for the standard ringbuffer levels]} copyInputName = 1 noPostEOIprocessing = 1 frameSize = 0.0250 frameStep = 0.010 frameMode = fixed frameCenterSpecial = left [is09_pe2:cVectorPreemphasis] reader.dmLevel=is09_frames writer.dmLevel=is09_framespe copyInputName = 1 processArrayFields = 1 k=0.97 de = 0 [is09_w1:cWindower] reader.dmLevel=is09_framespe writer.dmLevel=is09_winframe copyInputName = 1 processArrayFields = 1 winFunc = ham gain = 1.0 offset = 0 // ---- LLD ----- [is09_fft1:cTransformFFT] reader.dmLevel=is09_winframe writer.dmLevel=is09_fftc copyInputName = 1 processArrayFields = 1 inverse = 0 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [is09_fftmp1:cFFTmagphase] reader.dmLevel=is09_fftc writer.dmLevel=is09_fftmag copyInputName = 1 processArrayFields = 1 inverse = 0 magnitude = 1 phase = 0 [is09_mspec:cMelspec] reader.dmLevel=is09_fftmag writer.dmLevel=is09_mspec1 copyInputName = 1 processArrayFields = 1 htkcompatible = 1 nBands = 26 usePower = 0 lofreq = 0 hifreq = 8000 inverse = 0 specScale = mel [is09_mfcc:cMfcc] reader.dmLevel=is09_mspec1 writer.dmLevel=is09_mfcc1 copyInputName = 1 processArrayFields = 1 firstMfcc = 1 lastMfcc = 12 cepLifter = 22.0 htkcompatible = 1 [is09_acf:cAcf] reader.dmLevel=is09_fftmag writer.dmLevel=is09_acf nameAppend = acf copyInputName = 1 processArrayFields = 1 usePower = 1 cepstrum = 0 [is09_cepstrum:cAcf] reader.dmLevel=is09_fftmag writer.dmLevel=is09_cepstrum nameAppend = acf copyInputName = 1 processArrayFields = 1 usePower = 1 cepstrum = 1 [is09_pitchACF:cPitchACF] ; the pitchACF component must ALWAYS read from acf AND cepstrum in the given order! reader.dmLevel=is09_acf;is09_cepstrum writer.dmLevel=is09_pitch copyInputName = 1 processArrayFields=0 maxPitch = 500 voiceProb = 1 voiceQual = 0 HNR = 0 F0 = 1 F0raw = 0 F0env = 0 voicingCutoff = 0.550000 [is09_energy:cEnergy] reader.dmLevel=is09_winframe writer.dmLevel=is09_energy nameAppend=energy rms=1 log=0 [is09_mzcr:cMZcr] reader.dmLevel=is09_frames writer.dmLevel=is09_mzcr copyInputName = 1 processArrayFields = 1 zcr = 1 amax = 0 mcr = 0 maxmin = 0 dc = 0 [is09_lld:cContourSmoother] reader.dmLevel=is09_energy;is09_mfcc1;is09_mzcr;is09_pitch writer.dmLevel=is09_lld \{\cm[bufferModeConf{shared/BufferMode.conf.inc}:path to included config to set buffer mode for all LLD that feed into functionals]} nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 // ---- delta regression of LLD ---- [is09_delta1:cDeltaRegression] reader.dmLevel=is09_lld writer.dmLevel=is09_lld_de \{\cm[bufferModeConf]} nameAppend = de copyInputName = 1 noPostEOIprocessing = 0 deltawin=2 blocksize=1 ================================================ FILE: config/IS10_paraling.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for IS10 features < ////////////////// ///////// ////////////////// ///////// (c) 2014 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // NOTE: This file is not compatible with old versions of openSMILE (< 2.1) // and will not give the same features (numerically) // as the original IS10 features. // It should be preferred in new studies / designes, however, as it contains // some minor fixes. // For compatible features, use the IS10_paraling_compat.conf // // Usage: // SMILExtract -C thisconfig.conf -I input.wav -O output.arff // [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory ;; run single threaded (nThreads=1) ; NOTE: a single thread is more efficient for processing small files, since multi-threaded processing involves more ; overhead during startup, which will make the system slower in the end nThreads=1 ;; do not show any internal dataMemory level settings ; (if you want to see them set the value to 1, 2, 3, or 4, depending on the amount of detail you wish) printLevelStats=0 \{shared/standard_wave_input.conf.inc} \{IS10_paraling_core.lld.conf.inc} \{IS10_paraling_core.func.conf.inc} ;;;;;;;;; prepare features for standard output module [componentInstances:cComponentManager] instance[lldconcat].type=cVectorConcat instance[llddeconcat].type=cVectorConcat instance[funcconcat].type=cVectorConcat [lldconcat:cVectorConcat] reader.dmLevel = is10_lld1;is10_lld2 writer.dmLevel = lld includeSingleElementFields = 1 [llddeconcat:cVectorConcat] reader.dmLevel = is10_lld1_de;is10_lld2_de writer.dmLevel = lld_de includeSingleElementFields = 1 [funcconcat:cVectorConcat] reader.dmLevel = is10_funct;is10_functNz;is10_functOnsets writer.dmLevel = func includeSingleElementFields = 1 \{shared/standard_data_output.conf.inc} ================================================ FILE: config/IS10_paraling_compat.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for IS10 features < ////////////////// ///////// ////////////////// ///////// (c) 2014 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // NOTE: This file is for version 2.1 and above and produces // numerically compatible output to the original IS10 set, // EXCEPT for Jitter/Shimmer, as some bugs have been fixed there // w/o maintaining backwards compatibility. // For new designs one should however use the IS10_paraling.conf which // returns incompatible, yet enhanced and fixed features. // // Usage: // SMILExtract -C thisconfig.conf -I input.wav -O output.arff // /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] ; this line configures the default data memory: instance[dataMemory].type=cDataMemory ;;; wave file input instance[waveIn].type=cWaveSource ;;; 40 ms frames features: instance[fr40].type=cFramer instance[w40].type=cWindower instance[fft40].type=cTransformFFT instance[fftmagphase40].type=cFFTmagphase ; SHS Pitch: instance[scale].type=cSpecScale instance[pitchShs].type=cPitchShs instance[pitchSmooth].type=cPitchSmoother instance[pitchJitter].type=cPitchJitter instance[pitchSmooth2].type=cPitchSmoother instance[res].type=cSpecResample ;;; 25 ms frames features: instance[fr25].type=cFramer instance[pe].type=cVectorPreemphasis instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmagphase].type=cFFTmagphase ; mfcc instance[mspec].type=cMelspec instance[mfcc].type=cMfcc ; log mel frequency bands (mfb) instance[mspec2].type=cMelspec instance[vo].type=cVectorOperation instance[lpc].type=cLpc ; Line Spectral Frequencies instance[lsp].type=cLsp ; Loudness (narrow-band approximation) instance[intens].type=cIntensity ;;; all LLD concattenated and smoothed using a moving average filter instance[lld].type=cContourSmoother instance[lld2].type=cContourSmoother ; delta coefficients of LLD instance[delta1].type=cDeltaRegression instance[delta2].type=cDeltaRegression ;;; functionals over FULL input (e.g. turns) instance[functL1].type=cFunctionals instance[functL1nz].type=cFunctionals instance[functOnsets].type=cFunctionals ;; run single threaded (nThreads=1) ; NOTE: a single thread is more efficient for processing small files, since multi-threaded processing involves more ; overhead during startup, which will make the system slower in the end nThreads=1 ;; do not show any internal dataMemory level settings ; (if you want to see them set the value to 1, 2, 3, or 4, depending on the amount of detail you wish) printLevelStats=0 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// component configuration //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ; the following sections configure the components listed above ; a help on configuration parameters can be obtained with ; SMILExtract -H ; or ; SMILExtract -H configTypeName (= componentTypeName) ///////////////////////////////////////////////////////////////////////////////////////////// [waveIn:cWaveSource] ; this sets the level this component writes to ; the level will be created by this component ; no other components may write to a level having the same name writer.dmLevel=wave ; this defines a new commandline option "-I" or "-inputfile", which can be used to specify ; the filename on the commandline instead of having it "hard-coded" in the config file filename=\cm[inputfile(I){test.wav}:name of input file] ; mix stereo files down to mono for analysis monoMixdown=1 [fr40:cFramer] reader.dmLevel=wave writer.dmLevel=frames40 frameMode = fixed frameSize = 0.060 frameStep = 0.010 frameCenterSpecial = left noPostEOIprocessing = 1 [w40:cWindower] reader.dmLevel=frames40 writer.dmLevel=win40frame winFunc = gauss sigma = 0.25 gain = 1.0 [fft40:cTransformFFT] reader.dmLevel=win40frame writer.dmLevel=fftc40 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmagphase40:cFFTmagphase] reader.dmLevel=fftc40 writer.dmLevel=fftmag40 magnitude = 1 phase = 0 [scale:cSpecScale] reader.dmLevel=fftmag40 writer.dmLevel=hps scale=log ; octave scale logScaleBase=2 specSmooth = 0 auditoryWeighting = 0 specEnhance = 0 minF = 25 maxF = -1 interpMethod = spline [pitchShs:cPitchShs] reader.dmLevel=hps writer.dmLevel=pitchShs F0raw = 0 voicingClip = 0 voicingC1=0 scores=1 voicing=1 nCandidates = 3 octaveCorrection = 0 greedyPeakAlgo = 0 compressionFactor = 0.85 nHarmonics = 15 voicingCutoff = 0.75 maxPitch = 620 minPitch = 52 [pitchSmooth:cPitchSmoother] reader.dmLevel=pitchShs writer.dmLevel=pitch F0raw = 0 F0final = 0 F0finalEnv = 1 voicingFinalUnclipped = 1 medianFilter0 = 0 postSmoothingMethod = simple ;simple octaveCorrection = 0 writer.levelconf.nT=10 ;writer.levelconf.noHang=2 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 [pitchSmooth2:cPitchSmoother] reader.dmLevel=pitchShs writer.dmLevel=pitchF F0raw = 0 F0final = 1 F0finalEnv = 0 voicingFinalUnclipped = 0 medianFilter0 = 0 postSmoothingMethod = simple octaveCorrection = 0 writer.levelconf.nT=10 ;writer.levelconf.noHang=2 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ;;;; default (template) configuration section for component 'cPitchJitter' ;;;; [pitchJitter:cPitchJitter] reader.dmLevel = wave writer.dmLevel = jitter // nameAppend = copyInputName = 1 F0reader.dmLevel = pitchF F0field = F0final searchRangeRel = 0.250000 jitterLocal = 1 jitterDDP = 1 jitterLocalEnv = 0 jitterDDPEnv = 0 shimmerLocal = 1 shimmerLocalEnv = 0 onlyVoiced = 0 ;periodLengths = 0 ;periodStarts = 0 inputMaxDelaySec = 1 usePeakToPeakPeriodLength = 0 shimmerUseRmsAmplitude = 0 minCC = 0.5 minNumPeriods = 2 useBrokenJitterThresh = 1 [fr25:cFramer] reader.dmLevel=wave writer.dmLevel=frames frameSize = 0.025 frameStep = 0.010 frameCenterSpecial = left [pe:cVectorPreemphasis] reader.dmLevel=frames writer.dmLevel=framespe k=0.97 [win:cWindower] reader.dmLevel=framespe writer.dmLevel=winframe winFunc = ham gain = 1.0 [fft:cTransformFFT] reader.dmLevel=winframe writer.dmLevel=fftc ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmagphase:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag magnitude = 1 phase = 0 [mspec:cMelspec] reader.dmLevel=fftmag writer.dmLevel=mspec1 htkcompatible = 0 usePower = 1 lofreq = 20 hifreq = 8000 nBands=26 specScale = mel bwMethod = lr [mfcc:cMfcc] reader.dmLevel = mspec1 writer.dmLevel = mfcc htkcompatible = 0 firstMfcc=0 lastMfcc=14 cepLifter=22 copyInputName = 0 [mspec2:cMelspec] reader.dmLevel=fftmag writer.dmLevel=mspec2 htkcompatible = 0 usePower = 1 lofreq = 20 hifreq = 6500 nBands=8 specScale = mel bwMethod = lr [vo:cVectorOperation] reader.dmLevel=mspec2 writer.dmLevel=mspec2log operation = log copyInputName = 0 nameAppend=logMelFreqBand [res:cSpecResample] reader.dmLevel=fftc writer.dmLevel=outpR targetFs = 11000 [lpc:cLpc] ;reader.dmLevel=framespe reader.dmLevel=outpR writer.dmLevel=lpc p=8 method = acf saveLPCoeff = 1 lpGain = 0 saveRefCoeff = 0 residual = 0 forwardFilter = 0 lpSpectrum = 0 [lsp:cLsp] reader.dmLevel=lpc writer.dmLevel=lsp [intens:cIntensity] reader.dmLevel=frames writer.dmLevel=intens intensity=0 loudness=1 [lld:cContourSmoother] reader.dmLevel=intens;mfcc;mspec2log;lsp;pitch writer.dmLevel=lld1 buffersize=1000 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 smaWin = 3 ; this level must grow to hold ALL the LLD of the full input // ---- delta regression of LLD ---- [delta1:cDeltaRegression] reader.dmLevel=lld1 writer.dmLevel=lld1_de buffersize=1000 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 deltawin=2 blocksize=1 [lld2:cContourSmoother] reader.dmLevel=pitchF;jitter writer.dmLevel=lld2 buffersize=1000 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ; this level must grow to hold ALL the LLD of the full input smaWin = 3 noZeroSma = 0 // ---- delta regression of LLD ---- [delta2:cDeltaRegression] reader.dmLevel=lld2 writer.dmLevel=lld2_de buffersize=1000 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 deltawin=2 blocksize=1 [functOnsets:cFunctionals] reader.dmLevel=pitchF writer.dmLevel=functOnsets ; frameSize and frameStep = 0 => functionals over complete input ; (NOTE: buffersize of lld and lld_de levels must be large enough!!) frameMode = full frameSize = 0 frameStep = 0 copyInputName=0 functNameAppend=Turn functionalsEnabled=Onset;Times //noPostEOIprocessing = 0 Onset.threshold = 0 ;Onset.thresholdOnset = 0 ;Onset.thresholdOffset = 0 Onset.useAbsVal = 0 Onset.onsetPos = 0 Onset.offsetPos = 0 Onset.numOnsets = 1 Onset.numOffsets = 0 Onset.norm = segment Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 0 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 1 Times.norm = second // statistical functionals [functL1:cFunctionals] reader.dmLevel=lld1;lld1_de writer.dmLevel=funct ; frameSize and frameStep = 0 => functionals over complete input ; (NOTE: buffersize of lld and lld_de levels must be large enough!!) frameMode = full frameSize=0 frameStep=0 functionalsEnabled=Extremes;Regression;Moments;Percentiles;Times Extremes.max = 0 Extremes.min = 0 Extremes.range = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.amean = 1 Extremes.maxameandist=0 Extremes.minameandist=0 Extremes.norm = frame Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 1 Regression.linregerrQ = 1 Regression.qregc1 = 0 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 0 Regression.centroid = 0 Regression.oldBuggyQerr = 1 Regression.normInputs = 0 Regression.normRegCoeff = 0 Regression.centroidRatioLimit = 0 Regression.doRatioLimit = 0 Moments.doRatioLimit = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.quartile1 = 0 Percentiles.quartile2 = 0 Percentiles.quartile3 = 0 Percentiles.iqr = 1 Percentiles.iqr12 = 0 Percentiles.iqr23 = 0 Percentiles.iqr13 = 0 Percentiles.interp = 1 Percentiles.percentile = 0.01;0.99 Percentiles.pctlrange=0-1 Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 1 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.norm = segment nonZeroFuncts = 0 // statistical functionals [functL1nz:cFunctionals] reader.dmLevel=lld2;lld2_de writer.dmLevel=functNz ; frameSize and frameStep = 0 => functionals over complete input ; (NOTE: buffersize of lld and lld_de levels must be large enough!!) frameMode=full frameSize=0 frameStep=0 functionalsEnabled=Extremes;Regression;Moments;Percentiles;Times Extremes.max = 0 Extremes.min = 0 Extremes.range = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.amean = 1 Extremes.maxameandist=0 Extremes.minameandist=0 Extremes.norm = frame Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 1 Regression.linregerrQ = 1 Regression.qregc1 = 0 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 0 Regression.centroid = 0 Regression.oldBuggyQerr = 1 Regression.normInputs = 0 Regression.normRegCoeff = 0 Regression.centroidRatioLimit = 0 Regression.doRatioLimit = 0 Moments.doRatioLimit = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.quartile1 = 0 Percentiles.quartile2 = 0 Percentiles.quartile3 = 0 Percentiles.iqr = 1 Percentiles.iqr12 = 0 Percentiles.iqr23 = 0 Percentiles.iqr13 = 0 Percentiles.interp = 1 Percentiles.percentile = 0.99 ;Percentiles.pctlrange=0-1 Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 1 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.norm = segment nonZeroFuncts=1 ;;;;;;;;; prepare features for standard output module [componentInstances:cComponentManager] instance[lldconcat].type=cVectorConcat instance[llddeconcat].type=cVectorConcat instance[funcconcat].type=cVectorConcat [lldconcat:cVectorConcat] reader.dmLevel = lld1;lld2 writer.dmLevel = lld includeSingleElementFields = 1 [llddeconcat:cVectorConcat] reader.dmLevel = lld1_de;lld2_de writer.dmLevel = lld_de includeSingleElementFields = 1 [funcconcat:cVectorConcat] reader.dmLevel = funct;functNz;functOnsets writer.dmLevel = func includeSingleElementFields = 1 \{shared/standard_data_output.conf.inc} //////---------------------- END -------------------------/////// ================================================ FILE: config/IS10_paraling_core.func.conf.inc ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for IS10 features < ////////////////// ///////// > core features : functionals < ////////////////// ///////// (c) 2014 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // NOTE: This file is not compatible with old versions of openSMILE (< 2.1) // and will not give the same features (numerically) // as the original IS10 features. // It should be preferred in new studies / designes, however, as it contains // some minor fixes. // For compatible features, use the IS10_paraling_compat.conf [componentInstances:cComponentManager] ;;; functionals over FULL input (e.g. turns) instance[is10_functOnsets].type=cFunctionals instance[is10_functL1].type=cFunctionals instance[is10_functL1nz].type=cFunctionals [is10_functOnsets:cFunctionals] reader.dmLevel=is10_pitchF writer.dmLevel=is10_functOnsets \{\cm[bufferModeRbConf]} ; frameSize and frameStep = 0 => functionals over complete input ; (NOTE: buffersize of lld and lld_de levels must be large enough!!) \{\cm[frameModeFunctionalsConf{shared/FrameModeFunctionals.conf.inc}:path to included config to set frame mode for all functionals]} copyInputName=0 functNameAppend=Turn functionalsEnabled=Onset;Times //noPostEOIprocessing = 0 Onset.threshold = 0 ;Onset.thresholdOnset = 0 ;Onset.thresholdOffset = 0 Onset.useAbsVal = 0 Onset.onsetPos = 0 Onset.offsetPos = 0 Onset.numOnsets = 0 Onset.numOffsets = 0 Onset.onsetRate = 1 Onset.norm = segment Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 0 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 1 Times.norm = second // statistical functionals [is10_functL1:cFunctionals] reader.dmLevel=is10_lld1;is10_lld1_de writer.dmLevel=is10_funct \{\cm[bufferModeRbConf]} ; frameSize and frameStep = 0 => functionals over complete input ; (NOTE: buffersize of lld and lld_de levels must be large enough!!) \{\cm[frameModeFunctionalsConf]} functionalsEnabled=Extremes;Regression;Moments;Percentiles;Times Extremes.max = 0 Extremes.min = 0 Extremes.range = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.amean = 1 Extremes.maxameandist=0 Extremes.minameandist=0 Extremes.norm = frame Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 1 Regression.linregerrQ = 1 Regression.qregc1 = 0 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 0 Regression.centroid = 0 Regression.oldBuggyQerr = 0 Regression.normInputs = 0 Regression.normRegCoeff = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.quartile1 = 0 Percentiles.quartile2 = 0 Percentiles.quartile3 = 0 Percentiles.iqr = 1 Percentiles.iqr12 = 0 Percentiles.iqr23 = 0 Percentiles.iqr13 = 0 Percentiles.interp = 1 Percentiles.percentile = 0.01;0.99 Percentiles.pctlrange=0-1 Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 1 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.norm = segment nonZeroFuncts = 0 // statistical functionals [is10_functL1nz:cFunctionals] reader.dmLevel=is10_lld2;is10_lld2_de writer.dmLevel=is10_functNz \{\cm[bufferModeRbConf]} ; frameSize and frameStep = 0 => functionals over complete input ; (NOTE: buffersize of lld and lld_de levels must be large enough!!) \{\cm[frameModeFunctionalsConf]} functionalsEnabled=Extremes;Regression;Moments;Percentiles;Times Extremes.max = 0 Extremes.min = 0 Extremes.range = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.amean = 1 Extremes.maxameandist=0 Extremes.minameandist=0 Extremes.norm = frame Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 1 Regression.linregerrQ = 1 Regression.qregc1 = 0 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 0 Regression.centroid = 0 Regression.oldBuggyQerr = 0 Regression.normInputs = 0 Regression.normRegCoeff = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.quartile1 = 0 Percentiles.quartile2 = 0 Percentiles.quartile3 = 0 Percentiles.iqr = 1 Percentiles.iqr12 = 0 Percentiles.iqr23 = 0 Percentiles.iqr13 = 0 Percentiles.interp = 1 Percentiles.percentile = 0.99 ;Percentiles.pctlrange=0-1 Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 1 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.norm = segment nonZeroFuncts=1 //////---------------------- END -------------------------/////// ================================================ FILE: config/IS10_paraling_core.lld.conf.inc ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for IS10 features < ////////////////// ///////// ////////////////// ///////// (c) 2014 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // NOTE: This file is not compatible with old versions of openSMILE (< 2.1) // and will not give the same features (numerically) // as the original IS10 features. // It should be preferred in new studies / designes, however, as it contains // some minor fixes. // For compatible features, use the IS10_paraling_compat.conf [componentInstances:cComponentManager] instance[is10_fr40].type=cFramer ;; 40 ms frames features instance[is10_w40].type=cWindower instance[is10_fft40].type=cTransformFFT instance[is10_fftmagphase40].type=cFFTmagphase instance[is10_scale].type=cSpecScale instance[is10_pitchShs].type=cPitchShs instance[is10_pitchSmooth].type=cPitchSmoother instance[is10_pitchJitter].type=cPitchJitter instance[is10_pitchSmooth2].type=cPitchSmoother instance[is10_res].type=cSpecResample ;;; 25 ms frames features: instance[is10_fr25].type=cFramer instance[is10_pe].type=cVectorPreemphasis instance[is10_win].type=cWindower instance[is10_fft].type=cTransformFFT instance[is10_fftmagphase].type=cFFTmagphase ; mfcc instance[is10_mspec].type=cMelspec instance[is10_mfcc].type=cMfcc ; log mel frequency bands (mfb) instance[is10_mspec2].type=cMelspec instance[is10_vo].type=cVectorOperation instance[is10_lpc].type=cLpc ; Line Spectral Frequencies instance[is10_lsp].type=cLsp ; Loudness (narrow-band approximation) instance[is10_intens].type=cIntensity ;;; all LLD concattenated and smoothed using a moving average filter instance[is10_lld].type=cContourSmoother instance[is10_lld2].type=cContourSmoother ; delta coefficients of LLD instance[is10_delta1].type=cDeltaRegression instance[is10_delta2].type=cDeltaRegression [is10_fr40:cFramer] reader.dmLevel=wave writer.dmLevel=is10_frames40 \{\cm[bufferModeRbConf{shared/BufferModeRb.conf.inc}:path to included config to set the buffer mode for the standard ringbuffer levels]} frameMode = fixed frameSize = 0.060 frameStep = 0.010 frameCenterSpecial = left noPostEOIprocessing = 1 [is10_w40:cWindower] reader.dmLevel=is10_frames40 writer.dmLevel=is10_win40frame winFunc = gauss sigma = 0.25 gain = 1.0 [is10_fft40:cTransformFFT] reader.dmLevel=is10_win40frame writer.dmLevel=is10_fftc40 [is10_fftmagphase40:cFFTmagphase] reader.dmLevel=is10_fftc40 writer.dmLevel=is10_fftmag40 magnitude = 1 phase = 0 [is10_scale:cSpecScale] reader.dmLevel=is10_fftmag40 writer.dmLevel=is10_hps scale=octave sourceScale = lin specSmooth = 0 auditoryWeighting = 0 specEnhance = 0 minF = 20 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 interpMethod = spline [is10_pitchShs:cPitchShs] reader.dmLevel=is10_hps writer.dmLevel=is10_pitchShs inputFieldSearch = fftMag_octScale F0raw = 0 voicingClip = 0 voicingC1=0 scores=1 voicing=1 nCandidates = 6 octaveCorrection = 0 greedyPeakAlgo = 1 compressionFactor = 0.85 nHarmonics = 15 voicingCutoff = 0.70 maxPitch = 620 minPitch = 52 [is10_pitchSmooth:cPitchSmoother] reader.dmLevel=is10_pitchShs writer.dmLevel=is10_pitch F0raw = 0 F0final = 0 F0finalEnv = 1 voicingFinalUnclipped = 1 medianFilter0 = 0 postSmoothingMethod = simple ;simple octaveCorrection = 0 writer.levelconf.nT=10 ;writer.levelconf.noHang=2 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 [is10_pitchSmooth2:cPitchSmoother] reader.dmLevel=is10_pitchShs writer.dmLevel=is10_pitchF F0raw = 0 F0final = 1 F0finalEnv = 0 voicingFinalUnclipped = 0 medianFilter0 = 0 postSmoothingMethod = simple octaveCorrection = 0 writer.levelconf.nT=10 ;writer.levelconf.noHang=2 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ;;;; default (template) configuration section for component 'cPitchJitter' ;;;; [is10_pitchJitter:cPitchJitter] reader.dmLevel = wave writer.dmLevel = is10_jitter \{\cm[bufferModeRbLagConf{shared/BufferModeRb.conf.inc}:path to included config to set the buffer mode for levels which will be joint with Viterbi smoothed -lagged- F0]} copyInputName = 1 F0reader.dmLevel = is10_pitchF F0field = F0final searchRangeRel = 0.200000 jitterLocal = 1 jitterDDP = 1 jitterLocalEnv = 0 jitterDDPEnv = 0 shimmerLocal = 1 shimmerLocalEnv = 0 onlyVoiced = 0 ;periodLengths = 0 ;periodStarts = 0 inputMaxDelaySec = 1 usePeakToPeakPeriodLength = 0 shimmerUseRmsAmplitude = 0 minCC = 0.5 minNumPeriods = 2 [is10_fr25:cFramer] reader.dmLevel=wave writer.dmLevel=is10_frames \{\cm[bufferModeRbConf]} frameSize = 0.025 frameStep = 0.010 frameCenterSpecial = left [is10_pe:cVectorPreemphasis] reader.dmLevel=is10_frames writer.dmLevel=is10_framespe k=0.97 [is10_win:cWindower] reader.dmLevel=is10_framespe writer.dmLevel=is10_winframe winFunc = ham gain = 1.0 [is10_fft:cTransformFFT] reader.dmLevel=is10_winframe writer.dmLevel=is10_fftc [is10_fftmagphase:cFFTmagphase] reader.dmLevel=is10_fftc writer.dmLevel=is10_fftmag magnitude = 1 phase = 0 [is10_mspec:cMelspec] reader.dmLevel=is10_fftmag writer.dmLevel=is10_mspec1 htkcompatible = 0 usePower = 1 lofreq = 20 hifreq = 8000 nBands=26 specScale = mel bwMethod = lr [is10_mfcc:cMfcc] reader.dmLevel = is10_mspec1 writer.dmLevel = is10_mfcc htkcompatible = 0 firstMfcc=0 lastMfcc=14 cepLifter=22 copyInputName = 0 [is10_mspec2:cMelspec] reader.dmLevel=is10_fftmag writer.dmLevel=is10_mspec2 htkcompatible = 0 usePower = 1 lofreq = 20 hifreq = 6500 nBands=8 specScale = mel bwMethod = lr [is10_vo:cVectorOperation] reader.dmLevel=is10_mspec2 writer.dmLevel=is10_mspec2log operation = log copyInputName = 0 nameAppend=logMelFreqBand [is10_res:cSpecResample] reader.dmLevel=is10_fftc writer.dmLevel=is10_outpR targetFs = 11000 [is10_lpc:cLpc] ;reader.dmLevel=framespe reader.dmLevel=is10_outpR writer.dmLevel=is10_lpc p=8 method = acf saveLPCoeff = 1 lpGain = 0 saveRefCoeff = 0 residual = 0 forwardFilter = 0 lpSpectrum = 0 [is10_lsp:cLsp] reader.dmLevel=is10_lpc writer.dmLevel=is10_lsp [is10_intens:cIntensity] reader.dmLevel=is10_frames writer.dmLevel=is10_intens intensity=0 loudness=1 [is10_lld:cContourSmoother] reader.dmLevel=is10_intens;is10_mfcc;is10_mspec2log;is10_lsp;is10_pitch writer.dmLevel=is10_lld1 \{\cm[bufferModeConf{shared/BufferMode.conf.inc}:path to included config to set the buffer mode for the levels before the functionals]} smaWin = 3 ; this level must grow to hold ALL the LLD of the full input // ---- delta regression of LLD ---- [is10_delta1:cDeltaRegression] reader.dmLevel=is10_lld1 writer.dmLevel=is10_lld1_de \{\cm[bufferModeConf]} deltawin=2 blocksize=1 [is10_lld2:cContourSmoother] reader.dmLevel=is10_pitchF;is10_jitter writer.dmLevel=is10_lld2 \{\cm[bufferModeConf]} ; this level must grow to hold ALL the LLD of the full input smaWin = 3 noZeroSma = 1 // ---- delta regression of LLD ---- [is10_delta2:cDeltaRegression] reader.dmLevel=is10_lld2 writer.dmLevel=is10_lld2_de \{\cm[bufferModeConf]} deltawin=2 blocksize=1 onlyInSegments = 1 zeroSegBound = 1 //////---------------------- END -------------------------/////// ================================================ FILE: config/IS11_speaker_state.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for IS11 features < ////////////////// ///////// ////////////////// ///////// (c) 2014 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // // Usage: // SMILExtract -C IS11.conf -I input.wav -O output.arff // -- append features for input.wav to output.arff (create if necessary) // ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory printLevelStats=0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; main section ;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[waveIn].type=cWaveSource [waveIn:cWaveSource] writer.dmLevel=wave filename=\cm[inputfile(I){test.wav}:name of input file] monoMixdown=1 ;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame60].type=cFramer instance[win60].type=cWindower instance[fft60].type=cTransformFFT instance[fftmp60].type=cFFTmagphase [frame60:cFramer] reader.dmLevel=wave writer.dmLevel=frame60 frameSize = 0.060 frameStep = 0.010 frameCenterSpecial = left [win60:cWindower] reader.dmLevel=frame60 writer.dmLevel=winG60 winFunc=gauss gain=1.0 sigma=0.4 [fft60:cTransformFFT] reader.dmLevel=winG60 writer.dmLevel=fftcG60 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmp60:cFFTmagphase] reader.dmLevel=fftcG60 writer.dmLevel=fftmagG60 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame25].type=cFramer instance[pe25].type=cVectorPreemphasis instance[win25].type=cWindower instance[fft25].type=cTransformFFT instance[fftmp25].type=cFFTmagphase [frame25:cFramer] reader.dmLevel=wave writer.dmLevel=frame25 frameSize = 0.020 frameStep = 0.010 frameCenterSpecial = left [pe25:cVectorPreemphasis] reader.dmLevel=frame25 writer.dmLevel=frame25pe k=0.97 de=0 [win25:cWindower] reader.dmLevel=frame25 writer.dmLevel=winH25 winFunc=hamming [fft25:cTransformFFT] reader.dmLevel=winH25 writer.dmLevel=fftcH25 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmp25:cFFTmagphase] reader.dmLevel=fftcH25 writer.dmLevel=fftmagH25 ;;;;;;;;;;;;;;;;;;;; HPS pitch [componentInstances:cComponentManager] instance[scale].type=cSpecScale instance[shs].type=cPitchShs instance[pitchSmooth].type=cPitchSmoother instance[pitchSmooth2].type=cPitchSmoother [scale:cSpecScale] reader.dmLevel=fftmagG60 writer.dmLevel=hpsG60 copyInputName = 1 processArrayFields = 0 scale=octave sourceScale = lin // logScaleBase = 2 // logSourceScaleBase = 2 // firstNote = 55 interpMethod = spline minF = 25 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [shs:cPitchShs] reader.dmLevel=hpsG60 writer.dmLevel=pitchShsG60 copyInputName = 1 processArrayFields = 0 maxPitch = 620 minPitch = 52 nCandidates = 4 scores = 1 voicing = 1 F0C1 = 0 voicingC1 = 0 F0raw = 1 voicingClip = 1 voicingCutoff = 0.700000 inputFieldSearch = Mag_octScale octaveCorrection = 0 nHarmonics = 15 compressionFactor = 0.850000 [pitchSmooth:cPitchSmoother] reader.dmLevel=pitchShsG60 writer.dmLevel=pitchG60 copyInputName = 1 processArrayFields = 0 medianFilter0 = 0 postSmoothing = 0 postSmoothingMethod = simple ; note: octave correction is too agressive, thus we disable it.. octaveCorrection = 0 F0final = 1 F0finalEnv = 0 no0f0 = 0 voicingFinalClipped = 0 voicingFinalUnclipped = 1 F0raw = 0 voicingC1 = 0 voicingClip = 0 [pitchSmooth2:cPitchSmoother] reader.dmLevel=pitchShsG60 writer.dmLevel=pitchF F0raw = 0 F0final = 1 F0finalEnv = 0 voicingFinalUnclipped = 0 medianFilter0 = 0 postSmoothingMethod = simple octaveCorrection = 0 ;;;;;;;;;;;;;;;;;;; VQ [componentInstances:cComponentManager] ;instance[acf].type=cAcf ;instance[hnr].type=cHnr instance[pitchJitter].type=cPitchJitter [pitchJitter:cPitchJitter] reader.dmLevel = wave writer.dmLevel = jitterShimmer // nameAppend = copyInputName = 1 F0reader.dmLevel = pitchF F0field = F0final searchRangeRel = 0.250000 jitterLocal = 1 jitterDDP = 1 jitterLocalEnv = 0 jitterDDPEnv = 0 shimmerLocal = 1 shimmerLocalEnv = 0 onlyVoiced = 0 ;periodLengths = 0 ;periodStarts = 0 useBrokenJitterThresh = 1 ;;;;;;;;;;;;;;;;;;;;; Energy / loudness [componentInstances:cComponentManager] instance[energy].type=cEnergy instance[melspec1].type=cMelspec instance[audspec].type=cPlp instance[audspecRasta].type=cPlp instance[audspecSum].type=cVectorOperation instance[audspecRastaSum].type=cVectorOperation [energy:cEnergy] reader.dmLevel = frame25 writer.dmLevel = energy log=0 rms=1 [melspec1:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspec1 ; htk compatible sample value scaling htkcompatible = 0 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = mel ; perform auditory weighting of spectrum [audspec:cPlp] reader.dmLevel=melspec1 writer.dmLevel=audspec firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=0 RASTA=0 ; perform RASTA style filtering of auditory spectra [audspecRasta:cPlp] reader.dmLevel=melspec1 writer.dmLevel=audspecRasta nameAppend = Rfilt firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=1 RASTA=0 [audspecSum:cVectorOperation] reader.dmLevel = audspec writer.dmLevel = audspecSum // nameAppend = copyInputName = 1 processArrayFields = 0 operation = ll1 nameBase = audspec [audspecRastaSum:cVectorOperation] reader.dmLevel = audspecRasta writer.dmLevel = audspecRastaSum // nameAppend = copyInputName = 1 processArrayFields = 0 operation = ll1 nameBase = audspecRasta ;;;;;;;;;;;;;;; spectral [componentInstances:cComponentManager] instance[spectral].type=cSpectral [spectral:cSpectral] reader.dmLevel=fftmagH25 writer.dmLevel=spectral bands[0]=25-650 bands[1]=1000-4000 rollOff[0] = 0.25 rollOff[1] = 0.50 rollOff[2] = 0.75 rollOff[3] = 0.90 flux=1 centroid=0 maxPos=0 minPos=0 entropy=1 variance=1 skewness=1 kurtosis=1 slope=1 ;;;;;;;;;;;;;;; mfcc [componentInstances:cComponentManager] instance[melspecMfcc].type=cMelspec instance[mfcc].type=cMfcc [melspecMfcc:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspecMfcc copyInputName = 1 processArrayFields = 1 ; htk compatible sample value scaling htkcompatible = 1 nBands = 26s ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = mel inverse = 0 [mfcc:cMfcc] reader.dmLevel=melspecMfcc writer.dmLevel=mfcc1_12 copyInputName = 1 processArrayFields = 1 firstMfcc = 1 lastMfcc = 12 cepLifter = 22.0 htkcompatible = 1 ;;;;;;;;;;;;;;;; zcr [componentInstances:cComponentManager] instance[mzcr].type=cMZcr [mzcr:cMZcr] reader.dmLevel = frame25 writer.dmLevel = zcr copyInputName = 1 processArrayFields = 1 zcr = 1 mcr = 0 amax = 0 maxmin = 0 dc = 0 ;;;;;;;;;;;;;;;;;;;; smoothing [componentInstances:cComponentManager] instance[smoNz].type=cContourSmoother instance[smoA].type=cContourSmoother instance[smoB].type=cContourSmoother instance[f0sel].type=cDataSelector [smoNz:cContourSmoother] reader.dmLevel = pitchG60;jitterShimmer writer.dmLevel = lld_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 1 [f0sel:cDataSelector] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_f0_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = ff0 selected = F0final_sma [smoA:cContourSmoother] reader.dmLevel = audspecSum;audspecRastaSum;energy;zcr writer.dmLevel = lldA_smo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 [smoB:cContourSmoother] reader.dmLevel = audspecRasta;spectral;mfcc1_12 writer.dmLevel = lldB_smo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 ;;;;;;;;; deltas [componentInstances:cComponentManager] instance[deNz].type=cDeltaRegression instance[deA].type=cDeltaRegression instance[deB].type=cDeltaRegression instance[def0sel].type=cDeltaRegression [deNz:cDeltaRegression] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_nzsmo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 [deA:cDeltaRegression] reader.dmLevel = lldA_smo writer.dmLevel = lldA_smo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 [deB:cDeltaRegression] reader.dmLevel = lldB_smo writer.dmLevel = lldB_smo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 [def0sel:cDeltaRegression] reader.dmLevel = lld_f0_nzsmo writer.dmLevel = lld_f0_nzsmo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ;;;;;;;;; functionals / statistics [componentInstances:cComponentManager] instance[functionalsA].type=cFunctionals instance[functionalsB].type=cFunctionals instance[functionalsF0].type=cFunctionals instance[functionalsNz].type=cFunctionals ; functionals for energy related lld [functionalsA:cFunctionals] reader.dmLevel = lldA_smo;lldA_smo_de writer.dmLevel = functionalsA // nameAppend = copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Percentiles ; Means ; Moments ; Peaks ; Segments ; Regression ; Times ; Lpc Means.amean = 1 Means.absmean = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Peaks.numPeaks = 0 Peaks.meanPeakDist = 1 Peaks.peakMean = 1 Peaks.peakMeanMeanDist = 1 Peaks.peakDistStddev = 1 Peaks.norm = second Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = relTh Segments.thresholds = 0.25 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Moments.doRatioLimit = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Regression.linregc1 = 1 Regression.linregc2 = 0 Regression.linregerrA = 0 Regression.linregerrQ = 1 Regression.qregc1 = 1 Regression.qregc2 = 1 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 1 Regression.oldBuggyQerr = 0 Regression.centroid = 1 Regression.normRegCoeff = 0 Regression.doRatioLimit = 0 Regression.centroidRatioLimit = 0 Regression.centroidUseAbsValues = 0 Times.upleveltime25 = 0 Times.downleveltime25 = 1 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 1 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for spectrum related lld [functionalsB:cFunctionals] reader.dmLevel = lldB_smo;lldB_smo_de writer.dmLevel = functionalsB // nameAppend = copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Percentiles ; Means ; Moments ; Peaks ; Segments ; Regression ; Times ; Lpc Means.amean = 1 Means.absmean = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Peaks.numPeaks = 0 Peaks.meanPeakDist = 1 Peaks.peakMean = 1 Peaks.peakMeanMeanDist = 1 Peaks.peakDistStddev = 1 Peaks.norm = second Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = relTh Segments.thresholds = 0.25 ; 0.75 Segments.rangeRelThreshold = 0.200000 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Moments.doRatioLimit = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Regression.linregc1 = 1 Regression.linregc2 = 0 Regression.linregerrA = 0 Regression.linregerrQ = 1 Regression.qregc1 = 1 Regression.qregc2 = 1 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 1 Regression.oldBuggyQerr = 0 Regression.centroid = 1 Regression.normRegCoeff = 0 Regression.doRatioLimit = 0 Regression.centroidRatioLimit = 0 Regression.centroidUseAbsValues = 0 Times.upleveltime25 = 0 Times.downleveltime25 = 1 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 1 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch onsets/offsets [functionalsF0:cFunctionals] reader.dmLevel = lld_f0_nzsmo;lld_f0_nzsmo_de writer.dmLevel = functionalsF0 copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Means ; Segments ; Times Means.amean = 0 Means.absmean = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 1 Means.norm = segment Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = nonX Segments.X = 0.0 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 0 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 1 Times.buggySecNorm = 0 Times.norm = second nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch and vq related lld in voiced regions [functionalsNz:cFunctionals] reader.dmLevel = lld_nzsmo;lld_nzsmo_de writer.dmLevel = functionalsNz copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Percentiles ; Means ; Moments ; Peaks ; Regression ; Times ; Lpc Means.amean = 1 Means.absmean = 0 Means.qmean = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Peaks.numPeaks = 0 Peaks.meanPeakDist = 1 Peaks.peakMean = 1 Peaks.peakMeanMeanDist = 1 Peaks.peakDistStddev = 1 Peaks.norm = second Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Moments.doRatioLimit = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Regression.linregc1 = 1 Regression.linregc2 = 0 Regression.linregerrA = 0 Regression.linregerrQ = 1 Regression.qregc1 = 1 Regression.qregc2 = 1 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 1 Regression.oldBuggyQerr = 0 Regression.centroid = 1 Regression.normRegCoeff = 0 Regression.centroidRatioLimit = 0 Regression.centroidUseAbsValues = 0 Regression.doRatioLimit = 0 Times.upleveltime25 = 0 Times.downleveltime25 = 1 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 1 Times.leftctime = 1 Times.rightctime = 1 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 1 masterTimeNorm = segment ;;;;;;;;; prepare features for standard output module [componentInstances:cComponentManager] instance[lldconcat].type=cVectorConcat instance[llddeconcat].type=cVectorConcat instance[funcconcat].type=cVectorConcat [lldconcat:cVectorConcat] reader.dmLevel = lld_nzsmo;lldA_smo;lldB_smo writer.dmLevel = lld includeSingleElementFields = 1 [llddeconcat:cVectorConcat] reader.dmLevel = lld_nzsmo_de;lldA_smo_de;lldB_smo_de writer.dmLevel = lld_de includeSingleElementFields = 1 [funcconcat:cVectorConcat] reader.dmLevel = functionalsA;functionalsB;functionalsNz;functionalsF0 writer.dmLevel = func includeSingleElementFields = 1 \{shared/standard_data_output.conf.inc} ================================================ FILE: config/IS12_speaker_trait.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for IS12 features < ////////////////// ///////// ////////////////// ///////// (c) 2013-2016 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // This version is an updated version which contains some fixes // The feature are not compatible with the original IS12 features, but should // be preferred in new designes / studies. // Use IS12_speaker_trait_compat.conf for numerically compatible features ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory printLevelStats=0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; main section ;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[waveIn].type=cWaveSource [waveIn:cWaveSource] writer.dmLevel=wave filename=\cm[inputfile(I){test.wav}:name of input file] monoMixdown=1 ;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame60].type=cFramer instance[win60].type=cWindower instance[fft60].type=cTransformFFT instance[fftmp60].type=cFFTmagphase [frame60:cFramer] reader.dmLevel=wave writer.dmLevel=frame60 frameSize = 0.060 frameStep = 0.010 frameCenterSpecial = left [win60:cWindower] reader.dmLevel=frame60 writer.dmLevel=winG60 winFunc=gauss gain=1.0 sigma=0.4 [fft60:cTransformFFT] reader.dmLevel=winG60 writer.dmLevel=fftcG60 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmp60:cFFTmagphase] reader.dmLevel=fftcG60 writer.dmLevel=fftmagG60 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame25].type=cFramer instance[pe25].type=cVectorPreemphasis instance[win25].type=cWindower instance[fft25].type=cTransformFFT instance[fftmp25].type=cFFTmagphase [frame25:cFramer] reader.dmLevel=wave writer.dmLevel=frame25 frameSize = 0.020 frameStep = 0.010 frameCenterSpecial = left [pe25:cVectorPreemphasis] reader.dmLevel=frame25 writer.dmLevel=frame25pe k=0.97 de=0 [win25:cWindower] reader.dmLevel=frame25 writer.dmLevel=winH25 winFunc=hamming [fft25:cTransformFFT] reader.dmLevel=winH25 writer.dmLevel=fftcH25 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmp25:cFFTmagphase] reader.dmLevel=fftcH25 writer.dmLevel=fftmagH25 ;;;;;;;;;;;;;;;;;;;; HPS pitch [componentInstances:cComponentManager] instance[scale].type=cSpecScale instance[shs].type=cPitchShs [scale:cSpecScale] reader.dmLevel=fftmagG60 writer.dmLevel=hpsG60 copyInputName = 1 processArrayFields = 0 scale=octave sourceScale = lin // logScaleBase = 2 // logSourceScaleBase = 2 // firstNote = 55 interpMethod = spline minF = 25 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [shs:cPitchShs] reader.dmLevel=hpsG60 writer.dmLevel=pitchShsG60 writer.levelconf.nT=100 copyInputName = 1 processArrayFields = 0 maxPitch = 620 minPitch = 52 nCandidates = 4 scores = 1 voicing = 1 F0C1 = 0 voicingC1 = 0 F0raw = 1 voicingClip = 1 voicingCutoff = 0.700000 inputFieldSearch = Mag_octScale octaveCorrection = 0 nHarmonics = 15 compressionFactor = 0.850000 ; TODO: Viterbi smoothing with volume clipping! ;;;;; Pitch with Viterbi smoother [componentInstances:cComponentManager] instance[energy60].type=cEnergy [energy60:cEnergy] reader.dmLevel=winG60 writer.dmLevel=e60 ; This must be > than buffersize of viterbi smoother writer.levelconf.nT=100 rms=1 log=0 [componentInstances:cComponentManager] instance[pitchSmoothViterbi].type=cPitchSmootherViterbi [pitchSmoothViterbi:cPitchSmootherViterbi] reader.dmLevel=pitchShsG60 reader2.dmLevel=pitchShsG60 writer.dmLevel=pitchG60_viterbi copyInputName = 1 bufferLength=30 F0final = 1 F0finalEnv = 0 voicingFinalClipped = 0 voicingFinalUnclipped = 1 F0raw = 0 voicingC1 = 0 voicingClip = 0 wTvv=14.0 ;wTvv=10.0 wTvuv=25.0 wRange=2.0 [componentInstances:cComponentManager] instance[volmerge].type = cValbasedSelector [volmerge:cValbasedSelector] reader.dmLevel = e60;pitchG60_viterbi writer.dmLevel = pitchG60 idx=0 threshold=0.005 removeIdx=1 zeroVec=1 outputVal=0.0 ;;;;;;;;;;;;;;;;;;;;; Energy / loudness [componentInstances:cComponentManager] instance[energy].type=cEnergy instance[melspec1].type=cMelspec instance[audspec].type=cPlp instance[audspecRasta].type=cPlp instance[audspecSum].type=cVectorOperation instance[audspecRastaSum].type=cVectorOperation [energy:cEnergy] reader.dmLevel = frame25 writer.dmLevel = energy log=0 rms=1 [melspec1:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspec1 ; htk compatible sample value scaling htkcompatible = 0 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = mel ; perform auditory weighting of spectrum [audspec:cPlp] reader.dmLevel=melspec1 writer.dmLevel=audspec firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=0 RASTA=0 ; perform RASTA style filtering of auditory spectra [audspecRasta:cPlp] reader.dmLevel=melspec1 writer.dmLevel=audspecRasta nameAppend = Rfilt firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=1 RASTA=0 [audspecSum:cVectorOperation] reader.dmLevel = audspec writer.dmLevel = audspecSum // nameAppend = copyInputName = 1 processArrayFields = 0 operation = ll1 nameBase = audspec [audspecRastaSum:cVectorOperation] reader.dmLevel = audspecRasta writer.dmLevel = audspecRastaSum // nameAppend = copyInputName = 1 processArrayFields = 0 operation = ll1 nameBase = audspecRasta ;;;;;;;;;;;;;;; spectral [componentInstances:cComponentManager] instance[spectral].type=cSpectral [spectral:cSpectral] reader.dmLevel=fftmagH25 writer.dmLevel=spectral bands[0]=250-650 bands[1]=1000-4000 rollOff[0] = 0.25 rollOff[1] = 0.50 rollOff[2] = 0.75 rollOff[3] = 0.90 flux=1 centroid=0 maxPos=0 minPos=0 entropy=1 variance=1 skewness=1 kurtosis=1 slope=1 harmonicity=1 sharpness=1 ;;;;;;;;;;;;;;; mfcc [componentInstances:cComponentManager] instance[melspecMfcc].type=cMelspec instance[mfcc].type=cMfcc [melspecMfcc:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspecMfcc copyInputName = 1 processArrayFields = 1 ; htk compatible sample value scaling htkcompatible = 1 nBands = 26s ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = mel inverse = 0 [mfcc:cMfcc] reader.dmLevel=melspecMfcc writer.dmLevel=mfcc1_12 copyInputName = 1 processArrayFields = 1 firstMfcc = 1 lastMfcc = 14 cepLifter = 22.0 htkcompatible = 1 ;;;;;;;;;;;;;;;; zcr [componentInstances:cComponentManager] instance[mzcr].type=cMZcr [mzcr:cMZcr] reader.dmLevel = frame25 writer.dmLevel = zcr copyInputName = 1 processArrayFields = 1 zcr = 1 mcr = 0 amax = 0 maxmin = 0 dc = 0 ;;;;;;;;;;;;;;;;; rasta-plp ? ;;;;;;;;;;;;;;;;;;;; smoothing [componentInstances:cComponentManager] instance[smoNz].type=cContourSmoother instance[smoA].type=cContourSmoother instance[smoB].type=cContourSmoother instance[f0sel].type=cDataSelector [smoNz:cContourSmoother] reader.dmLevel = pitchG60 writer.dmLevel = lld_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 1 [f0sel:cDataSelector] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_f0_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = ff0 selected = F0final_sma [smoA:cContourSmoother] reader.dmLevel = audspecSum;audspecRastaSum;energy;zcr writer.dmLevel = lldA_smo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 [smoB:cContourSmoother] reader.dmLevel = audspecRasta;spectral;mfcc1_12 writer.dmLevel = lldB_smo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 ;;;;;;;;; deltas [componentInstances:cComponentManager] instance[deNz].type=cDeltaRegression instance[deA].type=cDeltaRegression instance[deB].type=cDeltaRegression instance[def0sel].type=cDeltaRegression [deNz:cDeltaRegression] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_nzsmo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 onlyInSegments = 1 [deA:cDeltaRegression] reader.dmLevel = lldA_smo writer.dmLevel = lldA_smo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 [deB:cDeltaRegression] reader.dmLevel = lldB_smo writer.dmLevel = lldB_smo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 [def0sel:cDeltaRegression] reader.dmLevel = lld_f0_nzsmo writer.dmLevel = lld_f0_nzsmo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ;;;;;;;;; functionals / statistics [componentInstances:cComponentManager] instance[functionalsA].type=cFunctionals instance[functionalsB].type=cFunctionals instance[functionalsF0].type=cFunctionals instance[functionalsNz].type=cFunctionals ; shared functionals for LLD instance[functionalsLLD].type=cFunctionals ; shared functionals for Delta LLD instance[functionalsDelta].type=cFunctionals ; functionals for energy related lld [functionalsA:cFunctionals] reader.dmLevel = lldA_smo;lldA_smo_de writer.dmLevel = functionalsA // nameAppend = copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Extremes ; Percentiles ; Moments ; Segments ; Times ; Lpc Extremes.max = 0 Extremes.min = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 Extremes.range = 1 Extremes.norm = segment Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = relTh Segments.thresholds = 0.25 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Moments.doRatioLimit = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 1 Times.upleveltime50 = 1 Times.downleveltime50 = 1 Times.upleveltime75 = 1 Times.downleveltime75 = 1 Times.upleveltime90 = 1 Times.downleveltime90 = 1 Times.risetime = 1 Times.falltime = 1 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for spectrum related lld [functionalsB:cFunctionals] reader.dmLevel = lldB_smo;lldB_smo_de writer.dmLevel = functionalsB // nameAppend = copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Extremes ; Percentiles ; Moments ; Segments ; Times ; Lpc Extremes.max = 0 Extremes.min = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = relTh Segments.thresholds = 0.25 ; 0.75 Segments.rangeRelThreshold = 0.200000 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Moments.doRatioLimit = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 1 Times.upleveltime50 = 1 Times.downleveltime50 = 1 Times.upleveltime75 = 1 Times.downleveltime75 = 1 Times.upleveltime90 = 1 Times.downleveltime90 = 1 Times.risetime = 1 Times.falltime = 1 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch onsets/offsets [functionalsF0:cFunctionals] reader.dmLevel = lld_f0_nzsmo writer.dmLevel = functionalsF0 //nameAppend = ff0 copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Means ; Segments ; Times Means.amean = 0 Means.absmean = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 1 Means.norm = segment Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = nonX Segments.X = 0.0 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 0 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = second nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch and vq related lld in voiced regions [functionalsNz:cFunctionals] reader.dmLevel = lld_nzsmo;lld_nzsmo_de writer.dmLevel = functionalsNz // nameAppend = copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Extremes ; Percentiles ; Moments ; Times ; Lpc Extremes.max = 0 Extremes.min = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 Extremes.range = 1 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Moments.doRatioLimit = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 1 Times.upleveltime50 = 1 Times.downleveltime50 = 1 Times.upleveltime75 = 1 Times.downleveltime75 = 1 Times.upleveltime90 = 1 Times.downleveltime90 = 1 Times.risetime = 1 Times.falltime = 1 Times.leftctime = 1 Times.rightctime = 1 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 1 masterTimeNorm = segment [functionalsLLD:cFunctionals] reader.dmLevel = lldA_smo;lldB_smo;lld_nzsmo writer.dmLevel = functionalsLLD copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Means ; Peaks2 ; Regression Means.amean = 1 Means.posamean = 0 Means.absmean = 0 Means.qmean = 0 Means.rqmean = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.posrqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.flatness = 1 Means.norm = frames Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 0 Regression.linregerrQ = 1 Regression.qregc1 = 1 Regression.qregc2 = 1 Regression.qregc3 = 1 Regression.qregerrA = 0 Regression.qregerrQ = 1 Regression.oldBuggyQerr = 0 Regression.centroid = 1 Regression.normRegCoeff = 0 Regression.centroidRatioLimit = 0 Regression.centroidUseAbsValues = 0 Regression.doRatioLimit = 0 Peaks2.doRatioLimit = 0 Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 1 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 1 Peaks2.peakRangeAbs = 1 Peaks2.peakRangeRel = 1 Peaks2.peakMeanAbs = 1 Peaks2.peakMeanMeanDist = 1 Peaks2.peakMeanRel = 1 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 1 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 0 Peaks2.minRisingSlope = 0 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 0 Peaks2.minFallingSlope = 0 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 [functionalsDelta:cFunctionals] reader.dmLevel = lldA_smo_de;lldB_smo_de;lld_nzsmo_de writer.dmLevel = functionalsDelta copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Means Means.amean = 0 Means.posamean = 1 Means.absmean = 0 Means.qmean = 0 Means.rqmean = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.posrqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.flatness = 1 Means.norm = frames ;;;;;;;;; prepare features for standard output module [componentInstances:cComponentManager] instance[lldconcat].type=cVectorConcat instance[llddeconcat].type=cVectorConcat instance[funcconcat].type=cVectorConcat [lldconcat:cVectorConcat] reader.dmLevel = lld_nzsmo;lldA_smo;lldB_smo writer.dmLevel = lld includeSingleElementFields = 1 [llddeconcat:cVectorConcat] reader.dmLevel = lld_nzsmo_de;lldA_smo_de;lldB_smo_de writer.dmLevel = lld_de includeSingleElementFields = 1 [funcconcat:cVectorConcat] reader.dmLevel = functionalsA;functionalsB;functionalsNz;functionalsF0;functionalsLLD;functionalsDelta writer.dmLevel = func includeSingleElementFields = 1 \{shared/standard_data_output.conf.inc} ================================================ FILE: config/IS12_speaker_trait_compat.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for IS12 challenge < ////////////////// ///////// This file produces backwards compatible features ////////////////// ///////// (to version 1.x) with openSMILE version 2.1 ////////////////// ///////// ////////////////// ///////// (c) 2013-2016 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory printLevelStats=0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; main section ;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[waveIn].type=cWaveSource [waveIn:cWaveSource] writer.dmLevel=wave filename=\cm[inputfile(I){test.wav}:name of input file] monoMixdown=1 ;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame60].type=cFramer instance[win60].type=cWindower instance[fft60].type=cTransformFFT instance[fftmp60].type=cFFTmagphase [frame60:cFramer] reader.dmLevel=wave writer.dmLevel=frame60 frameSize = 0.060 frameStep = 0.010 frameCenterSpecial = left [win60:cWindower] reader.dmLevel=frame60 writer.dmLevel=winG60 winFunc=gauss gain=1.0 sigma=0.4 [fft60:cTransformFFT] reader.dmLevel=winG60 writer.dmLevel=fftcG60 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmp60:cFFTmagphase] reader.dmLevel=fftcG60 writer.dmLevel=fftmagG60 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame25].type=cFramer instance[pe25].type=cVectorPreemphasis instance[win25].type=cWindower instance[fft25].type=cTransformFFT instance[fftmp25].type=cFFTmagphase [frame25:cFramer] reader.dmLevel=wave writer.dmLevel=frame25 frameSize = 0.020 frameStep = 0.010 frameCenterSpecial = left [pe25:cVectorPreemphasis] reader.dmLevel=frame25 writer.dmLevel=frame25pe k=0.97 de=0 [win25:cWindower] reader.dmLevel=frame25 writer.dmLevel=winH25 winFunc=hamming [fft25:cTransformFFT] reader.dmLevel=winH25 writer.dmLevel=fftcH25 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmp25:cFFTmagphase] reader.dmLevel=fftcH25 writer.dmLevel=fftmagH25 ;;;;;;;;;;;;;;;;;;;; HPS pitch [componentInstances:cComponentManager] instance[scale].type=cSpecScale instance[shs].type=cPitchShs instance[pitchSmooth].type=cPitchSmoother instance[pitchSmooth2].type=cPitchSmoother [scale:cSpecScale] reader.dmLevel=fftmagG60 writer.dmLevel=hpsG60 copyInputName = 1 processArrayFields = 0 scale=octave sourceScale = lin // logScaleBase = 2 // logSourceScaleBase = 2 // firstNote = 55 interpMethod = spline minF = 25 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [shs:cPitchShs] reader.dmLevel=hpsG60 writer.dmLevel=pitchShsG60 copyInputName = 1 processArrayFields = 0 maxPitch = 620 minPitch = 52 nCandidates = 4 scores = 1 voicing = 1 F0C1 = 0 voicingC1 = 0 F0raw = 1 voicingClip = 1 voicingCutoff = 0.700000 inputFieldSearch = Mag_octScale octaveCorrection = 0 nHarmonics = 15 compressionFactor = 0.850000 [pitchSmooth:cPitchSmoother] reader.dmLevel=pitchShsG60 writer.dmLevel=pitchG60 copyInputName = 1 processArrayFields = 0 medianFilter0 = 0 postSmoothing = 0 postSmoothingMethod = simple ; note: octave correction is too agressive, thus we disable it.. octaveCorrection = 0 F0final = 1 F0finalEnv = 0 no0f0 = 0 voicingFinalClipped = 0 voicingFinalUnclipped = 1 F0raw = 0 voicingC1 = 0 voicingClip = 0 [pitchSmooth2:cPitchSmoother] reader.dmLevel=pitchShsG60 writer.dmLevel=pitchF F0raw = 0 F0final = 1 F0finalEnv = 0 voicingFinalUnclipped = 0 medianFilter0 = 0 postSmoothingMethod = simple octaveCorrection = 0 ;;;;;;;;;;;;;;;;;;; VQ [componentInstances:cComponentManager] ;instance[acf].type=cAcf ;instance[hnr].type=cHnr instance[pitchJitter].type=cPitchJitter ;[acf:cAcf] ;reader.dmLevel=fftmagG60 ;writer.dmLevel=acfG60 ;[hnr:cHnr] ;reader.dmLevel=pitchShsG60;acfG60 ;writer.dmLevel=hnr ;hnrAvg = 1 ;hnr1 = 1 ;hnr2 ;hnr3 ;hnr4 ;hnr5 [pitchJitter:cPitchJitter] reader.dmLevel = wave writer.dmLevel = jitterShimmer // nameAppend = copyInputName = 1 ; is pitchF really necessary, or can we use pitchG60 ? F0reader.dmLevel = pitchF F0field = F0final searchRangeRel = 0.250000 jitterLocal = 1 jitterDDP = 1 jitterLocalEnv = 0 jitterDDPEnv = 0 shimmerLocal = 1 shimmerLocalEnv = 0 onlyVoiced = 0 logHNR = 1 ;periodLengths = 0 ;periodStarts = 0 useBrokenJitterThresh = 1 ;;;;;;;;;;;;;;;;;;;;; Energy / loudness [componentInstances:cComponentManager] instance[energy].type=cEnergy instance[melspec1].type=cMelspec instance[audspec].type=cPlp instance[audspecRasta].type=cPlp instance[audspecSum].type=cVectorOperation instance[audspecRastaSum].type=cVectorOperation [energy:cEnergy] reader.dmLevel = frame25 writer.dmLevel = energy log=0 rms=1 [melspec1:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspec1 ; htk compatible sample value scaling htkcompatible = 0 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = mel ; perform auditory weighting of spectrum [audspec:cPlp] reader.dmLevel=melspec1 writer.dmLevel=audspec firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=0 RASTA=0 ; perform RASTA style filtering of auditory spectra [audspecRasta:cPlp] reader.dmLevel=melspec1 writer.dmLevel=audspecRasta nameAppend = Rfilt firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=1 RASTA=0 [audspecSum:cVectorOperation] reader.dmLevel = audspec writer.dmLevel = audspecSum // nameAppend = copyInputName = 1 processArrayFields = 0 operation = ll1 nameBase = audspec [audspecRastaSum:cVectorOperation] reader.dmLevel = audspecRasta writer.dmLevel = audspecRastaSum // nameAppend = copyInputName = 1 processArrayFields = 0 operation = ll1 nameBase = audspecRasta ;;;;;;;;;;;;;;; spectral [componentInstances:cComponentManager] instance[spectral].type=cSpectral [spectral:cSpectral] reader.dmLevel=fftmagH25 writer.dmLevel=spectral bands[0]=250-650 bands[1]=1000-4000 rollOff[0] = 0.25 rollOff[1] = 0.50 rollOff[2] = 0.75 rollOff[3] = 0.90 flux=1 centroid=0 maxPos=0 minPos=0 entropy=1 variance=1 skewness=1 kurtosis=1 slope=1 harmonicity=1 sharpness=1 ;;;;;;;;;;;;;;; mfcc [componentInstances:cComponentManager] instance[melspecMfcc].type=cMelspec instance[mfcc].type=cMfcc [melspecMfcc:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspecMfcc copyInputName = 1 processArrayFields = 1 ; htk compatible sample value scaling htkcompatible = 1 nBands = 26s ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = mel inverse = 0 [mfcc:cMfcc] reader.dmLevel=melspecMfcc writer.dmLevel=mfcc1_12 copyInputName = 1 processArrayFields = 1 firstMfcc = 1 lastMfcc = 14 cepLifter = 22.0 htkcompatible = 1 ;;;;;;;;;;;;;;;; zcr [componentInstances:cComponentManager] instance[mzcr].type=cMZcr [mzcr:cMZcr] reader.dmLevel = frame25 writer.dmLevel = zcr copyInputName = 1 processArrayFields = 1 zcr = 1 mcr = 0 amax = 0 maxmin = 0 dc = 0 ;;;;;;;;;;;;;;;;; rasta-plp ? ;;;;;;;;;;;;;;;;;;;; smoothing [componentInstances:cComponentManager] instance[smoNz].type=cContourSmoother instance[smoA].type=cContourSmoother instance[smoB].type=cContourSmoother instance[f0sel].type=cDataSelector [smoNz:cContourSmoother] reader.dmLevel = pitchG60;jitterShimmer writer.dmLevel = lld_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 1 [f0sel:cDataSelector] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_f0_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = ff0 selected = F0final_sma [smoA:cContourSmoother] reader.dmLevel = audspecSum;audspecRastaSum;energy;zcr writer.dmLevel = lldA_smo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 [smoB:cContourSmoother] reader.dmLevel = audspecRasta;spectral;mfcc1_12 writer.dmLevel = lldB_smo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 ;;;;;;;;; deltas [componentInstances:cComponentManager] instance[deNz].type=cDeltaRegression instance[deA].type=cDeltaRegression instance[deB].type=cDeltaRegression instance[def0sel].type=cDeltaRegression [deNz:cDeltaRegression] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_nzsmo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 [deA:cDeltaRegression] reader.dmLevel = lldA_smo writer.dmLevel = lldA_smo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 [deB:cDeltaRegression] reader.dmLevel = lldB_smo writer.dmLevel = lldB_smo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 [def0sel:cDeltaRegression] reader.dmLevel = lld_f0_nzsmo writer.dmLevel = lld_f0_nzsmo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ;;;;;;;;; functionals / statistics [componentInstances:cComponentManager] instance[functionalsA].type=cFunctionals instance[functionalsB].type=cFunctionals instance[functionalsF0].type=cFunctionals instance[functionalsNz].type=cFunctionals ; shared functionals for LLD instance[functionalsLLD].type=cFunctionals ; shared functionals for Delta LLD instance[functionalsDelta].type=cFunctionals ; functionals for energy related lld [functionalsA:cFunctionals] reader.dmLevel = lldA_smo;lldA_smo_de writer.dmLevel = functionalsA // nameAppend = copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Extremes ; Percentiles ; Moments ; Segments ; Times ; Lpc Extremes.max = 0 Extremes.min = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = relTh Segments.thresholds = 0.25 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Moments.doRatioLimit = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 1 Times.upleveltime50 = 1 Times.downleveltime50 = 1 Times.upleveltime75 = 1 Times.downleveltime75 = 1 Times.upleveltime90 = 1 Times.downleveltime90 = 1 Times.risetime = 1 Times.falltime = 1 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for spectrum related lld [functionalsB:cFunctionals] reader.dmLevel = lldB_smo;lldB_smo_de writer.dmLevel = functionalsB // nameAppend = copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Extremes ; Percentiles ; Moments ; Segments ; Times ; Lpc Extremes.max = 0 Extremes.min = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = relTh Segments.thresholds = 0.25 ; 0.75 Segments.rangeRelThreshold = 0.200000 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Moments.doRatioLimit = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 1 Times.upleveltime50 = 1 Times.downleveltime50 = 1 Times.upleveltime75 = 1 Times.downleveltime75 = 1 Times.upleveltime90 = 1 Times.downleveltime90 = 1 Times.risetime = 1 Times.falltime = 1 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch onsets/offsets [functionalsF0:cFunctionals] reader.dmLevel = lld_f0_nzsmo writer.dmLevel = functionalsF0 //nameAppend = ff0 copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Means ; Segments ; Times Means.amean = 0 Means.absmean = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 1 Means.norm = segment Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = nonX Segments.X = 0.0 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 0 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = second nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch and vq related lld in voiced regions [functionalsNz:cFunctionals] reader.dmLevel = lld_nzsmo;lld_nzsmo_de writer.dmLevel = functionalsNz // nameAppend = copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Extremes ; Percentiles ; Moments ; Times ; Lpc Extremes.max = 0 Extremes.min = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 Moments.doRatioLimit = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 1 Times.upleveltime50 = 1 Times.downleveltime50 = 1 Times.upleveltime75 = 1 Times.downleveltime75 = 1 Times.upleveltime90 = 1 Times.downleveltime90 = 1 Times.risetime = 1 Times.falltime = 1 Times.leftctime = 1 Times.rightctime = 1 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 1 masterTimeNorm = segment [functionalsLLD:cFunctionals] reader.dmLevel = lldA_smo;lldB_smo;lld_nzsmo writer.dmLevel = functionalsLLD copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Means ; Peaks2 ; Regression Means.amean = 1 Means.posamean = 0 Means.absmean = 0 Means.qmean = 0 Means.rqmean = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.posrqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.flatness = 1 Means.norm = frames Regression.centroidUseAbsValues = 0 Regression.centroidRatioLimit = 0 Regression.doRatioLimit = 0 Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 0 Regression.linregerrQ = 1 Regression.qregc1 = 1 Regression.qregc2 = 1 Regression.qregc3 = 1 Regression.qregerrA = 0 Regression.qregerrQ = 1 Regression.oldBuggyQerr = 0 Regression.centroid = 1 Regression.normRegCoeff = 0 Peaks2.doRatioLimit = 0 Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 1 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 1 Peaks2.peakRangeAbs = 1 Peaks2.peakRangeRel = 1 Peaks2.peakMeanAbs = 1 Peaks2.peakMeanMeanDist = 1 Peaks2.peakMeanRel = 1 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 1 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 0 Peaks2.minRisingSlope = 0 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 0 Peaks2.minFallingSlope = 0 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 [functionalsDelta:cFunctionals] reader.dmLevel = lldA_smo_de;lldB_smo_de;lld_nzsmo_de writer.dmLevel = functionalsDelta copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Means Means.amean = 0 Means.posamean = 1 Means.absmean = 0 Means.qmean = 0 Means.rqmean = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.posrqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.flatness = 1 Means.norm = frames ;;;;;;;;; prepare features for standard output module [componentInstances:cComponentManager] instance[lldconcat].type=cVectorConcat instance[llddeconcat].type=cVectorConcat instance[funcconcat].type=cVectorConcat [lldconcat:cVectorConcat] reader.dmLevel = lld_nzsmo;lldA_smo;lldB_smo writer.dmLevel = lld includeSingleElementFields = 1 [llddeconcat:cVectorConcat] reader.dmLevel = lld_nzsmo_de;lldA_smo_de;lldB_smo_de writer.dmLevel = lld_de includeSingleElementFields = 1 [funcconcat:cVectorConcat] reader.dmLevel = functionalsA;functionalsB;functionalsNz;functionalsF0;functionalsLLD;functionalsDelta writer.dmLevel = func includeSingleElementFields = 1 \{shared/standard_data_output.conf.inc} ================================================ FILE: config/IS13_ComParE.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for ComParE < ////////////////// ///////// ////////////////// ///////// (c) 2014 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory printLevelStats=0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; main section ;;;;;;;;;;;;;;;;;;;;;;;;;;; \{shared/standard_wave_input.conf.inc} \{IS13_ComParE_core.lld.conf.inc} \{IS13_ComParE_core.func.conf.inc} ;;;;;;;;; prepare features for standard output module [componentInstances:cComponentManager] instance[is13_lldconcat].type=cVectorConcat instance[is13_llddeconcat].type=cVectorConcat instance[is13_funcconcat].type=cVectorConcat [is13_lldconcat:cVectorConcat] reader.dmLevel = is13_lld_nzsmo;is13_lldA_smo;is13_lldB_smo writer.dmLevel = lld includeSingleElementFields = 1 [is13_llddeconcat:cVectorConcat] reader.dmLevel = is13_lld_nzsmo_de;is13_lldA_smo_de;is13_lldB_smo_de writer.dmLevel = lld_de includeSingleElementFields = 1 [is13_funcconcat:cVectorConcat] reader.dmLevel = is13_functionalsA;is13_functionalsB;is13_functionalsNz;is13_functionalsF0;is13_functionalsLLD;is13_functionalsDelta writer.dmLevel = func includeSingleElementFields = 1 \{shared/standard_data_output.conf.inc} ================================================ FILE: config/IS13_ComParE_Voc.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for ComParE vocalistions < ////////////////// ///////// ////////////////// ///////// (c) 2014 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory instance[waveIn].type=cWaveSource instance[fr1].type=cFramer instance[pe2].type=cVectorPreemphasis instance[w1].type=cWindower instance[fft1].type=cTransformFFT instance[fftmp1].type=cFFTmagphase instance[acf].type=cAcf instance[cepstrum].type=cAcf instance[pitchACF].type=cPitchACF instance[mspec].type=cMelspec instance[mfcc].type=cMfcc instance[energy].type=cEnergy instance[mzcr].type=cMZcr instance[cms].type=cFullinputMean instance[cmsD].type=cFullinputMean instance[cmsA].type=cFullinputMean instance[vc1].type=cVectorConcat instance[delta1].type=cDeltaRegression instance[delta2].type=cDeltaRegression instance[delta1e].type=cDeltaRegression instance[delta2e].type=cDeltaRegression instance[deltapitch].type=cDeltaRegression instance[deltazcr].type=cDeltaRegression instance[framestacking].type=cFunctionals instance[arffout].type=cArffSink nThreads=1 printLevelStats=0 [waveIn:cWaveSource] writer.dmLevel=wave filename=\cm[inputfile(I){test.wav}:name of input file] ;buffersize=16000 monoMixdown=1 [fr1:cFramer] reader.dmLevel=wave writer.dmLevel=outp frameSize = 0.0250 frameStep = 0.010 frameCenterSpecial = left [pe2:cVectorPreemphasis] reader.dmLevel=outp writer.dmLevel=output k=0.97 [w1:cWindower] reader.dmLevel=output writer.dmLevel=winoutput winFunc = ham gain = 1.0 [fft1:cTransformFFT] reader.dmLevel=winoutput writer.dmLevel=fftc1 [fftmp1:cFFTmagphase] reader.dmLevel=fftc1 writer.dmLevel=fft1 [acf:cAcf] reader.dmLevel=fft1 writer.dmLevel=acf nameAppend = acf copyInputName = 1 processArrayFields = 1 usePower = 1 cepstrum = 0 [cepstrum:cAcf] reader.dmLevel=fft1 writer.dmLevel=cepstrum nameAppend = acf copyInputName = 1 processArrayFields = 1 usePower = 1 cepstrum = 1 [pitchACF:cPitchACF] ; the pitchACF component must ALWAYS read from acf AND cepstrum in the given order! reader.dmLevel=acf;cepstrum writer.dmLevel=pitch writer.levelconf.growDyn=1 writer.levelconf.isRb=0 copyInputName = 1 processArrayFields = 0 maxPitch = 500 voiceProb = 1 voiceQual = 0 HNR = 1 F0 = 1 F0raw = 0 F0env = 0 voicingCutoff = 0.550000 [mspec:cMelspec] reader.dmLevel=fft1 writer.dmLevel=mspec1 htkcompatible = 1 nBands = 26 usePower = 1 lofreq = 0 hifreq = 8000 [mfcc:cMfcc] reader.dmLevel=mspec1 writer.dmLevel=mfcc1 writer.levelconf.growDyn=1 writer.levelconf.isRb=0 buffersize=1000 firstMfcc = 1 lastMfcc = 12 htkcompatible = 1 [cms:cFullinputMean] reader.dmLevel=mfcc1 writer.dmLevel=mfcc1m multiLoopMode=1 [cmsD:cFullinputMean] reader.dmLevel=mfcc1de writer.dmLevel=mfcc1dem multiLoopMode=1 [cmsA:cFullinputMean] reader.dmLevel=mfcc1dede writer.dmLevel=mfcc1dedem multiLoopMode=1 [vc1:cVectorConcat] reader.dmLevel=mfcc1m;energy;mfcc1dem;energyDe;mfcc1dedem;energyDede writer.dmLevel=ft0 processArrayFields=0 [delta1:cDeltaRegression] reader.dmLevel=mfcc1 writer.dmLevel=mfcc1de deltawin=2 blocksize=1 [delta2:cDeltaRegression] reader.dmLevel=mfcc1de writer.dmLevel=mfcc1dede deltawin=2 blocksize=1 [delta1e:cDeltaRegression] reader.dmLevel=energy writer.dmLevel=energyDe deltawin=2 blocksize=1 [delta2e:cDeltaRegression] reader.dmLevel=energyDe writer.dmLevel=energyDede deltawin=2 blocksize=1 [deltapitch:cDeltaRegression] reader.dmLevel=pitch writer.dmLevel=pitchde deltawin=2 blocksize=1 onlyInSegments=1 zeroSegBound=1 [deltazcr:cDeltaRegression] reader.dmLevel=zcr writer.dmLevel=zcrde deltawin=2 blocksize=1 [energy:cEnergy] reader.dmLevel=outp writer.dmLevel=energy writer.levelconf.growDyn=1 writer.levelconf.isRb=0 buffersize=1000 htkcompatible=1 [mzcr:cMZcr] reader.dmLevel=outp writer.dmLevel=zcr writer.levelconf.growDyn=1 writer.levelconf.isRb=0 copyInputName = 1 processArrayFields = 1 zcr = 1 amax = 0 mcr = 0 maxmin = 0 dc = 0 [framestacking:cFunctionals] reader.dmLevel = mfcc1m;energy;mfcc1dem;energyDe;mfcc1dedem;energyDede;pitch;pitchde;zcr;zcrde ;ft0 writer.dmLevel = fts ;frameCenterSpecial = mid frameCenterFrames = \cm[stackC{2}:frame center] frameSizeFrames = \cm[stack(S){5}:number of frames to stack] frameStepFrames = 1 functionalsEnabled = Moments Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 0 Moments.kurtosis = 0 Moments.amean = 1 noPostEOIprocessing = 0 [arffout:cArffSink] relation = COMPARE2013_Vocalisations ;instanceBase=\cm[instName{file}:instance name] instanceName=\cm[instName{file}:instance name] reader.dmLevel=mfcc1m;energy;mfcc1dem;energyDe;mfcc1dedem;energyDede;pitch;pitchde;zcr;zcrde;fts ;reader.dmLevel=fts filename=\cm[output(O){mfcc.arff}:name of MFCC output filename (ARFF format)] frameIndex = 1 frameTime = 0 append = 1 class[0].type = { garbage, laughter, filler } ; default class target[0].all = garbage target[0].instance = \cm[frameClasses(T){garbage}:list of class labels for frames] ================================================ FILE: config/IS13_ComParE_core.func.conf.inc ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for ComParE < ////////////////// ///////// ////////////////// ///////// (c) 2014 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;;;; functionals / statistics [componentInstances:cComponentManager] instance[is13_functionalsA].type=cFunctionals instance[is13_functionalsB].type=cFunctionals instance[is13_functionalsF0].type=cFunctionals instance[is13_functionalsNz].type=cFunctionals ; shared functionals for LLD instance[is13_functionalsLLD].type=cFunctionals ; shared functionals for Delta LLD instance[is13_functionalsDelta].type=cFunctionals ; functionals for energy related lld [is13_functionalsA:cFunctionals] reader.dmLevel = is13_lldA_smo;is13_lldA_smo_de writer.dmLevel = is13_functionalsA // nameAppend = copyInputName = 1 \{\cm[bufferModeRbConf]} \{\cm[frameModeFunctionalsConf{shared/FrameModeFunctionals.conf.inc}:path to included config to set frame mode for all functionals]} functionalsEnabled = Extremes ; Percentiles ; Moments ; Segments ; Times ; Lpc Extremes.max = 0 Extremes.min = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = relTh Segments.thresholds = 0.25 ; 0.75 Segments.ravgLng = 3 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Moments.doRatioLimit = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 1 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 1 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for spectrum related lld [is13_functionalsB:cFunctionals] reader.dmLevel = is13_lldB_smo;is13_lldB_smo_de writer.dmLevel = is13_functionalsB // nameAppend = copyInputName = 1 \{\cm[bufferModeRbConf]} \{\cm[frameModeFunctionalsConf]} functionalsEnabled = Extremes ; Percentiles ; Moments ; Segments ; Times ; Lpc Extremes.max = 0 Extremes.min = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = relTh Segments.thresholds = 0.25 ; 0.75 Segments.rangeRelThreshold = 0.200000 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Moments.doRatioLimit = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 1 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 1 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch onsets/offsets [is13_functionalsF0:cFunctionals] reader.dmLevel = is13_lld_f0_nzsmo writer.dmLevel = is13_functionalsF0 //nameAppend = ff0 copyInputName = 1 \{\cm[bufferModeRbConf]} \{\cm[frameModeFunctionalsConf]} functionalsEnabled = Means ; Segments Means.amean = 0 Means.absmean = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 1 Means.norm = segment Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = nonX Segments.X = 0.0 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch and vq related lld in voiced regions [is13_functionalsNz:cFunctionals] reader.dmLevel = is13_lld_nzsmo;is13_lld_nzsmo_de writer.dmLevel = is13_functionalsNz // nameAppend = copyInputName = 1 \{\cm[bufferModeRbConf]} \{\cm[frameModeFunctionalsConf]} functionalsEnabled = Means ; Extremes ; Regression ; Percentiles ; Moments ; Times ; Lpc Means.amean = 1 Means.posamean = 1 Means.absmean = 0 Means.qmean = 0 Means.rqmean = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.posrqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.flatness = 1 Means.norm = frames Extremes.max = 0 Extremes.min = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 Moments.doRatioLimit = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Regression.centroidUseAbsValues = 0 Regression.centroidRatioLimit = 0 Regression.doRatioLimit = 0 Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 0 Regression.linregerrQ = 1 Regression.qregc1 = 1 Regression.qregc2 = 1 Regression.qregc3 = 1 Regression.qregerrA = 0 Regression.qregerrQ = 1 Regression.oldBuggyQerr = 0 Regression.centroid = 1 Regression.normRegCoeff = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 1 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 1 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 1 masterTimeNorm = segment [is13_functionalsLLD:cFunctionals] reader.dmLevel = is13_lldA_smo;is13_lldB_smo writer.dmLevel = is13_functionalsLLD copyInputName = 1 \{\cm[bufferModeRbConf]} \{\cm[frameModeFunctionalsConf]} functionalsEnabled = Means ; Peaks2 ; Regression Means.amean = 1 Means.posamean = 0 Means.absmean = 0 Means.qmean = 0 Means.rqmean = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.posrqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.flatness = 1 Means.norm = frames Regression.centroidUseAbsValues = 0 Regression.centroidRatioLimit = 0 Regression.doRatioLimit = 0 Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 0 Regression.linregerrQ = 1 Regression.qregc1 = 1 Regression.qregc2 = 1 Regression.qregc3 = 1 Regression.qregerrA = 0 Regression.qregerrQ = 1 Regression.oldBuggyQerr = 0 Regression.centroid = 1 Regression.normRegCoeff = 0 Peaks2.doRatioLimit = 0 Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 1 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 1 Peaks2.peakRangeAbs = 1 Peaks2.peakRangeRel = 1 Peaks2.peakMeanAbs = 1 Peaks2.peakMeanMeanDist = 1 Peaks2.peakMeanRel = 1 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 1 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 0 Peaks2.minRisingSlope = 0 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 0 Peaks2.minFallingSlope = 0 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 [is13_functionalsDelta:cFunctionals] reader.dmLevel = is13_lldA_smo_de;is13_lldB_smo_de writer.dmLevel = is13_functionalsDelta copyInputName = 1 \{\cm[bufferModeRbConf]} \{\cm[frameModeFunctionalsConf]} functionalsEnabled = Means ; Peaks2 Means.amean = 0 Means.posamean = 1 Means.absmean = 0 Means.qmean = 0 Means.rqmean = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.posrqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.flatness = 1 Means.norm = frames Peaks2.doRatioLimit = 0 Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 1 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 1 Peaks2.peakRangeAbs = 1 Peaks2.peakRangeRel = 1 Peaks2.peakMeanAbs = 1 Peaks2.peakMeanMeanDist = 1 Peaks2.peakMeanRel = 1 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 1 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 0 Peaks2.minRisingSlope = 0 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 0 Peaks2.minFallingSlope = 0 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 ================================================ FILE: config/IS13_ComParE_core.lld.conf.inc ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for ComParE < ////////////////// ///////// ////////////////// ///////// (c) 2014 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[is13_frame60].type=cFramer instance[is13_win60].type=cWindower instance[is13_fft60].type=cTransformFFT instance[is13_fftmp60].type=cFFTmagphase [is13_frame60:cFramer] reader.dmLevel=wave writer.dmLevel=is13_frame60 \{\cm[bufferModeRbConf{shared/BufferModeRb.conf.inc}:path to included config to set the buffer mode for the standard ringbuffer levels]} frameSize = 0.060 frameStep = 0.010 frameCenterSpecial = left [is13_win60:cWindower] reader.dmLevel=is13_frame60 writer.dmLevel=is13_winG60 winFunc=gauss gain=1.0 sigma=0.4 [is13_fft60:cTransformFFT] reader.dmLevel=is13_winG60 writer.dmLevel=is13_fftcG60 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [is13_fftmp60:cFFTmagphase] reader.dmLevel=is13_fftcG60 writer.dmLevel=is13_fftmagG60 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[is13_frame25].type=cFramer instance[is13_win25].type=cWindower instance[is13_fft25].type=cTransformFFT instance[is13_fftmp25].type=cFFTmagphase [is13_frame25:cFramer] reader.dmLevel=wave writer.dmLevel=is13_frame25 \{\cm[bufferModeRbConf]} frameSize = 0.020 frameStep = 0.010 frameCenterSpecial = left [is13_win25:cWindower] reader.dmLevel=is13_frame25 writer.dmLevel=is13_winH25 winFunc=hamming [is13_fft25:cTransformFFT] reader.dmLevel=is13_winH25 writer.dmLevel=is13_fftcH25 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [is13_fftmp25:cFFTmagphase] reader.dmLevel=is13_fftcH25 writer.dmLevel=is13_fftmagH25 ;;;;;;;;;;;;;;;;;;;; HPS pitch [componentInstances:cComponentManager] instance[is13_scale].type=cSpecScale instance[is13_shs].type=cPitchShs [is13_scale:cSpecScale] reader.dmLevel=is13_fftmagG60 writer.dmLevel=is13_hpsG60 copyInputName = 1 processArrayFields = 0 scale=octave sourceScale = lin interpMethod = spline minF = 25 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [is13_shs:cPitchShs] reader.dmLevel=is13_hpsG60 writer.dmLevel=is13_pitchShsG60 \{\cm[bufferModeRbLagConf{shared/BufferModeRbLag.conf.inc}:path to included config to set the buffer mode for levels which will be joint with Viterbi smoothed -lagged- F0]} copyInputName = 1 processArrayFields = 0 maxPitch = 620 minPitch = 52 nCandidates = 6 scores = 1 voicing = 1 F0C1 = 0 voicingC1 = 0 F0raw = 1 voicingClip = 1 voicingCutoff = 0.700000 inputFieldSearch = Mag_octScale octaveCorrection = 0 nHarmonics = 15 compressionFactor = 0.850000 greedyPeakAlgo = 1 ;;;;; Pitch with Viterbi smoother [componentInstances:cComponentManager] instance[is13_energy60].type=cEnergy [is13_energy60:cEnergy] reader.dmLevel=is13_winG60 writer.dmLevel=is13_e60 ; This must be > than buffersize of viterbi smoother \{\cm[bufferModeRbLagConf]} rms=1 log=0 [componentInstances:cComponentManager] instance[is13_pitchSmoothViterbi].type=cPitchSmootherViterbi [is13_pitchSmoothViterbi:cPitchSmootherViterbi] reader.dmLevel=is13_pitchShsG60 reader2.dmLevel=is13_pitchShsG60 writer.dmLevel=is13_pitchG60_viterbi \{\cm[bufferModeRbLagConf]} copyInputName = 1 bufferLength=30 F0final = 1 F0finalEnv = 0 voicingFinalClipped = 0 voicingFinalUnclipped = 1 F0raw = 0 voicingC1 = 0 voicingClip = 0 wTvv =10.0 wTvvd= 5.0 wTvuv=10.0 wThr = 4.0 wTuu = 0.0 wLocal=2.0 wRange=1.0 [componentInstances:cComponentManager] instance[is13_volmerge].type = cValbasedSelector [is13_volmerge:cValbasedSelector] reader.dmLevel = is13_e60;is13_pitchG60_viterbi writer.dmLevel = is13_pitchG60 \{\cm[bufferModeRbLagConf]} idx=0 threshold=0.001 removeIdx=1 zeroVec=1 outputVal=0.0 ;;;;;;;;;;;;;;;;;;; Voice Quality (VQ) [componentInstances:cComponentManager] instance[is13_pitchJitter].type=cPitchJitter [is13_pitchJitter:cPitchJitter] reader.dmLevel = wave writer.dmLevel = is13_jitterShimmer \{\cm[bufferModeRbLagConf]} copyInputName = 1 F0reader.dmLevel = is13_pitchG60 F0field = F0final searchRangeRel = 0.250000 jitterLocal = 1 jitterDDP = 1 jitterLocalEnv = 0 jitterDDPEnv = 0 shimmerLocal = 1 shimmerLocalEnv = 0 onlyVoiced = 0 logHNR = 1 inputMaxDelaySec = 2.0 ;periodLengths = 0 ;periodStarts = 0 useBrokenJitterThresh = 1 ;;;;;;;;;;;;;;;;;;;;; Energy / loudness [componentInstances:cComponentManager] instance[is13_energy].type=cEnergy instance[is13_melspec1].type=cMelspec instance[is13_audspec].type=cPlp instance[is13_audspecRasta].type=cPlp instance[is13_audspecSum].type=cVectorOperation instance[is13_audspecRastaSum].type=cVectorOperation [is13_energy:cEnergy] reader.dmLevel = is13_frame25 writer.dmLevel = is13_energy log=0 rms=1 ; Enable this only for if quadratic energy is needed, otherwise it breaks ComParE feature set compatibility!! ; energy2=1 [is13_melspec1:cMelspec] reader.dmLevel=is13_fftmagH25 writer.dmLevel=is13_melspec1 ; htk compatible sample value scaling htkcompatible = 0 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = mel showFbank = 0 ; perform auditory weighting of spectrum [is13_audspec:cPlp] reader.dmLevel=is13_melspec1 writer.dmLevel=is13_audspec firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=0 RASTA=0 ; perform RASTA style filtering of auditory spectra [is13_audspecRasta:cPlp] reader.dmLevel=is13_melspec1 writer.dmLevel=is13_audspecRasta nameAppend = Rfilt firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=1 RASTA=0 [is13_audspecSum:cVectorOperation] reader.dmLevel = is13_audspec writer.dmLevel = is13_audspecSum // nameAppend = copyInputName = 1 processArrayFields = 0 operation = ll1 nameBase = audspec [is13_audspecRastaSum:cVectorOperation] reader.dmLevel = is13_audspecRasta writer.dmLevel = is13_audspecRastaSum // nameAppend = copyInputName = 1 processArrayFields = 0 operation = ll1 nameBase = audspecRasta ;;;;;;;;;;;;;;; spectral [componentInstances:cComponentManager] instance[is13_spectral].type=cSpectral [is13_spectral:cSpectral] reader.dmLevel=is13_fftmagH25 writer.dmLevel=is13_spectral bands[0]=250-650 bands[1]=1000-4000 rollOff[0] = 0.25 rollOff[1] = 0.50 rollOff[2] = 0.75 rollOff[3] = 0.90 flux=1 centroid=1 maxPos=0 minPos=0 entropy=1 variance=1 skewness=1 kurtosis=1 slope=1 harmonicity=1 sharpness=1 ;;;;;;;;;;;;;;; mfcc [componentInstances:cComponentManager] instance[is13_melspecMfcc].type=cMelspec instance[is13_mfcc].type=cMfcc [is13_melspecMfcc:cMelspec] reader.dmLevel=is13_fftmagH25 writer.dmLevel=is13_melspecMfcc copyInputName = 1 processArrayFields = 1 ; htk compatible sample value scaling htkcompatible = 1 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = mel inverse = 0 [is13_mfcc:cMfcc] reader.dmLevel=is13_melspecMfcc writer.dmLevel=is13_mfcc1_12 copyInputName = 0 processArrayFields = 1 firstMfcc = 1 lastMfcc = 14 cepLifter = 22.0 htkcompatible = 1 ;;;;;;;;;;;;;;;; zcr [componentInstances:cComponentManager] instance[is13_mzcr].type=cMZcr [is13_mzcr:cMZcr] reader.dmLevel = is13_frame60 writer.dmLevel = is13_zcr copyInputName = 1 processArrayFields = 1 zcr = 1 mcr = 0 amax = 0 maxmin = 0 dc = 0 ;;;;;;;;;;;;;;;;;;;; smoothing [componentInstances:cComponentManager] instance[is13_smoNz].type=cContourSmoother instance[is13_smoA].type=cContourSmoother instance[is13_smoB].type=cContourSmoother instance[is13_f0sel].type=cDataSelector [is13_smoNz:cContourSmoother] reader.dmLevel = is13_pitchG60;is13_jitterShimmer writer.dmLevel = is13_lld_nzsmo \{\cm[bufferModeConf{shared/BufferMode.conf.inc}:path to included config to set the buffer mode for the levels before the functionals]} nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 1 [is13_f0sel:cDataSelector] reader.dmLevel = is13_lld_nzsmo writer.dmLevel = is13_lld_f0_nzsmo \{\cm[bufferModeConf]} nameAppend = ff0 selected = F0final_sma [is13_smoA:cContourSmoother] reader.dmLevel = is13_audspecSum;is13_audspecRastaSum;is13_energy;is13_zcr writer.dmLevel = is13_lldA_smo \{\cm[bufferModeConf]} nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 [is13_smoB:cContourSmoother] reader.dmLevel = is13_audspecRasta;is13_spectral;is13_mfcc1_12 writer.dmLevel = is13_lldB_smo \{\cm[bufferModeConf]} nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 ;;;;;;;;; deltas [componentInstances:cComponentManager] instance[is13_deNz].type=cDeltaRegression instance[is13_deA].type=cDeltaRegression instance[is13_deB].type=cDeltaRegression instance[is13_def0sel].type=cDeltaRegression [is13_deNz:cDeltaRegression] reader.dmLevel = is13_lld_nzsmo writer.dmLevel = is13_lld_nzsmo_de \{\cm[bufferModeConf]} onlyInSegments = 1 zeroSegBound = 1 [is13_deA:cDeltaRegression] reader.dmLevel = is13_lldA_smo writer.dmLevel = is13_lldA_smo_de \{\cm[bufferModeConf]} [is13_deB:cDeltaRegression] reader.dmLevel = is13_lldB_smo writer.dmLevel = is13_lldB_smo_de \{\cm[bufferModeConf]} [is13_def0sel:cDeltaRegression] reader.dmLevel = is13_lld_f0_nzsmo writer.dmLevel = is13_lld_f0_nzsmo_de \{\cm[bufferModeConf]} onlyInSegments = 1 zeroSegBound = 1 ================================================ FILE: config/MFCC12_0_D_A.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file to extract MFCC features < ////////////////// ///////// HTK target kind: MFCC_0_D_A, numCeps=12 ////////////////// ///////// ////////////////// ///////// (c) 2013-2016 audEERING. ////////////////// ///////// All rights reserverd. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory \{shared/standard_wave_input.conf.inc} [componentInstances:cComponentManager] ; audio framer instance[frame].type=cFramer ; speech pre-emphasis (on a per frame basis as HTK does it) instance[pe].type=cVectorPreemphasis ; apply a window function to pre-emphasised frames instance[win].type=cWindower ; transform to the frequency domain using FFT instance[fft].type=cTransformFFT ; compute magnitude of the complex fft from the previous component instance[fftmag].type=cFFTmagphase ; compute Mel-bands from magnitude spectrum instance[melspec].type=cMelspec ; compute MFCC from Mel-band spectrum instance[mfcc].type=cMfcc ; compute delta coefficients from mfcc and energy instance[delta].type=cDeltaRegression ; compute acceleration coefficients from delta coefficients of mfcc and energy instance[accel].type=cDeltaRegression ; run single threaded (nThreads=1) ; NOTE: a single thread is more efficient for processing small files, since multi-threaded processing involves more ; overhead during startup, which will make the system slower in the end nThreads=1 ; do not show any internal dataMemory level settings ; (if you want to see them set the value to 1, 2, 3, or 4, depending on the amount of detail you wish) printLevelStats=0 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// component configuration //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ; the following sections configure the components listed above ; a help on configuration parameters can be obtained with ; SMILExtract -H ; or ; SMILExtract -H configTypeName (= componentTypeName) ///////////////////////////////////////////////////////////////////////////////////////////// [frame:cFramer] reader.dmLevel=wave writer.dmLevel=frames noPostEOIprocessing = 1 copyInputName = 1 frameSize = 0.0250 frameStep = 0.010 frameMode = fixed frameCenterSpecial = left [pe:cVectorPreemphasis] reader.dmLevel=frames writer.dmLevel=framespe k = 0.97 de = 0 [win:cWindower] reader.dmLevel=framespe writer.dmLevel=winframes copyInputName = 1 processArrayFields = 1 ; hamming window winFunc = ham ; no gain, no offset gain = 1.0 offset = 0 [fft:cTransformFFT] reader.dmLevel=winframes writer.dmLevel=fft copyInputName = 1 processArrayFields = 1 inverse = 0 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmag:cFFTmagphase] reader.dmLevel=fft writer.dmLevel=fftmag copyInputName = 1 processArrayFields = 1 inverse = 0 magnitude = 1 phase = 0 [melspec:cMelspec] reader.dmLevel=fftmag writer.dmLevel=melspec copyInputName = 1 processArrayFields = 1 ; htk compatible sample value scaling htkcompatible = 1 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 0 hifreq = 8000 specScale = mel inverse = 0 [mfcc:cMfcc] reader.dmLevel=melspec writer.dmLevel=ft0 copyInputName = 1 processArrayFields = 1 firstMfcc = 0 lastMfcc = 12 cepLifter = 22.0 htkcompatible = 1 [delta:cDeltaRegression] reader.dmLevel=ft0 writer.dmLevel=ft0de nameAppend = de copyInputName = 1 noPostEOIprocessing = 0 deltawin=2 blocksize=1 [accel:cDeltaRegression] reader.dmLevel=ft0de writer.dmLevel=ft0dede nameAppend = de copyInputName = 1 noPostEOIprocessing = 0 deltawin=2 blocksize=1 ////////////////////////////////////////////////////////////////////// /////////////////// data output configuration ////////////////////// ////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[audspec_lldconcat].type=cVectorConcat [audspec_lldconcat:cVectorConcat] reader.dmLevel = ft0;ft0de;ft0dede writer.dmLevel = lld includeSingleElementFields = 1 \{shared/standard_data_output_lldonly.conf.inc} //////---------------------- END -------------------------/////// ================================================ FILE: config/MFCC12_0_D_A_Z.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file to extract MFCC features < ////////////////// ///////// HTK target kind: MFCC_0_D_A_Z, numCeps=12 ////////////////// ///////// ////////////////// ///////// * written 2009 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschränkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory ; wave file input instance[waveIn].type=cWaveSource ; audio framer instance[frame].type=cFramer ; speech pre-emphasis (on a per frame basis as HTK does it) instance[pe].type=cVectorPreemphasis ; apply a window function to pre-emphasised frames instance[win].type=cWindower ; transform to the frequency domain using FFT instance[fft].type=cTransformFFT ; compute magnitude of the complex fft from the previous component instance[fftmag].type=cFFTmagphase ; compute Mel-bands from magnitude spectrum instance[melspec].type=cMelspec ; compute MFCC from Mel-band spectrum instance[mfcc].type=cMfcc ; "cepstral" mean subtraction of mfcc, delta, and accel coefficients instance[cms].type=cFullinputMean ; delta and accel of MFCC instance[delta1].type=cDeltaRegression instance[delta2].type=cDeltaRegression ; write the result to an HTK parameter file instance[htkout].type=cHtkSink ; run single threaded (nThreads=1) ; NOTE: a single thread is more efficient for processing small files, since multi-threaded processing involves more ; overhead during startup, which will make the system slower in the end nThreads=1 ; do not show any internal dataMemory level settings ; (if you want to see them set the value to 1, 2, 3, or 4, depending on the amount of detail you wish) printLevelStats=0 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// component configuration //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ; the following sections configure the components listed above ; a help on configuration parameters can be obtained with ; SMILExtract -H ; or ; SMILExtract -H configTypeName (= componentTypeName) ///////////////////////////////////////////////////////////////////////////////////////////// [waveIn:cWaveSource] ; this sets the level this component writes to ; the level will be created by this component ; no other components may write to a level having the same name writer.dmLevel=wave ; this defines a new commandline option "-I" or "-inputfile", which can be used to specify ; the filename on the commandline instead of having it "hard-coded" in the config file filename=\cm[inputfile(I){test.wav}:name of input file] ; mix stereo files down to mono for analysis monoMixdown=1 [frame:cFramer] reader.dmLevel=wave writer.dmLevel=frames noPostEOIprocessing = 1 copyInputName = 1 frameSize = 0.0250 frameStep = 0.010 frameMode = fixed frameCenterSpecial = left [pe:cVectorPreemphasis] reader.dmLevel=frames writer.dmLevel=framespe k=0.97 de = 0 [win:cWindower] reader.dmLevel=framespe writer.dmLevel=winframes copyInputName = 1 processArrayFields = 1 ; hamming window winFunc = ham ; no gain gain = 1.0 offset = 0 [fft:cTransformFFT] reader.dmLevel=winframes writer.dmLevel=fft copyInputName = 1 processArrayFields = 1 inverse = 0 [fftmag:cFFTmagphase] reader.dmLevel=fft writer.dmLevel=fftmag copyInputName = 1 processArrayFields = 1 inverse = 0 magnitude = 1 phase = 0 [melspec:cMelspec] reader.dmLevel=fftmag writer.dmLevel=melspec copyInputName = 1 processArrayFields = 1 ; htk compatible sample value scaling htkcompatible = 1 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 0 lofreq = 0 hifreq = 8000 specScale = mel inverse = 0 [mfcc:cMfcc] reader.dmLevel=melspec writer.dmLevel=mfcc writer.levelconf.growDyn=1 writer.levelconf.isRb=0 buffersize=1000 copyInputName = 1 processArrayFields = 1 firstMfcc = 0 lastMfcc = 12 cepLifter = 22.0 htkcompatible = 1 [delta1:cDeltaRegression] reader.dmLevel=mfcc writer.dmLevel=mfccD writer.levelconf.growDyn=1 writer.levelconf.isRb=0 buffersize=1000 nameAppend = de copyInputName = 1 noPostEOIprocessing = 0 deltawin=2 blocksize=1 [delta2:cDeltaRegression] reader.dmLevel=mfccD writer.dmLevel=mfccA writer.levelconf.growDyn=1 writer.levelconf.isRb=0 buffersize=1000 nameAppend = de copyInputName = 1 noPostEOIprocessing = 0 deltawin=2 blocksize=1 [cms:cFullinputMean] reader.dmLevel=mfcc writer.dmLevel=mfccM ////////////////////////////////////////////////////////////////////// /////////////////// data output configuration ////////////////////// ////////////////////////////////////////////////////////////////////// ; the HTK sink writes data in HTK parameter format [htkout:cHtkSink] ; data from the following dataMemory levels in concattenated ; to form the output vectors reader.dmLevel=mfccM;mfccD;mfccA ; this again defines a commandline option for the output file (see waveIn) filename=\cm[output(O){mfcc.htk}:name of MFCC output filename (HTK format)] append=0 ; MFCC_0_D_A_Z = 6+256+512+2048+8192 = 2886 parmKind=11014 ================================================ FILE: config/MFCC12_E_D_A.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file to extract MFCC features < ////////////////// ///////// HTK target kind: MFCC_E_D_A, numCeps=12 ////////////////// ///////// ////////////////// ///////// * written 2009 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschrnkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory \{shared/standard_wave_input.conf.inc} [componentInstances:cComponentManager] ; audio framer instance[frame].type=cFramer ; speech pre-emphasis (on a per frame basis as HTK does it) instance[pe].type=cVectorPreemphasis ; apply a window function to pre-emphasised frames instance[win].type=cWindower ; transform to the frequency domain using FFT instance[fft].type=cTransformFFT ; compute magnitude of the complex fft from the previous component instance[fftmag].type=cFFTmagphase ; compute Mel-bands from magnitude spectrum instance[melspec].type=cMelspec ; compute MFCC from Mel-band spectrum instance[mfcc].type=cMfcc ; compute log-energy from raw signal frames ; (not windowed, not pre-emphasised: that's the way HTK does it) instance[energy].type=cEnergy ; concat mfcc and energy, so we can compute delta and acceleration ; coefficients of both features at the same tim instance[cat].type=cVectorConcat ; compute delta coefficients from mfcc and energy instance[delta].type=cDeltaRegression ; compute acceleration coefficients from delta coefficients of mfcc and energy instance[accel].type=cDeltaRegression ; run single threaded (nThreads=1) ; NOTE: a single thread is more efficient for processing small files, since multi-threaded processing involves more ; overhead during startup, which will make the system slower in the end nThreads=1 ; do not show any internal dataMemory level settings ; (if you want to see them set the value to 1, 2, 3, or 4, depending on the amount of detail you wish) printLevelStats=0 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// component configuration //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ; the following sections configure the components listed above ; a help on configuration parameters can be obtained with ; SMILExtract -H ; or ; SMILExtract -H configTypeName (= componentTypeName) ///////////////////////////////////////////////////////////////////////////////////////////// [frame:cFramer] reader.dmLevel=wave writer.dmLevel=frames noPostEOIprocessing = 1 copyInputName = 1 frameSize = 0.0250 frameStep = 0.010 frameMode = fixed frameCenterSpecial = left [pe:cVectorPreemphasis] reader.dmLevel=frames writer.dmLevel=framespe k = 0.97 de = 0 [win:cWindower] reader.dmLevel=framespe writer.dmLevel=winframes copyInputName = 1 processArrayFields = 1 ; hamming window winFunc = ham ; no gain, no offset gain = 1.0 offset = 0 [fft:cTransformFFT] reader.dmLevel=winframes writer.dmLevel=fft copyInputName = 1 processArrayFields = 1 inverse = 0 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmag:cFFTmagphase] reader.dmLevel=fft writer.dmLevel=fftmag copyInputName = 1 processArrayFields = 1 inverse = 0 magnitude = 1 phase = 0 [melspec:cMelspec] reader.dmLevel=fftmag writer.dmLevel=melspec copyInputName = 1 processArrayFields = 1 ; htk compatible sample value scaling htkcompatible = 1 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 0 hifreq = 8000 specScale = mel inverse = 0 [mfcc:cMfcc] reader.dmLevel=melspec writer.dmLevel=mfcc copyInputName = 1 processArrayFields = 1 firstMfcc = 1 lastMfcc = 12 cepLifter = 22.0 htkcompatible = 1 [energy:cEnergy] reader.dmLevel=frames writer.dmLevel=energy nameAppend = energy copyInputName = 1 processArrayFields = 0 htkcompatible=1 rms = 0 log = 1 [cat:cVectorConcat] reader.dmLevel=mfcc;energy writer.dmLevel=ft0 copyInputName = 1 processArrayFields = 0 [delta:cDeltaRegression] reader.dmLevel=ft0 writer.dmLevel=ft0de nameAppend = de copyInputName = 1 noPostEOIprocessing = 0 deltawin=2 blocksize=1 [accel:cDeltaRegression] reader.dmLevel=ft0de writer.dmLevel=ft0dede nameAppend = de copyInputName = 1 noPostEOIprocessing = 0 deltawin=2 blocksize=1 ////////////////////////////////////////////////////////////////////// /////////////////// data output configuration ////////////////////// ////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[audspec_lldconcat].type=cVectorConcat [audspec_lldconcat:cVectorConcat] reader.dmLevel = ft0;ft0de;ft0dede writer.dmLevel = lld includeSingleElementFields = 1 ; NOTE: this sets parmKind to USER (9), and not the correct MFCC value. \{shared/standard_data_output_lldonly.conf.inc} /* old HTK output with correct parmKind ; the HTK sink writes data in HTK parameter format [htkout:cHtkSink] ; data from the following dataMemory levels in concattenated reader.dmLevel=ft0;ft0de;ft0dede ; this again defines a commandline option for the output file (see waveIn) filename=\cm[output(O){mfcc.htk}:name of MFCC output filename (HTK format)] append = 0 ; MFCC_E_D_A 6+64+256+512 = 838 parmKind = 838 */ //////---------------------- END -------------------------/////// ================================================ FILE: config/MFCC12_E_D_A_Z.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file to extract MFCC features < ////////////////// ///////// HTK target kind: MFCC_E_D_A_Z, numCeps=12 ////////////////// ///////// ////////////////// ///////// * written 2009 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschrnkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory ; wave file input instance[waveIn].type=cWaveSource ; audio framer instance[frame].type=cFramer ; speech pre-emphasis (on a per frame basis as HTK does it) instance[pe].type=cVectorPreemphasis ; apply a window function to pre-emphasised frames instance[win].type=cWindower ; transform to the frequency domain using FFT instance[fft].type=cTransformFFT ; compute magnitude of the complex fft from the previous component instance[fftmag].type=cFFTmagphase ; compute Mel-bands from magnitude spectrum instance[melspec].type=cMelspec ; compute MFCC from Mel-band spectrum instance[mfcc].type=cMfcc ; compute log-energy from raw signal frames ; (not windowed, not pre-emphasised: that's the way HTK does it) instance[energy].type=cEnergy ; "cepstral" mean subtraction of mfcc, delta, and accel coefficients instance[cms].type=cFullinputMean ; delta and accel of MFCC instance[delta1].type=cDeltaRegression instance[delta2].type=cDeltaRegression ; delta and accel of the energy instance[delta1e].type=cDeltaRegression instance[delta2e].type=cDeltaRegression ; write the result to an HTK parameter file instance[htkout].type=cHtkSink ; run single threaded (nThreads=1) ; NOTE: a single thread is more efficient for processing small files, since multi-threaded processing involves more ; overhead during startup, which will make the system slower in the end nThreads=1 ; do not show any internal dataMemory level settings ; (if you want to see them set the value to 1, 2, 3, or 4, depending on the amount of detail you wish) printLevelStats=0 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// component configuration //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ; the following sections configure the components listed above ; a help on configuration parameters can be obtained with ; SMILExtract -H ; or ; SMILExtract -H configTypeName (= componentTypeName) ///////////////////////////////////////////////////////////////////////////////////////////// [waveIn:cWaveSource] ; this sets the level this component writes to ; the level will be created by this component ; no other components may write to a level having the same name writer.dmLevel=wave ; this defines a new commandline option "-I" or "-inputfile", which can be used to specify ; the filename on the commandline instead of having it "hard-coded" in the config file filename=\cm[inputfile(I){test.wav}:name of input file] ; mix stereo files down to mono for analysis monoMixdown=1 [frame:cFramer] reader.dmLevel=wave writer.dmLevel=frames noPostEOIprocessing = 1 copyInputName = 1 frameSize = 0.0250 frameStep = 0.010 frameMode = fixed frameCenterSpecial = left [pe:cVectorPreemphasis] reader.dmLevel=frames writer.dmLevel=framespe k=0.97 de = 0 [win:cWindower] reader.dmLevel=framespe writer.dmLevel=winframes copyInputName = 1 processArrayFields = 1 ; hamming window winFunc = ham ; no gain gain = 1.0 offset = 0 [fft:cTransformFFT] reader.dmLevel=winframes writer.dmLevel=fft copyInputName = 1 processArrayFields = 1 inverse = 0 [fftmag:cFFTmagphase] reader.dmLevel=fft writer.dmLevel=fftmag copyInputName = 1 processArrayFields = 1 inverse = 0 magnitude = 1 phase = 0 [melspec:cMelspec] reader.dmLevel=fftmag writer.dmLevel=melspec copyInputName = 1 processArrayFields = 1 ; htk compatible sample value scaling htkcompatible = 1 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 0 hifreq = 8000 specScale = mel inverse = 0 [mfcc:cMfcc] reader.dmLevel=melspec writer.dmLevel=mfcc writer.levelconf.growDyn=1 writer.levelconf.isRb=0 buffersize=1000 copyInputName = 1 processArrayFields = 1 firstMfcc = 1 lastMfcc = 12 cepLifter = 22.0 htkcompatible = 1 [delta1:cDeltaRegression] reader.dmLevel=mfcc writer.dmLevel=mfccD writer.levelconf.growDyn=1 writer.levelconf.isRb=0 buffersize=1000 nameAppend = de copyInputName = 1 noPostEOIprocessing = 0 deltawin=2 blocksize=1 [delta2:cDeltaRegression] reader.dmLevel=mfccD writer.dmLevel=mfccA writer.levelconf.growDyn=1 writer.levelconf.isRb=0 buffersize=1000 nameAppend = de copyInputName = 1 noPostEOIprocessing = 0 deltawin=2 blocksize=1 [cms:cFullinputMean] reader.dmLevel=mfcc writer.dmLevel=mfccM [energy:cEnergy] reader.dmLevel=frames writer.dmLevel=energy writer.levelconf.growDyn=1 writer.levelconf.isRb=0 buffersize=1000 copyInputName = 1 processArrayFields = 0 htkcompatible=1 rms = 0 log = 1 [delta1e:cDeltaRegression] reader.dmLevel=energy writer.dmLevel=energyD nameAppend = de copyInputName = 1 noPostEOIprocessing = 0 deltawin=2 blocksize=1 [delta2e:cDeltaRegression] reader.dmLevel=energyD writer.dmLevel=energyA nameAppend = de copyInputName = 1 noPostEOIprocessing = 0 deltawin=2 blocksize=1 ////////////////////////////////////////////////////////////////////// /////////////////// data output configuration ////////////////////// ////////////////////////////////////////////////////////////////////// ; the HTK sink writes data in HTK parameter format [htkout:cHtkSink] ; data from the following dataMemory levels in concattenated ; to form the output vectors reader.dmLevel=mfccM;energy;mfccD;energyD;mfccA;energyA ; this again defines a commandline option for the output file (see waveIn) filename=\cm[output(O){mfcc.htk}:name of MFCC output filename (HTK format)] append=0 ; MFCC_E_D_A_Z = 6+64+256+512+2048 = 2886 parmKind=2886 ================================================ FILE: config/PLP_0_D_A.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file to extract PLP features < ////////////////// ///////// HTK target kind: PLP_0_D_A, numCeps=5 ////////////////// ///////// ////////////////// ///////// * written 2010 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschränkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory \{shared/standard_wave_input.conf.inc} [componentInstances:cComponentManager] ; audio framer instance[frame].type=cFramer ; speech pre-emphasis (on a per frame basis as HTK does it) instance[pe].type=cVectorPreemphasis ; apply a window function to pre-emphasised frames instance[win].type=cWindower ; transform to the frequency domain using FFT instance[fft].type=cTransformFFT ; compute magnitude of the complex fft from the previous component instance[fftmag].type=cFFTmagphase ; compute critical-bands from magnitude spectrum instance[melspec].type=cMelspec ; compute PLP from critical-band spectrum instance[plp].type=cPlp ; compute delta coefficients from mfcc and energy instance[delta].type=cDeltaRegression ; compute acceleration coefficients from delta coefficients of mfcc and energy instance[accel].type=cDeltaRegression ; run single threaded (nThreads=1) ; NOTE: a single thread is more efficient for processing small files, since multi-threaded processing involves more ; overhead during startup, which will make the system slower in the end nThreads=1 ; do not show any internal dataMemory level settings ; (if you want to see them set the value to 1, 2, 3, or 4, depending on the amount of detail you wish) printLevelStats=0 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// component configuration //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ; the following sections configure the components listed above ; a help on configuration parameters can be obtained with ; SMILExtract -H ; or ; SMILExtract -H configTypeName (= componentTypeName) ///////////////////////////////////////////////////////////////////////////////////////////// [frame:cFramer] reader.dmLevel=wave writer.dmLevel=frames frameSize = 0.0250 frameStep = 0.010 frameMode = fixed frameCenterSpecial = left [pe:cVectorPreemphasis] reader.dmLevel=frames writer.dmLevel=framespe k=0.97 de=0 [win:cWindower] reader.dmLevel=framespe writer.dmLevel=winframes ; hamming window winFunc = ham ; no gain gain = 1.0 offset = 0 [fft:cTransformFFT] reader.dmLevel=winframes writer.dmLevel=fft ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmag:cFFTmagphase] reader.dmLevel=fft writer.dmLevel=fftmag [melspec:cMelspec] reader.dmLevel=fftmag writer.dmLevel=melspec ; htk compatible sample value scaling htkcompatible = 1 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 0 hifreq = 8000 specScale = mel [plp:cPlp] reader.dmLevel=melspec writer.dmLevel=plp firstCC = 0 ;lastCC = 12 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 1 doIDFT = 1 doLpToCeps = 1 doLP = 1 doInvLog = 0 doAud = 1 doLog = 0 [delta:cDeltaRegression] reader.dmLevel=plp writer.dmLevel=plpde deltawin=2 blocksize=1 [accel:cDeltaRegression] reader.dmLevel=plpde writer.dmLevel=plpdede deltawin=2 blocksize=1 ////////////////////////////////////////////////////////////////////// /////////////////// data output configuration ////////////////////// ////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[audspec_lldconcat].type=cVectorConcat [audspec_lldconcat:cVectorConcat] reader.dmLevel = plp;plpde;plpdede writer.dmLevel = lld includeSingleElementFields = 1 ; NOTE: this sets parmKind to USER (9), and not the correct PLP value. \{shared/standard_data_output_lldonly.conf.inc} /* old HTK output with correct parmKind ; the HTK sink writes data in HTK parameter format [htkout:cHtkSink] ; data from the following dataMemory levels in concattenated reader.dmLevel=plp;plpde;plpdede ; this again defines a commandline option for the output file (see waveIn) filename=\cm[output(O){mfcc.htk}:name of MFCC output filename (HTK format)] append=0 ; PLP_0_D_A = 11 + 256 + 512 + 8192 = 8971 parmKind=8971 */ //////---------------------- END -------------------------/////// ================================================ FILE: config/PLP_0_D_A_Z.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file to extract PLP features < ////////////////// ///////// HTK target kind: PLP_0_D_A_Z, numCeps=5 ////////////////// ///////// ////////////////// ///////// * written 2010 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschränkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory ; wave file input instance[waveIn].type=cWaveSource ; audio framer instance[frame].type=cFramer ; speech pre-emphasis (on a per frame basis as HTK does it) instance[pe].type=cVectorPreemphasis ; apply a window function to pre-emphasised frames instance[win].type=cWindower ; transform to the frequency domain using FFT instance[fft].type=cTransformFFT ; compute magnitude of the complex fft from the previous component instance[fftmag].type=cFFTmagphase ; compute critical-bands from magnitude spectrum instance[melspec].type=cMelspec ; compute PLP from critical-band spectrum instance[plp].type=cPlp instance[cms].type = cFullinputMean ; compute delta coefficients from mfcc and energy instance[delta].type=cDeltaRegression ; compute acceleration coefficients from delta coefficients of mfcc and energy instance[accel].type=cDeltaRegression ; write the result to an HTK parameter file instance[htkout].type=cHtkSink ; run single threaded (nThreads=1) ; NOTE: a single thread is more efficient for processing small files, since multi-threaded processing involves more ; overhead during startup, which will make the system slower in the end nThreads=1 ; do not show any internal dataMemory level settings ; (if you want to see them set the value to 1, 2, 3, or 4, depending on the amount of detail you wish) printLevelStats=0 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// component configuration //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ; the following sections configure the components listed above ; a help on configuration parameters can be obtained with ; SMILExtract -H ; or ; SMILExtract -H configTypeName (= componentTypeName) ///////////////////////////////////////////////////////////////////////////////////////////// [waveIn:cWaveSource] ; this sets the level this component writes to ; the level will be created by this component ; no other components may write to a level having the same name writer.dmLevel=wave ; this defines a new commandline option "-I" or "-inputfile", which can be used to specify ; the filename on the commandline instead of having it "hard-coded" in the config file filename=\cm[inputfile(I){test.wav}:name of input file] ; mix stereo files down to mono for analysis monoMixdown=1 [frame:cFramer] reader.dmLevel=wave writer.dmLevel=frames frameSize = 0.0250 frameStep = 0.010 frameMode = fixed frameCenterSpecial = left [pe:cVectorPreemphasis] reader.dmLevel=frames writer.dmLevel=framespe k=0.97 de=0 [win:cWindower] reader.dmLevel=framespe writer.dmLevel=winframes ; hamming window winFunc = ham ; no gain gain = 1.0 offset = 0 [fft:cTransformFFT] reader.dmLevel=winframes writer.dmLevel=fft [fftmag:cFFTmagphase] reader.dmLevel=fft writer.dmLevel=fftmag [melspec:cMelspec] reader.dmLevel=fftmag writer.dmLevel=melspec ; htk compatible sample value scaling htkcompatible = 1 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 0 hifreq = 8000 specScale = mel [plp:cPlp] reader.dmLevel=melspec writer.dmLevel=plp ; configure level to store full input (required for off-line CMS) writer.levelconf.growDyn=1 writer.levelconf.isRb=0 ; initial buffersize, will grow if needed: buffersize=1000 firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 1 doIDFT = 1 doLpToCeps = 1 doLP = 1 doInvLog = 0 doAud = 1 doLog = 0 [cms:cFullinputMean] reader.dmLevel=plp writer.dmLevel=plpM [delta:cDeltaRegression] reader.dmLevel=plp writer.dmLevel=plpde deltawin=2 blocksize=1 [accel:cDeltaRegression] reader.dmLevel=plpde writer.dmLevel=plpdede deltawin=2 blocksize=1 ////////////////////////////////////////////////////////////////////// /////////////////// data output configuration ////////////////////// ////////////////////////////////////////////////////////////////////// ; the HTK sink writes data in HTK parameter format [htkout:cHtkSink] ; data from the following dataMemory levels in concattenated reader.dmLevel=plpM;plpde;plpdede ; this again defines a commandline option for the output file (see waveIn) filename=\cm[output(O){mfcc.htk}:name of MFCC output filename (HTK format)] append=0 ; PLP_0_D_A_Z = 11 + 256 + 512 + 8192 + 2048 = 11019 parmKind=11019 //////---------------------- END -------------------------/////// ================================================ FILE: config/PLP_E_D_A.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file to extract PLP features < ////////////////// ///////// HTK target kind: PLP_E_D_A, numCeps=5 ////////////////// ///////// ////////////////// ///////// * written 2010 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschränkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory \{shared/standard_wave_input.conf.inc} [componentInstances:cComponentManager] ; audio framer instance[frame].type=cFramer ; speech pre-emphasis (on a per frame basis as HTK does it) instance[pe].type=cVectorPreemphasis ; apply a window function to pre-emphasised frames instance[win].type=cWindower ; transform to the frequency domain using FFT instance[fft].type=cTransformFFT ; compute magnitude of the complex fft from the previous component instance[fftmag].type=cFFTmagphase ; compute critical-bands from magnitude spectrum instance[melspec].type=cMelspec ; compute PLP from critical-band spectrum instance[plp].type=cPlp ; compute log-energy from raw signal frames ; (not windowed, not pre-emphasised: that's the way HTK does it) instance[energy].type=cEnergy ; concat mfcc and energy, so we can compute delta and acceleration ; coefficients of both features at the same tim instance[cat].type=cVectorConcat ; compute delta coefficients from mfcc and energy instance[delta].type=cDeltaRegression ; compute acceleration coefficients from delta coefficients of mfcc and energy instance[accel].type=cDeltaRegression ; run single threaded (nThreads=1) ; NOTE: a single thread is more efficient for processing small files, since multi-threaded processing involves more ; overhead during startup, which will make the system slower in the end nThreads=1 ; do not show any internal dataMemory level settings ; (if you want to see them set the value to 1, 2, 3, or 4, depending on the amount of detail you wish) printLevelStats=0 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// component configuration //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ; the following sections configure the components listed above ; a help on configuration parameters can be obtained with ; SMILExtract -H ; or ; SMILExtract -H configTypeName (= componentTypeName) ///////////////////////////////////////////////////////////////////////////////////////////// [frame:cFramer] reader.dmLevel=wave writer.dmLevel=frames frameSize = 0.0250 frameStep = 0.010 frameMode = fixed frameCenterSpecial = left [pe:cVectorPreemphasis] reader.dmLevel=frames writer.dmLevel=framespe k=0.97 de=0 [win:cWindower] reader.dmLevel=framespe writer.dmLevel=winframes ; hamming window winFunc = ham ; no gain gain = 1.0 offset = 0 [fft:cTransformFFT] reader.dmLevel=winframes writer.dmLevel=fft ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmag:cFFTmagphase] reader.dmLevel=fft writer.dmLevel=fftmag [melspec:cMelspec] reader.dmLevel=fftmag writer.dmLevel=melspec ; htk compatible sample value scaling htkcompatible = 1 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 0 hifreq = 8000 specScale = mel [plp:cPlp] reader.dmLevel=melspec writer.dmLevel=plp firstCC = 1 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 1 doIDFT = 1 doLpToCeps = 1 doLP = 1 doInvLog = 0 doAud = 1 doLog = 0 [energy:cEnergy] reader.dmLevel=frames writer.dmLevel=energy htkcompatible=1 rms = 0 log = 1 [cat:cVectorConcat] reader.dmLevel=plp;energy writer.dmLevel=ft0 processArrayFields=0 [delta:cDeltaRegression] reader.dmLevel=ft0 writer.dmLevel=ft0de deltawin=2 blocksize=1 [accel:cDeltaRegression] reader.dmLevel=ft0de writer.dmLevel=ft0dede deltawin=2 blocksize=1 ////////////////////////////////////////////////////////////////////// /////////////////// data output configuration ////////////////////// ////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[audspec_lldconcat].type=cVectorConcat [audspec_lldconcat:cVectorConcat] reader.dmLevel = ft0;ft0de;ft0dede writer.dmLevel = lld includeSingleElementFields = 1 ; NOTE: this sets parmKind to USER (9), and not the correct PLP value. \{shared/standard_data_output_lldonly.conf.inc} /* old HTK output with correct parmKind [htkout:cHtkSink] ; data from the following dataMemory levels in concattenated reader.dmLevel=ft0;ft0de;ft0dede ; this again defines a commandline option for the output file (see waveIn) filename=\cm[output(O){mfcc.htk}:name of MFCC output filename (HTK format)] append=0 ; PLP_0_D_A = 11 + 256 + 512 + 8192 = 8971 parmKind=8971 */ //////---------------------- END -------------------------/////// ================================================ FILE: config/PLP_E_D_A_Z.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file to extract PLP features < ////////////////// ///////// HTK target kind: PLP_E_D_A_Z, numCeps=5 ////////////////// ///////// ////////////////// ///////// * written 2010 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschränkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory ; wave file input instance[waveIn].type=cWaveSource ; audio framer instance[frame].type=cFramer ; speech pre-emphasis (on a per frame basis as HTK does it) instance[pe].type=cVectorPreemphasis ; apply a window function to pre-emphasised frames instance[win].type=cWindower ; transform to the frequency domain using FFT instance[fft].type=cTransformFFT ; compute magnitude of the complex fft from the previous component instance[fftmag].type=cFFTmagphase ; compute critical-bands from magnitude spectrum instance[melspec].type=cMelspec ; compute PLP from critical-band spectrum instance[plp].type=cPlp instance[cms].type=cFullinputMean ; compute log-energy from raw signal frames ; (not windowed, not pre-emphasised: that's the way HTK does it) instance[energy].type=cEnergy ; concat mfcc and energy, so we can compute delta and acceleration ; coefficients of both features at the same tim instance[cat].type=cVectorConcat ; compute delta coefficients from mfcc and energy instance[delta].type=cDeltaRegression ; compute acceleration coefficients from delta coefficients of mfcc and energy instance[accel].type=cDeltaRegression ; write the result to an HTK parameter file instance[htkout].type=cHtkSink ; run single threaded (nThreads=1) ; NOTE: a single thread is more efficient for processing small files, since multi-threaded processing involves more ; overhead during startup, which will make the system slower in the end nThreads=1 ; do not show any internal dataMemory level settings ; (if you want to see them set the value to 1, 2, 3, or 4, depending on the amount of detail you wish) printLevelStats=0 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// component configuration //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ; the following sections configure the components listed above ; a help on configuration parameters can be obtained with ; SMILExtract -H ; or ; SMILExtract -H configTypeName (= componentTypeName) ///////////////////////////////////////////////////////////////////////////////////////////// [waveIn:cWaveSource] ; this sets the level this component writes to ; the level will be created by this component ; no other components may write to a level having the same name writer.dmLevel=wave ; this defines a new commandline option "-I" or "-inputfile", which can be used to specify ; the filename on the commandline instead of having it "hard-coded" in the config file filename=\cm[inputfile(I){test.wav}:name of input file] ; mix stereo files down to mono for analysis monoMixdown=1 [frame:cFramer] reader.dmLevel=wave writer.dmLevel=frames frameSize = 0.0250 frameStep = 0.010 frameMode = fixed frameCenterSpecial = left [pe:cVectorPreemphasis] reader.dmLevel=frames writer.dmLevel=framespe k=0.97 de=0 [win:cWindower] reader.dmLevel=framespe writer.dmLevel=winframes ; hamming window winFunc = ham ; no gain gain = 1.0 offset = 0 [fft:cTransformFFT] reader.dmLevel=winframes writer.dmLevel=fft [fftmag:cFFTmagphase] reader.dmLevel=fft writer.dmLevel=fftmag [melspec:cMelspec] reader.dmLevel=fftmag writer.dmLevel=melspec ; htk compatible sample value scaling htkcompatible = 1 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 0 hifreq = 8000 specScale = mel [plp:cPlp] reader.dmLevel=melspec writer.dmLevel=plp writer.levelconf.growDyn=1 writer.levelconf.isRb=0 buffersize=1000 firstCC = 1 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 1 doIDFT = 1 doLpToCeps = 1 doLP = 1 doInvLog = 0 doAud = 1 doLog = 0 [cms:cFullinputMean] reader.dmLevel=plp writer.dmLevel=plpM [energy:cEnergy] reader.dmLevel=frames writer.dmLevel=energy writer.levelconf.growDyn=1 writer.levelconf.isRb=0 buffersize=1000 htkcompatible=1 rms = 0 log = 1 [cat:cVectorConcat] reader.dmLevel=plp;energy writer.dmLevel=ft0 processArrayFields=0 [delta:cDeltaRegression] reader.dmLevel=ft0 writer.dmLevel=ft0de deltawin=2 blocksize=1 [accel:cDeltaRegression] reader.dmLevel=ft0de writer.dmLevel=ft0dede deltawin=2 blocksize=1 ////////////////////////////////////////////////////////////////////// /////////////////// data output configuration ////////////////////// ////////////////////////////////////////////////////////////////////// ; the HTK sink writes data in HTK parameter format [htkout:cHtkSink] ; data from the following dataMemory levels in concattenated reader.dmLevel=plpM;energy;ft0de;ft0dede ; this again defines a commandline option for the output file (see waveIn) filename=\cm[output(O){mfcc.htk}:name of MFCC output filename (HTK format)] append=0 ; PLP_0_D_A = 11 + 256 + 512 + 8192 = 8971 parmKind=8971 //////---------------------- END -------------------------/////// ================================================ FILE: config/arff_targets.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// openSMILE arff targets generic config file ////////////////// ///////// (c) audEERING UG (haftungsbeschränkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // IMPORTANT: This file is obsoleted by arff_targets.conf.inc !! // It contains old examples, but should only be used as reference // // configuration of commandline options for target classes in an ARFF file // (cArffSink) // // this is an example of a numeric class attribute // you specify the numeric class label on the command-line by: // -label1 1.2345 // if you do not have labels, you can omit the -label1 option // the default value "0.0" will be assigned to all instances class[0].name = class class[0].type = numeric target[0].all = \cm[class{0.0}:instance numeric class label] // this is an example of a nominal class attribute // you specify the class label on the command-line by: // -label1 class1 // if you do not have labels, you can omit the -label2 option // the default value "0.0" will be assigned to all instances. // NOTE: if you are using only a nominal class label (i.e. no // numeric class attribute), change class[1] to class[0], etc. /* class[1].name = class class[1].type = {class1,class2,class3,unknown} target[1].all = \cm[label2{unknown}:instance nominal class label] */ // This is an example of adding a string, e.g. lyrics or transcribed spoken text // Use on the command-line as: // -words "this is a sentence..." // OR: -w "this is a sentence..." /* class[2].name = words class[2].type = string target[2].all = \cm[words(w){empty}:transcribed text] */ ================================================ FILE: config/audiovisual/arff_targets_age.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// audio+video features for multi-modal speaker trait recog. ///////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschränkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // // configuration of commandline options for target classes in an ARFF file // (cArffSink) // // // Working example: Feature extraction for estimating // age, gender and ethnicity from web-videos // class[0].name = age class[0].type = {adult, young} target[0].all = \cm[age(a){?}:age of speaker (young/adult)] class[1].name = gender class[1].type = {f, m} target[1].all = \cm[gender(g){?}:gender of speaker (m/f)] class[2].name = ethnicity class[2].type = {black_asian, white} target[2].all = \cm[ethnicity(e){?}:ethnicity of speaker (white/black_asian)] ================================================ FILE: config/audiovisual/audio.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// audio features for multi-modal speaker trait detection ///////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschränkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;===== component manager configuration (= list of enabled components!) ===== [componentInstances:cComponentManager] // this line configures the default data memory: instance[dataMemory].type = cDataMemory // AUDIO instance[waveIn].type=cWaveSource ;;; 40 ms frames features: instance[fr40].type=cFramer instance[w40].type=cWindower instance[fft40].type=cTransformFFT instance[fftmagphase40].type=cFFTmagphase ; SHS Pitch: instance[scale].type=cSpecScale instance[pitchShs].type=cPitchShs instance[pitchSmooth].type=cPitchSmoother instance[pitchJitter].type=cPitchJitter instance[pitchSmooth2].type=cPitchSmoother instance[res].type=cSpecResample ;;; 25 ms frames features: instance[fr25].type=cFramer instance[pe].type=cVectorPreemphasis instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmagphase].type=cFFTmagphase ; mfcc instance[mspec].type=cMelspec instance[mfcc].type=cMfcc ; log mel frequency bands (mfb) instance[mspec2].type=cMelspec instance[vo].type=cVectorOperation instance[lpc].type=cLpc ; Line Spectral Frequencies instance[lsp].type=cLsp ; Loudness (narrow-band approximation) instance[intens].type=cIntensity ;;; all LLD concattenated and smoothed using a moving average filter instance[lld].type=cContourSmoother instance[lld2].type=cContourSmoother ; delta coefficients of LLD instance[delta1].type=cDeltaRegression instance[delta2].type=cDeltaRegression ;;; functionals over FULL input (e.g. turns) instance[functL1].type=cFunctionals instance[functL1nz].type=cFunctionals ;;; write/append ONE instance to a Weka ARFF file instance[arffsink].type=cArffSink // Here you can control the amount of detail displayed for the data memory // level configuration. 0 is no information at all, 5 is maximum detail. printLevelStats = 6 // You can set the number of parallel threads (experimental): nThreads = 1 // ============= component configuration sections begin here ============== // AUDIO PART [waveIn:cWaveSource] ; this sets the level this component writes to ; the level will be created by this component ; no other components may write to a level having the same name writer.dmLevel=wave ; this defines a new commandline option "-I" or "-inputfile", which can be used to specify ; the filename on the commandline instead of having it "hard-coded" in the config file filename=\cm[inputfile(A){test.wav}:name of input file] ; mix stereo files down to mono for analysis monoMixdown=1 [fr40:cFramer] reader.dmLevel=wave writer.dmLevel=frames40 frameSize = 0.060 frameStep = 0.010 frameCenterSpecial = left [w40:cWindower] reader.dmLevel=frames40 writer.dmLevel=win40frame winFunc = gauss sigma=0.25 gain = 1.0 [fft40:cTransformFFT] reader.dmLevel=win40frame writer.dmLevel=fftc40 [fftmagphase40:cFFTmagphase] reader.dmLevel=fftc40 writer.dmLevel=fftmag40 [scale:cSpecScale] reader.dmLevel=fftmag40 writer.dmLevel=hps scale=log ; octave scale logScaleBase=2 [pitchShs:cPitchShs] reader.dmLevel=hps writer.dmLevel=pitchShs F0raw = 0 voicingClip = 0 voicingC1=0 scores=1 voicing=1 nCandidates=3 octaveCorrection=0 [pitchSmooth:cPitchSmoother] reader.dmLevel=pitchShs writer.dmLevel=pitch F0raw = 0 F0final = 0 F0finalEnv = 1 voicingFinalUnclipped = 1 medianFilter0 = 0 postSmoothingMethod = simple ;simple octaveCorrection = 0 writer.levelconf.nT=10 ;writer.levelconf.noHang=2 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 [csvsink:cCsvSink] reader.dmLevel=pitch;pitchA filename=pitchdbg.csv [pitchSmooth2:cPitchSmoother] reader.dmLevel=pitchShs writer.dmLevel=pitchF F0raw = 0 F0final = 1 F0finalEnv = 0 voicingFinalUnclipped = 0 medianFilter0 = 0 postSmoothingMethod = simple octaveCorrection = 0 writer.levelconf.nT=10 ;writer.levelconf.noHang=2 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ;;;; default (template) configuration section for component 'cPitchJitter' ;;;; [pitchJitter:cPitchJitter] reader.dmLevel = wave writer.dmLevel = jitter // nameAppend = copyInputName = 1 F0reader.dmLevel = pitchF F0field = F0final searchRangeRel = 0.250000 jitterLocal = 1 jitterDDP = 1 jitterLocalEnv = 0 jitterDDPEnv = 0 shimmerLocal = 1 shimmerLocalEnv = 0 onlyVoiced = 0 ;periodLengths = 0 ;periodStarts = 0 [fr25:cFramer] reader.dmLevel=wave writer.dmLevel=frames frameSize = 0.025 frameStep = 0.010 frameCenterSpecial = left [pe:cVectorPreemphasis] reader.dmLevel=frames writer.dmLevel=framespe k=0.97 [win:cWindower] reader.dmLevel=framespe writer.dmLevel=winframe winFunc = ham gain = 1.0 [fft:cTransformFFT] reader.dmLevel=winframe writer.dmLevel=fftc [fftmagphase:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag [mspec:cMelspec] reader.dmLevel=fftmag writer.dmLevel=mspec1 htkcompatible = 0 usePower = 1 lofreq = 20 hifreq = 8000 nBands=26 [mfcc:cMfcc] reader.dmLevel = mspec1 writer.dmLevel = mfcc htkcompatible = 0 firstMfcc=0 lastMfcc=14 cepLifter=22 [mspec2:cMelspec] reader.dmLevel=fftmag writer.dmLevel=mspec2 htkcompatible = 0 usePower = 1 lofreq = 20 hifreq = 6500 nBands=8 [vo:cVectorOperation] reader.dmLevel=mspec2 writer.dmLevel=mspec2log operation = log copyInputName = 0 nameAppend=logMelFreqBand [res:cSpecResample] reader.dmLevel=fftc writer.dmLevel=outpR targetFs = 11000 [lpc:cLpc] ;reader.dmLevel=framespe reader.dmLevel=outpR writer.dmLevel=lpc p=8 method = acf saveLPCoeff = 1 lpGain = 0 saveRefCoeff = 0 residual = 0 forwardFilter = 0 lpSpectrum = 0 [lsp:cLsp] reader.dmLevel=lpc writer.dmLevel=lsp [intens:cIntensity] reader.dmLevel=frames writer.dmLevel=intens intensity=0 loudness=1 [mzcr:cMZcr] reader.dmLevel=frames writer.dmLevel=mzcr zcr=1 amax=0 mcr=0 maxmin=0 dc=0 [lld:cContourSmoother] reader.dmLevel=intens;mfcc;mspec2log;lsp;pitch writer.dmLevel=lld buffersize=1000 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 smaWin = 3 ; this level must grow to hold ALL the LLD of the full input // ---- delta regression of LLD ---- [delta1:cDeltaRegression] reader.dmLevel=lld writer.dmLevel=lld_de buffersize=1000 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 deltawin=2 blocksize=1 [lld2:cContourSmoother] reader.dmLevel=pitchF;jitter writer.dmLevel=lld2 buffersize=1000 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ; this level must grow to hold ALL the LLD of the full input // ---- delta regression of LLD ---- [delta2:cDeltaRegression] reader.dmLevel=lld2 writer.dmLevel=lld2_de buffersize=1000 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 deltawin=2 blocksize=1 // statistical functionals [functL1:cFunctionals] reader.dmLevel=lld;lld_de writer.dmLevel=func ; frameSize and frameStep = 0 => functionals over complete input ; (NOTE: buffersize of lld and lld_de levels must be large enough!!) frameMode = fixed frameSizeFrames = 500 ; was 25 frameStepFrames = 200 ; was 10 frameCenterSpecial = left functionalsEnabled=Extremes;Regression;Moments;Percentiles;Times Extremes.max = 0 Extremes.min = 0 Extremes.range = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.amean = 1 Extremes.maxameandist=0 Extremes.minameandist=0 Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 1 Regression.linregerrQ = 1 Regression.qregc1 = 0 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 0 Regression.centroid = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.quartile1 = 0 Percentiles.quartile2 = 0 Percentiles.quartile3 = 0 Percentiles.iqr = 1 Percentiles.iqr12 = 0 Percentiles.iqr23 = 0 Percentiles.iqr13 = 0 Percentiles.interp = 1 Percentiles.percentile = 0.01;0.99 Percentiles.pctlrange=0-1 Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 1 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.norm = turn // statistical functionals [functL1nz:cFunctionals] reader.dmLevel=lld2;lld2_de writer.dmLevel=funcNz ; frameSize and frameStep = 0 => functionals over complete input ; (NOTE: buffersize of lld and lld_de levels must be large enough!!) frameMode = fixed frameSizeFrames = 500 frameStepFrames = 200 frameCenterSpecial = left functionalsEnabled=Extremes;Regression;Moments;Percentiles;Times Extremes.max = 0 Extremes.min = 0 Extremes.range = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.amean = 1 Extremes.maxameandist=0 Extremes.minameandist=0 Extremes.norm = frame Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 1 Regression.linregerrQ = 1 Regression.qregc1 = 0 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 0 Regression.centroid = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.quartile1 = 0 Percentiles.quartile2 = 0 Percentiles.quartile3 = 0 Percentiles.iqr = 1 Percentiles.iqr12 = 0 Percentiles.iqr23 = 0 Percentiles.iqr13 = 0 Percentiles.interp = 1 Percentiles.percentile = 0.99 ;Percentiles.pctlrange=0-1 Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 1 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.norm = turn nonZeroFuncts=1 [arffsink:cArffSink] reader.dmLevel=func;funcNz ; do not print "frameNumber" attribute to ARFF file frameIndex=1 frameTime=0 ; name of output file as commandline option filename=\cm[arffout(P){output.arff}:name of WEKA Arff output file] ; name of @relation in the ARFF file relation=\cm[corpus{Audio}:corpus name, arff relation] ; name of the current instance (usually file name of input wave file) instanceName=\cm[instname(N){noname}:name of arff instance] \{arff_targets_age.conf} ; append to an existing file, so multiple calls of SMILExtract on different ; input files append to the same output ARFF file append=1 // ################### END OF openSMILE CONFIG FILE ###################### ================================================ FILE: config/audiovisual/audiovideo.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// audio+video features for multi-modal speaker trait recog. ///////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschränkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;===== component manager configuration (= list of enabled components!) ===== [componentInstances:cComponentManager] // this line configures the default data memory: instance[dataMemory].type = cDataMemory // VIDEO instance[openCVSource].type = cOpenCVSource instance[mean].type=cFunctionals instance[arffOutput].type=cArffSink // AUDIO instance[waveIn].type=cWaveSource ;;; 40 ms frames features: instance[fr40].type=cFramer instance[w40].type=cWindower instance[fft40].type=cTransformFFT instance[fftmagphase40].type=cFFTmagphase ; SHS Pitch: instance[scale].type=cSpecScale instance[pitchShs].type=cPitchShs instance[pitchSmooth].type=cPitchSmoother instance[pitchJitter].type=cPitchJitter instance[pitchSmooth2].type=cPitchSmoother instance[res].type=cSpecResample ;;; 25 ms frames features: instance[fr25].type=cFramer instance[pe].type=cVectorPreemphasis instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmagphase].type=cFFTmagphase ; mfcc instance[mspec].type=cMelspec instance[mfcc].type=cMfcc ; log mel frequency bands (mfb) instance[mspec2].type=cMelspec instance[vo].type=cVectorOperation instance[lpc].type=cLpc ; Line Spectral Frequencies instance[lsp].type=cLsp ; Loudness (narrow-band approximation) instance[intens].type=cIntensity ;;; all LLD concattenated and smoothed using a moving average filter instance[lld].type=cContourSmoother instance[lld2].type=cContourSmoother ; delta coefficients of LLD instance[delta1].type=cDeltaRegression instance[delta2].type=cDeltaRegression ;;; functionals over FULL input (e.g. turns) instance[functL1].type=cFunctionals instance[functL1nz].type=cFunctionals ;;; write/append ONE instance to a Weka ARFF file instance[arffsink].type=cArffSink // Here you can control the amount of detail displayed for the data memory // level configuration. 0 is no information at all, 5 is maximum detail. printLevelStats = 6 // You can set the number of parallel threads (experimental): nThreads = 1 // ============= component configuration sections begin here ============== [openCVSource:cOpenCVSource] writer.dmLevel = videofeatures display = 1 videoSource = FILE filename = \cm[videofile(V){test.avi}:name of input file] face_cascade_path = /home/iaa2/workstud/grf/OpenCV/OpenCV-2.3.1/inst/share/OpenCV/lbpcascades/lbpcascade_frontalface.xml eyes_cascade_path = /home/iaa2/workstud/grf/OpenCV/OpenCV-2.3.1/inst/share/OpenCV/haarcascades/haarcascade_eye_tree_eyeglasses.xml extract_face = 1 extract_hsv_histogram = 0 extract_hsv_histogram = 1 extract_optical_flow = 0 include_face_features = 0 ignore_invalid_frames = 1 face_width = 60 lbp_uniformpatterns = 0 hsv_histogram_h_bins = 30 hsv_histogram_s_bins = 30 hsv_histogram_v_bins = 20 normalize_histograms = 1 of_histogram_bins = 20 of_histogram_max_flow = 0.2 of_histogram_downsample = 0.3 [mean:cFunctionals] reader.dmLevel = videofeatures writer.dmLevel = videomean copyInputName = 1 frameMode = fixed frameSizeFrames = 150 frameStepFrames = 60 frameCenterSpecial = left functionalsEnabled = Means Means.amean = 1 Means.posamean = 0 Means.absmean = 0 Means.rqmean = 0 Means.flatness = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames nonZeroFuncts = 1 [arffOutput:cArffSink] reader.dmLevel= videomean number=0 timestamp=0 filename=\cm[arffout(O){output_video.arff}:name of WEKA Arff output file] relation=\cm[corpus{Video}:corpus name, arff relation] instanceName=\cm[instname(N){lbp}:name of arff instance] ;\{arff_targets_age.conf} append=1 // AUDIO PART [waveIn:cWaveSource] ; this sets the level this component writes to ; the level will be created by this component ; no other components may write to a level having the same name writer.dmLevel=wave ; this defines a new commandline option "-I" or "-inputfile", which can be used to specify ; the filename on the commandline instead of having it "hard-coded" in the config file filename=\cm[audiofile(A){test.wav}:name of input file] ; mix stereo files down to mono for analysis monoMixdown=1 [fr40:cFramer] reader.dmLevel=wave writer.dmLevel=frames40 frameSize = 0.060 frameStep = 0.010 frameCenterSpecial = left [w40:cWindower] reader.dmLevel=frames40 writer.dmLevel=win40frame winFunc = gauss sigma=0.25 gain = 1.0 [fft40:cTransformFFT] reader.dmLevel=win40frame writer.dmLevel=fftc40 [fftmagphase40:cFFTmagphase] reader.dmLevel=fftc40 writer.dmLevel=fftmag40 [scale:cSpecScale] reader.dmLevel=fftmag40 writer.dmLevel=hps scale=log ; octave scale logScaleBase=2 [pitchShs:cPitchShs] reader.dmLevel=hps writer.dmLevel=pitchShs F0raw = 0 voicingClip = 0 voicingC1=0 scores=1 voicing=1 nCandidates=3 octaveCorrection=0 [pitchSmooth:cPitchSmoother] reader.dmLevel=pitchShs writer.dmLevel=pitch F0raw = 0 F0final = 0 F0finalEnv = 1 voicingFinalUnclipped = 1 medianFilter0 = 0 postSmoothingMethod = simple ;simple octaveCorrection = 0 writer.levelconf.nT=10 ;writer.levelconf.noHang=2 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 [csvsink:cCsvSink] reader.dmLevel=pitch;pitchA filename=pitchdbg.csv [pitchSmooth2:cPitchSmoother] reader.dmLevel=pitchShs writer.dmLevel=pitchF F0raw = 0 F0final = 1 F0finalEnv = 0 voicingFinalUnclipped = 0 medianFilter0 = 0 postSmoothingMethod = simple octaveCorrection = 0 writer.levelconf.nT=10 ;writer.levelconf.noHang=2 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ;;;; default (template) configuration section for component 'cPitchJitter' ;;;; [pitchJitter:cPitchJitter] reader.dmLevel = wave writer.dmLevel = jitter // nameAppend = copyInputName = 1 F0reader.dmLevel = pitchF F0field = F0final searchRangeRel = 0.250000 jitterLocal = 1 jitterDDP = 1 jitterLocalEnv = 0 jitterDDPEnv = 0 shimmerLocal = 1 shimmerLocalEnv = 0 onlyVoiced = 0 ;periodLengths = 0 ;periodStarts = 0 [fr25:cFramer] reader.dmLevel=wave writer.dmLevel=frames frameSize = 0.025 frameStep = 0.010 frameCenterSpecial = left [pe:cVectorPreemphasis] reader.dmLevel=frames writer.dmLevel=framespe k=0.97 [win:cWindower] reader.dmLevel=framespe writer.dmLevel=winframe winFunc = ham gain = 1.0 [fft:cTransformFFT] reader.dmLevel=winframe writer.dmLevel=fftc [fftmagphase:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag [mspec:cMelspec] reader.dmLevel=fftmag writer.dmLevel=mspec1 htkcompatible = 0 usePower = 1 lofreq = 20 hifreq = 8000 nBands=26 [mfcc:cMfcc] reader.dmLevel = mspec1 writer.dmLevel = mfcc htkcompatible = 0 firstMfcc=0 lastMfcc=14 cepLifter=22 [mspec2:cMelspec] reader.dmLevel=fftmag writer.dmLevel=mspec2 htkcompatible = 0 usePower = 1 lofreq = 20 hifreq = 6500 nBands=8 [vo:cVectorOperation] reader.dmLevel=mspec2 writer.dmLevel=mspec2log operation = log copyInputName = 0 nameAppend=logMelFreqBand [res:cSpecResample] reader.dmLevel=fftc writer.dmLevel=outpR targetFs = 11000 [lpc:cLpc] ;reader.dmLevel=framespe reader.dmLevel=outpR writer.dmLevel=lpc p=8 method = acf saveLPCoeff = 1 lpGain = 0 saveRefCoeff = 0 residual = 0 forwardFilter = 0 lpSpectrum = 0 [lsp:cLsp] reader.dmLevel=lpc writer.dmLevel=lsp [intens:cIntensity] reader.dmLevel=frames writer.dmLevel=intens intensity=0 loudness=1 [mzcr:cMZcr] reader.dmLevel=frames writer.dmLevel=mzcr zcr=1 amax=0 mcr=0 maxmin=0 dc=0 [lld:cContourSmoother] reader.dmLevel=intens;mfcc;mspec2log;lsp;pitch writer.dmLevel=lld buffersize=1000 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 smaWin = 3 ; this level must grow to hold ALL the LLD of the full input // ---- delta regression of LLD ---- [delta1:cDeltaRegression] reader.dmLevel=lld writer.dmLevel=lld_de buffersize=1000 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 deltawin=2 blocksize=1 [lld2:cContourSmoother] reader.dmLevel=pitchF;jitter writer.dmLevel=lld2 buffersize=1000 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ; this level must grow to hold ALL the LLD of the full input // ---- delta regression of LLD ---- [delta2:cDeltaRegression] reader.dmLevel=lld2 writer.dmLevel=lld2_de buffersize=1000 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 deltawin=2 blocksize=1 // statistical functionals [functL1:cFunctionals] reader.dmLevel=lld;lld_de writer.dmLevel=func ; frameSize and frameStep = 0 => functionals over complete input ; (NOTE: buffersize of lld and lld_de levels must be large enough!!) frameMode = fixed frameSizeFrames = 500 frameStepFrames = 200 frameCenterSpecial = left functionalsEnabled=Extremes;Regression;Moments;Percentiles;Times Extremes.max = 0 Extremes.min = 0 Extremes.range = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.amean = 1 Extremes.maxameandist=0 Extremes.minameandist=0 Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 1 Regression.linregerrQ = 1 Regression.qregc1 = 0 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 0 Regression.centroid = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.quartile1 = 0 Percentiles.quartile2 = 0 Percentiles.quartile3 = 0 Percentiles.iqr = 1 Percentiles.iqr12 = 0 Percentiles.iqr23 = 0 Percentiles.iqr13 = 0 Percentiles.interp = 1 Percentiles.percentile = 0.01;0.99 Percentiles.pctlrange=0-1 Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 1 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.norm = turn // statistical functionals [functL1nz:cFunctionals] reader.dmLevel=lld2;lld2_de writer.dmLevel=funcNz ; frameSize and frameStep = 0 => functionals over complete input ; (NOTE: buffersize of lld and lld_de levels must be large enough!!) frameMode = fixed frameSizeFrames = 500 frameStepFrames = 200 frameCenterSpecial = left functionalsEnabled=Extremes;Regression;Moments;Percentiles;Times Extremes.max = 0 Extremes.min = 0 Extremes.range = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.amean = 1 Extremes.maxameandist=0 Extremes.minameandist=0 Extremes.norm = frame Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 1 Regression.linregerrQ = 1 Regression.qregc1 = 0 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 0 Regression.centroid = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.quartile1 = 0 Percentiles.quartile2 = 0 Percentiles.quartile3 = 0 Percentiles.iqr = 1 Percentiles.iqr12 = 0 Percentiles.iqr23 = 0 Percentiles.iqr13 = 0 Percentiles.interp = 1 Percentiles.percentile = 0.99 ;Percentiles.pctlrange=0-1 Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 1 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.norm = turn nonZeroFuncts=1 [arffsink:cArffSink] reader.dmLevel=func;funcNz ; do not print "frameNumber" attribute to ARFF file frameIndex=0 frameTime=0 ; name of output file as commandline option filename=\cm[arffout(P){output.arff}:name of WEKA Arff output file] ; name of @relation in the ARFF file relation=\cm[corpus{Audio}:corpus name, arff relation] ; name of the current instance (usually file name of input wave file) instanceName=\cm[instname(N){noname}:name of arff instance] \{arff_targets_age.conf} ; append to an existing file, so multiple calls of SMILExtract on different ; input files append to the same output ARFF file append=1 // ################### END OF openSMILE CONFIG FILE ###################### ================================================ FILE: config/audiovisual/video.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openCV video features with openSMILE < ////////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschränkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;===== component manager configuration (= list of enabled components!) ===== [componentInstances:cComponentManager] instance[dataMemory].type = cDataMemory // VIDEO instance[openCVSource].type = cOpenCVSource instance[mean].type=cFunctionals instance[arffOutput].type=cArffSink // Here you can control the amount of detail displayed for the data memory // level configuration. 0 is no information at all, 5 is maximum detail. printLevelStats = 6 // You can set the number of parallel threads (experimental): nThreads = 1 // ============= component configuration sections begin here ============== [openCVSource:cOpenCVSource] writer.dmLevel = videofeatures display = 1 videoSource = FILE filename = \cm[videofile(V){test.avi}:name of input file] face_cascade_path = /home/iaa2/workstud/grf/OpenCV/OpenCV-2.3.1/inst/share/OpenCV/lbpcascades/lbpcascade_frontalface.xml eyes_cascade_path = /home/iaa2/workstud/grf/OpenCV/OpenCV-2.3.1/inst/share/OpenCV/haarcascades/haarcascade_eye_tree_eyeglasses.xml extract_face = 1 extract_hsv_histogram = 0 extract_hsv_histogram = 1 extract_optical_flow = 0 include_face_features = 0 ignore_invalid_frames = 1 face_width = 60 lbp_uniformpatterns = 0 hsv_histogram_h_bins = 30 hsv_histogram_s_bins = 30 hsv_histogram_v_bins = 20 normalize_histograms = 1 of_histogram_bins = 20 of_histogram_max_flow = 0.2 of_histogram_downsample = 0.3 [mean:cFunctionals] reader.dmLevel = videofeatures writer.dmLevel = mean copyInputName = 1 frameMode = fixed frameSizeFrames = 150 frameStepFrames = 60 frameCenterSpecial = left functionalsEnabled = Means Means.amean = 1 Means.posamean = 0 Means.absmean = 0 Means.rqmean = 0 Means.flatness = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames nonZeroFuncts = 1 [arffOutput:cArffSink] reader.dmLevel= mean number=1 timestamp=0 filename=\cm[arffout(O){output_video.arff}:name of WEKA Arff output file] relation=\cm[corpus{Video}:corpus name, arff relation] instanceName=\cm[instname(N){lbp}:name of arff instance] \{arff_targets_age.conf} append=1 // ################### END OF openSMILE CONFIG FILE ###################### ================================================ FILE: config/audspec.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file to extract a pseudo ////////////////// ///////// auditory spectrum: 26 mel-band spectrum with equal ////////////////// ///////// loudness weighting, delta and acceleration coefficients ////////////////// ///////// ////////////////// ///////// (c) 2013-2016 audEERING. ////////////////// ///////// All rights reserverd. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory \{shared/standard_wave_input.conf.inc} [componentInstances:cComponentManager] ; audio framer instance[audspec_frame].type=cFramer ; speech pre-emphasis (on a per frame basis as HTK does it) instance[audspec_pe].type=cVectorPreemphasis ; apply a window function to pre-emphasised frames instance[audspec_win].type=cWindower ; transform to the frequency domain using FFT instance[audspec_fft].type=cTransformFFT ; compute magnitude of the complex fft from the previous component instance[audspec_fftmag].type=cFFTmagphase ; compute critical-bands from magnitude spectrum instance[audspec_melspec].type=cMelspec ; compute PLP from critical-band spectrum instance[audspec_plp].type=cPlp ; compute delta coefficients from mfcc and energy instance[audspec_delta].type=cDeltaRegression ; compute acceleration coefficients from delta coefficients of mfcc and energy instance[audspec_accel].type=cDeltaRegression ; run single threaded (nThreads=1) ; NOTE: a single thread is more efficient for processing small files, since multi-threaded processing involves more ; overhead during startup, which will make the system slower in the end nThreads=1 ; do not show any internal dataMemory level settings ; (if you want to see them set the value to 1, 2, 3, or 4, depending on the amount of detail you wish) printLevelStats=0 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// component configuration //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ; the following sections configure the components listed above ; a help on configuration parameters can be obtained with ; SMILExtract -H ; or ; SMILExtract -H configTypeName (= componentTypeName) ///////////////////////////////////////////////////////////////////////////////////////////// [audspec_frame:cFramer] reader.dmLevel=wave writer.dmLevel=frames frameSize = 0.0250 frameStep = 0.010 frameMode = fixed frameCenterSpecial = left [audspec_pe:cVectorPreemphasis] reader.dmLevel=frames writer.dmLevel=framespe k=0.97 de=0 [audspec_win:cWindower] reader.dmLevel=framespe writer.dmLevel=winframes ; hamming window winFunc = ham ; no gain gain = 1.0 offset = 0 [audspec_fft:cTransformFFT] reader.dmLevel=winframes writer.dmLevel=fft [audspec_fftmag:cFFTmagphase] reader.dmLevel=fft writer.dmLevel=fftmag [audspec_melspec:cMelspec] reader.dmLevel=fftmag writer.dmLevel=melspec ; htk compatible sample value scaling htkcompatible = 1 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 0 hifreq = 8000 specScale = mel [audspec_plp:cPlp] reader.dmLevel=melspec writer.dmLevel=plp firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 1 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 [audspec_delta:cDeltaRegression] reader.dmLevel=plp writer.dmLevel=plpde deltawin=2 blocksize=1 [audspec_accel:cDeltaRegression] reader.dmLevel=plpde writer.dmLevel=plpdede deltawin=2 blocksize=1 [componentInstances:cComponentManager] instance[audspec_lldconcat].type=cVectorConcat [audspec_lldconcat:cVectorConcat] reader.dmLevel = plp;plpde;plpdede writer.dmLevel = lld includeSingleElementFields = 1 ////////////////////////////////////////////////////////////////////// /////////////////// data output configuration ////////////////////// ////////////////////////////////////////////////////////////////////// \{shared/standard_data_output_lldonly.conf.inc} //////---------------------- END -------------------------/////// ================================================ FILE: config/audspec_compat.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file to extract a pseudo ////////////////// ///////// auditory spectrum: 26 mel-band spectrum with equal ////////////////// ///////// loudness weighting, delta and acceleration coefficients ////////////////// //////// This file produces compatible results with 2.1 and 2.2. ////////////////// ///////// ////////////////// ///////// (c) 2013-2016 audEERING. ////////////////// ///////// All rights reserverd. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // Default output (-O) is to HTK format // Optional output (if -outputcsv set on commandline) is CSV output (including header line) /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory ; wave file input instance[waveIn].type=cWaveSource ; audio framer instance[frame].type=cFramer ; speech pre-emphasis (on a per frame basis as HTK does it) instance[pe].type=cVectorPreemphasis ; apply a window function to pre-emphasised frames instance[win].type=cWindower ; transform to the frequency domain using FFT instance[fft].type=cTransformFFT ; compute magnitude of the complex fft from the previous component instance[fftmag].type=cFFTmagphase ; compute critical-bands from magnitude spectrum instance[melspec].type=cMelspec ; compute PLP from critical-band spectrum instance[plp].type=cPlp ; compute delta coefficients from mfcc and energy instance[delta].type=cDeltaRegression ; compute acceleration coefficients from delta coefficients of mfcc and energy instance[accel].type=cDeltaRegression ; run single threaded (nThreads=1) ; NOTE: a single thread is more efficient for processing small files, since multi-threaded processing involves more ; overhead during startup, which will make the system slower in the end nThreads=1 ; do not show any internal dataMemory level settings ; (if you want to see them set the value to 1, 2, 3, or 4, depending on the amount of detail you wish) printLevelStats=0 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// component configuration //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ; the following sections configure the components listed above ; a help on configuration parameters can be obtained with ; SMILExtract -H ; or ; SMILExtract -H configTypeName (= componentTypeName) ///////////////////////////////////////////////////////////////////////////////////////////// [waveIn:cWaveSource] ; this sets the level this component writes to ; the level will be created by this component ; no other components may write to a level having the same name writer.dmLevel=wave ; this defines a new commandline option "-I" or "-inputfile", which can be used to specify ; the filename on the commandline instead of having it "hard-coded" in the config file filename=\cm[inputfile(I){test.wav}:name of input file] ; mix stereo files down to mono for analysis monoMixdown=1 [frame:cFramer] reader.dmLevel=wave writer.dmLevel=frames frameSize = 0.0250 frameStep = 0.010 frameMode = fixed frameCenterSpecial = left [pe:cVectorPreemphasis] reader.dmLevel=frames writer.dmLevel=framespe k=0.97 de=0 [win:cWindower] reader.dmLevel=framespe writer.dmLevel=winframes ; hamming window winFunc = ham ; no gain gain = 1.0 offset = 0 [fft:cTransformFFT] reader.dmLevel=winframes writer.dmLevel=fft ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmag:cFFTmagphase] reader.dmLevel=fft writer.dmLevel=fftmag [melspec:cMelspec] reader.dmLevel=fftmag writer.dmLevel=melspec ; htk compatible sample value scaling htkcompatible = 1 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 0 hifreq = 8000 specScale = mel [plp:cPlp] reader.dmLevel=melspec writer.dmLevel=plp firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 1 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 [delta:cDeltaRegression] reader.dmLevel=plp writer.dmLevel=plpde deltawin=2 blocksize=1 [accel:cDeltaRegression] reader.dmLevel=plpde writer.dmLevel=plpdede deltawin=2 blocksize=1 [componentInstances:cComponentManager] instance[audspec_lldconcat].type=cVectorConcat [audspec_lldconcat:cVectorConcat] reader.dmLevel = plp;plpde;plpdede writer.dmLevel = lld includeSingleElementFields = 1 ////////////////////////////////////////////////////////////////////// /////////////////// data output configuration ////////////////////// ////////////////////////////////////////////////////////////////////// \{shared/standard_data_output_lldonly.conf.inc} //////---------------------- END -------------------------/////// ================================================ FILE: config/avec2011.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file ////////////////// ///////// for AVEC 2011 challenge < ////////////////// ///////// ////////////////// ///////// (c) 2013-2016 audEERING. ////////////////// ///////// All rights reserverd. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory printLevelStats=0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; main section ;;;;;;;;;;;;;;;;;;;;;;;;;;; \{shared/standard_wave_input.conf.inc} ;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame60].type=cFramer instance[win60].type=cWindower instance[fft60].type=cTransformFFT instance[fftmp60].type=cFFTmagphase [frame60:cFramer] reader.dmLevel=wave writer.dmLevel=frame60 frameSize = 0.060 frameStep = 0.010 frameCenterSpecial = left [win60:cWindower] reader.dmLevel=frame60 writer.dmLevel=winG60 winFunc=gauss gain=1.0 sigma=0.4 [fft60:cTransformFFT] reader.dmLevel=winG60 writer.dmLevel=fftcG60 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmp60:cFFTmagphase] reader.dmLevel=fftcG60 writer.dmLevel=fftmagG60 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame25].type=cFramer instance[pe25].type=cVectorPreemphasis instance[win25].type=cWindower instance[fft25].type=cTransformFFT instance[fftmp25].type=cFFTmagphase [frame25:cFramer] reader.dmLevel=wave writer.dmLevel=frame25 frameSize = 0.025 frameStep = 0.010 frameCenterSpecial = left [pe25:cVectorPreemphasis] reader.dmLevel=frame25 writer.dmLevel=frame25pe k=0.97 de=0 [win25:cWindower] reader.dmLevel=frame25 writer.dmLevel=winH25 winFunc=hamming [fft25:cTransformFFT] reader.dmLevel=winH25 writer.dmLevel=fftcH25 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmp25:cFFTmagphase] reader.dmLevel=fftcH25 writer.dmLevel=fftmagH25 ;;;;;;;;;;;;;;;;;;;; HPS pitch [componentInstances:cComponentManager] instance[scale].type=cSpecScale instance[shs].type=cPitchShs instance[pitchSmooth].type=cPitchSmootherViterbi instance[energy60].type=cEnergy instance[volmerge].type=cValbasedSelector [energy60:cEnergy] reader.dmLevel=winG60 writer.dmLevel=e60 rms=1 log=0 writer.levelconf.nT=200 [scale:cSpecScale] reader.dmLevel=fftmagG60 writer.dmLevel=hpsG60 copyInputName = 1 processArrayFields = 0 scale=octave sourceScale = lin // logScaleBase = 2 // logSourceScaleBase = 2 // firstNote = 55 interpMethod = spline minF = 20 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [shs:cPitchShs] reader.dmLevel=hpsG60 writer.dmLevel=pitchShsG60 copyInputName = 1 processArrayFields = 0 maxPitch = 620 minPitch = 42 nCandidates = 6 scores = 1 voicing = 1 F0C1 = 0 voicingC1 = 0 F0raw = 1 voicingClip = 1 voicingCutoff = 0.700000 inputFieldSearch = Mag_octScale octaveCorrection = 0 nHarmonics = 15 compressionFactor = 0.850000 greedyPeakAlgo = 1 [pitchSmooth:cPitchSmootherViterbi] reader.dmLevel=pitchShsG60 reader2.dmLevel=pitchShsG60 writer.dmLevel=pitchG60a copyInputName = 1 bufferLength=90 F0final = 1 F0finalEnv = 0 voicingFinalClipped = 0 voicingFinalUnclipped = 1 F0raw = 0 voicingC1 = 0 voicingClip = 0 wTvv =10.0 wTvvd= 5.0 wTvuv=10.0 wThr = 4.0 wTuu = 0.0 wLocal=2.0 wRange=1.0 // SHS/Viterbi pitch algo does strange things at very low amplitudes, so we filter these out [volmerge:cValbasedSelector] reader.dmLevel = e60;pitchG60a writer.dmLevel = pitchG60 idx=0 threshold=0.0008 removeIdx=1 zeroVec=1 outputVal=0.0 ;;;;;;;;;;;;;;;;;;; VQ [componentInstances:cComponentManager] instance[pitchJitter].type=cPitchJitter [pitchJitter:cPitchJitter] reader.dmLevel = wave writer.dmLevel = jitterShimmer // nameAppend = copyInputName = 1 ; is pitchF really necessary, or can we use pitchG60 ? F0reader.dmLevel = pitchG60 F0field = F0final searchRangeRel = 0.250000 jitterLocal = 1 jitterDDP = 1 jitterLocalEnv = 0 jitterDDPEnv = 0 shimmerLocal = 1 shimmerLocalEnv = 0 onlyVoiced = 0 logHNR = 1 ;periodLengths = 0 ;periodStarts = 0 useBrokenJitterThresh = 1 ;;;;;;;;;;;;;;;;;;;;; Energy / loudness [componentInstances:cComponentManager] instance[melspec1].type=cMelspec instance[audspec].type=cPlp instance[audspecSum].type=cVectorOperation [melspec1:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspec1 ; htk compatible sample value scaling htkcompatible = 0 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = bark ; perform auditory weighting of spectrum [audspec:cPlp] reader.dmLevel=melspec1 writer.dmLevel=audspec firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=0 RASTA=0 [audspecSum:cVectorOperation] reader.dmLevel = audspec writer.dmLevel = audspecSum // nameAppend = copyInputName = 1 processArrayFields = 0 operation = ll1 nameBase = audspec ;;;;;;;;;;;;;;; spectral [componentInstances:cComponentManager] instance[spectral].type=cSpectral [spectral:cSpectral] reader.dmLevel=fftmagH25 writer.dmLevel=spectral bands[0]=250-650 bands[1]=1000-4000 rollOff[0] = 0.25 rollOff[1] = 0.50 rollOff[2] = 0.75 rollOff[3] = 0.90 flux=1 centroid=0 maxPos=0 minPos=0 entropy=1 variance=1 skewness=1 kurtosis=1 slope=0 sharpness = 1 tonality = 0 harmonicity = 1 flatness = 0 ;;;;;;;;;;;;;;; mfcc [componentInstances:cComponentManager] instance[melspecMfcc].type=cMelspec instance[mfcc].type=cMfcc [melspecMfcc:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspecMfcc copyInputName = 1 processArrayFields = 1 ; htk compatible sample value scaling htkcompatible = 1 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = mel inverse = 0 [mfcc:cMfcc] reader.dmLevel=melspecMfcc writer.dmLevel=mfcc1_12 copyInputName = 1 processArrayFields = 1 firstMfcc = 1 lastMfcc = 10 cepLifter = 22.0 htkcompatible = 1 ;;;;;;;;;;;;;;;; zcr [componentInstances:cComponentManager] instance[mzcr].type=cMZcr [mzcr:cMZcr] reader.dmLevel = frame25 writer.dmLevel = zcr copyInputName = 1 processArrayFields = 1 zcr = 1 mcr = 0 amax = 0 maxmin = 0 dc = 0 ;;;;;;;;;;;;;;;;;;;; smoothing and selection [componentInstances:cComponentManager] instance[smoNz].type=cContourSmoother instance[smoA].type=cContourSmoother instance[smoB].type=cContourSmoother instance[f0sel].type=cDataSelector instance[f0psel].type=cDataSelector [smoNz:cContourSmoother] reader.dmLevel = pitchG60;jitterShimmer writer.dmLevel = lld_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 1 [f0sel:cDataSelector] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_f0v_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = f0v selected = F0final_sma [f0psel:cDataSelector] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_f0p_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = f0p selected = F0final_sma [smoA:cContourSmoother] reader.dmLevel = audspecSum;zcr writer.dmLevel = lldA_smo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 [smoB:cContourSmoother] reader.dmLevel = spectral;mfcc1_12 writer.dmLevel = lldB_smo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 ;;;;;;;;; deltas [componentInstances:cComponentManager] instance[deNz].type=cDeltaRegression instance[deA].type=cDeltaRegression instance[deB].type=cDeltaRegression [deNz:cDeltaRegression] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_nzsmo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ; TODO? delta with zero segments removed... [deA:cDeltaRegression] reader.dmLevel = lldA_smo writer.dmLevel = lldA_smo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 [deB:cDeltaRegression] reader.dmLevel = lldB_smo writer.dmLevel = lldB_smo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ;;;;;;;;; functionals / statistics [componentInstances:cComponentManager] instance[functionalsA].type=cFunctionals instance[functionalsAde].type=cFunctionals instance[functionalsF0v].type=cFunctionals instance[functionalsF0p].type=cFunctionals instance[functionalsNz].type=cFunctionals instance[functionalsNzDe].type=cFunctionals ; functionals for energy and spectral related lld [functionalsA:cFunctionals] reader.dmLevel = lldA_smo;lldB_smo writer.dmLevel = functionalsA // nameAppend = copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Percentiles ; Means ; Moments ; Peaks2 ; Segments ; Regression ; Times ; Lpc Means.amean = 1 Means.absmean = 0 Means.rqmean = 1 Means.flatness = 1 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Peaks2.doRatioLimit = 0 Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 1 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 1 Peaks2.peakRangeAbs = 0 Peaks2.peakRangeRel = 1 Peaks2.peakMeanAbs = 0 Peaks2.peakMeanMeanDist = 0 Peaks2.peakMeanRel = 1 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 1 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 0 Peaks2.minRisingSlope = 0 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 0 Peaks2.minFallingSlope = 0 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = NArelTh Segments.thresholds = 0.25 Segments.rangeRelThreshold = 0.200000 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Moments.doRatioLimit = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Regression.linregc1 = 1 Regression.linregc2 = 0 Regression.linregerrA = 1 Regression.linregerrQ = 0 Regression.qregc1 = 1 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 1 Regression.qregerrQ = 0 Regression.oldBuggyQerr = 0 Regression.centroid = 0 Regression.normRegCoeff = 1 Regression.normInputs = 1 Regression.doRatioLimit = 0 Regression.centroidRatioLimit = 0 Regression.centroidUseAbsValues = 0 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for energy and spectral related lld [functionalsAde:cFunctionals] reader.dmLevel = lldA_smo_de;lldB_smo_de writer.dmLevel = functionalsAde // nameAppend = copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Percentiles ; Means ; Moments ; Segments ; Times Means.amean = 0 Means.posamean = 1 Means.absmean = 0 Means.rqmean = 1 Means.flatness = 1 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = chX Segments.X = 0.0 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Moments.doRatioLimit = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch onsets/offsets (voiced) [functionalsF0v:cFunctionals] reader.dmLevel = lld_f0v_nzsmo ;lld_f0_nzsmo_de writer.dmLevel = functionalsF0v //nameAppend = ff0 copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Means ; Segments Means.amean = 0 Means.absmean = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 1 Means.norm = segment Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = nonX Segments.X = 0.0 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch onsets (pauses) [functionalsF0p:cFunctionals] reader.dmLevel = lld_f0p_nzsmo writer.dmLevel = functionalsF0p //nameAppend = pauses copyInputName = 0 frameMode = full frameCenterSpecial = left functionalsEnabled = Means ; Segments Means.amean = 0 Means.posamean = 0 Means.absmean = 0 Means.qmean = 0 Means.rqmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 1 Means.flatness = 0 Means.norm = segment Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = eqX Segments.X = 0.0 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch and vq related lld in voiced regions [functionalsNz:cFunctionals] reader.dmLevel = lld_nzsmo writer.dmLevel = functionalsNz // nameAppend = copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Percentiles ; Means ; Moments ; Peaks2 ; Regression ; Times Means.amean = 1 Means.absmean = 0 Means.rqmean = 1 Means.qmean = 0 Means.flatness = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Peaks2.doRatioLimit = 0 Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 1 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 1 Peaks2.peakRangeAbs = 0 Peaks2.peakRangeRel = 1 Peaks2.peakMeanAbs = 0 Peaks2.peakMeanMeanDist = 0 Peaks2.peakMeanRel = 1 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 1 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 0 Peaks2.minRisingSlope = 0 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 0 Peaks2.minFallingSlope = 0 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Moments.doRatioLimit = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Regression.linregc1 = 1 Regression.linregc2 = 0 Regression.linregerrA = 1 Regression.linregerrQ = 0 Regression.qregc1 = 1 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 1 Regression.qregerrQ = 0 Regression.oldBuggyQerr = 0 Regression.centroid = 0 Regression.normRegCoeff = 1 Regression.normInputs = 1 Regression.doRatioLimit = 0 Regression.centroidRatioLimit = 0 Regression.centroidUseAbsValues = 0 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 1 masterTimeNorm = segment ; functionals for pitch and vq related lld in voiced regions [functionalsNzDe:cFunctionals] reader.dmLevel = lld_nzsmo_de writer.dmLevel = functionalsNzDe // nameAppend = copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Percentiles ; Means ; Moments ; Times Means.amean = 0 Means.posamean = 1 Means.absmean = 0 Means.rqmean = 1 Means.qmean = 0 Means.flatness = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Moments.doRatioLimit = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 1 masterTimeNorm = segment ;;;;;;;;; output all features.... [componentInstances:cComponentManager] instance[arffsink].type=cArffSink [arffsink:cArffSink] reader.dmLevel=functionalsA;functionalsNz;functionalsAde;functionalsNzDe;functionalsF0v;functionalsF0p filename=\cm[output(O){default.arff}:output arff file for feature data] append=1 frameIndex=0 frameTime=0 relation=avec2011 instanceName=\cm[instname{unlabelled}:name of file which will be saved in arff file] ; name of class label class[0].name = emotion ; list of nominal classes OR "numeric" class[0].type = \cm[classes{0,1,2,3}:all classes for arff file attribute] ; the class label or value for the current instance target[0].all = \cm[classlabel(a){0}:instance class label] ; append to an existing file, so multiple calls of SMILExtract on different ; input files append to the same output ARFF file ================================================ FILE: config/avec2012.readme ================================================ NOTE: All AVEC 2012 config files and extractor scripts are in ../scripts/avec2012/avec2012_*.conf (or old name, avec2011_*.conf in older versions) For standard full segment features (as the other challenges), use avec2011_full.conf NOTE: it requires ../scripts/avec2012/labels.inc for the 4 dimensional avec label options ================================================ FILE: config/avec2013.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file ////////////////// ///////// for AVEC 2013 ////////////////// ///////// based on avec2011.conf ////////////////// ///////// * written 2013 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) 2013-2016 by audEERING. ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// \{avec2013_lld_core.conf.inc} \{avec2013_functionals_core.conf.inc} ;;;;;;;;; output all features.... [componentInstances:cComponentManager] instance[avec2013_lldconcat].type=cVectorConcat instance[avec2013_llddeconcat].type=cVectorConcat instance[avec2013_funcconcat].type=cVectorConcat [avec2013_lldconcat:cVectorConcat] reader.dmLevel = lldA_smo;lldB_smo;lld_nzsmo writer.dmLevel = lld includeSingleElementFields = 1 [avec2013_llddeconcat:cVectorConcat] reader.dmLevel = lldA_smo_de;lldB_smo_de;lld_nzsmo_de writer.dmLevel = lld_de includeSingleElementFields = 1 [avec2013_funcconcat:cVectorConcat] reader.dmLevel = functionalsDur;functionalsA;functionalsNz;functionalsAde;functionalsNzDe;functionalsF0v;functionalsF0p writer.dmLevel = func includeSingleElementFields = 1 \{shared/standard_data_output.conf.inc} ================================================ FILE: config/avec2013_functionals_core.conf.inc ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file ////////////////// ///////// for AVEC 2013 ////////////////// ///////// based on avec2011.conf ////////////////// ///////// * written 2013 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) 2013-2016 by audEERING. ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;;;; functionals / statistics [componentInstances:cComponentManager] instance[functionalsA].type=cFunctionals instance[functionalsAde].type=cFunctionals instance[functionalsF0v].type=cFunctionals instance[functionalsF0p].type=cFunctionals instance[functionalsNz].type=cFunctionals instance[functionalsNzDe].type=cFunctionals instance[functionalsDur].type=cFunctionals ; functionals for energy and spectral related lld [functionalsA:cFunctionals] reader.dmLevel = lldA_smo;lldB_smo writer.dmLevel = functionalsA // nameAppend = copyInputName = 1 \{\cm[frameModeConf{avec2013_functionals_frame_mode.conf.inc}:functionals frame mode config]} functionalsEnabled = Percentiles ; Means ; Moments ; Peaks2 ; Segments ; Regression ; Times ; Lpc Means.amean = 1 Means.absmean = 0 Means.rqmean = 1 Means.flatness = 1 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Peaks2.doRatioLimit = 0 Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 1 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 1 Peaks2.peakRangeAbs = 0 Peaks2.peakRangeRel = 1 Peaks2.peakMeanAbs = 0 Peaks2.peakMeanMeanDist = 0 Peaks2.peakMeanRel = 1 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 1 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 0 Peaks2.minRisingSlope = 0 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 0 Peaks2.minFallingSlope = 0 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = NArelTh Segments.thresholds = 0.25 Segments.rangeRelThreshold = 0.200000 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Moments.doRatioLimit = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Regression.centroidUseAbsValues = 0 Regression.centroidRatioLimit = 0 Regression.doRatioLimit = 0 Regression.linregc1 = 1 Regression.linregc2 = 0 Regression.linregerrA = 1 Regression.linregerrQ = 0 Regression.qregc1 = 1 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 1 Regression.qregerrQ = 0 Regression.oldBuggyQerr = 0 Regression.centroid = 0 Regression.normRegCoeff = 1 Regression.normInputs = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for energy and spectral related lld (deltas) [functionalsAde:cFunctionals] reader.dmLevel = lldA_smo_de;lldB_smo_de writer.dmLevel = functionalsAde // nameAppend = copyInputName = 1 \{\cm[frameModeConf]} functionalsEnabled = Percentiles ; Means ; Moments ; Times Means.amean = 0 Means.posamean = 1 Means.absmean = 0 Means.rqmean = 1 Means.flatness = 1 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Moments.doRatioLimit = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for voiced segments and pitch onsets [functionalsF0v:cFunctionals] reader.dmLevel = lld_f0v_nzsmo ;lld_f0_nzsmo_de writer.dmLevel = functionalsF0v //nameAppend = ff0 copyInputName = 1 \{\cm[frameModeConf]} functionalsEnabled = Means ; Segments Means.amean = 0 Means.absmean = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 1 Means.norm = segment Segments.maxNumSeg = 999 Segments.segmentationAlgorithm = nonX Segments.X = 0.0 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Onset.threshold = 1 Onset.onsetRate = 1 Onset.norm = second nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for unvoiced segments [functionalsF0p:cFunctionals] reader.dmLevel = lld_f0p_nzsmo writer.dmLevel = functionalsF0p //nameAppend = pauses copyInputName = 0 \{\cm[frameModeConf]} frameCenterSpecial = left functionalsEnabled = Segments Segments.maxNumSeg = 999 Segments.segmentationAlgorithm = eqX Segments.X = 0.0 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch and vq related lld in voiced regions [functionalsNz:cFunctionals] reader.dmLevel = lld_nzsmo writer.dmLevel = functionalsNz // nameAppend = copyInputName = 1 \{\cm[frameModeConf]} functionalsEnabled = Percentiles ; Means ; Moments ; Peaks2 ; Regression ; Times Means.amean = 1 Means.absmean = 0 Means.rqmean = 1 Means.qmean = 0 Means.flatness = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Peaks2.doRatioLimit = 0 Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 1 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 1 Peaks2.peakRangeAbs = 0 Peaks2.peakRangeRel = 1 Peaks2.peakMeanAbs = 0 Peaks2.peakMeanMeanDist = 0 Peaks2.peakMeanRel = 1 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 1 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 0 Peaks2.minRisingSlope = 0 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 0 Peaks2.minFallingSlope = 0 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Regression.centroidUseAbsValues = 0 Regression.centroidRatioLimit = 0 Regression.doRatioLimit = 0 Regression.linregc1 = 1 Regression.linregc2 = 0 Regression.linregerrA = 1 Regression.linregerrQ = 0 Regression.qregc1 = 1 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 1 Regression.qregerrQ = 0 Regression.oldBuggyQerr = 0 Regression.centroid = 0 Regression.normRegCoeff = 1 Regression.normInputs = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 1 masterTimeNorm = segment ; functionals for pitch and vq related lld in voiced regions (deltas) [functionalsNzDe:cFunctionals] reader.dmLevel = lld_nzsmo_de writer.dmLevel = functionalsNzDe // nameAppend = copyInputName = 1 \{\cm[frameModeConf]} functionalsEnabled = Percentiles ; Means ; Moments ; Times Means.amean = 0 Means.posamean = 1 Means.absmean = 0 Means.rqmean = 1 Means.qmean = 0 Means.flatness = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 1 masterTimeNorm = segment ; functionals for input segment duration [functionalsDur:cFunctionals] reader.dmLevel = lld_f0v_nzsmo writer.dmLevel = functionalsDur // nameAppend = copyInputName = 1 \{\cm[frameModeConf]} noPostEOIprocessing=0 functionalsEnabled = Times Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 0 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 1 Times.buggySecNorm = 0 Times.norm = second nonZeroFuncts = 0 masterTimeNorm = second ================================================ FILE: config/avec2013_functionals_frame_mode.conf.inc ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file ////////////////// ///////// for AVEC 2013 ////////////////// ///////// based on avec2011.conf ////////////////// ///////// * written 2013 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) 2014 by audEERING UG (limited) ////////////////// ///////// All rights reserved ////////////////// /////////////////////////////////////////////////////////////////////////////////////// frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left ================================================ FILE: config/avec2013_lld_core.conf.inc ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file ////////////////// ///////// for AVEC 2013 ////////////////// ///////// based on avec2011.conf ////////////////// ///////// * written 2013 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) 2014 by audEERING UG (limited) ////////////////// ///////// All rights reserved ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory printLevelStats=0 \{shared/standard_wave_input.conf.inc} ;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame60].type=cFramer instance[win60].type=cWindower instance[fft60].type=cTransformFFT instance[fftmp60].type=cFFTmagphase [frame60:cFramer] reader.dmLevel=wave writer.dmLevel=frame60 frameSize = 0.060 frameStep = 0.010 frameCenterSpecial = left [win60:cWindower] reader.dmLevel=frame60 writer.dmLevel=winG60 winFunc=gauss gain=1.0 sigma=0.4 [fft60:cTransformFFT] reader.dmLevel=winG60 writer.dmLevel=fftcG60 zeroPadSymmetric = 0 [fftmp60:cFFTmagphase] reader.dmLevel=fftcG60 writer.dmLevel=fftmagG60 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame25].type=cFramer instance[pe25].type=cVectorPreemphasis instance[win25].type=cWindower instance[fft25].type=cTransformFFT instance[fftmp25].type=cFFTmagphase [frame25:cFramer] reader.dmLevel=wave writer.dmLevel=frame25 frameSize = 0.025 frameStep = 0.010 frameCenterSpecial = left [pe25:cVectorPreemphasis] reader.dmLevel=frame25 writer.dmLevel=frame25pe k=0.97 de=0 [win25:cWindower] reader.dmLevel=frame25 writer.dmLevel=winH25 winFunc=hamming [fft25:cTransformFFT] reader.dmLevel=winH25 writer.dmLevel=fftcH25 zeroPadSymmetric = 0 [fftmp25:cFFTmagphase] reader.dmLevel=fftcH25 writer.dmLevel=fftmagH25 ;;;;;;;;;;;;;;;;;;;; HPS pitch [componentInstances:cComponentManager] instance[scale].type=cSpecScale instance[shs].type=cPitchShs instance[pitchSmooth].type=cPitchSmootherViterbi instance[energy60].type=cEnergy instance[volmerge].type=cValbasedSelector [energy60:cEnergy] reader.dmLevel=winG60 writer.dmLevel=e60 rms=1 log=0 writer.levelconf.nT=200 [scale:cSpecScale] reader.dmLevel=fftmagG60 writer.dmLevel=hpsG60 copyInputName = 1 processArrayFields = 0 scale=octave sourceScale = lin // logScaleBase = 2 // logSourceScaleBase = 2 // firstNote = 55 interpMethod = spline minF = 20 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [shs:cPitchShs] reader.dmLevel=hpsG60 writer.dmLevel=pitchShsG60 copyInputName = 1 processArrayFields = 0 maxPitch = 620 minPitch = 42 nCandidates = 6 scores = 1 voicing = 1 F0C1 = 0 voicingC1 = 0 F0raw = 1 voicingClip = 1 voicingCutoff = 0.700000 inputFieldSearch = Mag_octScale octaveCorrection = 0 nHarmonics = 15 compressionFactor = 0.850000 greedyPeakAlgo = 1 [pitchSmooth:cPitchSmootherViterbi] reader.dmLevel=pitchShsG60 reader2.dmLevel=pitchShsG60 writer.dmLevel=pitchG60a copyInputName = 1 bufferLength=90 F0final = 1 F0finalEnv = 0 voicingFinalClipped = 0 voicingFinalUnclipped = 1 F0raw = 0 voicingC1 = 0 voicingClip = 0 wTvv =10.0 wTvvd= 5.0 wTvuv=10.0 wThr = 4.0 wTuu = 0.0 wLocal=2.0 wRange=1.0 // SHS/Viterbi pitch algo does strange things at very low amplitudes, so we filter these out [volmerge:cValbasedSelector] reader.dmLevel = e60;pitchG60a writer.dmLevel = pitchG60 idx=0 threshold=0.0008 removeIdx=1 zeroVec=1 outputVal=0.0 ;;;;;;;;;;;;;;;;;;; VQ [componentInstances:cComponentManager] instance[pitchJitter].type=cPitchJitter [pitchJitter:cPitchJitter] reader.dmLevel = wave writer.dmLevel = jitterShimmer // nameAppend = copyInputName = 1 ; is pitchF really necessary, or can we use pitchG60 ? F0reader.dmLevel = pitchG60 F0field = F0final searchRangeRel = 0.250000 jitterLocal = 1 jitterDDP = 1 jitterLocalEnv = 0 jitterDDPEnv = 0 shimmerLocal = 1 shimmerLocalEnv = 0 onlyVoiced = 0 logHNR = 1 inputMaxDelaySec = 2.0 ;periodLengths = 0 ;periodStarts = 0 useBrokenJitterThresh = 1 ;;;;;;;;;;;;;;;;;;;;; Energy / loudness [componentInstances:cComponentManager] instance[melspec1].type=cMelspec instance[audspec].type=cPlp instance[audspecSum].type=cVectorOperation [melspec1:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspec1 ; htk compatible sample value scaling htkcompatible = 0 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = bark ; perform auditory weighting of spectrum [audspec:cPlp] reader.dmLevel=melspec1 writer.dmLevel=audspec firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=0 RASTA=0 [audspecSum:cVectorOperation] reader.dmLevel = audspec writer.dmLevel = audspecSum // nameAppend = copyInputName = 1 processArrayFields = 0 operation = ll1 nameBase = audspec ;;;;;;;;;;;;;;; spectral [componentInstances:cComponentManager] instance[spectral].type=cSpectral [spectral:cSpectral] reader.dmLevel=fftmagH25 writer.dmLevel=spectral bands[0]=250-650 bands[1]=1000-4000 rollOff[0] = 0.25 rollOff[1] = 0.50 rollOff[2] = 0.75 rollOff[3] = 0.90 flux=1 centroid=0 maxPos=0 minPos=0 entropy=1 variance=1 skewness=1 kurtosis=1 slope=0 sharpness = 1 tonality = 0 harmonicity = 1 flatness = 1 ;;;;;;;;;;;;;;; mfcc [componentInstances:cComponentManager] instance[melspecMfcc].type=cMelspec instance[mfcc].type=cMfcc [melspecMfcc:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspecMfcc copyInputName = 1 processArrayFields = 1 ; htk compatible sample value scaling htkcompatible = 1 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = mel inverse = 0 [mfcc:cMfcc] reader.dmLevel=melspecMfcc writer.dmLevel=mfcc1_12 copyInputName = 1 processArrayFields = 1 firstMfcc = 1 lastMfcc = 16 cepLifter = 22.0 htkcompatible = 1 ;;;;;;;;;;;;;;;; zcr [componentInstances:cComponentManager] instance[mzcr].type=cMZcr [mzcr:cMZcr] reader.dmLevel = frame25 writer.dmLevel = zcr copyInputName = 1 processArrayFields = 1 zcr = 1 mcr = 0 amax = 0 maxmin = 0 dc = 0 ;;;;;;;;;;;;;;;;;;;; smoothing and selection [componentInstances:cComponentManager] instance[smoNz].type=cContourSmoother instance[smoA].type=cContourSmoother instance[smoB].type=cContourSmoother instance[f0sel].type=cDataSelector instance[f0psel].type=cDataSelector [smoNz:cContourSmoother] reader.dmLevel = pitchG60;jitterShimmer writer.dmLevel = lld_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 1 [f0sel:cDataSelector] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_f0v_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = f0v selected = F0final_sma [f0psel:cDataSelector] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_f0p_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = f0p selected = F0final_sma [smoA:cContourSmoother] reader.dmLevel = audspecSum;zcr writer.dmLevel = lldA_smo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 [smoB:cContourSmoother] reader.dmLevel = spectral;mfcc1_12 writer.dmLevel = lldB_smo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 ;;;;;;;;; deltas [componentInstances:cComponentManager] instance[deNz].type=cDeltaRegression instance[deA].type=cDeltaRegression instance[deB].type=cDeltaRegression [deNz:cDeltaRegression] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_nzsmo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 onlyInSegments = 1 zeroSegBound = 1 ; TODO? delta with zero segments removed... [deA:cDeltaRegression] reader.dmLevel = lldA_smo writer.dmLevel = lldA_smo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 [deB:cDeltaRegression] reader.dmLevel = lldB_smo writer.dmLevel = lldB_smo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ; OUTPUTS: lldA_smo;lldA_smo_de;lldB_smo;lldB_smo_de;lld_nzsmo;lld_nzsmo_de ; optional for pitch functionals: lld_f0v_smo;lld_f0p_smo ================================================ FILE: config/avec2014.readme ================================================ For AVEC2014, use the avec2013* config files. AVEC2014 uses the same audio feature set as AVEC2013! ================================================ FILE: config/chroma_fft.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for Chroma features < ////////////////// ///////// Chroma features computed over 64ms frames, Gauss window ////////////////// ///////// 6 octaves from 55.0 Hz (first note) ////////////////// ///////// Output: 12 chroma features in a CSV file ////////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschränkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;===== component manager configuration (= list of enabled components!) ===== [componentInstances:cComponentManager] instance[dataMemory].type = cDataMemory instance[waveSource].type = cWaveSource instance[framer].type = cFramer instance[windower].type = cWindower instance[transformFFT].type = cTransformFFT instance[fFTmagphase].type = cFFTmagphase instance[tonespec].type = cTonespec instance[chroma].type = cChroma instance[csvSink].type = cCsvSink // Here you can control the amount of detail displayed for the data memory // level configuration. 0 is no information at all, 5 is maximum detail. printLevelStats = 0 // You can set the number of parallel threads (experimental): nThreads = 1 // ============= component configuration sections begin here ============== [waveSource:cWaveSource] writer.dmLevel = wave filename = \cm[inputfile(I){input.wav}:name of input wave file] monoMixdown = 1 start = 0 end = -1 endrel = 0 noHeader = 0 [framer:cFramer] reader.dmLevel = wave writer.dmLevel = frames // nameAppend = copyInputName = 1 frameMode = fixed // frameListFile = // frameList = frameSize = 0.064000 frameStep = 0.010000 frameCenterSpecial = left noPostEOIprocessing = 1 [windower:cWindower] reader.dmLevel = frames writer.dmLevel = winframes // nameAppend = copyInputName = 1 processArrayFields = 1 gain = 1 offset = 0 winFunc = Gau sigma = 0.400000 [transformFFT:cTransformFFT] reader.dmLevel = winframes writer.dmLevel = fftc // nameAppend = copyInputName = 1 processArrayFields = 1 inverse = 0 [fFTmagphase:cFFTmagphase] reader.dmLevel = fftc writer.dmLevel = fftmag // nameAppend = copyInputName = 1 processArrayFields = 1 inverse = 0 magnitude = 1 phase = 0 [tonespec:cTonespec] reader.dmLevel = fftmag writer.dmLevel = tonespec nameAppend = note copyInputName = 1 processArrayFields = 0 nOctaves = 6 firstNote = 55 filterType = gau usePower = 1 dbA = 1 [chroma:cChroma] reader.dmLevel = tonespec writer.dmLevel = chroma nameAppend = chroma copyInputName = 0 processArrayFields = 0 octaveSize = 12 [csvSink:cCsvSink] reader.dmLevel = chroma filename = \cm[outputfile(O){chroma.csv}:name of output CSV file for chroma features] delimChar = ; append = 0 timestamp = 0 number = 0 printHeader = 0 // ################### END OF openSMILE CONFIG FILE ###################### ================================================ FILE: config/chroma_filt.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for Chroma features < ////////////////// ///////// Chroma features computed via sine tone filter bank ////////////////// ///////// 6 octaves from 55.0 Hz (first note) ////////////////// ///////// Output: 12 chroma features in a CSV file ////////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschränkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;===== component manager configuration (= list of enabled components!) ===== [componentInstances:cComponentManager] instance[dataMemory].type = cDataMemory instance[waveSource].type = cWaveSource instance[tonefilt].type = cTonefilt instance[chroma].type = cChroma instance[csvSink].type = cCsvSink // Here you can control the amount of detail displayed for the data memory // level configuration. 0 is no information at all, 5 is maximum detail. printLevelStats = 1 // You can set the number of parallel threads (experimental): nThreads = 1 // ============= component configuration sections begin here ============== [waveSource:cWaveSource] writer.dmLevel = wave filename = \cm[inputfile(I){input.wav}:name of wave input file] monoMixdown = 1 start = 0 end = -1 endrel = 0 noHeader = 0 [tonefilt:cTonefilt] reader.dmLevel = wave writer.dmLevel = tonespec nameAppend = tonefilt copyInputName = 1 nNotes = 72 firstNote = 55 decayF0 = 0.999900 decayFN = 0.999000 outputPeriod = 0.0100 [chroma:cChroma] reader.dmLevel = tonespec writer.dmLevel = chroma nameAppend = chroma copyInputName = 0 processArrayFields = 1 octaveSize = 12 [csvSink:cCsvSink] reader.dmLevel = chroma filename = \cm[outputfile(O){chroma.csv}:output CSV file for chroma features] delimChar = ; append = 0 timestamp = 0 number = 0 printHeader = 0 // ################### END OF openSMILE CONFIG FILE ###################### ================================================ FILE: config/demo/audioplayer.conf ================================================ /////////////////////////////////////////////////////////////////////////// // openSMILE configuration example for a simple WAVE player // /////////////////////////////////////////////////////////////////////////// ;===== component manager configuration (= list of enabled components!) ===== [componentInstances:cComponentManager] // this line configures the default data memory: instance[dataMemory].type = cDataMemory instance[waveSource].type = cWaveSource instance[portaudioSink].type = cPortaudioSink // Here you can control the amount of detail displayed for the data memory // level configuration. 0 is no information at all, 5 is maximum detail. printLevelStats = 1 // You can set the number of parallel threads (experimental): nThreads = 1 // ============= component configuration sections begin here ============== ;;;; default (template) configuration section for component 'cWaveSource' ;;;; [waveSource:cWaveSource] writer.dmLevel = wave period = 0 filename = \cm[inputfile(I){input.wav}:name of wave (PCM) input file] monoMixdown = 0 start = 0 end = -1 endrel = 0 noHeader = 0 blocksize_sec=0.1 ;;;; default (template) configuration section for component 'cPortaudioSink' ;;;; [portaudioSink:cPortaudioSink] reader.dmLevel = wave monoMixdown = 0 device = -1 listDevices = 0 sampleRate = 0 audioBuffersize_sec = 0.20000 // ################### END OF openSMILE CONFIG FILE ###################### ================================================ FILE: config/demo/audiorecorder.conf ================================================ /////////////////////////////////////////////////////////////////////////// // openSMILE configuration example for a simple wave (PCM) recorder // /////////////////////////////////////////////////////////////////////////// ;===== component manager configuration (= list of enabled components!) ===== [componentInstances:cComponentManager] // this line configures the default data memory: instance[dataMemory].type = cDataMemory instance[portaudioSource].type = cPortaudioSource instance[waveSink].type = cWaveSink // Here you can control the amount of detail displayed for the data memory // level configuration. 0 is no information at all, 5 is maximum detail. printLevelStats = 1 // You can set the number of parallel threads (experimental): nThreads = 1 // ============= component configuration sections begin here ============== ;;;; default (template) configuration section for component 'cPortaudioSource' ;;;; [portaudioSource:cPortaudioSource] writer.dmLevel = wave monoMixdown = 0 ; -1 is the default device device = \cm[device{-1}:portaudio device to use for recording, see -listDevices option] listDevices = \cm[listDevices{0}:add -listDevices 1 to the command-line to see a list available of portaudio devices] sampleRate = \cm[sampleRate{44100}:set the sampling rate in Hz for recording] channels = \cm[channels{2}:set the number of audio channels to record] nBits = 16 audioBuffersize_sec = 0.050000 ;;;; default (template) configuration section for component 'cWaveSink' ;;;; [waveSink:cWaveSink] reader.dmLevel = wave blocksize=500 filename = \cm[outputfile(O){output.wav}:name of output wave file] sampleFormat = 16bit // ################### END OF openSMILE CONFIG FILE ###################### ================================================ FILE: config/demo/demo1_energy.conf ================================================ /////////////////////////////////////////////////////////////////////////// // openSMILE configuration file "demo1" // /////////////////////////////////////////////////////////////////////////// ;===== component manager configuration (= list of enabled components!) ===== [componentInstances:cComponentManager] // this line configures the default data memory: instance[dataMemory].type = cDataMemory instance[waveSource].type = cWaveSource instance[framer].type = cFramer instance[energy].type = cEnergy instance[csvSink].type = cCsvSink // Here you can control the amount of detail displayed for the data memory // level configuration. 0 is no information at all, 5 is maximum detail. printLevelStats = 1 // You can set the number of parallel threads (experimental): nThreads = 1 // ============= component configuration sections begin here ============== ;;;; default (template) configuration section for component 'cWaveSource' ;;;; [waveSource:cWaveSource] writer.dmLevel = wave period = 0 ; filename = input.wav filename = \cm[inputfile(I){input.wav}:file name of the input wave file] monoMixdown = 1 ;;;; default (template) configuration section for component 'cFramer' ;;;; [framer:cFramer] reader.dmLevel = wave writer.dmLevel = waveframes copyInputName = 1 frameMode = fixed frameSize = 0.025000 frameStep = 0.010000 frameCenterSpecial = left noPostEOIprocessing = 1 ;;;; default (template) configuration section for component 'cEnergy' ;;;; [energy:cEnergy] reader.dmLevel = waveframes writer.dmLevel = energy nameAppend = energy copyInputName = 1 processArrayFields = 0 htkcompatible = 0 rms = 0 log = 1 ;;;; default (template) configuration section for component 'cCsvSink' ;;;; [csvSink:cCsvSink] reader.dmLevel = energy ; filename = myenergy.csv filename = \cm[outputfile(O){output.csv}:file name of the output CSV file] delimChar = ; append = 0 timestamp = 1 number = 1 printHeader = 1 // ################### END OF openSMILE CONFIG FILE ###################### ================================================ FILE: config/demo/signalGenerator.conf ================================================ /////////////////////////////////////////////////////////////////////////// // openSMILE example configuration file for the signal generator // /////////////////////////////////////////////////////////////////////////// ;===== component manager configuration (= list of enabled components!) ===== [componentInstances:cComponentManager] // this line configures the default data memory: instance[dataMemory].type = cDataMemory instance[signalGenerator].type = cSignalGenerator instance[waveSink].type = cWaveSink // Here you can control the amount of detail displayed for the data memory // level configuration. 0 is no information at all, 5 is maximum detail. printLevelStats = 1 // You can set the number of parallel threads (experimental): nThreads = 1 // ============= component configuration sections begin here ============== ;;;; default (template) configuration section for component 'cSignalGenerator' ;;;; [signalGenerator:cSignalGenerator] writer.dmLevel = sig ; 16 kHz wave files period = 0.0000625 ; 44.1 kHz wave files ;period = 2.2675736961451247165532879818594e-5 ; 1 channel... nFields = 1 ; sine wave (use 'white' for Gaussian white noise) signalType = sine randSeed = 1 scale = 1 const = 0 frequency = 440 phase = 0 length = 3 ;;;; default (template) configuration section for component 'cWaveSink' ;;;; [waveSink:cWaveSink] reader.dmLevel = sig filename = output.wav sampleFormat = 16bit // ################### END OF openSMILE CONFIG FILE ###################### ================================================ FILE: config/emo_large.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for emotion features < ////////////////// ///////// large set of 6552 features, 1st level functionals ////////////////// ///////// of low-level descriptors such as MFCC, Pitch, LSP, ... ////////////////// ///////// ////////////////// ///////// (56 LLD + 56 delta) * 39 functionals ////////////////// ///////// ////////////////// ///////// * written 2009 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschränkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // NOTE: This file is no longer compatible with the old openEAR version. // The ISxx sets should be preferred or the emobase set. /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory instance[waveIn].type=cWaveSource instance[fr1].type=cFramer instance[pe2].type=cVectorPreemphasis instance[w1].type=cWindower instance[fft1].type=cTransformFFT instance[fftmp1].type=cFFTmagphase instance[mspec].type=cMelspec instance[mfcc].type=cMfcc instance[mzcr].type=cMZcr instance[acf].type=cAcf instance[cepstrum].type=cAcf instance[pitchACF].type=cPitchACF instance[energy].type=cEnergy instance[spectral].type=cSpectral instance[lld].type=cContourSmoother instance[delta1].type=cDeltaRegression instance[delta2].type=cDeltaRegression instance[functL1].type=cFunctionals instance[arffsink].type=cArffSink printLevelStats=0 nThreads=1 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// component configuration //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ; the following sections configure the components listed above ; a help on configuration parameters can be obtained with ; SMILExtract -H ; or ; SMILExtract -H configTypeName (= componentTypeName) ///////////////////////////////////////////////////////////////////////////////////////////// [waveIn:cWaveSource] writer.dmLevel=wave filename=\cm[inputfile(I){test.wav}:name of input file] monoMixdown=1 [fr1:cFramer] reader.dmLevel=wave writer.dmLevel=frames noPostEOIprocessing = 1 copyInputName = 1 frameSize = 0.0250 frameStep = 0.010 frameMode = fixed frameCenterSpecial = center buffersize = 1000 [pe2:cVectorPreemphasis] reader.dmLevel=frames writer.dmLevel=framespe k = 0.97 de = 0 [w1:cWindower] reader.dmLevel=framespe writer.dmLevel=winframe copyInputName = 1 processArrayFields = 1 winFunc = ham gain = 1.0 offset = 0 // ---- LLD ----- [fft1:cTransformFFT] reader.dmLevel=winframe writer.dmLevel=fftc copyInputName = 1 processArrayFields = 1 inverse = 0 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmp1:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag copyInputName = 1 processArrayFields = 1 inverse = 0 magnitude = 1 phase = 0 [mspec:cMelspec] nameAppend=melspec reader.dmLevel=fftmag writer.dmLevel=mspec1 copyInputName = 1 processArrayFields = 1 htkcompatible = 1 usePower = 0 nBands = 26 lofreq = 0 hifreq = 8000 usePower = 0 inverse = 0 specScale = mel [mfcc:cMfcc] reader.dmLevel=mspec1 writer.dmLevel=mfcc1 copyInputName = 0 processArrayFields = 1 firstMfcc = 0 lastMfcc = 12 cepLifter = 22.0 htkcompatible = 1 [acf:cAcf] reader.dmLevel=fftmag writer.dmLevel=acf nameAppend = acf copyInputName = 1 processArrayFields = 1 usePower = 1 cepstrum = 0 acfCepsNormOutput = 0 [cepstrum:cAcf] reader.dmLevel=fftmag writer.dmLevel=cepstrum nameAppend = acf copyInputName = 1 processArrayFields = 1 usePower = 1 cepstrum = 1 acfCepsNormOutput = 0 oldCompatCepstrum = 1 absCepstrum = 1 [pitchACF:cPitchACF] ; the pitchACF component must ALWAYS read from acf AND cepstrum in the given order! reader.dmLevel=acf;cepstrum writer.dmLevel=pitch copyInputName = 1 processArrayFields = 0 maxPitch = 500 voiceProb = 1 voiceQual = 0 HNR = 0 F0 = 1 F0raw = 0 F0env = 1 voicingCutoff = 0.550000 [energy:cEnergy] reader.dmLevel=winframe writer.dmLevel=energy nameAppend=energy copyInputName = 1 processArrayFields = 0 htkcompatible = 0 rms=0 log=1 [mzcr:cMZcr] reader.dmLevel=frames writer.dmLevel=mzcr copyInputName = 1 processArrayFields = 1 zcr = 1 amax = 0 mcr = 0 maxmin = 0 dc = 0 [spectral:cSpectral] reader.dmLevel=fftmag writer.dmLevel=spectral copyInputName = 1 processArrayFields = 1 squareInput = 1 bands[0]=0-250 bands[1]=0-650 bands[2]=250-650 bands[3]=1000-4000 ;;;bands[4]=3010-9123 rollOff[0] = 0.25 rollOff[1] = 0.50 rollOff[2] = 0.75 rollOff[3] = 0.90 ; buggyRollOff = 1 ; set the above for compatibility with older releases flux = 1 centroid = 1 maxPos = 1 minPos = 1 entropy = 0 [lld:cContourSmoother] reader.dmLevel=energy;mfcc1;mspec1;mzcr;pitch;spectral writer.dmLevel=lld writer.levelconf.nT=10 ;writer.levelconf.noHang=2 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ;processArrayFields=0 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 // ---- delta regression of LLD ---- [delta1:cDeltaRegression] reader.dmLevel=lld writer.dmLevel=lld_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = de copyInputName = 1 noPostEOIprocessing = 0 deltawin=2 blocksize=1 [delta2:cDeltaRegression] reader.dmLevel=lld_de writer.dmLevel=lld_dede writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = de copyInputName = 1 noPostEOIprocessing = 0 deltawin=2 blocksize=1 [functL1:cFunctionals] reader.dmLevel=lld;lld_de;lld_dede writer.dmLevel=func copyInputName = 1 frameMode = full ; frameSize and frameStep = 0 => functionals over complete input ; (NOTE: buffersize of lld and lld_de levels must be large enough!!) frameSize=0 frameStep=0 frameCenterSpecial = left noPostEOIprocessing = 0 functionalsEnabled=Extremes;Regression;Moments;Percentiles;Crossings;Peaks;Means Extremes.max = 0 Extremes.min = 0 Extremes.range = 1 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.amean = 0 Extremes.maxameandist = 1 Extremes.minameandist = 1 Extremes.norm = frame Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 1 Regression.linregerrQ = 1 Regression.qregc1 = 1 Regression.qregc2 = 1 Regression.qregc3 = 1 Regression.qregerrA = 1 Regression.qregerrQ = 1 Regression.centroid = 1 Regression.oldBuggyQerr = 1 Regression.normInputs = 0 Regression.normRegCoeff = 0 Regression.doRatioLimit = 0 Regression.centroidRatioLimit = 0 Moments.doRatioLimit = 0 Moments.variance = 1 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.quartile1 = 0 Percentiles.quartile2 = 0 Percentiles.quartile3 = 0 Percentiles.iqr = 1 Percentiles.iqr12 = 0 Percentiles.iqr23 = 0 Percentiles.iqr13 = 0 Percentiles.interp = 1 Percentiles.percentile[0] = 0.95 Percentiles.percentile[1] = 0.98 Crossings.zcr = 1 Crossings.mcr = 0 Crossings.amean = 0 Peaks.numPeaks = 1 Peaks.meanPeakDist = 1 Peaks.peakMean = 1 Peaks.peakMeanMeanDist = 1 Peaks.overlapFlag = 1 Means.amean = 1 Means.absmean = 1 Means.qmean = 1 Means.nzamean = 0 Means.nzabsmean = 1 Means.nzqmean = 1 Means.nzgmean = 1 Means.nnz = 1 ////////////////////////////////////////////////////////////////////// /////////////////// data output configuration ////////////////////// ////////////////////////////////////////////////////////////////////// // ----- you might need to customise the arff output to suit your needs: ------ [arffsink:cArffSink] reader.dmLevel=func ; do not print "frameIndex" attribute to ARFF file frameIndex=0 frameTime=1 ; name of output file as commandline option filename=\cm[arffout(O){output.arff}:name of WEKA Arff output file] ; name of @relation in the ARFF file relation=\cm[corpus{SMILEfeatures}:corpus name, arff relation] ; name of the current instance (usually file name of input wave file) instanceName=\cm[instname(N){noname}:name of arff instance] ;; use this line instead of the above to always set the instance name to the ;; name of the input wave file ;instanceName=\cm[inputfile] ;; name of class label class[0].name = emotion ; list of nominal classes OR "numeric" class[0].type = \cm[classes{unknown}:all classes for arff file attribute] ; the class label or value for the current instance target[0].all = \cm[classlabel(a){unknown}:instance class label] ; append to an existing file, so multiple calls of SMILExtract on different ; input files append to the same output ARFF file append=1 //////---------------------- END -------------------------/////// ================================================ FILE: config/emobase.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for live emotion recognition < /////////////// ///////// base set of 988 features, 1st level functionals ////////////////// ///////// of low-level descriptors such as MFCC, Pitch, LSP, ... ////////////////// ///////// ////////////////// ///////// * written 2009 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) 2014 audEERING UG (haftungsbeschrnkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // Modified version: // - compatibility of newest 2.1 openSMILE code with openEAR 0.1.0 models /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] ;this line configures the default data memory: instance[dataMemory].type=cDataMemory instance[waveIn].type=cWaveSource instance[fr25].type=cFramer ;;; 40 ms frames features: instance[fr40].type=cFramer instance[w40].type=cWindower instance[fft40].type=cTransformFFT instance[fftmagphase40].type=cFFTmagphase instance[acf40].type=cAcf instance[cepstrum40].type=cAcf ; Pitch... instance[pitchACF].type=cPitchACF ;;; 25 ms frames features: instance[pe].type=cVectorPreemphasis instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmagphase].type=cFFTmagphase instance[mspec].type=cMelspec ; MFCC instance[mfcc].type=cMfcc instance[lpc].type=cLpc ; Line Spectral Frequencies instance[lsp].type=cLsp ; Zero-Crossings instance[mzcr].type=cMZcr ; Intensity and Loudness (narrow-band approximation) instance[intens].type=cIntensity ;;; all LLD concattenated and smoothed using a moving average filter instance[lld].type=cContourSmoother ; delta coefficients of LLD instance[delta1].type=cDeltaRegression ;;; functionals over FULL input (e.g. turns) instance[functL1].type=cFunctionals ;;; write instances to a Weka ARFF file (comment out to disable) instance[arffsink].type=cArffSink ;;; live classification of emotion (comment out lines to disable them): ;; run single threaded (nThreads=1) ; NOTE: a single thread is more efficient for processing small files, since multi-threaded processing involves more ; overhead during startup, which will make the system slower in the end nThreads=1 ;; do not show any internal dataMemory level settings ; (if you want to see them set the value to 1, 2, 3, or 4, depending on the amount of detail you wish) printLevelStats=0 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// component configuration //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ; the following sections configure the components listed above ; a help on configuration parameters can be obtained with ; SMILExtract -H ; or ; SMILExtract -H configTypeName (= componentTypeName) ///////////////////////////////////////////////////////////////////////////////////////////// [waveIn:cWaveSource] ; this sets the level this component writes to ; the level will be created by this component ; no other components may write to a level having the same name writer.dmLevel=wave ; this defines a new commandline option "-I" or "-inputfile", which can be used to specify ; the filename on the commandline instead of having it "hard-coded" in the config file filename=\cm[inputfile(I){test.wav}:name of input file] ; mix stereo files down to mono for analysis monoMixdown = 1 properTimestamps = 1 start = 0.0 end = -1 [fr40:cFramer] reader.dmLevel=wave writer.dmLevel=frames40 frameSize = 0.040 frameStep = 0.010 frameMode = fixed frameCenterSpecial = center [w40:cWindower] reader.dmLevel=frames40 writer.dmLevel=win40frame copyInputName = 1 processArrayFields = 1 winFunc = ham gain = 1.0 offset = 0 [fft40:cTransformFFT] reader.dmLevel=win40frame writer.dmLevel=fftc40 copyInputName = 1 processArrayFields = 1 inverse = 0 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmagphase40:cFFTmagphase] reader.dmLevel=fftc40 writer.dmLevel=fftmag40 copyInputName = 1 processArrayFields = 1 inverse = 0 magnitude = 1 phase = 0 [acf40:cAcf] reader.dmLevel=fftmag40 writer.dmLevel=acf40 nameAppend = acf copyInputName = 1 processArrayFields = 1 usePower = 1 cepstrum = 0 acfCepsNormOutput = 0 [cepstrum40:cAcf] reader.dmLevel=fftmag40 writer.dmLevel=cepstrum40 nameAppend = acf copyInputName = 1 processArrayFields = 1 usePower = 1 cepstrum = 1 acfCepsNormOutput = 0 oldCompatCepstrum = 1 absCepstrum = 1 [pitchACF:cPitchACF] ; the pitchACF component must ALWAYS read from acf AND cepstrum in the given order! reader.dmLevel=acf40;cepstrum40 writer.dmLevel=pitch processArrayFields=0 maxPitch = 500 voiceProb = 1 voiceQual = 0 HNR = 0 F0 = 1 F0raw = 0 F0env = 1 voicingCutoff = 0.550000 [fr25:cFramer] reader.dmLevel=wave writer.dmLevel=frames frameSize = 0.025 frameStep = 0.010 frameMode = fixed frameCenterSpecial = center [pe:cVectorPreemphasis] reader.dmLevel=frames writer.dmLevel=framespe copyInputName = 1 processArrayFields = 1 k=0.97 [win:cWindower] reader.dmLevel=framespe writer.dmLevel=winframe copyInputName = 1 processArrayFields = 1 winFunc = ham gain = 1.0 offset = 0 [fft:cTransformFFT] reader.dmLevel=winframe writer.dmLevel=fftc copyInputName = 1 processArrayFields = 1 inverse = 0 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmagphase:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag copyInputName = 1 processArrayFields = 1 inverse = 0 magnitude = 1 phase = 0 [mspec:cMelspec] reader.dmLevel=fftmag writer.dmLevel=mspec1 copyInputName = 1 processArrayFields = 1 htkcompatible = 1 nBands = 26 lofreq = 0 hifreq = 8000 usePower = 1 inverse = 0 specScale = mel [mfcc:cMfcc] reader.dmLevel=mspec1 writer.dmLevel=mfcc1 copyInputName = 0 processArrayFields = 1 firstMfcc = 1 lastMfcc = 12 cepLifter = 22.0 htkcompatible = 1 [lpc:cLpc] reader.dmLevel=framespe writer.dmLevel=lpc copyInputName = 1 processArrayFields = 1 method = acf p = 8 saveLPCoeff = 1 lpGain = 0 saveRefCoeff = 0 residual = 0 forwardFilter = 0 lpSpectrum = 0 [lsp:cLsp] reader.dmLevel=lpc writer.dmLevel=lsp copyInputName = 1 processArrayFields = 0 [intens:cIntensity] reader.dmLevel=frames writer.dmLevel=intens copyInputName = 1 processArrayFields = 1 intensity=1 loudness =1 [mzcr:cMZcr] reader.dmLevel=frames writer.dmLevel=mzcr copyInputName = 1 processArrayFields = 1 zcr = 1 amax = 0 mcr = 0 maxmin = 0 dc = 0 [lld:cContourSmoother] reader.dmLevel=intens;mfcc1;lsp;mzcr;pitch writer.dmLevel=lld writer.levelconf.nT = 2500 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 // ---- delta regression of LLD ---- [delta1:cDeltaRegression] reader.dmLevel=lld writer.dmLevel=lld_de blocksize=1 writer.levelconf.nT = 2500 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = de copyInputName = 1 noPostEOIprocessing = 0 deltawin=2 // statistical functionals [functL1:cFunctionals] reader.dmLevel=lld;lld_de writer.dmLevel=func copyInputName = 1 ; frameMode = var will enable the functionals component to listen for messages from the turn detector frameMode = full functionalsEnabled=Extremes;Regression;Moments;Percentiles Extremes.max = 1 Extremes.min = 1 Extremes.range = 1 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.amean = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 ; Note: the much better way to normalise the times of maxpos and minpos ; is 'turn', however for compatibility with old files the default 'frame' ; is kept here: Extremes.norm = frame Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 1 Regression.linregerrQ = 1 Regression.qregc1 = 0 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 0 Regression.centroid = 0 Regression.doRatioLimit = 0 Regression.centroidRatioLimit = 0 Moments.doRatioLimit = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 ////////////////////////////////////////////////////////////////////// /////////////////// data output configuration ////////////////////// ////////////////////////////////////////////////////////////////////// // ----- you can use this to save the features extracted ------ [arffsink:cArffSink] reader.dmLevel=func ; do not print "frameNumber" attribute to ARFF file number=0 ; name of output file as commandline option filename=\cm[arffout(O){output.arff}:name of WEKA Arff output file] ; name of @relation in the ARFF file relation=\cm[corpus{SMILEfeaturesLive}:corpus name, arff relation] ; base name of the current instance, turn number will be appended instanceBase=liveturn ; name of class label class[0].name = emotion ; list of nominal classes OR "numeric" class[0].type = \cm[classes{unknown}:all classes for arff file attribute] ; the class label or value for the current instance target[0].all = \cm[classlabel{unassigned}:instance class label] ; ** NOTE: theoretically the classified class label could be assigned here, however this would require ; ** saving the class label along with the frame in the dataMemory ; ** or sending this meta-data via a message (including frame number) ; ** neither solution is currently implemented.... :-( ; append=0 //////---------------------- END -------------------------/////// ================================================ FILE: config/emobase2010.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for emotion features < ////////////////// ///////// Based on INTERSPEECH 2010 paralinguistics challenge ////////////////// ///////// Pitch, Loudness, Jitter, MFCC, MFB, LSP and functionals ////////////////// ///////// ////////////////// ///////// 1582 1st level functionals: ////////////////// ///////// (34 LLD + 34 delta) * 21 functionals ////////////////// ///////// +(4 LLD + 4 delta) * 19 functionals ////////////////// ///////// + 1 x Num. pitch onsets (pseudo syllables) ////////////////// ///////// + 1 x turn duration in seconds ////////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschrnkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // // Usage: // SMILExtract -C thisconfig.conf -I input.wav -O output.arff // /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] ; this line configures the default data memory: instance[dataMemory].type=cDataMemory ;;; wave file input instance[waveIn].type=cWaveSource ;;; 40 ms frames features: instance[fr40].type=cFramer instance[w40].type=cWindower instance[fft40].type=cTransformFFT instance[fftmagphase40].type=cFFTmagphase ; SHS Pitch: instance[scale].type=cSpecScale instance[pitchShs].type=cPitchShs instance[pitchSmooth].type=cPitchSmoother instance[pitchJitter].type=cPitchJitter instance[pitchSmooth2].type=cPitchSmoother instance[res].type=cSpecResample ;;; 25 ms frames features: instance[fr25].type=cFramer instance[pe].type=cVectorPreemphasis instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmagphase].type=cFFTmagphase ; mfcc instance[mspec].type=cMelspec instance[mfcc].type=cMfcc ; log mel frequency bands (mfb) instance[mspec2].type=cMelspec instance[vo].type=cVectorOperation instance[lpc].type=cLpc ; Line Spectral Frequencies instance[lsp].type=cLsp ; Loudness (narrow-band approximation) instance[intens].type=cIntensity ;;; all LLD concattenated and smoothed using a moving average filter instance[lld].type=cContourSmoother instance[lld2].type=cContourSmoother ; delta coefficients of LLD instance[delta1].type=cDeltaRegression instance[delta2].type=cDeltaRegression ;;; functionals over FULL input (e.g. turns) instance[functL1].type=cFunctionals instance[functL1nz].type=cFunctionals instance[functOnsets].type=cFunctionals ;;; write/append ONE instance to a Weka ARFF file instance[arffsink].type=cArffSink ;; run single threaded (nThreads=1) ; NOTE: a single thread is more efficient for processing small files, since multi-threaded processing involves more ; overhead during startup, which will make the system slower in the end nThreads=1 ;; do not show any internal dataMemory level settings ; (if you want to see them set the value to 1, 2, 3, or 4, depending on the amount of detail you wish) printLevelStats=0 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// component configuration //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ; the following sections configure the components listed above ; a help on configuration parameters can be obtained with ; SMILExtract -H ; or ; SMILExtract -H configTypeName (= componentTypeName) ///////////////////////////////////////////////////////////////////////////////////////////// [waveIn:cWaveSource] ; this sets the level this component writes to ; the level will be created by this component ; no other components may write to a level having the same name writer.dmLevel=wave ; this defines a new commandline option "-I" or "-inputfile", which can be used to specify ; the filename on the commandline instead of having it "hard-coded" in the config file filename=\cm[inputfile(I){test.wav}:name of input file] ; mix stereo files down to mono for analysis monoMixdown=1 [fr40:cFramer] reader.dmLevel=wave writer.dmLevel=frames40 frameSize = 0.060 frameStep = 0.010 frameCenterSpecial = left [w40:cWindower] reader.dmLevel=frames40 writer.dmLevel=win40frame winFunc = gauss sigma=0.25 gain = 1.0 [fft40:cTransformFFT] reader.dmLevel=win40frame writer.dmLevel=fftc40 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmagphase40:cFFTmagphase] reader.dmLevel=fftc40 writer.dmLevel=fftmag40 [scale:cSpecScale] reader.dmLevel=fftmag40 writer.dmLevel=hps scale=log ; octave scale logScaleBase=2 [pitchShs:cPitchShs] reader.dmLevel=hps writer.dmLevel=pitchShs F0raw = 0 voicingClip = 0 voicingC1=0 scores=1 voicing=1 nCandidates=3 octaveCorrection=0 [pitchSmooth:cPitchSmoother] reader.dmLevel=pitchShs writer.dmLevel=pitch F0raw = 0 F0final = 0 F0finalEnv = 1 voicingFinalUnclipped = 1 medianFilter0 = 0 postSmoothingMethod = simple ;simple octaveCorrection = 0 writer.levelconf.nT=10 ;writer.levelconf.noHang=2 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 [pitchSmooth2:cPitchSmoother] reader.dmLevel=pitchShs writer.dmLevel=pitchF F0raw = 0 F0final = 1 F0finalEnv = 0 voicingFinalUnclipped = 0 medianFilter0 = 0 postSmoothingMethod = simple octaveCorrection = 0 writer.levelconf.nT=10 ;writer.levelconf.noHang=2 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ;;;; default (template) configuration section for component 'cPitchJitter' ;;;; [pitchJitter:cPitchJitter] reader.dmLevel = wave writer.dmLevel = jitter // nameAppend = copyInputName = 1 F0reader.dmLevel = pitchF F0field = F0final searchRangeRel = 0.250000 jitterLocal = 1 jitterDDP = 1 jitterLocalEnv = 0 jitterDDPEnv = 0 shimmerLocal = 1 shimmerLocalEnv = 0 onlyVoiced = 0 ;periodLengths = 0 ;periodStarts = 0 [fr25:cFramer] reader.dmLevel=wave writer.dmLevel=frames frameSize = 0.025 frameStep = 0.010 frameCenterSpecial = left [pe:cVectorPreemphasis] reader.dmLevel=frames writer.dmLevel=framespe k=0.97 [win:cWindower] reader.dmLevel=framespe writer.dmLevel=winframe winFunc = ham gain = 1.0 [fft:cTransformFFT] reader.dmLevel=winframe writer.dmLevel=fftc ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmagphase:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag [mspec:cMelspec] reader.dmLevel=fftmag writer.dmLevel=mspec1 htkcompatible = 0 usePower = 1 lofreq = 20 hifreq = 8000 nBands=26 [mfcc:cMfcc] reader.dmLevel = mspec1 writer.dmLevel = mfcc htkcompatible = 0 firstMfcc=0 lastMfcc=14 cepLifter=22 [mspec2:cMelspec] reader.dmLevel=fftmag writer.dmLevel=mspec2 htkcompatible = 0 usePower = 1 lofreq = 20 hifreq = 6500 nBands=8 [vo:cVectorOperation] reader.dmLevel=mspec2 writer.dmLevel=mspec2log operation = log copyInputName = 0 nameAppend=logMelFreqBand [res:cSpecResample] reader.dmLevel=fftc writer.dmLevel=outpR targetFs = 11000 [lpc:cLpc] ;reader.dmLevel=framespe reader.dmLevel=outpR writer.dmLevel=lpc p=8 method = acf saveLPCoeff = 1 lpGain = 0 saveRefCoeff = 0 residual = 0 forwardFilter = 0 lpSpectrum = 0 [lsp:cLsp] reader.dmLevel=lpc writer.dmLevel=lsp [intens:cIntensity] reader.dmLevel=frames writer.dmLevel=intens intensity=0 loudness=1 [mzcr:cMZcr] reader.dmLevel=frames writer.dmLevel=mzcr zcr=1 amax=0 mcr=0 maxmin=0 dc=0 [lld:cContourSmoother] reader.dmLevel=intens;mfcc;mspec2log;lsp;pitch writer.dmLevel=lld buffersize=1000 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 smaWin = 3 ; this level must grow to hold ALL the LLD of the full input // ---- delta regression of LLD ---- [delta1:cDeltaRegression] reader.dmLevel=lld writer.dmLevel=lld_de buffersize=1000 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 deltawin=2 blocksize=1 [lld2:cContourSmoother] reader.dmLevel=pitchF;jitter writer.dmLevel=lld2 buffersize=1000 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ; this level must grow to hold ALL the LLD of the full input // ---- delta regression of LLD ---- [delta2:cDeltaRegression] reader.dmLevel=lld2 writer.dmLevel=lld2_de buffersize=1000 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 deltawin=2 blocksize=1 [functOnsets:cFunctionals] reader.dmLevel=pitchF writer.dmLevel=functOnsets ; frameSize and frameStep = 0 => functionals over complete input ; (NOTE: buffersize of lld and lld_de levels must be large enough!!) frameMode = full //frameSize = 0 //frameStep = 0 copyInputName=0 functNameAppend=Turn functionalsEnabled=Onset;Times //noPostEOIprocessing = 0 Onset.threshold = 0 ;Onset.thresholdOnset = 0 ;Onset.thresholdOffset = 0 Onset.useAbsVal = 0 Onset.onsetPos = 0 Onset.offsetPos = 0 Onset.numOnsets = 1 Onset.numOffsets = 0 Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 0 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 1 Times.norm = second // statistical functionals [functL1:cFunctionals] reader.dmLevel=lld;lld_de writer.dmLevel=func ; frameSize and frameStep = 0 => functionals over complete input ; (NOTE: buffersize of lld and lld_de levels must be large enough!!) frameMode = full frameSize=0 frameStep=0 functionalsEnabled=Extremes;Regression;Moments;Percentiles;Times Extremes.max = 0 Extremes.min = 0 Extremes.range = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.amean = 1 Extremes.maxameandist=0 Extremes.minameandist=0 Extremes.norm=segment Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 1 Regression.linregerrQ = 1 Regression.qregc1 = 0 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 0 Regression.centroid = 0 Regression.doRatioLimit = 0 Regression.centroidRatioLimit = 0 Moments.doRatioLimit = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.quartile1 = 0 Percentiles.quartile2 = 0 Percentiles.quartile3 = 0 Percentiles.iqr = 1 Percentiles.iqr12 = 0 Percentiles.iqr23 = 0 Percentiles.iqr13 = 0 Percentiles.interp = 1 Percentiles.percentile = 0.01;0.99 Percentiles.pctlrange=0-1 Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 1 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.norm = turn // statistical functionals [functL1nz:cFunctionals] reader.dmLevel=lld2;lld2_de writer.dmLevel=funcNz ; frameSize and frameStep = 0 => functionals over complete input ; (NOTE: buffersize of lld and lld_de levels must be large enough!!) frameSize=0 frameStep=0 functionalsEnabled=Extremes;Regression;Moments;Percentiles;Times Extremes.max = 0 Extremes.min = 0 Extremes.range = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.amean = 1 Extremes.maxameandist=0 Extremes.minameandist=0 Extremes.norm = segment Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 1 Regression.linregerrQ = 1 Regression.qregc1 = 0 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 0 Regression.centroid = 0 Regression.doRatioLimit = 0 Regression.centroidRatioLimit = 0 Moments.doRatioLimit = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.quartile1 = 0 Percentiles.quartile2 = 0 Percentiles.quartile3 = 0 Percentiles.iqr = 1 Percentiles.iqr12 = 0 Percentiles.iqr23 = 0 Percentiles.iqr13 = 0 Percentiles.interp = 1 Percentiles.percentile = 0.99 ;Percentiles.pctlrange=0-1 Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 1 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.norm = segment nonZeroFuncts=1 ////////////////////////////////////////////////////////////////////// /////////////////// data output configuration ////////////////////// ////////////////////////////////////////////////////////////////////// // ----- you might need to customise the arff output to suit your needs: ------ [arffsink:cArffSink] reader.dmLevel=func;funcNz;functOnsets ; do not print "frameNumber" attribute to ARFF file frameIndex=0 frameTime=0 ; name of output file as commandline option filename=\cm[arffout(O){output.arff}:name of WEKA Arff output file] ; name of @relation in the ARFF file relation=\cm[corpus{SMILEfeatures}:corpus name, arff relation] ; name of the current instance (usually file name of input wave file) instanceName=\cm[instname(N){noname}:name of arff instance] ; this includes the file 'arff_targets.conf' which configures ; the target classes (ground truths) which are added to the ARFF file ; based on command-line options \{arff_targets.conf} ; append to an existing file, so multiple calls of SMILExtract on different ; input files append to the same output ARFF file append=1 //////---------------------- END -------------------------/////// ================================================ FILE: config/emobase_live4.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for live emotion recognition < /////////////// ///////// base set of 988 features, 1st level functionals ////////////////// ///////// of low-level descriptors such as MFCC, Pitch, LSP, ... ////////////////// ///////// ////////////////// ///////// * written 2009 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) 2014 audEERING UG (haftungsbeschrnkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] ;this line configures the default data memory: instance[dataMemory].type=cDataMemory ;;; PortAudio live sound card input instance[waveIn].type=cPortaudioSource instance[fr25].type=cFramer ;; VAD (energy-based) instance[energy].type=cEnergy instance[turn].type=cTurnDetector ;;; 40 ms frames features: instance[fr40].type=cFramer instance[w40].type=cWindower instance[fft40].type=cTransformFFT instance[fftmagphase40].type=cFFTmagphase instance[acf40].type=cAcf instance[cepstrum40].type=cAcf ; Pitch... instance[pitchACF].type=cPitchACF ;;; 25 ms frames features: instance[pe].type=cVectorPreemphasis instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmagphase].type=cFFTmagphase instance[mspec].type=cMelspec ; MFCC instance[mfcc].type=cMfcc instance[lpc].type=cLpc ; Line Spectral Frequencies instance[lsp].type=cLsp ; Zero-Crossings instance[mzcr].type=cMZcr ; Intensity and Loudness (narrow-band approximation) instance[intens].type=cIntensity ;;; all LLD concattenated and smoothed using a moving average filter instance[lld].type=cContourSmoother ; delta coefficients of LLD instance[delta1].type=cDeltaRegression ;;; functionals over FULL input (e.g. turns) instance[functL1].type=cFunctionals ;;; write instances to a Weka ARFF file (comment out to disable) instance[arffsink].type=cArffSink ;;; save recorded and segmented turn to a wave file (remove comment to enable) ;instance[turnDump].type=cWaveSinkCut ;;; live classification of emotion (comment out lines to disable them): instance[arousal].type=cLibsvmLiveSink instance[valence].type=cLibsvmLiveSink instance[emodbEmotion].type=cLibsvmLiveSink instance[abcAffect].type=cLibsvmLiveSink instance[avicInterest].type=cLibsvmLiveSink ;; run single threaded (nThreads=1) ; NOTE: a single thread is more efficient for processing small files, since multi-threaded processing involves more ; overhead during startup, which will make the system slower in the end nThreads=1 ;; do not show any internal dataMemory level settings ; (if you want to see them set the value to 1, 2, 3, or 4, depending on the amount of detail you wish) printLevelStats=0 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// component configuration //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ; the following sections configure the components listed above ; a help on configuration parameters can be obtained with ; SMILExtract -H ; or ; SMILExtract -H configTypeName (= componentTypeName) ///////////////////////////////////////////////////////////////////////////////////////////// [waveIn:cPortaudioSource] ; this sets the level this component writes to ; the level will be created by this component ; no other components may write to a level having the same name writer.dmLevel=wave ; this sets the portaudio recording device, leave commented out to use the default device device = \cm[device{-1}:portaudio device number to record from] ; uncomment the following line to obtain a list of available devices when you call ; SMILExtract -C config/emobase_live4.conf ; after displaying the device list, SMILExtract will exit. ; Thus, for normal operation you have to comment the line out again listDevices=\cm[listdevices{0}:list devices] ; record in mono channels = 1 ; we want to record audio in 16kHz from the audio device ; Note that some audio devices do not support this sample rate, ; if this is the case, try a different device, or use a resampling component ; (which is not yet integrated in a working version...) sampleRate = 16000 ; size of chunks returned by PortAudio (the latency is >= this value) audioBuffersize_sec = 0.16 ; the buffersize of the pcm data ringbuffer (don't make this too small, or you might loose data, ; if your system load is low to normal, this size also does not affect the latency. ; Only during high load this buffersize is an upper limit for the latency.) buffersize_sec=2.0 [fr40:cFramer] reader.dmLevel=wave writer.dmLevel=frames40 frameSize = 0.040 frameStep = 0.010 frameMode = fixed frameCenterSpecial = center [w40:cWindower] reader.dmLevel=frames40 writer.dmLevel=win40frame copyInputName = 1 processArrayFields = 1 winFunc = ham gain = 1.0 offset = 0 [fft40:cTransformFFT] reader.dmLevel=win40frame writer.dmLevel=fftc40 copyInputName = 1 processArrayFields = 1 inverse = 0 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmagphase40:cFFTmagphase] reader.dmLevel=fftc40 writer.dmLevel=fftmag40 copyInputName = 1 processArrayFields = 1 inverse = 0 magnitude = 1 phase = 0 [acf40:cAcf] reader.dmLevel=fftmag40 writer.dmLevel=acf40 nameAppend = acf copyInputName = 1 processArrayFields = 1 usePower = 1 cepstrum = 0 acfCepsNormOutput = 0 [cepstrum40:cAcf] reader.dmLevel=fftmag40 writer.dmLevel=cepstrum40 nameAppend = acf copyInputName = 1 processArrayFields = 1 usePower = 1 cepstrum = 1 acfCepsNormOutput = 0 oldCompatCepstrum = 1 absCepstrum = 1 [pitchACF:cPitchACF] ; the pitchACF component must ALWAYS read from acf AND cepstrum in the given order! reader.dmLevel=acf40;cepstrum40 writer.dmLevel=pitch processArrayFields=0 maxPitch = 500 voiceProb = 1 voiceQual = 0 HNR = 0 F0 = 1 F0raw = 0 F0env = 1 voicingCutoff = 0.550000 [fr25:cFramer] reader.dmLevel=wave writer.dmLevel=frames frameSize = 0.025 frameStep = 0.010 frameMode = fixed frameCenterSpecial = center [pe:cVectorPreemphasis] reader.dmLevel=frames writer.dmLevel=framespe copyInputName = 1 processArrayFields = 1 k=0.97 [win:cWindower] reader.dmLevel=framespe writer.dmLevel=winframe copyInputName = 1 processArrayFields = 1 winFunc = ham gain = 1.0 offset = 0 [fft:cTransformFFT] reader.dmLevel=winframe writer.dmLevel=fftc copyInputName = 1 processArrayFields = 1 inverse = 0 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmagphase:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag copyInputName = 1 processArrayFields = 1 inverse = 0 magnitude = 1 phase = 0 [mspec:cMelspec] reader.dmLevel=fftmag writer.dmLevel=mspec1 copyInputName = 1 processArrayFields = 1 htkcompatible = 1 nBands = 26 lofreq = 0 hifreq = 8000 usePower = 1 inverse = 0 specScale = mel [mfcc:cMfcc] reader.dmLevel=mspec1 writer.dmLevel=mfcc1 copyInputName = 0 processArrayFields = 1 firstMfcc = 1 lastMfcc = 12 cepLifter = 22.0 htkcompatible = 1 [lpc:cLpc] reader.dmLevel=framespe writer.dmLevel=lpc copyInputName = 1 processArrayFields = 1 method = acf p = 8 saveLPCoeff = 1 lpGain = 0 saveRefCoeff = 0 residual = 0 forwardFilter = 0 lpSpectrum = 0 [lsp:cLsp] reader.dmLevel=lpc writer.dmLevel=lsp copyInputName = 1 processArrayFields = 0 [intens:cIntensity] reader.dmLevel=frames writer.dmLevel=intens copyInputName = 1 processArrayFields = 1 intensity=1 loudness =1 [mzcr:cMZcr] reader.dmLevel=frames writer.dmLevel=mzcr copyInputName = 1 processArrayFields = 1 zcr = 1 amax = 0 mcr = 0 maxmin = 0 dc = 0 [lld:cContourSmoother] reader.dmLevel=intens;mfcc1;lsp;mzcr;pitch writer.dmLevel=lld writer.levelconf.nT = 2500 writer.levelconf.isRb=1 writer.levelconf.growDyn=0 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 // ---- delta regression of LLD ---- [delta1:cDeltaRegression] reader.dmLevel=lld writer.dmLevel=lld_de blocksize=1 writer.levelconf.nT = 2500 writer.levelconf.isRb=1 writer.levelconf.growDyn=0 nameAppend = de copyInputName = 1 noPostEOIprocessing = 0 deltawin=2 [energy:cEnergy] reader.dmLevel=winframe writer.dmLevel=energy rms=1 log=0 // the voice activity detection (turn detector) [turn:cTurnDetector] reader.dmLevel=energy writer.dmLevel=isTurn ; overwrite data in output level, if it has not been read and level is full ; we must set this here, since the level isTurn is a dead-end in our configuration writer.levelconf.noHang=1 ; send a message to the functionals component at turn end messageRecp = functL1 ; send turn start / turn end event messages to the debug turn wave file output component eventRecp = turnDump ;; you may not increase this over the writer.levelconf.nT value of the lld and lld_de levels! ;; so by default not more than 24! maxTurnLength = 12 maxTurnLengthGrace = 3 idx = 0 nPost = 30 nPre = 10 useRMS = 1 ; disable auto adjustment of VAD threshold, this does not work well yet. autoThreshold = 0 ; instead, set the threshold manually to a default value. ; this derived from the RMS energy from normalised sample values (0..1) ; --> !!!!! you might need to adjust this value depending on your recording setup !!!!!!! <------------------- threshold = 0.0015 ; --> !!!!! you might need to adjust this value depending on your recording setup !!!!!!! <------------------- // statistical functionals [functL1:cFunctionals] reader.dmLevel=lld;lld_de writer.dmLevel=func copyInputName = 1 ; frameMode = var will enable the functionals component to listen for messages from the turn detector frameMode = var functionalsEnabled=Extremes;Regression;Moments;Percentiles Extremes.max = 1 Extremes.min = 1 Extremes.range = 1 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.amean = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 ; Note: the much better way to normalise the times of maxpos and minpos ; is 'turn', however for compatibility with old files the default 'frame' ; is kept here: Extremes.norm = frame Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 1 Regression.linregerrQ = 1 Regression.qregc1 = 0 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 0 Regression.centroid = 0 Regression.doRatioLimit = 0 Regression.centroidRatioLimit = 0 Moments.doRatioLimit = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 ////////////////////////////////////////////////////////////////////// /////////////////// data output configuration ////////////////////// ////////////////////////////////////////////////////////////////////// // output recorded and segmented turns as wave files for debugging purposes // if you do not want this output, then you can disable this component [turnDump:cWaveSinkCut] reader.dmLevel = frames // ----- you can use this to save the features extracted ------ [arffsink:cArffSink] reader.dmLevel=func ; do not print "frameNumber" attribute to ARFF file number=0 ; name of output file as commandline option filename=\cm[arffout(O){output.arff}:name of WEKA Arff output file] ; name of @relation in the ARFF file relation=\cm[corpus{SMILEfeaturesLive}:corpus name, arff relation] ; base name of the current instance, turn number will be appended instanceBase=liveturn ; name of class label class[0].name = emotion ; list of nominal classes OR "numeric" class[0].type = \cm[classes{unknown}:all classes for arff file attribute] ; the class label or value for the current instance target[0].all = \cm[classlabel{unassigned}:instance class label] ; ** NOTE: theoretically the classified class label could be assigned here, however this would require ; ** saving the class label along with the frame in the dataMemory ; ** or sending this meta-data via a message (including frame number) ; ** neither solution is currently implemented.... :-( ; append=0 // LibSVM dataSink for live classification of extracted features // continuous arousal from QUB-SAL corpus [arousal:cLibsvmLiveSink] reader.dmLevel=func ; model file to use model=models/emo/sal_aro.emobase.model ; scale file to use scale=models/emo/sal_aro.emobase.scale ;; you could use the following line to send the classification result to a custom component ;resultRecp=emmaSender ;resultMessageName=arousal ;; print result to console window printResult=1 forceScale = 0 // LibSVM dataSink for live classification of extracted features // continuous valence from QUB-SAL corpus [valence:cLibsvmLiveSink] reader.dmLevel=func ; model file to use model=models/emo/sal_val.emobase.model ; scale file to use scale=models/emo/sal_val.emobase.scale ;; you could use the following line to send the classification result to a custom component ;resultRecp=emmaSender ;resultMessageName=valence ;; print result to console window printResult=1 forceScale = 0 // LibSVM dataSink for live classification of extracted features // Emotion from Berlin Speech Emotion Database (EMO-DB) [emodbEmotion:cLibsvmLiveSink] reader.dmLevel=func ; model file to use model=models/emo/emodb.emobase.model ; scale file to use scale=models/emo/emodb.emobase.scale ; class names: classes=models/emo/emodb.emobase.classes ;; you could use the following line to send the classification result to a custom component ;resultRecp=emmaSender ;resultMessageName=arousal ;; print result to console window printResult=1 ; also display per-class probabilities (of SVM models) predictProbability=1 forceScale = 0 // LibSVM dataSink for live classification of extracted features // Affective state from TUM Airplane Behaviour Corpus (ABC) [abcAffect:cLibsvmLiveSink] reader.dmLevel=func ; model file to use model=models/emo/abc.emobase.model ; scale file to use scale=models/emo/abc.emobase.scale ; class names: classes=models/emo/abc.emobase.classes ;; you could use the following line to send the classification result to a custom component ;resultRecp=emmaSender ;resultMessageName=arousal ;; print result to console window printResult=1 ; also display per-class probabilities (of SVM models) predictProbability=1 forceScale = 0 // LibSVM dataSink for live classification of extracted features // Interest level from TUM Audiovisual Interest Corpus (AVIC) [avicInterest:cLibsvmLiveSink] reader.dmLevel=func ; model file to use model=models/emo/avic.emobase.model ; scale file to use scale=models/emo/avic.emobase.scale ; class names: classes=models/emo/avic.emobase.classes ;; you could use the following line to send the classification result to a custom component ;resultRecp=emmaSender ;resultMessageName=arousal ;; print result to console window printResult=1 ; also display per-class probabilities (of SVM models) predictProbability=1 forceScale = 0 //////---------------------- END -------------------------/////// ================================================ FILE: config/emobase_live4_batch.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for live emotion recognition < /////////////// ///////// base set of 988 features, 1st level functionals ////////////////// ///////// of low-level descriptors such as MFCC, Pitch, LSP, ... ////////////////// ///////// ////////////////// ///////// * written 2009 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) 2014 audEERING UG (haftungsbeschrnkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // Modified version: // - compatibility of newest 2.1 openSMILE code with openEAR 0.1.0 models // - for batch processing, including speech activity detector for automatic sub-segmentation // (see '*_batch_single.conf' for a version without this detector) /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] ;this line configures the default data memory: instance[dataMemory].type=cDataMemory instance[waveIn].type=cWaveSource instance[fr25].type=cFramer ;; VAD (energy-based) instance[energy].type=cEnergy instance[turn].type=cTurnDetector ;;; 40 ms frames features: instance[fr40].type=cFramer instance[w40].type=cWindower instance[fft40].type=cTransformFFT instance[fftmagphase40].type=cFFTmagphase instance[acf40].type=cAcf instance[cepstrum40].type=cAcf ; Pitch... instance[pitchACF].type=cPitchACF ;;; 25 ms frames features: instance[pe].type=cVectorPreemphasis instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmagphase].type=cFFTmagphase instance[mspec].type=cMelspec ; MFCC instance[mfcc].type=cMfcc instance[lpc].type=cLpc ; Line Spectral Frequencies instance[lsp].type=cLsp ; Zero-Crossings instance[mzcr].type=cMZcr ; Intensity and Loudness (narrow-band approximation) instance[intens].type=cIntensity ;;; all LLD concattenated and smoothed using a moving average filter instance[lld].type=cContourSmoother ; delta coefficients of LLD instance[delta1].type=cDeltaRegression ;;; functionals over FULL input (e.g. turns) instance[functL1].type=cFunctionals ;;; write instances to a Weka ARFF file (comment out to disable) instance[arffsink].type=cArffSink ;;; save recorded and segmented turn to a wave file (remove comment to enable) ;instance[turnDump].type=cWaveSinkCut ;;; live classification of emotion (comment out lines to disable them): instance[arousal].type=cLibsvmLiveSink instance[valence].type=cLibsvmLiveSink instance[emodbEmotion].type=cLibsvmLiveSink instance[abcAffect].type=cLibsvmLiveSink instance[avicInterest].type=cLibsvmLiveSink ;; run single threaded (nThreads=1) ; NOTE: a single thread is more efficient for processing small files, since multi-threaded processing involves more ; overhead during startup, which will make the system slower in the end nThreads=1 ;; do not show any internal dataMemory level settings ; (if you want to see them set the value to 1, 2, 3, or 4, depending on the amount of detail you wish) printLevelStats=0 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// component configuration //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ; the following sections configure the components listed above ; a help on configuration parameters can be obtained with ; SMILExtract -H ; or ; SMILExtract -H configTypeName (= componentTypeName) ///////////////////////////////////////////////////////////////////////////////////////////// [waveIn:cWaveSource] ; this sets the level this component writes to ; the level will be created by this component ; no other components may write to a level having the same name writer.dmLevel=wave ; this defines a new commandline option "-I" or "-inputfile", which can be used to specify ; the filename on the commandline instead of having it "hard-coded" in the config file filename=\cm[inputfile(I){test.wav}:name of input file] ; mix stereo files down to mono for analysis monoMixdown = 1 properTimestamps = 1 [fr40:cFramer] reader.dmLevel=wave writer.dmLevel=frames40 frameSize = 0.040 frameStep = 0.010 frameMode = fixed frameCenterSpecial = center [w40:cWindower] reader.dmLevel=frames40 writer.dmLevel=win40frame copyInputName = 1 processArrayFields = 1 winFunc = ham gain = 1.0 offset = 0 [fft40:cTransformFFT] reader.dmLevel=win40frame writer.dmLevel=fftc40 copyInputName = 1 processArrayFields = 1 inverse = 0 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmagphase40:cFFTmagphase] reader.dmLevel=fftc40 writer.dmLevel=fftmag40 copyInputName = 1 processArrayFields = 1 inverse = 0 magnitude = 1 phase = 0 [acf40:cAcf] reader.dmLevel=fftmag40 writer.dmLevel=acf40 nameAppend = acf copyInputName = 1 processArrayFields = 1 usePower = 1 cepstrum = 0 acfCepsNormOutput = 0 [cepstrum40:cAcf] reader.dmLevel=fftmag40 writer.dmLevel=cepstrum40 nameAppend = acf copyInputName = 1 processArrayFields = 1 usePower = 1 cepstrum = 1 acfCepsNormOutput = 0 oldCompatCepstrum = 1 absCepstrum = 1 [pitchACF:cPitchACF] ; the pitchACF component must ALWAYS read from acf AND cepstrum in the given order! reader.dmLevel=acf40;cepstrum40 writer.dmLevel=pitch processArrayFields=0 maxPitch = 500 voiceProb = 1 voiceQual = 0 HNR = 0 F0 = 1 F0raw = 0 F0env = 1 voicingCutoff = 0.550000 [fr25:cFramer] reader.dmLevel=wave writer.dmLevel=frames frameSize = 0.025 frameStep = 0.010 frameMode = fixed frameCenterSpecial = center [pe:cVectorPreemphasis] reader.dmLevel=frames writer.dmLevel=framespe copyInputName = 1 processArrayFields = 1 k=0.97 [win:cWindower] reader.dmLevel=framespe writer.dmLevel=winframe copyInputName = 1 processArrayFields = 1 winFunc = ham gain = 1.0 offset = 0 [fft:cTransformFFT] reader.dmLevel=winframe writer.dmLevel=fftc copyInputName = 1 processArrayFields = 1 inverse = 0 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmagphase:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag copyInputName = 1 processArrayFields = 1 inverse = 0 magnitude = 1 phase = 0 [mspec:cMelspec] reader.dmLevel=fftmag writer.dmLevel=mspec1 copyInputName = 1 processArrayFields = 1 htkcompatible = 1 nBands = 26 lofreq = 0 hifreq = 8000 usePower = 1 inverse = 0 specScale = mel [mfcc:cMfcc] reader.dmLevel=mspec1 writer.dmLevel=mfcc1 copyInputName = 0 processArrayFields = 1 firstMfcc = 1 lastMfcc = 12 cepLifter = 22.0 htkcompatible = 1 [lpc:cLpc] reader.dmLevel=framespe writer.dmLevel=lpc copyInputName = 1 processArrayFields = 1 method = acf p = 8 saveLPCoeff = 1 lpGain = 0 saveRefCoeff = 0 residual = 0 forwardFilter = 0 lpSpectrum = 0 [lsp:cLsp] reader.dmLevel=lpc writer.dmLevel=lsp copyInputName = 1 processArrayFields = 0 [intens:cIntensity] reader.dmLevel=frames writer.dmLevel=intens copyInputName = 1 processArrayFields = 1 intensity=1 loudness =1 [mzcr:cMZcr] reader.dmLevel=frames writer.dmLevel=mzcr copyInputName = 1 processArrayFields = 1 zcr = 1 amax = 0 mcr = 0 maxmin = 0 dc = 0 [lld:cContourSmoother] reader.dmLevel=intens;mfcc1;lsp;mzcr;pitch writer.dmLevel=lld writer.levelconf.nT = 2500 writer.levelconf.isRb=1 writer.levelconf.growDyn=0 writer.levelconf.noHang = 2 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 // ---- delta regression of LLD ---- [delta1:cDeltaRegression] reader.dmLevel=lld writer.dmLevel=lld_de blocksize=1 writer.levelconf.nT = 2500 writer.levelconf.isRb=1 writer.levelconf.growDyn=0 writer.levelconf.noHang = 2 nameAppend = de copyInputName = 1 noPostEOIprocessing = 0 deltawin=2 [energy:cEnergy] reader.dmLevel=winframe writer.dmLevel=energy rms=1 log=0 // the voice activity detection (turn detector) [turn:cTurnDetector] reader.dmLevel=energy writer.dmLevel=isTurn ; overwrite data in output level, if it has not been read and level is full ; we must set this here, since the level isTurn is a dead-end in our configuration writer.levelconf.noHang=1 ; send a message to the functionals component at turn end messageRecp = functL1 ; send turn start / turn end event messages to the debug turn wave file output component eventRecp = turnDump ;; you may not increase this over the writer.levelconf.nT value of the lld and lld_de levels! ;; so by default not more than 24! maxTurnLength = 12 maxTurnLengthGrace = 3 idx = 0 nPost = 30 nPre = 10 useRMS = 1 ; disable auto adjustment of VAD threshold, this does not work well yet. autoThreshold = 0 ; instead, set the threshold manually to a default value. ; this derived from the RMS energy from normalised sample values (0..1) ; --> !!!!! you might need to adjust this value depending on your recording setup !!!!!!! <------------------- threshold = 0.0015 ; --> !!!!! you might need to adjust this value depending on your recording setup !!!!!!! <------------------- // statistical functionals [functL1:cFunctionals] reader.dmLevel=lld;lld_de writer.dmLevel=func copyInputName = 1 ; frameMode = var will enable the functionals component to listen for messages from the turn detector frameMode = var functionalsEnabled=Extremes;Regression;Moments;Percentiles Extremes.max = 1 Extremes.min = 1 Extremes.range = 1 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.amean = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 ; Note: the much better way to normalise the times of maxpos and minpos ; is 'turn', however for compatibility with old files the default 'frame' ; is kept here: Extremes.norm = frame Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 1 Regression.linregerrQ = 1 Regression.qregc1 = 0 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 0 Regression.centroid = 0 Regression.doRatioLimit = 0 Regression.centroidRatioLimit = 0 Moments.doRatioLimit = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 ////////////////////////////////////////////////////////////////////// /////////////////// data output configuration ////////////////////// ////////////////////////////////////////////////////////////////////// // output recorded and segmented turns as wave files for debugging purposes // if you do not want this output, then you can disable this component [turnDump:cWaveSinkCut] reader.dmLevel = frames // ----- you can use this to save the features extracted ------ [arffsink:cArffSink] reader.dmLevel=func ; do not print "frameNumber" attribute to ARFF file number=0 ; name of output file as commandline option filename=\cm[arffout(O){output.arff}:name of WEKA Arff output file] ; name of @relation in the ARFF file relation=\cm[corpus{SMILEfeaturesLive}:corpus name, arff relation] ; base name of the current instance, turn number will be appended instanceBase=liveturn ; name of class label class[0].name = emotion ; list of nominal classes OR "numeric" class[0].type = \cm[classes{unknown}:all classes for arff file attribute] ; the class label or value for the current instance target[0].all = \cm[classlabel{unassigned}:instance class label] ; ** NOTE: theoretically the classified class label could be assigned here, however this would require ; ** saving the class label along with the frame in the dataMemory ; ** or sending this meta-data via a message (including frame number) ; ** neither solution is currently implemented.... :-( ; append=0 // LibSVM dataSink for live classification of extracted features // continuous arousal from QUB-SAL corpus [arousal:cLibsvmLiveSink] reader.dmLevel=func ; model file to use model=models/emo/sal_aro.emobase.model ; scale file to use scale=models/emo/sal_aro.emobase.scale ;; you could use the following line to send the classification result to a custom component ;resultRecp=emmaSender ;resultMessageName=arousal ;; print result to console window printResult=0 printParseableResult = 1 forceScale = 0 // LibSVM dataSink for live classification of extracted features // continuous valence from QUB-SAL corpus [valence:cLibsvmLiveSink] reader.dmLevel=func ; model file to use model=models/emo/sal_val.emobase.model ; scale file to use scale=models/emo/sal_val.emobase.scale ;; you could use the following line to send the classification result to a custom component ;resultRecp=emmaSender ;resultMessageName=valence ;; print result to console window printResult=0 printParseableResult = 1 forceScale = 0 // LibSVM dataSink for live classification of extracted features // Emotion from Berlin Speech Emotion Database (EMO-DB) [emodbEmotion:cLibsvmLiveSink] reader.dmLevel=func ; model file to use model=models/emo/emodb.emobase.model ; scale file to use scale=models/emo/emodb.emobase.scale ; class names: classes=models/emo/emodb.emobase.classes ;; you could use the following line to send the classification result to a custom component ;resultRecp=emmaSender ;resultMessageName=arousal ;; print result to console window printResult=0 printParseableResult = 1 ; also display per-class probabilities (of SVM models) predictProbability=1 forceScale = 0 // LibSVM dataSink for live classification of extracted features // Affective state from TUM Airplane Behaviour Corpus (ABC) [abcAffect:cLibsvmLiveSink] reader.dmLevel=func ; model file to use model=models/emo/abc.emobase.model ; scale file to use scale=models/emo/abc.emobase.scale ; class names: classes=models/emo/abc.emobase.classes ;; you could use the following line to send the classification result to a custom component ;resultRecp=emmaSender ;resultMessageName=arousal ;; print result to console window printResult=0 printParseableResult = 1 ; also display per-class probabilities (of SVM models) predictProbability=1 forceScale = 0 // LibSVM dataSink for live classification of extracted features // Interest level from TUM Audiovisual Interest Corpus (AVIC) [avicInterest:cLibsvmLiveSink] reader.dmLevel=func ; model file to use model=models/emo/avic.emobase.model ; scale file to use scale=models/emo/avic.emobase.scale ; class names: classes=models/emo/avic.emobase.classes ;; you could use the following line to send the classification result to a custom component ;resultRecp=emmaSender ;resultMessageName=arousal ;; print result to console window printResult=0 printParseableResult = 1 ; also display per-class probabilities (of SVM models) predictProbability=1 forceScale = 0 //////---------------------- END -------------------------/////// ================================================ FILE: config/emobase_live4_batch_single.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for live emotion recognition < /////////////// ///////// base set of 988 features, 1st level functionals ////////////////// ///////// of low-level descriptors such as MFCC, Pitch, LSP, ... ////////////////// ///////// ////////////////// ///////// * written 2009 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) 2014 audEERING UG (haftungsbeschrnkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // Modified version: // - compatibility of newest 2.1 openSMILE code with openEAR 0.1.0 models // - for batch processing, without speech activity detector // - processes the whole input as single segment /////////////////////////////////////////////////////////////////////////////////////// ; ; This section is always required in openSMILE configuration files ; it configures the componentManager and gives a list of all components which are to be loaded ; The order in which the components are listed should match ; the order of the data flow for most efficient processing ; /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] ;this line configures the default data memory: instance[dataMemory].type=cDataMemory instance[waveIn].type=cWaveSource instance[fr25].type=cFramer ;;; 40 ms frames features: instance[fr40].type=cFramer instance[w40].type=cWindower instance[fft40].type=cTransformFFT instance[fftmagphase40].type=cFFTmagphase instance[acf40].type=cAcf instance[cepstrum40].type=cAcf ; Pitch... instance[pitchACF].type=cPitchACF ;;; 25 ms frames features: instance[pe].type=cVectorPreemphasis instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmagphase].type=cFFTmagphase instance[mspec].type=cMelspec ; MFCC instance[mfcc].type=cMfcc instance[lpc].type=cLpc ; Line Spectral Frequencies instance[lsp].type=cLsp ; Zero-Crossings instance[mzcr].type=cMZcr ; Intensity and Loudness (narrow-band approximation) instance[intens].type=cIntensity ;;; all LLD concattenated and smoothed using a moving average filter instance[lld].type=cContourSmoother ; delta coefficients of LLD instance[delta1].type=cDeltaRegression ;;; functionals over FULL input (e.g. turns) instance[functL1].type=cFunctionals ;;; write instances to a Weka ARFF file (comment out to disable) instance[arffsink].type=cArffSink ;;; save recorded and segmented turn to a wave file (remove comment to enable) ;instance[turnDump].type=cWaveSinkCut ;;; live classification of emotion (comment out lines to disable them): instance[arousal].type=cLibsvmLiveSink instance[valence].type=cLibsvmLiveSink instance[emodbEmotion].type=cLibsvmLiveSink instance[abcAffect].type=cLibsvmLiveSink instance[avicInterest].type=cLibsvmLiveSink ;; run single threaded (nThreads=1) ; NOTE: a single thread is more efficient for processing small files, since multi-threaded processing involves more ; overhead during startup, which will make the system slower in the end nThreads=1 ;; do not show any internal dataMemory level settings ; (if you want to see them set the value to 1, 2, 3, or 4, depending on the amount of detail you wish) printLevelStats=0 ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// component configuration //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ; the following sections configure the components listed above ; a help on configuration parameters can be obtained with ; SMILExtract -H ; or ; SMILExtract -H configTypeName (= componentTypeName) ///////////////////////////////////////////////////////////////////////////////////////////// [waveIn:cWaveSource] ; this sets the level this component writes to ; the level will be created by this component ; no other components may write to a level having the same name writer.dmLevel=wave ; this defines a new commandline option "-I" or "-inputfile", which can be used to specify ; the filename on the commandline instead of having it "hard-coded" in the config file filename=\cm[inputfile(I){test.wav}:name of input file] ; mix stereo files down to mono for analysis monoMixdown = 1 properTimestamps = 1 start = 0.0 end = -1 [fr40:cFramer] reader.dmLevel=wave writer.dmLevel=frames40 frameSize = 0.040 frameStep = 0.010 frameMode = fixed frameCenterSpecial = center [w40:cWindower] reader.dmLevel=frames40 writer.dmLevel=win40frame copyInputName = 1 processArrayFields = 1 winFunc = ham gain = 1.0 offset = 0 [fft40:cTransformFFT] reader.dmLevel=win40frame writer.dmLevel=fftc40 copyInputName = 1 processArrayFields = 1 inverse = 0 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmagphase40:cFFTmagphase] reader.dmLevel=fftc40 writer.dmLevel=fftmag40 copyInputName = 1 processArrayFields = 1 inverse = 0 magnitude = 1 phase = 0 [acf40:cAcf] reader.dmLevel=fftmag40 writer.dmLevel=acf40 nameAppend = acf copyInputName = 1 processArrayFields = 1 usePower = 1 cepstrum = 0 acfCepsNormOutput = 0 [cepstrum40:cAcf] reader.dmLevel=fftmag40 writer.dmLevel=cepstrum40 nameAppend = acf copyInputName = 1 processArrayFields = 1 usePower = 1 cepstrum = 1 acfCepsNormOutput = 0 oldCompatCepstrum = 1 absCepstrum = 1 [pitchACF:cPitchACF] ; the pitchACF component must ALWAYS read from acf AND cepstrum in the given order! reader.dmLevel=acf40;cepstrum40 writer.dmLevel=pitch processArrayFields=0 maxPitch = 500 voiceProb = 1 voiceQual = 0 HNR = 0 F0 = 1 F0raw = 0 F0env = 1 voicingCutoff = 0.550000 [fr25:cFramer] reader.dmLevel=wave writer.dmLevel=frames frameSize = 0.025 frameStep = 0.010 frameMode = fixed frameCenterSpecial = center [pe:cVectorPreemphasis] reader.dmLevel=frames writer.dmLevel=framespe copyInputName = 1 processArrayFields = 1 k=0.97 [win:cWindower] reader.dmLevel=framespe writer.dmLevel=winframe copyInputName = 1 processArrayFields = 1 winFunc = ham gain = 1.0 offset = 0 [fft:cTransformFFT] reader.dmLevel=winframe writer.dmLevel=fftc copyInputName = 1 processArrayFields = 1 inverse = 0 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmagphase:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag copyInputName = 1 processArrayFields = 1 inverse = 0 magnitude = 1 phase = 0 [mspec:cMelspec] reader.dmLevel=fftmag writer.dmLevel=mspec1 copyInputName = 1 processArrayFields = 1 htkcompatible = 1 nBands = 26 lofreq = 0 hifreq = 8000 usePower = 1 inverse = 0 specScale = mel [mfcc:cMfcc] reader.dmLevel=mspec1 writer.dmLevel=mfcc1 copyInputName = 0 processArrayFields = 1 firstMfcc = 1 lastMfcc = 12 cepLifter = 22.0 htkcompatible = 1 [lpc:cLpc] reader.dmLevel=framespe writer.dmLevel=lpc copyInputName = 1 processArrayFields = 1 method = acf p = 8 saveLPCoeff = 1 lpGain = 0 saveRefCoeff = 0 residual = 0 forwardFilter = 0 lpSpectrum = 0 [lsp:cLsp] reader.dmLevel=lpc writer.dmLevel=lsp copyInputName = 1 processArrayFields = 0 [intens:cIntensity] reader.dmLevel=frames writer.dmLevel=intens copyInputName = 1 processArrayFields = 1 intensity=1 loudness =1 [mzcr:cMZcr] reader.dmLevel=frames writer.dmLevel=mzcr copyInputName = 1 processArrayFields = 1 zcr = 1 amax = 0 mcr = 0 maxmin = 0 dc = 0 [lld:cContourSmoother] reader.dmLevel=intens;mfcc1;lsp;mzcr;pitch writer.dmLevel=lld writer.levelconf.nT = 2500 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 // ---- delta regression of LLD ---- [delta1:cDeltaRegression] reader.dmLevel=lld writer.dmLevel=lld_de blocksize=1 writer.levelconf.nT = 2500 writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = de copyInputName = 1 noPostEOIprocessing = 0 deltawin=2 // statistical functionals [functL1:cFunctionals] reader.dmLevel=lld;lld_de writer.dmLevel=func copyInputName = 1 ; frameMode = var will enable the functionals component to listen for messages from the turn detector frameMode = full functionalsEnabled=Extremes;Regression;Moments;Percentiles Extremes.max = 1 Extremes.min = 1 Extremes.range = 1 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.amean = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 ; Note: the much better way to normalise the times of maxpos and minpos ; is 'turn', however for compatibility with old files the default 'frame' ; is kept here: Extremes.norm = frame Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 1 Regression.linregerrQ = 1 Regression.qregc1 = 0 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 0 Regression.centroid = 0 Regression.doRatioLimit = 0 Regression.centroidRatioLimit = 0 Moments.doRatioLimit = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 ////////////////////////////////////////////////////////////////////// /////////////////// data output configuration ////////////////////// ////////////////////////////////////////////////////////////////////// // output recorded and segmented turns as wave files for debugging purposes // if you do not want this output, then you can disable this component [turnDump:cWaveSinkCut] reader.dmLevel = frames // ----- you can use this to save the features extracted ------ [arffsink:cArffSink] reader.dmLevel=func ; do not print "frameNumber" attribute to ARFF file number=0 ; name of output file as commandline option filename=\cm[arffout(O){output.arff}:name of WEKA Arff output file] ; name of @relation in the ARFF file relation=\cm[corpus{SMILEfeaturesLive}:corpus name, arff relation] ; base name of the current instance, turn number will be appended instanceBase=liveturn ; name of class label class[0].name = emotion ; list of nominal classes OR "numeric" class[0].type = \cm[classes{unknown}:all classes for arff file attribute] ; the class label or value for the current instance target[0].all = \cm[classlabel{unassigned}:instance class label] ; ** NOTE: theoretically the classified class label could be assigned here, however this would require ; ** saving the class label along with the frame in the dataMemory ; ** or sending this meta-data via a message (including frame number) ; ** neither solution is currently implemented.... :-( ; append=0 // LibSVM dataSink for live classification of extracted features // continuous arousal from QUB-SAL corpus [arousal:cLibsvmLiveSink] reader.dmLevel=func ; model file to use model=models/emo/sal_aro.emobase.model ; scale file to use scale=models/emo/sal_aro.emobase.scale ;; you could use the following line to send the classification result to a custom component ;resultRecp=emmaSender modelResultName[0]=arousal ;; print result to console window printResult=0 printParseableResult=1 forceScale = 0 // LibSVM dataSink for live classification of extracted features // continuous valence from QUB-SAL corpus [valence:cLibsvmLiveSink] reader.dmLevel=func ; model file to use model=models/emo/sal_val.emobase.model ; scale file to use scale=models/emo/sal_val.emobase.scale ;; you could use the following line to send the classification result to a custom component ;resultRecp=emmaSender modelResultName[0]=valence ;; print result to console window printResult=0 printParseableResult=1 forceScale = 0 // LibSVM dataSink for live classification of extracted features // Emotion from Berlin Speech Emotion Database (EMO-DB) [emodbEmotion:cLibsvmLiveSink] reader.dmLevel=func ; model file to use model=models/emo/emodb.emobase.model ; scale file to use scale=models/emo/emodb.emobase.scale ; class names: classes=models/emo/emodb.emobase.classes ;; you could use the following line to send the classification result to a custom component ;resultRecp=emmaSender modelResultName[0]=emodb_emotion ;; print result to console window printResult=0 printParseableResult = 1 ; also display per-class probabilities (of SVM models) predictProbability=1 forceScale = 0 // LibSVM dataSink for live classification of extracted features // Affective state from TUM Airplane Behaviour Corpus (ABC) [abcAffect:cLibsvmLiveSink] reader.dmLevel=func ; model file to use model=models/emo/abc.emobase.model ; scale file to use scale=models/emo/abc.emobase.scale ; class names: classes=models/emo/abc.emobase.classes ;; you could use the following line to send the classification result to a custom component ;resultRecp=emmaSender modelResultName[0]=abc_affect ;; print result to console window printResult=0 printParseableResult = 1 ; also display per-class probabilities (of SVM models) predictProbability=1 forceScale = 0 // LibSVM dataSink for live classification of extracted features // Interest level from TUM Audiovisual Interest Corpus (AVIC) [avicInterest:cLibsvmLiveSink] reader.dmLevel=func ; model file to use model=models/emo/avic.emobase.model ; scale file to use scale=models/emo/avic.emobase.scale ; class names: classes=models/emo/avic.emobase.classes ;; you could use the following line to send the classification result to a custom component ;resultRecp=emmaSender modelResultName[0]=interest ;; print result to console window printResult = 0 printParseableResult=1 ; also display per-class probabilities (of SVM models) predictProbability=1 forceScale = 0 //////---------------------- END -------------------------/////// ================================================ FILE: config/gemaps/GeMAPSv01a.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file, Geneva feature set < ////////////////// ///////// ////////////////// ///////// (c) 2014 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory printLevelStats=0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; main section ;;;;;;;;;;;;;;;;;;;;;;;;;;; \{../shared/standard_wave_input.conf.inc} \{GeMAPSv01a_core.lld.conf.inc} \{GeMAPSv01a_core.func.conf.inc} ;;;;;;;; prepare for standard data output ;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[lldconcat].type=cVectorConcat instance[llddeconcat].type=cVectorConcat instance[funcconcat].type=cVectorConcat [lldconcat:cVectorConcat] reader.dmLevel = gemapsv01a_lldsetE_smo writer.dmLevel = lld includeSingleElementFields = 1 [llddeconcat:cVectorConcat] reader.dmLevel = gemapsv01a_lldsetF_smo writer.dmLevel = lld_de includeSingleElementFields = 1 [funcconcat:cVectorConcat] reader.dmLevel = gemapsv01a_functionalsF0;gemapsv01a_functionalsLoudness;gemapsv01a_functionalsMeanStddevVoiced;gemapsv01a_functionalsMeanSpectralUnvoiced;gemapsv01a_temporalSet writer.dmLevel = func includeSingleElementFields = 1 \{../shared/standard_data_output.conf.inc} ================================================ FILE: config/gemaps/GeMAPSv01a_core.func.conf.inc ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file, Geneva feature set < ////////////////// ///////// ////////////////// ///////// (c) 2014 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;;;;;;;;;;; temporal statistics: ;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[gemapsv01a_smoF0].type=cContourSmoother instance[gemapsv01a_smoLoudness].type=cContourSmoother instance[gemapsv01a_temporalF0].type=cFunctionals instance[gemapsv01a_temporalF0p].type=cFunctionals instance[gemapsv01a_temporalLoudness].type=cFunctionals instance[gemapsv01a_temporalSetNames].type=cDataSelector ;;smoothing ;; [gemapsv01a_smoF0:cContourSmoother] reader.dmLevel = gemapsv01a_lld_single_logF0 writer.dmLevel = gemapsv01a_lld_single_logF0_smo \{\cm[bufferModeConf]} copyInputName = 1 nameAppend = sma3nz noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 1 [gemapsv01a_smoLoudness:cContourSmoother] reader.dmLevel = gemapsv01a_loudness writer.dmLevel = gemapsv01a_loudness_smo \{\cm[bufferModeConf]} nameAppend = sma3 copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 0 ; functionals for pitch onsets/offsets [gemapsv01a_temporalF0:cFunctionals] reader.dmLevel = gemapsv01a_lld_single_logF0_smo writer.dmLevel = gemapsv01a_temporalF0 \{\cm[bufferModeRbConf]} //nameAppend = ff0 copyInputName = 1 \{\cm[frameModeFunctionalsConf{../shared/FrameModeFunctionals.conf.inc}:path to included config to set frame mode for all functionals]} functionalsEnabled = Segments Segments.maxNumSeg = 1000 Segments.segmentationAlgorithm = nonX Segments.X = 0.0 Segments.numSegments = 1 Segments.meanSegLen = 1 Segments.maxSegLen = 0 Segments.minSegLen = 0 Segments.segLenStddev = 1 Segments.norm = second nonZeroFuncts = 0 masterTimeNorm = second // TODO: this is only unvoiced segments, combine with energy / loudness for true pauses! ; functionals for pitch onsets/offsets [gemapsv01a_temporalF0p:cFunctionals] reader.dmLevel = gemapsv01a_lld_single_logF0_smo writer.dmLevel = gemapsv01a_temporalF0pause \{\cm[bufferModeRbConf]} copyInputName = 0 functNameAppend = f0pause \{\cm[frameModeFunctionalsConf]} functionalsEnabled = Segments Segments.maxNumSeg = 1000 Segments.segmentationAlgorithm = eqX Segments.X = 0.0 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 0 Segments.minSegLen = 0 Segments.segLenStddev = 1 Segments.norm = second nonZeroFuncts = 0 masterTimeNorm = second ; functionals for pitch onsets/offsets [gemapsv01a_temporalLoudness:cFunctionals] reader.dmLevel = gemapsv01a_loudness_smo writer.dmLevel = gemapsv01a_temporalLoudness \{\cm[bufferModeRbConf]} //nameAppend = ff0 copyInputName = 1 \{\cm[frameModeFunctionalsConf]} functionalsEnabled = Peaks2 Peaks2.numPeaks = 1 Peaks2.meanPeakDist = 0 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 0 Peaks2.peakRangeAbs = 0 Peaks2.peakRangeRel = 0 Peaks2.peakMeanAbs = 0 Peaks2.peakMeanMeanDist = 0 Peaks2.peakMeanRel = 0 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 0 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 0 Peaks2.maxRisingSlope = 0 Peaks2.minRisingSlope = 0 Peaks2.stddevRisingSlope = 0 Peaks2.meanFallingSlope = 0 Peaks2.maxFallingSlope = 0 Peaks2.minFallingSlope = 0 Peaks2.stddevFallingSlope = 0 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 nonZeroFuncts = 0 masterTimeNorm = second ;;;;;;;;;;;;;;;;;; filtering and renaming of names ;;;;;;;;;;; [gemapsv01a_temporalSetNames:cDataSelector] reader.dmLevel = gemapsv01a_temporalLoudness;gemapsv01a_temporalF0;gemapsv01a_temporalF0pause writer.dmLevel = gemapsv01a_temporalSet \{\cm[bufferModeRbConf]} selected = loudness_sma3_numPeaks;F0semitoneFrom27.5Hz_sma3nz_numSegments;F0semitoneFrom27.5Hz_sma3nz_meanSegLen;F0semitoneFrom27.5Hz_sma3nz_segLenStddev;F0semitoneFrom27.5Hz_sma3nz__f0pause_meanSegLen;F0semitoneFrom27.5Hz_sma3nz__f0pause_segLenStddev newNames = loudnessPeaksPerSec;VoicedSegmentsPerSec;MeanVoicedSegmentLengthSec;StddevVoicedSegmentLengthSec;MeanUnvoicedSegmentLength;StddevUnvoicedSegmentLength ;;;;;;;;;;;;;;;;;;;;; functionals / summaries ;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[gemapsv01a_functionalsF0].type=cFunctionals instance[gemapsv01a_functionalsLoudness].type=cFunctionals instance[gemapsv01a_functionalsMeanSpectralUV].type=cFunctionals instance[gemapsv01a_functionalsMVRVoiced].type=cFunctionals [gemapsv01a_functionalsF0:cFunctionals] reader.dmLevel = gemapsv01a_lld_single_logF0_smo writer.dmLevel = gemapsv01a_functionalsF0 \{\cm[bufferModeRbConf]} copyInputName = 1 \{\cm[frameModeFunctionalsConf]} functionalsEnabled = Moments ; Percentiles ; Peaks2 Moments.variance = 0 Moments.stddev = 0 Moments.stddevNorm = 2 Moments.skewness = 0 Moments.kurtosis = 0 Moments.amean = 1 Moments.doRatioLimit = 0 Percentiles.quartiles = 0 Percentiles.iqr = 0 Percentiles.percentile[0] = 0.20 Percentiles.percentile[1] = 0.50 Percentiles.percentile[2] = 0.80 Percentiles.pctlrange[0] = 0-2 Percentiles.interp = 1 Peaks2.doRatioLimit = 0 Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 0 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 0 Peaks2.peakRangeAbs = 0 Peaks2.peakRangeRel = 0 Peaks2.peakMeanAbs = 0 Peaks2.peakMeanMeanDist = 0 Peaks2.peakMeanRel = 0 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 0 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 0 Peaks2.minRisingSlope = 0 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 0 Peaks2.minFallingSlope = 0 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 nonZeroFuncts = 1 masterTimeNorm = segment [gemapsv01a_functionalsLoudness:cFunctionals] reader.dmLevel = gemapsv01a_loudness_smo writer.dmLevel = gemapsv01a_functionalsLoudness \{\cm[bufferModeRbConf]} copyInputName = 1 \{\cm[frameModeFunctionalsConf]} functionalsEnabled = Moments ; Percentiles ; Peaks2 Moments.variance = 0 Moments.stddev = 0 Moments.stddevNorm = 2 Moments.skewness = 0 Moments.kurtosis = 0 Moments.amean = 1 Moments.doRatioLimit = 0 Percentiles.quartiles = 0 Percentiles.iqr = 0 Percentiles.percentile[0] = 0.20 Percentiles.percentile[1] = 0.50 Percentiles.percentile[2] = 0.80 Percentiles.pctlrange[0] = 0-2 Percentiles.interp = 1 Peaks2.doRatioLimit = 0 Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 0 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 0 Peaks2.peakRangeAbs = 0 Peaks2.peakRangeRel = 0 Peaks2.peakMeanAbs = 0 Peaks2.peakMeanMeanDist = 0 Peaks2.peakMeanRel = 0 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 0 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 0 Peaks2.minRisingSlope = 0 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 0 Peaks2.minFallingSlope = 0 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 nonZeroFuncts = 0 masterTimeNorm = segment [gemapsv01a_functionalsMeanSpectralUV:cFunctionals] reader.dmLevel = gemapsv01a_lldSetSpectralZ_smo writer.dmLevel = gemapsv01a_functionalsMeanSpectralUnvoiced \{\cm[bufferModeRbConf]} copyInputName = 1 \{\cm[frameModeFunctionalsConf]} functionalsEnabled = Moments Moments.variance = 0 Moments.stddev = 0 Moments.stddevNorm = 0 Moments.skewness = 0 Moments.kurtosis = 0 Moments.amean = 1 Moments.doRatioLimit = 0 nonZeroFuncts = 1 masterTimeNorm = segment [gemapsv01a_functionalsMVRVoiced:cFunctionals] reader.dmLevel = gemapsv01a_lldSetNoF0AndLoudnessNz_smo;gemapsv01a_lldSetSpectralNz_smo; writer.dmLevel = gemapsv01a_functionalsMeanStddevVoiced \{\cm[bufferModeRbConf]} copyInputName = 1 \{\cm[frameModeFunctionalsConf]} functionalsEnabled = Moments Moments.variance = 0 Moments.stddev = 0 Moments.stddevNorm = 2 Moments.skewness = 0 Moments.kurtosis = 0 Moments.amean = 1 Moments.doRatioLimit = 0 nonZeroFuncts = 1 masterTimeNorm = segment ================================================ FILE: config/gemaps/GeMAPSv01a_core.lld.conf.inc ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file, Geneva feature set < ////////////////// ///////// ////////////////// ///////// (c) 2014 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[gemapsv01a_frame60].type=cFramer instance[gemapsv01a_win60].type=cWindower instance[gemapsv01a_fft60].type=cTransformFFT instance[gemapsv01a_fftmp60].type=cFFTmagphase [gemapsv01a_frame60:cFramer] reader.dmLevel=wave writer.dmLevel=gemapsv01a_frame60 \{\cm[bufferModeRbConf{../shared/BufferModeRb.conf.inc}:path to included config to set the buffer mode for the standard ringbuffer levels]} frameSize = 0.060 frameStep = 0.010 frameCenterSpecial = left [gemapsv01a_win60:cWindower] reader.dmLevel=gemapsv01a_frame60 writer.dmLevel=gemapsv01a_winG60 winFunc=gauss gain=1.0 sigma=0.4 [gemapsv01a_fft60:cTransformFFT] reader.dmLevel=gemapsv01a_winG60 writer.dmLevel=gemapsv01a_fftcG60 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [gemapsv01a_fftmp60:cFFTmagphase] reader.dmLevel=gemapsv01a_fftcG60 writer.dmLevel=gemapsv01a_fftmagG60 \{\cm[bufferModeRbLagConf{../shared/BufferModeRbLag.conf.inc}:path to included config to set the buffer mode for levels which will be joint with Viterbi smoothed -lagged- F0]} ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[gemapsv01a_frame25].type=cFramer instance[gemapsv01a_win25].type=cWindower instance[gemapsv01a_fft25].type=cTransformFFT instance[gemapsv01a_fftmp25].type=cFFTmagphase [gemapsv01a_frame25:cFramer] reader.dmLevel=wave writer.dmLevel=gemapsv01a_frame25 \{\cm[bufferModeRbConf]} frameSize = 0.020 frameStep = 0.010 frameCenterSpecial = left [gemapsv01a_win25:cWindower] reader.dmLevel=gemapsv01a_frame25 writer.dmLevel=gemapsv01a_winH25 winFunc=hamming [gemapsv01a_fft25:cTransformFFT] reader.dmLevel=gemapsv01a_winH25 writer.dmLevel=gemapsv01a_fftcH25 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [gemapsv01a_fftmp25:cFFTmagphase] reader.dmLevel=gemapsv01a_fftcH25 writer.dmLevel=gemapsv01a_fftmagH25 ;;; CHECK!!!!!!! ;writer.levelconf.growDyn = 1 ;writer.levelconf.isRb = 0 ;;;;;;;;;;;;;;;;;;;; HPS pitch [componentInstances:cComponentManager] instance[gemapsv01a_scale].type=cSpecScale instance[gemapsv01a_shs].type=cPitchShs [gemapsv01a_scale:cSpecScale] reader.dmLevel=gemapsv01a_fftmagG60 writer.dmLevel=gemapsv01a_hpsG60 \{\cm[bufferModeRbConf]} copyInputName = 1 processArrayFields = 0 scale=octave sourceScale = lin interpMethod = spline minF = 25 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [gemapsv01a_shs:cPitchShs] reader.dmLevel=gemapsv01a_hpsG60 writer.dmLevel=gemapsv01a_pitchShsG60 \{\cm[bufferModeRbLagConf]} copyInputName = 1 processArrayFields = 0 maxPitch = 1000 minPitch = 55 nCandidates = 6 scores = 1 voicing = 1 F0C1 = 0 voicingC1 = 0 F0raw = 1 voicingClip = 1 voicingCutoff = 0.700000 inputFieldSearch = Mag_octScale octaveCorrection = 0 nHarmonics = 15 compressionFactor = 0.850000 greedyPeakAlgo = 1 ;;;;; Pitch with Viterbi smoother [componentInstances:cComponentManager] instance[gemapsv01a_energy60].type=cEnergy [gemapsv01a_energy60:cEnergy] reader.dmLevel=gemapsv01a_winG60 writer.dmLevel=gemapsv01a_e60 ; This must be > than buffersize of viterbi smoother ; writer.levelconf.nT=100 \{\cm[bufferModeRbLagConf]} rms=1 log=0 [componentInstances:cComponentManager] instance[gemapsv01a_pitchSmoothViterbi].type=cPitchSmootherViterbi [gemapsv01a_pitchSmoothViterbi:cPitchSmootherViterbi] reader.dmLevel=gemapsv01a_pitchShsG60 reader2.dmLevel=gemapsv01a_pitchShsG60 writer.dmLevel=gemapsv01a_logPitchRaw copyInputName = 1 bufferLength=40 F0final = 1 F0finalLog = 1 F0finalEnv = 0 voicingFinalClipped = 0 voicingFinalUnclipped = 1 F0raw = 0 voicingC1 = 0 voicingClip = 0 wTvv =10.0 wTvvd= 5.0 wTvuv=10.0 wThr = 4.0 wTuu = 0.0 wLocal=2.0 wRange=1.0 [componentInstances:cComponentManager] instance[gemapsv01a_volmerge].type = cValbasedSelector [gemapsv01a_volmerge:cValbasedSelector] reader.dmLevel = gemapsv01a_e60;gemapsv01a_logPitchRaw writer.dmLevel = gemapsv01a_logPitch \{\cm[bufferModeRbLagConf]} idx=0 threshold=0.001 removeIdx=1 zeroVec=1 outputVal=0.0 ;;;;;;;;;;;;;;;;;;; Voice Quality (VQ) [componentInstances:cComponentManager] instance[gemapsv01a_pitchJitter].type=cPitchJitter [gemapsv01a_pitchJitter:cPitchJitter] reader.dmLevel = wave writer.dmLevel = gemapsv01a_jitterShimmer \{\cm[bufferModeRbLagConf]} copyInputName = 1 F0reader.dmLevel = gemapsv01a_logPitch F0field = F0final searchRangeRel = 0.100000 jitterLocal = 1 jitterDDP = 0 jitterLocalEnv = 0 jitterDDPEnv = 0 shimmerLocal = 0 shimmerLocalDB = 1 shimmerLocalEnv = 0 onlyVoiced = 0 logHNR = 0 ; This must be larger than the viterbi pitch smoother lag inputMaxDelaySec = 2.5 minNumPeriods = 2 minCC = 0.5 useBrokenJitterThresh = 1 ;;;;;;;;;;;;;;;;;;;;; Energy / loudness [componentInstances:cComponentManager] instance[gemapsv01a_melspec1].type=cMelspec instance[gemapsv01a_audspec].type=cPlp instance[gemapsv01a_audspecSum].type=cVectorOperation [gemapsv01a_melspec1:cMelspec] reader.dmLevel=gemapsv01a_fftmagH25 writer.dmLevel=gemapsv01a_melspec1 ; htk compatible sample value scaling htkcompatible = 0 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = mel showFbank = 0 ; perform auditory weighting of spectrum [gemapsv01a_audspec:cPlp] reader.dmLevel=gemapsv01a_melspec1 writer.dmLevel=gemapsv01a_audspec firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=0 RASTA=0 [gemapsv01a_audspecSum:cVectorOperation] reader.dmLevel = gemapsv01a_audspec writer.dmLevel = gemapsv01a_loudness ; This must be larger than the F0 viterbi buffer length ; since audspecSum and F0 envelope are joint later! \{\cm[bufferModeRbLagConf]} nameAppend = loudness copyInputName = 0 processArrayFields = 0 operation = ll1 nameBase = loudness ;;;;;;;;;;;;;; Formants ;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[gemapsv01a_resampLpc].type=cSpecResample instance[gemapsv01a_lpc].type=cLpc instance[gemapsv01a_formantLpc].type=cFormantLpc [gemapsv01a_resampLpc:cSpecResample] // use fftcG60 ? H25 has faster resampling reader.dmLevel=gemapsv01a_fftcH25 writer.dmLevel=gemapsv01a_outpR targetFs = 11000 [gemapsv01a_lpc:cLpc] reader.dmLevel=gemapsv01a_outpR writer.dmLevel=gemapsv01a_lpc p=11 method=acf lpGain=0 saveLPCoeff=1 residual=0 forwardFilter=0 lpSpectrum=0 [gemapsv01a_formantLpc:cFormantLpc] reader.dmLevel=gemapsv01a_lpc writer.dmLevel=gemapsv01a_formants \{\cm[bufferModeRbLagConf]} saveIntensity=0 saveBandwidths=1 maxF=5500.0 minF=50.0 nFormants=5 useLpSpec=0 medianFilter=0 octaveCorrection=0 ;;;;;;;;;;;;; Harmonics ;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[gemapsv01a_harmonics].type = cHarmonics ;;;; default (template) configuration section for component 'cHarmonics' ;;;; [gemapsv01a_harmonics:cHarmonics] reader.dmLevel = gemapsv01a_logPitch;gemapsv01a_formants;gemapsv01a_fftmagG60 writer.dmLevel = gemapsv01a_harmonics \{\cm[bufferModeRbLagConf]} copyInputName = 0 processArrayFields = 0 includeSingleElementFields = 1 preserveFieldNames = 0 formantFrequencyFieldName = formantFreqLpc formantFrequencyFieldNameIsFull = 1 formantBandwidthFieldName = formantBandwidthLpc formantBandwidthFieldNameIsFull = 1 f0ElementName = F0final f0ElementNameIsFull = 1 magSpecFieldName = pcm_fftMag magSpecFieldNameIsFull = 1 nHarmonics = 100 harmonicDifferences = H1-H2;H1-A3 harmonicDifferencesLog = 1 nHarmonicMagnitudes = 0 firstHarmonicMagnitude = 1 outputLogRelMagnitudes = 1 formantAmplitudes=1 formantAmplitudesLogRel = 1 formantAmplitudesStart = 1 formantAmplitudesEnd = 3 computeAcfHnrLogdB = 1 ;;;;;;;;;;;;;;; spectral [componentInstances:cComponentManager] instance[gemapsv01a_logSpectral].type=cSpectral [gemapsv01a_logSpectral:cSpectral] reader.dmLevel=gemapsv01a_fftmagH25 writer.dmLevel=gemapsv01a_logSpectral \{\cm[bufferModeRbLagConf]} flux = 0 centroid = 0 maxPos=0 minPos=0 entropy = 0 flatness = 0 harmonicity = 0 sharpness = 0 variance=0 skewness=0 kurtosis=0 alphaRatio = 1 hammarbergIndex = 1 slope = 0 slopes[0] = 0-500 slopes[1] = 500-1500 ; NOTE: added this to sync with eGeMAPS set, should have no effect. normBandEnergies = 1 squareInput = 1 useLogSpectrum = 1 freqRange = 0-5000 oldSlopeScale = 0 ;;;;;;;;;;;; collecting, filtering, and renaming ;;;;;;;;;;;;;;;;, /* logSpectral Hammarberg, AlphaRatio, spectralSlope 0-500, 500-1500 harmonics H1-H2, H1-A3, HNRlog logPitch F0finalLog jitterShimmer jitterLocal, shimmerLocal loudness formants F1-3 freq, F1 bandw (check!) harmonics F1-3 level relative */ [componentInstances:cComponentManager] instance[gemapsv01a_lldSetSelectorE].type=cDataSelector instance[gemapsv01a_lldSetSelectorF].type=cDataSelector instance[gemapsv01a_lldSetSelectorLogF0].type=cDataSelector instance[gemapsv01a_formantVoiced].type = cValbasedSelector instance[gemapsv01a_lldSetSelectorNoF0LoudnNz].type = cDataSelector instance[gemapsv01a_logSpectralVoiced].type = cValbasedSelector instance[gemapsv01a_logSpectralUnvoiced].type = cValbasedSelector instance[gemapsv01a_lldSetSelectorSpectralNz].type=cDataSelector instance[gemapsv01a_lldSetSelectorSpectralZ].type=cDataSelector [gemapsv01a_lldSetSelectorE:cDataSelector] reader.dmLevel = gemapsv01a_loudness;gemapsv01a_logSpectral writer.dmLevel = gemapsv01a_lldsetE \{\cm[bufferModeRbConf]} selected = loudness;pcm_fftMag_alphaRatioDB;pcm_fftMag_hammarbergIndexDB;pcm_fftMag_logSpectralSlopeOfBand0-500;pcm_fftMag_logSpectralSlopeOfBand500-1500 newNames = Loudness;alphaRatio;hammarbergIndex;slope0-500;slope500-1500 [gemapsv01a_lldSetSelectorF:cDataSelector] reader.dmLevel = gemapsv01a_logPitch;gemapsv01a_jitterShimmer;gemapsv01a_harmonics;gemapsv01a_formants writer.dmLevel = gemapsv01a_lldsetF \{\cm[bufferModeRbConf]} selected = F0finalLog;jitterLocal;shimmerLocalDB;HarmonicsToNoiseRatioACFLogdB;HarmonicDifferenceLogRelH1-H2;HarmonicDifferenceLogRelH1-A3;formantFreqLpc[1];formantBandwidthLpc[1];FormantAmplitudeByMaxHarmonicLogRelF0[1];formantFreqLpc[2];FormantAmplitudeByMaxHarmonicLogRelF0[2];formantFreqLpc[3];FormantAmplitudeByMaxHarmonicLogRelF0[3] newNames = F0semitoneFrom27.5Hz;jitterLocal;shimmerLocaldB;HNRdBACF;logRelF0-H1-H2;logRelF0-H1-A3;F1frequency;F1bandwidth;F1amplitudeLogRelF0;F2frequency;F2amplitudeLogRelF0;F3frequency;F3amplitudeLogRelF0 [gemapsv01a_lldSetSelectorLogF0:cDataSelector] reader.dmLevel = gemapsv01a_logPitch writer.dmLevel = gemapsv01a_lld_single_logF0 \{\cm[bufferModeRbConf]} selected = F0finalLog newNames = F0semitoneFrom27.5Hz // select only formants where F0 > 0 for functionals // (in LLD csv we output all of them..!) [gemapsv01a_formantVoiced:cValbasedSelector] reader.dmLevel = gemapsv01a_lld_single_logF0;gemapsv01a_formants writer.dmLevel = gemapsv01a_formantsNz \{\cm[bufferModeRbLagConf]} idx=0 threshold=0.000001 removeIdx=1 zeroVec=1 outputVal=0.0 [gemapsv01a_lldSetSelectorNoF0LoudnNz:cDataSelector] reader.dmLevel = gemapsv01a_jitterShimmer;gemapsv01a_harmonics;gemapsv01a_formantsNz writer.dmLevel = gemapsv01a_lldSetNoF0AndLoudnessNz \{\cm[bufferModeRbConf]} selected = jitterLocal;shimmerLocalDB;HarmonicsToNoiseRatioACFLogdB;HarmonicDifferenceLogRelH1-H2;HarmonicDifferenceLogRelH1-A3;formantFreqLpc[1];formantBandwidthLpc[1];FormantAmplitudeByMaxHarmonicLogRelF0[1];formantFreqLpc[2];FormantAmplitudeByMaxHarmonicLogRelF0[2];formantFreqLpc[3];FormantAmplitudeByMaxHarmonicLogRelF0[3] newNames = jitterLocal;shimmerLocaldB;HNRdBACF;logRelF0-H1-H2;logRelF0-H1-A3;F1frequency;F1bandwidth;F1amplitudeLogRelF0;F2frequency;F2amplitudeLogRelF0;F3frequency;F3amplitudeLogRelF0 // select logspectral for voiced sounds [gemapsv01a_logSpectralVoiced:cValbasedSelector] reader.dmLevel = gemapsv01a_lld_single_logF0;gemapsv01a_logSpectral writer.dmLevel = gemapsv01a_logSpectralVoiced \{\cm[bufferModeRbLagConf]} idx=0 threshold=0.000001 removeIdx=1 zeroVec=1 outputVal=0.0 // select logspectral for voiced sounds [gemapsv01a_logSpectralUnvoiced:cValbasedSelector] reader.dmLevel = gemapsv01a_lld_single_logF0;gemapsv01a_logSpectral writer.dmLevel = gemapsv01a_logSpectralUnvoiced \{\cm[bufferModeRbLagConf]} idx=0 invert = 1 threshold = 0.000001 removeIdx=1 zeroVec=1 outputVal=0.0 [gemapsv01a_lldSetSelectorSpectralNz:cDataSelector] reader.dmLevel = gemapsv01a_logSpectralVoiced writer.dmLevel = gemapsv01a_lldSetSpectralNz \{\cm[bufferModeRbConf]} selected = pcm_fftMag_alphaRatioDB;pcm_fftMag_hammarbergIndexDB;pcm_fftMag_logSpectralSlopeOfBand0-500;pcm_fftMag_logSpectralSlopeOfBand500-1500 newNames = alphaRatioV;hammarbergIndexV;slopeV0-500;slopeV500-1500 [gemapsv01a_lldSetSelectorSpectralZ:cDataSelector] reader.dmLevel = gemapsv01a_logSpectralUnvoiced writer.dmLevel = gemapsv01a_lldSetSpectralZ \{\cm[bufferModeRbConf]} selected = pcm_fftMag_alphaRatioDB;pcm_fftMag_hammarbergIndexDB;pcm_fftMag_logSpectralSlopeOfBand0-500;pcm_fftMag_logSpectralSlopeOfBand500-1500 newNames = alphaRatioUV;hammarbergIndexUV;slopeUV0-500;slopeUV500-1500 ;;;;;;;;;;;;;;;; smoothing ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[gemapsv01a_smoFnz].type=cContourSmoother instance[gemapsv01a_smoE].type=cContourSmoother instance[gemapsv01a_smoNoF0andLoudnNz].type=cContourSmoother instance[gemapsv01a_smoSpectralZ].type=cContourSmoother instance[gemapsv01a_smoSpectralNz].type=cContourSmoother [gemapsv01a_smoFnz:cContourSmoother] reader.dmLevel = gemapsv01a_lldsetF writer.dmLevel = gemapsv01a_lldsetF_smo nameAppend = sma3nz copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 1 [gemapsv01a_smoE:cContourSmoother] reader.dmLevel = gemapsv01a_lldsetE writer.dmLevel = gemapsv01a_lldsetE_smo nameAppend = sma3 copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 0 [gemapsv01a_smoNoF0andLoudnNz:cContourSmoother] reader.dmLevel = gemapsv01a_lldSetNoF0AndLoudnessNz writer.dmLevel = gemapsv01a_lldSetNoF0AndLoudnessNz_smo \{\cm[bufferModeConf{../shared/BufferMode.conf.inc}:path to included config to set the buffer mode for the levels before the functionals]} nameAppend = sma3nz copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 1 [gemapsv01a_smoSpectralZ:cContourSmoother] reader.dmLevel = gemapsv01a_lldSetSpectralZ writer.dmLevel = gemapsv01a_lldSetSpectralZ_smo \{\cm[bufferModeConf]} nameAppend = sma3nz copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 ; non-zero SMA is ok here, as it is inverted with 0's for the voiced parts noZeroSma = 1 [gemapsv01a_smoSpectralNz:cContourSmoother] reader.dmLevel = gemapsv01a_lldSetSpectralNz writer.dmLevel = gemapsv01a_lldSetSpectralNz_smo \{\cm[bufferModeConf]} nameAppend = sma3nz copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 1 ================================================ FILE: config/gemaps/eGeMAPSv01a.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file, Geneva feature set < ////////////////// ///////// ////////////////// ///////// (c) 2014 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory printLevelStats=0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; main section ;;;;;;;;;;;;;;;;;;;;;;;;;;; \{../shared/standard_wave_input.conf.inc} \{GeMAPSv01a_core.lld.conf.inc} \{eGeMAPSv01a_core.lld.conf.inc} \{GeMAPSv01a_core.func.conf.inc} \{eGeMAPSv01a_core.func.conf.inc} [componentInstances:cComponentManager] instance[lldconcat].type=cVectorConcat instance[llddeconcat].type=cVectorConcat instance[funcconcat].type=cVectorConcat [lldconcat:cVectorConcat] reader.dmLevel = egemapsv01a_lldsetE_smo writer.dmLevel = lld includeSingleElementFields = 1 [llddeconcat:cVectorConcat] reader.dmLevel = gemapsv01a_lldsetF_smo writer.dmLevel = lld_de includeSingleElementFields = 1 [funcconcat:cVectorConcat] reader.dmLevel = gemapsv01a_functionalsF0;gemapsv01a_functionalsLoudness;egemapsv01a_functionalsMeanStddevZ;egemapsv01a_functionalsMeanStddevVoiced;egemapsv01a_functionalsMeanUnvoiced;gemapsv01a_temporalSet;egemapsv01a_leq writer.dmLevel = func includeSingleElementFields = 1 \{../shared/standard_data_output.conf.inc} ================================================ FILE: config/gemaps/eGeMAPSv01a_core.func.conf.inc ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file, Geneva feature set < ////////////////// ///////// ////////////////// ///////// (c) 2014 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[egemapsv01a_leqLin].type= cFunctionals instance[egemapsv01a_leq].type = cVectorOperation ;; LEq [egemapsv01a_leqLin:cFunctionals] reader.dmLevel = egemapsv01a_energyRMS writer.dmLevel = egemapsv01a_leqLin // nameAppend = preserveFields = 1 \{\cm[bufferModeRbConf]} copyInputName = 1 \{\cm[frameModeFunctionalsConf]} noPostEOIprocessing = 0 functionalsEnabled = Means Means.amean = 1 Means.posamean = 0 Means.absmean = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 [egemapsv01a_leq:cVectorOperation] reader.dmLevel = egemapsv01a_leqLin writer.dmLevel = egemapsv01a_leq nameBase = equivalentSoundLevel copyInputName = 1 processArrayFields = 0 operation = dBp appendOperationToName = 1 ;;;;;;;;;;;;;;;;;;;;; functionals / summaries ;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[egemapsv01a_functionalsMVR].type=cFunctionals instance[egemapsv01a_functionalsMeanUV].type=cFunctionals instance[egemapsv01a_functionalsMVRVoiced].type = cFunctionals [egemapsv01a_functionalsMVR:cFunctionals] reader.dmLevel = egemapsv01a_lldSetNoF0AndLoudnessZ_smo writer.dmLevel = egemapsv01a_functionalsMeanStddevZ \{\cm[bufferModeRbConf]} copyInputName = 1 \{\cm[frameModeFunctionalsConf]} functionalsEnabled = Moments Moments.variance = 0 Moments.stddev = 0 Moments.stddevNorm = 2 Moments.skewness = 0 Moments.kurtosis = 0 Moments.amean = 1 nonZeroFuncts = 0 masterTimeNorm = segment [egemapsv01a_functionalsMeanUV:cFunctionals] reader.dmLevel = egemapsv01a_lldSetSpectralZ_smo writer.dmLevel = egemapsv01a_functionalsMeanUnvoiced \{\cm[bufferModeRbConf]} copyInputName = 1 \{\cm[frameModeFunctionalsConf]} functionalsEnabled = Moments Moments.variance = 0 Moments.stddev = 0 Moments.stddevNorm = 0 Moments.skewness = 0 Moments.kurtosis = 0 Moments.amean = 1 nonZeroFuncts = 1 masterTimeNorm = segment [egemapsv01a_functionalsMVRVoiced:cFunctionals] reader.dmLevel = egemapsv01a_lldSetNoF0AndLoudnessNz_smo;egemapsv01a_lldSetSpectralNz_smo writer.dmLevel = egemapsv01a_functionalsMeanStddevVoiced \{\cm[bufferModeRbConf]} copyInputName = 1 \{\cm[frameModeFunctionalsConf]} functionalsEnabled = Moments Moments.variance = 0 Moments.stddev = 0 Moments.stddevNorm = 2 Moments.skewness = 0 Moments.kurtosis = 0 Moments.amean = 1 nonZeroFuncts = 1 masterTimeNorm = segment ================================================ FILE: config/gemaps/eGeMAPSv01a_core.lld.conf.inc ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file, Geneva feature set < ////////////////// ///////// ////////////////// ///////// (c) 2014 by audEERING ////////////////// ///////// All rights reserved. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;; for LEq [componentInstances:cComponentManager] instance[egemapsv01a_energyRMS].type=cEnergy [egemapsv01a_energyRMS:cEnergy] reader.dmLevel = gemapsv01a_frame25 writer.dmLevel = egemapsv01a_energyRMS \{\cm[bufferModeConf]} htkcompatible = 0 rms = 0 energy2 = 1 log = 0 ;;;;;;;;;;;;;;; spectral [componentInstances:cComponentManager] instance[egemapsv01a_logSpectral_flux].type=cSpectral [egemapsv01a_logSpectral_flux:cSpectral] reader.dmLevel=gemapsv01a_fftmagH25 writer.dmLevel=egemapsv01a_logSpectral_flux \{\cm[bufferModeRbLagConf]} flux = 1 centroid = 0 maxPos=0 minPos=0 entropy = 0 flatness = 0 harmonicity = 0 sharpness = 0 variance=0 skewness=0 kurtosis=0 alphaRatio = 0 hammarbergIndex = 0 slope = 0 normBandEnergies = 1 squareInput = 1 useLogSpectrum = 1 freqRange = 0-5000 oldSlopeScale = 0 ;;;;;;;;;; cepstral ;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[egemapsv01a_melspecMfcc].type=cMelspec instance[egemapsv01a_mfcc].type=cMfcc [egemapsv01a_melspecMfcc:cMelspec] reader.dmLevel=gemapsv01a_fftmagH25 writer.dmLevel=egemapsv01a_melspecMfcc copyInputName = 1 processArrayFields = 1 ; htk compatible sample value scaling htkcompatible = 1 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = mel inverse = 0 [egemapsv01a_mfcc:cMfcc] reader.dmLevel=egemapsv01a_melspecMfcc writer.dmLevel=egemapsv01a_mfcc \{\cm[bufferModeRbLagConf]} copyInputName = 0 processArrayFields = 1 firstMfcc = 1 lastMfcc = 4 cepLifter = 22.0 htkcompatible = 1 ;;;;;;;;;;;; collecting, filtering, and renaming ;;;;;;;;;;;;;;;;, /* logSpectral Hammarberg, AlphaRatio, spectralSlope 0-500, 500-1500 harmonics H1-H2, H1-A3, HNRlog logPitch F0finalLog jitterShimmer jitterLocal, shimmerLocal loudness formants F1-3 freq, F1 bandw (check!) harmonics F1-3 level relative */ [componentInstances:cComponentManager] instance[egemapsv01a_lldSetSelectorE].type=cDataSelector instance[egemapsv01a_lldSetSelectorNoF0LoudnZ].type=cDataSelector instance[egemapsv01a_lldSetSelectorNoF0LoudnNz].type = cDataSelector instance[egemapsv01a_logSpectralVoiced].type = cValbasedSelector instance[egemapsv01a_logSpectralUnvoiced].type = cValbasedSelector instance[egemapsv01a_lldSetSelectorSpectralNz].type=cDataSelector instance[egemapsv01a_lldSetSelectorSpectralZ].type=cDataSelector [egemapsv01a_lldSetSelectorE:cDataSelector] reader.dmLevel = gemapsv01a_loudness;gemapsv01a_logSpectral;egemapsv01a_logSpectral_flux;egemapsv01a_mfcc writer.dmLevel = egemapsv01a_lldsetE \{\cm[bufferModeRbConf]} selected = loudness;pcm_fftMag_alphaRatioDB;pcm_fftMag_hammarbergIndexDB;pcm_fftMag_logSpectralSlopeOfBand0-500;pcm_fftMag_logSpectralSlopeOfBand500-1500;pcm_fftMag_spectralFlux;mfcc[1];mfcc[2];mfcc[3];mfcc[4] newNames = Loudness;alphaRatio;hammarbergIndex;slope0-500;slope500-1500;spectralFlux;mfcc1;mfcc2;mfcc3;mfcc4 [gemapsv01a_lldSetSelectorNoF0LoudnNz:cDataSelector] reader.dmLevel = gemapsv01a_jitterShimmer;gemapsv01a_harmonics;gemapsv01a_formantsNz writer.dmLevel = gemapsv01a_lldSetNoF0AndLoudnessNz \{\cm[bufferModeRbConf]} selected = jitterLocal;shimmerLocalDB;HarmonicsToNoiseRatioACFLogdB;HarmonicDifferenceLogRelH1-H2;HarmonicDifferenceLogRelH1-A3;formantFreqLpc[1];formantBandwidthLpc[1];FormantAmplitudeByMaxHarmonicLogRelF0[1];formantFreqLpc[2];FormantAmplitudeByMaxHarmonicLogRelF0[2];formantFreqLpc[3];FormantAmplitudeByMaxHarmonicLogRelF0[3] newNames = jitterLocal;shimmerLocaldB;HNRdBACF;logRelF0-H1-H2;logRelF0-H1-A3;F1frequency;F1bandwidth;F1amplitudeLogRelF0;F2frequency;F2amplitudeLogRelF0;F3frequency;F3amplitudeLogRelF0 [egemapsv01a_lldSetSelectorNoF0LoudnZ:cDataSelector] ; gemapsv01a_logSpectral reader.dmLevel = egemapsv01a_logSpectral_flux;egemapsv01a_mfcc writer.dmLevel = egemapsv01a_lldSetNoF0AndLoudnessZ \{\cm[bufferModeRbConf]} selected = pcm_fftMag_spectralFlux;mfcc[1];mfcc[2];mfcc[3];mfcc[4] newNames = spectralFlux;mfcc1;mfcc2;mfcc3;mfcc4 [egemapsv01a_lldSetSelectorNoF0LoudnNz:cDataSelector] reader.dmLevel = gemapsv01a_jitterShimmer;gemapsv01a_harmonics;gemapsv01a_formantsNz writer.dmLevel = egemapsv01a_lldSetNoF0AndLoudnessNz \{\cm[bufferModeRbConf]} selected = jitterLocal;shimmerLocalDB;HarmonicsToNoiseRatioACFLogdB;HarmonicDifferenceLogRelH1-H2;HarmonicDifferenceLogRelH1-A3;formantFreqLpc[1];formantBandwidthLpc[1];FormantAmplitudeByMaxHarmonicLogRelF0[1];formantFreqLpc[2];formantBandwidthLpc[2];FormantAmplitudeByMaxHarmonicLogRelF0[2];formantFreqLpc[3];formantBandwidthLpc[3];FormantAmplitudeByMaxHarmonicLogRelF0[3] newNames = jitterLocal;shimmerLocaldB;HNRdBACF;logRelF0-H1-H2;logRelF0-H1-A3;F1frequency;F1bandwidth;F1amplitudeLogRelF0;F2frequency;F2bandwidth;F2amplitudeLogRelF0;F3frequency;F3bandwidth;F3amplitudeLogRelF0 // select logspectral and mfcc for voiced sounds [egemapsv01a_logSpectralVoiced:cValbasedSelector] reader.dmLevel = gemapsv01a_lld_single_logF0;gemapsv01a_logSpectral;egemapsv01a_logSpectral_flux;egemapsv01a_mfcc writer.dmLevel = egemapsv01a_logSpectralVoiced \{\cm[bufferModeRbLagConf]} idx=0 threshold=0.000001 removeIdx=1 zeroVec=1 outputVal=0.0 // select logspectral and mfcc for voiced sounds [egemapsv01a_logSpectralUnvoiced:cValbasedSelector] reader.dmLevel = gemapsv01a_lld_single_logF0;gemapsv01a_logSpectral;egemapsv01a_logSpectral_flux writer.dmLevel = egemapsv01a_logSpectralUnvoiced \{\cm[bufferModeRbLagConf]} idx=0 invert = 1 threshold = 0.000001 removeIdx=1 zeroVec=1 outputVal=0.0 [egemapsv01a_lldSetSelectorSpectralNz:cDataSelector] reader.dmLevel = egemapsv01a_logSpectralVoiced writer.dmLevel = egemapsv01a_lldSetSpectralNz \{\cm[bufferModeRbConf]} selected = pcm_fftMag_alphaRatioDB;pcm_fftMag_hammarbergIndexDB;pcm_fftMag_logSpectralSlopeOfBand0-500;pcm_fftMag_logSpectralSlopeOfBand500-1500;pcm_fftMag_spectralFlux;mfcc[1];mfcc[2];mfcc[3];mfcc[4] newNames = alphaRatioV;hammarbergIndexV;slopeV0-500;slopeV500-1500;spectralFluxV;mfcc1V;mfcc2V;mfcc3V;mfcc4V [egemapsv01a_lldSetSelectorSpectralZ:cDataSelector] reader.dmLevel = egemapsv01a_logSpectralUnvoiced writer.dmLevel = egemapsv01a_lldSetSpectralZ \{\cm[bufferModeRbConf]} selected = pcm_fftMag_alphaRatioDB;pcm_fftMag_hammarbergIndexDB;pcm_fftMag_logSpectralSlopeOfBand0-500;pcm_fftMag_logSpectralSlopeOfBand500-1500;pcm_fftMag_spectralFlux newNames = alphaRatioUV;hammarbergIndexUV;slopeUV0-500;slopeUV500-1500;spectralFluxUV ;;;;;;;;;;;;;;;; smoothing ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[egemapsv01a_smoE].type=cContourSmoother instance[egemapsv01a_smoNoFLZ].type=cContourSmoother instance[egemapsv01a_smoNoF0andLoudnNz].type=cContourSmoother instance[egemapsv01a_smoSpectralZ].type=cContourSmoother instance[egemapsv01a_smoSpectralNz].type=cContourSmoother [egemapsv01a_smoE:cContourSmoother] reader.dmLevel = egemapsv01a_lldsetE writer.dmLevel = egemapsv01a_lldsetE_smo nameAppend = sma3 copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 0 [egemapsv01a_smoNoFLZ:cContourSmoother] reader.dmLevel = egemapsv01a_lldSetNoF0AndLoudnessZ writer.dmLevel = egemapsv01a_lldSetNoF0AndLoudnessZ_smo \{\cm[bufferModeConf]} nameAppend = sma3 copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 0 [egemapsv01a_smoNoF0andLoudnNz:cContourSmoother] reader.dmLevel = egemapsv01a_lldSetNoF0AndLoudnessNz writer.dmLevel = egemapsv01a_lldSetNoF0AndLoudnessNz_smo \{\cm[bufferModeConf]} nameAppend = sma3nz copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 1 [egemapsv01a_smoSpectralZ:cContourSmoother] reader.dmLevel = egemapsv01a_lldSetSpectralZ writer.dmLevel = egemapsv01a_lldSetSpectralZ_smo \{\cm[bufferModeConf]} nameAppend = sma3nz copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 ; non-zero SMA is ok here, as it is inverted with 0's for the voiced parts noZeroSma = 1 [egemapsv01a_smoSpectralNz:cContourSmoother] reader.dmLevel = egemapsv01a_lldSetSpectralNz writer.dmLevel = egemapsv01a_lldSetSpectralNz_smo \{\cm[bufferModeConf]} nameAppend = sma3nz copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 1 ================================================ FILE: config/gui/visgui.conf ================================================ ;;;;; all the components we require are listed here: [componentInstances:cComponentManager] // this line configures the default data memory: instance[dataMemory].type=cDataMemory instance[liveIn].type=cPortaudioSource instance[fr1].type=cFramer instance[energy].type=cEnergy ;instance[gui].type = cSimpleVisualiserGUI instance[gui2].type = cSimpleVisualiserGUI printLevelStats=6 nThreads=1 ;;;;;;;;;;;;;;;;; below the config sections for the components start ;;;;;;;;; [liveIn:cPortaudioSource] writer.dmLevel=wave ; audio buffersize must be > then buffersize of framer to avoid 100% cpu hog ;audioBuffersize = 2500 sampleRate=16000 monoMixdown=1 ///////// [fr1:cFramer] reader.dmLevel=wave writer.dmLevel=frames buffersize_sec=1.0 frameSize = 0.0250 frameStep = 0.010 [energy:cEnergy] reader.dmLevel=frames writer.dmLevel=energy buffersize_sec=1.0 nameAppend=energy rms=1 log=1 ;escaleLog = 0.1 htkcompatible=0 [gui:cSimpleVisualiserGUI] reader.dmLevel=energy action=movingplot inputs=RMSenergy inputScale=200.0 inputOffset=0.0 [gui2:cSimpleVisualiserGUI] reader.dmLevel=energy action=movingplot inputs=LOGenergy inputScale=10.0 inputOffset=10.0 ================================================ FILE: config/gui/visgui_cepstr.conf ================================================ ;;;;; all the components we require are listed here: [componentInstances:cComponentManager] // this line configures the default data memory: instance[dataMemory].type=cDataMemory instance[liveIn].type=cPortaudioSource instance[energy].type=cEnergy instance[frame].type=cFramer instance[int].type=cIntensity instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmp].type=cFFTmagphase instance[cep].type=cAcf instance[vectorOperation].type=cVectorOperation instance[gui2].type = cSimpleVisualiserGUI printLevelStats=6 nThreads=1 ;execDebug=1 ;;;;;;;;;;;;;;;;; below the config sections for the components start ;;;;;;;;; [liveIn:cPortaudioSource] writer.dmLevel=wave ; audio buffersize must be > then buffersize of framer to avoid 100% cpu hog ;audioBuffersize = 2500 sampleRate=16000 monoMixdown=1 ///////// [energy:cEnergy] reader.dmLevel=outp writer.dmLevel=energy buffersize_sec=1.0 nameAppend=energy rms=1 log=1 ;escaleLog = 0.1 htkcompatible=0 [frame:cFramer] reader.dmLevel=wave writer.dmLevel=outp frameSize = 0.030 frameStep = 0.020 frameCenterSpecial = left [int:cIntensity] reader.dmLevel = outp writer.dmLevel = intens // nameAppend = copyInputName = 1 processArrayFields = 1 intensity = 0 loudness = 1 [win:cWindower] reader.dmLevel=outp writer.dmLevel=win winFunc=gauss gain=1.0 sigma=0.4 [fft:cTransformFFT] reader.dmLevel=win writer.dmLevel=fftc [fftmp:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag nameAppend = fftspec [cep:cAcf] reader.dmLevel=fftmag writer.dmLevel=cepstrum cepstrum=1 [vectorOperation:cVectorOperation] reader.dmLevel = cepstrum writer.dmLevel = logcepstrum // nameAppend = copyInputName = 1 processArrayFields = 1 operation = exp param1 = 1 param2 = 1 logfloor = 0.0000001 powOnlyPos = 0 [gui2:cSimpleVisualiserGUI] reader.dmLevel=cepstrum matMultiplier = 1 action=movingMatplot fullVectorAsInput = 1 inputscaleFullinput = 2 inputoffsetFullinput = 0.0 ================================================ FILE: config/gui/visgui_chroma.conf ================================================ ;;;;; all the components we require are listed here: [componentInstances:cComponentManager] // this line configures the default data memory: instance[dataMemory].type=cDataMemory instance[liveIn].type=cPortaudioSource instance[frame].type=cFramer instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmp].type=cFFTmagphase instance[tonespec].type = cTonespec instance[chroma].type = cChroma instance[gui2].type = cSimpleVisualiserGUI printLevelStats=6 nThreads=1 ;execDebug=1 ;;;;;;;;;;;;;;;;; below the config sections for the components start ;;;;;;;;; [liveIn:cPortaudioSource] writer.dmLevel=wave ; audio buffersize must be > then buffersize of framer to avoid 100% cpu hog ;audioBuffersize = 2500 sampleRate=16000 monoMixdown=1 ///////// [frame:cFramer] reader.dmLevel=wave writer.dmLevel=outp frameSize = 0.064 frameStep = 0.010 frameCenterSpecial = left [win:cWindower] reader.dmLevel=outp writer.dmLevel=win winFunc=gauss gain=1.0 sigma=0.4 [fft:cTransformFFT] reader.dmLevel=win writer.dmLevel=fftc [fftmp:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag nameAppend = fftspec ;;;; default (template) configuration section for component 'cTonespec' ;;;; [tonespec:cTonespec] reader.dmLevel = fftmag writer.dmLevel = tonespec nameAppend = note copyInputName = 1 processArrayFields = 0 nOctaves = 6 firstNote = 55 filterType = gau usePower = 1 dbA = 1 ;;;; default (template) configuration section for component 'cChroma' ;;;; [chroma:cChroma] reader.dmLevel = tonespec writer.dmLevel = chroma nameAppend = chroma copyInputName = 0 processArrayFields = 0 octaveSize = 12 [gui2:cSimpleVisualiserGUI] reader.dmLevel=chroma matMultiplier = 20 action=movingMatplot fullVectorAsInput = 1 inputscaleFullinput = 300 inputoffsetFullinput = 0.0 ================================================ FILE: config/gui/visgui_melspec.conf ================================================ ;;;;; all the components we require are listed here: [componentInstances:cComponentManager] // this line configures the default data memory: instance[dataMemory].type=cDataMemory instance[liveIn].type=cPortaudioSource instance[energy].type=cEnergy instance[frame].type=cFramer instance[int].type=cIntensity instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmp].type=cFFTmagphase instance[scale].type=cSpecScale instance[melspec].type = cMelspec instance[gui2].type = cSimpleVisualiserGUI printLevelStats=6 nThreads=1 ;execDebug=1 ;;;;;;;;;;;;;;;;; below the config sections for the components start ;;;;;;;;; [liveIn:cPortaudioSource] writer.dmLevel=wave ; audio buffersize must be > then buffersize of framer to avoid 100% cpu hog ;audioBuffersize = 2500 sampleRate=16000 monoMixdown=1 ///////// [energy:cEnergy] reader.dmLevel=outp writer.dmLevel=energy buffersize_sec=1.0 nameAppend=energy rms=1 log=1 ;escaleLog = 0.1 htkcompatible=0 [frame:cFramer] reader.dmLevel=wave writer.dmLevel=outp frameSize = 0.030 frameStep = 0.020 frameCenterSpecial = left [int:cIntensity] reader.dmLevel = outp writer.dmLevel = intens // nameAppend = copyInputName = 1 processArrayFields = 1 intensity = 0 loudness = 1 [win:cWindower] reader.dmLevel=outp writer.dmLevel=win winFunc=gauss gain=1.0 sigma=0.4 [fft:cTransformFFT] reader.dmLevel=win writer.dmLevel=fftc [fftmp:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag nameAppend = fftspec [scale:cSpecScale] reader.dmLevel=fftmag writer.dmLevel=hps // nameAppend = copyInputName = 1 processArrayFields = 0 scale=oct sourceScale = lin // logScaleBase = 2 // logSourceScaleBase = 2 // firstNote = 55 interpMethod = spline minF = 25 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [melspec:cMelspec] reader.dmLevel = fftmag writer.dmLevel = mel nameAppend = melspec copyInputName = 1 processArrayFields = 1 nBands = 26 lofreq = 20 hifreq = 8000 usePower = 1 htkcompatible = 0 specScale = mel [mfcc:cMfcc] reader.dmLevel = mel writer.dmLevel = mfcc // nameAppend = copyInputName = 1 processArrayFields = 1 firstMfcc = 1 lastMfcc = 21 melfloor = 0.000000 cepLifter = 22 htkcompatible = 0 [smo:cContourSmoother] reader.dmLevel = pitch;intens writer.dmLevel = smo nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 [gui2:cSimpleVisualiserGUI] reader.dmLevel=mel matMultiplier = 10 action=movingMatplot fullVectorAsInput = 1 inputscaleFullinput = 5 inputoffsetFullinput = 0.0 ================================================ FILE: config/gui/visgui_mfcc.conf ================================================ ;;;;; all the components we require are listed here: [componentInstances:cComponentManager] // this line configures the default data memory: instance[dataMemory].type=cDataMemory instance[liveIn].type=cPortaudioSource instance[energy].type=cEnergy instance[frame].type=cFramer instance[int].type=cIntensity instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmp].type=cFFTmagphase instance[scale].type=cSpecScale instance[melspec].type = cMelspec instance[mfcc].type = cMfcc instance[gui2].type = cSimpleVisualiserGUI printLevelStats=6 nThreads=1 ;execDebug=1 ;;;;;;;;;;;;;;;;; below the config sections for the components start ;;;;;;;;; [liveIn:cPortaudioSource] writer.dmLevel=wave ; audio buffersize must be > then buffersize of framer to avoid 100% cpu hog ;audioBuffersize = 2500 sampleRate=16000 monoMixdown=1 ///////// [energy:cEnergy] reader.dmLevel=outp writer.dmLevel=energy buffersize_sec=1.0 nameAppend=energy rms=1 log=1 ;escaleLog = 0.1 htkcompatible=0 [frame:cFramer] reader.dmLevel=wave writer.dmLevel=outp frameSize = 0.030 frameStep = 0.020 frameCenterSpecial = left [int:cIntensity] reader.dmLevel = outp writer.dmLevel = intens // nameAppend = copyInputName = 1 processArrayFields = 1 intensity = 0 loudness = 1 [win:cWindower] reader.dmLevel=outp writer.dmLevel=win winFunc=gauss gain=1.0 sigma=0.4 [fft:cTransformFFT] reader.dmLevel=win writer.dmLevel=fftc [fftmp:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag nameAppend = fftspec [scale:cSpecScale] reader.dmLevel=fftmag writer.dmLevel=hps // nameAppend = copyInputName = 1 processArrayFields = 0 scale=oct sourceScale = lin // logScaleBase = 2 // logSourceScaleBase = 2 // firstNote = 55 interpMethod = spline minF = 25 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [melspec:cMelspec] reader.dmLevel = fftmag writer.dmLevel = mel nameAppend = melspec copyInputName = 1 processArrayFields = 1 nBands = 26 lofreq = 20 hifreq = 8000 usePower = 1 htkcompatible = 0 specScale = mel [mfcc:cMfcc] reader.dmLevel = mel writer.dmLevel = mfcc // nameAppend = copyInputName = 1 processArrayFields = 1 firstMfcc = 1 lastMfcc = 21 melfloor = 0.000000 cepLifter = 22 htkcompatible = 0 [smo:cContourSmoother] reader.dmLevel = pitch;intens writer.dmLevel = smo nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 [gui2:cSimpleVisualiserGUI] reader.dmLevel=mfcc matMultiplier = 10 action=movingMatplot fullVectorAsInput = 1 inputscaleFullinput = 5 inputoffsetFullinput = 10.0 ================================================ FILE: config/gui/visgui_pitch.conf ================================================ ;;;;; all the components we require are listed here: [componentInstances:cComponentManager] // this line configures the default data memory: instance[dataMemory].type=cDataMemory instance[liveIn].type=cPortaudioSource /* instance[fr1].type=cFramer */ instance[energy].type=cEnergy instance[frame].type=cFramer instance[int].type=cIntensity instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmp].type=cFFTmagphase instance[scale].type=cSpecScale instance[shs].type=cPitchShs instance[smooth].type=cPitchSmoother instance[smo].type=cContourSmoother instance[gui2].type = cSimpleVisualiserGUI printLevelStats=6 nThreads=1 ;execDebug=1 ;;;;;;;;;;;;;;;;; below the config sections for the components start ;;;;;;;;; [liveIn:cPortaudioSource] writer.dmLevel=wave ; audio buffersize must be > then buffersize of framer to avoid 100% cpu hog ;audioBuffersize = 2500 sampleRate=16000 monoMixdown=1 ///////// /* [fr1:cFramer] reader.dmLevel=wave writer.dmLevel=frames buffersize_sec=1.0 frameSize = 0.0250 frameStep = 0.010 */ [energy:cEnergy] reader.dmLevel=outp writer.dmLevel=energy buffersize_sec=1.0 nameAppend=energy rms=1 log=1 ;escaleLog = 0.1 htkcompatible=0 [frame:cFramer] reader.dmLevel=wave writer.dmLevel=outp frameSize = 0.070 frameStep = 0.010 frameCenterSpecial = left [int:cIntensity] reader.dmLevel = outp writer.dmLevel = intens // nameAppend = copyInputName = 1 processArrayFields = 1 intensity = 0 loudness = 1 [win:cWindower] reader.dmLevel=outp writer.dmLevel=win winFunc=gauss gain=1.0 sigma=0.4 [fft:cTransformFFT] reader.dmLevel=win writer.dmLevel=fftc [fftmp:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag [scale:cSpecScale] reader.dmLevel=fftmag writer.dmLevel=hps // nameAppend = copyInputName = 1 processArrayFields = 0 scale=octave sourceScale = lin // logScaleBase = 2 // logSourceScaleBase = 2 // firstNote = 55 interpMethod = spline minF = 25 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [shs:cPitchShs] reader.dmLevel=hps writer.dmLevel=pitchShs // nameAppend = copyInputName = 1 processArrayFields = 0 maxPitch = 400 minPitch = 52 nCandidates = 6 scores = 1 voicing = 1 F0C1 = 0 voicingC1 = 0 F0raw = 1 voicingClip = 1 voicingCutoff = 0.75000 inputFieldSearch = Mag_octScale octaveCorrection = 0 nHarmonics = 15 compressionFactor = 0.850000 [smooth:cPitchSmoother] reader.dmLevel=pitchShs writer.dmLevel=pitch // nameAppend = copyInputName = 1 processArrayFields = 0 medianFilter0 = 0 postSmoothing = 0 postSmoothingMethod = simple ; note: octave correction is too agressive, thus we disable it.. octaveCorrection = 0 F0final = 1 F0finalEnv = 0 no0f0 = 0 voicingFinalClipped = 0 voicingFinalUnclipped = 1 F0raw = 0 voicingC1 = 0 voicingClip = 0 [smo:cContourSmoother] reader.dmLevel = pitch;intens writer.dmLevel = smo nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 [gui2:cSimpleVisualiserGUI] reader.dmLevel=smo;energy ;reader.dmLevel=fftmag action=moving2dplot ;action=movingMatplot ;fullVectorAsInput = 1 inputs=F0final_sma;LOGenergy ;inputscaleFullinput = 125.0 ;inputoffsetFullinput = 0.0 inputScale=0.5;20 inputOffset=0.0;12.0 inputColours=blue;red ================================================ FILE: config/gui/visgui_pitch_funct.conf ================================================ ;;;;; all the components we require are listed here: [componentInstances:cComponentManager] // this line configures the default data memory: instance[dataMemory].type=cDataMemory instance[liveIn].type=cPortaudioSource /* instance[fr1].type=cFramer */ instance[energy].type=cEnergy instance[frame].type=cFramer instance[int].type=cIntensity instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmp].type=cFFTmagphase instance[scale].type=cSpecScale instance[shs].type=cPitchShs instance[smooth].type=cPitchSmoother instance[smo].type=cContourSmoother instance[gui2].type = cSimpleVisualiserGUI printLevelStats=6 nThreads=1 ;execDebug=1 ;;;;;;;;;;;;;;;;; below the config sections for the components start ;;;;;;;;; [liveIn:cPortaudioSource] writer.dmLevel=wave ; audio buffersize must be > then buffersize of framer to avoid 100% cpu hog ;audioBuffersize = 2500 sampleRate=16000 monoMixdown=1 ///////// /* [fr1:cFramer] reader.dmLevel=wave writer.dmLevel=frames buffersize_sec=1.0 frameSize = 0.0250 frameStep = 0.010 */ [energy:cEnergy] reader.dmLevel=outp writer.dmLevel=energy buffersize_sec=1.0 nameAppend=energy rms=1 log=1 ;escaleLog = 0.1 htkcompatible=0 [frame:cFramer] reader.dmLevel=wave writer.dmLevel=outp frameSize = 0.070 frameStep = 0.010 frameCenterSpecial = left [int:cIntensity] reader.dmLevel = outp writer.dmLevel = intens // nameAppend = copyInputName = 1 processArrayFields = 1 intensity = 0 loudness = 1 [win:cWindower] reader.dmLevel=outp writer.dmLevel=win winFunc=gauss gain=1.0 sigma=0.4 [fft:cTransformFFT] reader.dmLevel=win writer.dmLevel=fftc [fftmp:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag [scale:cSpecScale] reader.dmLevel=fftmag writer.dmLevel=hps // nameAppend = copyInputName = 1 processArrayFields = 0 scale=octave sourceScale = lin // logScaleBase = 2 // logSourceScaleBase = 2 // firstNote = 55 interpMethod = spline minF = 25 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [shs:cPitchShs] reader.dmLevel=hps writer.dmLevel=pitchShs // nameAppend = copyInputName = 1 processArrayFields = 0 maxPitch = 400 minPitch = 52 nCandidates = 6 scores = 1 voicing = 1 F0C1 = 0 voicingC1 = 0 F0raw = 1 voicingClip = 1 voicingCutoff = 0.75000 inputFieldSearch = Mag_octScale octaveCorrection = 0 nHarmonics = 15 compressionFactor = 0.850000 [smooth:cPitchSmoother] reader.dmLevel=pitchShs writer.dmLevel=pitch // nameAppend = copyInputName = 1 processArrayFields = 0 medianFilter0 = 0 postSmoothing = 0 postSmoothingMethod = simple ; note: octave correction is too agressive, thus we disable it.. octaveCorrection = 0 F0final = 1 F0finalEnv = 0 no0f0 = 0 voicingFinalClipped = 0 voicingFinalUnclipped = 1 F0raw = 0 voicingC1 = 0 voicingClip = 0 [smo:cContourSmoother] reader.dmLevel = pitch;intens writer.dmLevel = smo nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 [gui2:cSimpleVisualiserGUI] reader.dmLevel=smo;energy ;reader.dmLevel=fftmag action=moving2dplot ;action=movingMatplot ;fullVectorAsInput = 1 inputs=F0final_sma;LOGenergy ;inputscaleFullinput = 125.0 ;inputoffsetFullinput = 0.0 inputScale=0.5;20 inputOffset=0.0;12.0 inputColours=blue;red ================================================ FILE: config/gui/visgui_semitone.conf ================================================ ;;;;; all the components we require are listed here: [componentInstances:cComponentManager] // this line configures the default data memory: instance[dataMemory].type=cDataMemory instance[liveIn].type=cPortaudioSource instance[frame].type=cFramer instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmp].type=cFFTmagphase instance[tonespec].type = cTonespec instance[chroma].type = cChroma instance[gui2].type = cSimpleVisualiserGUI printLevelStats=6 nThreads=1 ;execDebug=1 ;;;;;;;;;;;;;;;;; below the config sections for the components start ;;;;;;;;; [liveIn:cPortaudioSource] writer.dmLevel=wave ; audio buffersize must be > then buffersize of framer to avoid 100% cpu hog ;audioBuffersize = 2500 sampleRate=16000 monoMixdown=1 ///////// [frame:cFramer] reader.dmLevel=wave writer.dmLevel=outp frameSize = 0.064 frameStep = 0.010 frameCenterSpecial = left [win:cWindower] reader.dmLevel=outp writer.dmLevel=win winFunc=gauss gain=1.0 sigma=0.4 [fft:cTransformFFT] reader.dmLevel=win writer.dmLevel=fftc [fftmp:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag nameAppend = fftspec ;;;; default (template) configuration section for component 'cTonespec' ;;;; [tonespec:cTonespec] reader.dmLevel = fftmag writer.dmLevel = tonespec nameAppend = note copyInputName = 1 processArrayFields = 0 nOctaves = 6 firstNote = 55 filterType = gau usePower = 1 dbA = 1 ;;;; default (template) configuration section for component 'cChroma' ;;;; [chroma:cChroma] reader.dmLevel = tonespec writer.dmLevel = chroma nameAppend = chroma copyInputName = 0 processArrayFields = 0 octaveSize = 12 [gui2:cSimpleVisualiserGUI] reader.dmLevel=tonespec matMultiplier = 4 action=movingMatplot fullVectorAsInput = 1 inputscaleFullinput = 40 inputoffsetFullinput = 0.0 ================================================ FILE: config/gui/visgui_spect.conf ================================================ ;;;;; all the components we require are listed here: [componentInstances:cComponentManager] // this line configures the default data memory: instance[dataMemory].type=cDataMemory instance[liveIn].type=cPortaudioSource instance[energy].type=cEnergy instance[frame].type=cFramer instance[int].type=cIntensity instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmp].type=cFFTmagphase instance[gui2].type = cSimpleVisualiserGUI printLevelStats=6 nThreads=1 ;execDebug=1 ;;;;;;;;;;;;;;;;; below the config sections for the components start ;;;;;;;;; [liveIn:cPortaudioSource] writer.dmLevel=wave ; audio buffersize must be > then buffersize of framer to avoid 100% cpu hog ;audioBuffersize = 2500 sampleRate=16000 monoMixdown=1 ///////// [energy:cEnergy] reader.dmLevel=outp writer.dmLevel=energy buffersize_sec=1.0 nameAppend=energy rms=1 log=1 ;escaleLog = 0.1 htkcompatible=0 [frame:cFramer] reader.dmLevel=wave writer.dmLevel=outp frameSize = 0.030 frameStep = 0.020 frameCenterSpecial = left [int:cIntensity] reader.dmLevel = outp writer.dmLevel = intens // nameAppend = copyInputName = 1 processArrayFields = 1 intensity = 0 loudness = 1 [win:cWindower] reader.dmLevel=outp writer.dmLevel=win winFunc=gauss gain=1.0 sigma=0.4 [fft:cTransformFFT] reader.dmLevel=win writer.dmLevel=fftc [fftmp:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag nameAppend = fftspec [scale:cSpecScale] reader.dmLevel=fftmag writer.dmLevel=hps // nameAppend = copyInputName = 1 processArrayFields = 0 scale=oct sourceScale = lin // logScaleBase = 2 // logSourceScaleBase = 2 // firstNote = 55 interpMethod = spline minF = 25 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [melspec:cMelspec] reader.dmLevel = fftmag writer.dmLevel = mel nameAppend = melspec copyInputName = 1 processArrayFields = 1 nBands = 26 lofreq = 20 hifreq = 8000 usePower = 1 htkcompatible = 0 specScale = mel [mfcc:cMfcc] reader.dmLevel = mel writer.dmLevel = mfcc // nameAppend = copyInputName = 1 processArrayFields = 1 firstMfcc = 1 lastMfcc = 21 melfloor = 0.000000 cepLifter = 22 htkcompatible = 0 [smo:cContourSmoother] reader.dmLevel = pitch;intens writer.dmLevel = smo nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 [gui2:cSimpleVisualiserGUI] reader.dmLevel=fftmag matMultiplier = 1 action=movingMatplot fullVectorAsInput = 1 inputscaleFullinput = 80 inputoffsetFullinput = 0.0 ================================================ FILE: config/list_audio_devices.conf ================================================ /////////////////////////////////////////////////////////////////////////// // openSMILE configuration example for listing audio devices // /////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[dataMemory].type = cDataMemory instance[portaudioSource].type = cPortaudioSource printLevelStats = 0 nThreads = 1 [portaudioSource:cPortaudioSource] writer.dmLevel = wave monoMixdown = 0 ; -1 is the default device device = \cm[device{-1}:portaudio device to use for recording, see -listDevices option] listDevices = 1 sampleRate = \cm[sampleRate{44100}:set the sampling rate in Hz for recording] channels = \cm[channels{2}:set the number of audio channels to record] nBits = 16 audioBuffersize_sec = 0.050000 ================================================ FILE: config/liveProsodyAcf.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for speech prosody features ////////////////// ///////// pitch and loudness ////////////////// ///////// ////////////////// ///////// * written 2010 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschränkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // This file is not fully up to date and might not work properly. // Stay tuned for updates. ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory instance[waveIn].type=cPortaudioSource instance[frame].type=cFramer instance[int].type=cIntensity instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmp].type=cFFTmagphase instance[scale].type=cSpecScale instance[shs].type=cPitchShs instance[smooth].type=cPitchSmoother instance[smo].type=cContourSmoother instance[csvsink].type=cCsvSink printLevelStats=6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; main section ;;;;;;;;;;;;;;;;;;;;;;;;;;; [waveIn:cPortaudioSource] writer.dmLevel=wave monoMixdown = 0 ; -1 is the default device, set listDevices=1 to see a device list device = -1 listDevices = 0 sampleRate = 16000 ; if your soundcard only supports stereo (2-channel) recording, ; use channels=2 and set monoMixdown=1 channels = 1 nBits = 16 audioBuffersize_sec = 0.050000 [frame:cFramer] reader.dmLevel=wave writer.dmLevel=outp frameSize = 0.050 frameStep = 0.010 frameCenterSpecial = left [int:cIntensity] reader.dmLevel = outp writer.dmLevel = intens // nameAppend = copyInputName = 1 processArrayFields = 1 intensity = 0 loudness = 1 [win:cWindower] reader.dmLevel=outp writer.dmLevel=win winFunc=gauss gain=1.0 sigma=0.4 [fft:cTransformFFT] reader.dmLevel=win writer.dmLevel=fftc [fftmp:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag [scale:cSpecScale] reader.dmLevel=fftmag writer.dmLevel=hps // nameAppend = copyInputName = 1 processArrayFields = 0 scale=octave sourceScale = lin // logScaleBase = 2 // logSourceScaleBase = 2 // firstNote = 55 interpMethod = spline minF = 25 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [shs:cPitchShs] reader.dmLevel=hps writer.dmLevel=pitchShs // nameAppend = copyInputName = 1 processArrayFields = 0 maxPitch = 620 minPitch = 52 nCandidates = 4 scores = 1 voicing = 1 F0C1 = 0 voicingC1 = 0 F0raw = 1 voicingClip = 1 voicingCutoff = 0.700000 inputFieldSearch = Mag_logScale octaveCorrection = 0 nHarmonics = 15 compressionFactor = 0.850000 [smooth:cPitchSmoother] reader.dmLevel=pitchShs writer.dmLevel=pitch // nameAppend = copyInputName = 1 processArrayFields = 0 medianFilter0 = 0 postSmoothing = 0 postSmoothingMethod = simple ; note: octave correction is too agressive, thus we disable it.. octaveCorrection = 0 F0final = 1 F0finalEnv = 0 no0f0 = 0 voicingFinalClipped = 0 voicingFinalUnclipped = 1 F0raw = 0 voicingC1 = 0 voicingClip = 0 [smo:cContourSmoother] reader.dmLevel = pitch;intens writer.dmLevel = smo nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 [csvsink:cCsvSink] reader.dmLevel=smo filename=\cm[output(O){prosody.csv}:output csv file for pitch data] append=0 ================================================ FILE: config/mediaeval2012_tum_affect/MediaEval_Audio_IS12based_subwin2.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for MediaEval 2012 TUM contrib. ////////////// ///////// ////////////////// ///////// * written 2012 by Felix Weninger, Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschränkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory printLevelStats=0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; main section ;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[waveIn].type=cWaveSource [waveIn:cWaveSource] writer.dmLevel=wave filename=\cm[inputfile(I){test.wav}:name of input file] monoMixdown=1 start=\cm[start(S){0}:segment start in seconds] end=\cm[end(E){-1}:segment end in seconds, -1 for end] ;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame60].type=cFramer instance[win60].type=cWindower instance[fft60].type=cTransformFFT instance[fftmp60].type=cFFTmagphase [frame60:cFramer] reader.dmLevel=wave writer.dmLevel=frame60 frameSize = 0.060 frameStep = 0.010 frameCenterSpecial = left [win60:cWindower] reader.dmLevel=frame60 writer.dmLevel=winG60 winFunc=gauss gain=1.0 sigma=0.4 [fft60:cTransformFFT] reader.dmLevel=winG60 writer.dmLevel=fftcG60 [fftmp60:cFFTmagphase] reader.dmLevel=fftcG60 writer.dmLevel=fftmagG60 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame25].type=cFramer instance[pe25].type=cVectorPreemphasis instance[win25].type=cWindower instance[fft25].type=cTransformFFT instance[fftmp25].type=cFFTmagphase [frame25:cFramer] reader.dmLevel=wave writer.dmLevel=frame25 frameSize = 0.025 frameStep = 0.005 frameCenterSpecial = left [pe25:cVectorPreemphasis] reader.dmLevel=frame25 writer.dmLevel=frame25pe k=0.97 de=0 [win25:cWindower] reader.dmLevel=frame25 writer.dmLevel=winH25 winFunc=hamming [fft25:cTransformFFT] reader.dmLevel=winH25 writer.dmLevel=fftcH25 [fftmp25:cFFTmagphase] reader.dmLevel=fftcH25 writer.dmLevel=fftmagH25 ;;;;;;;;;;;;;;;;;;;;; Energy / loudness [componentInstances:cComponentManager] instance[energy].type=cEnergy instance[melspec1].type=cMelspec instance[audspec].type=cPlp instance[audspecRasta].type=cPlp instance[audspecSum].type=cVectorOperation instance[audspecRastaSum].type=cVectorOperation [energy:cEnergy] reader.dmLevel = frame25 writer.dmLevel = energy log=1 rms=0 [melspec1:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspec1 ; htk compatible sample value scaling htkcompatible = 0 nBands = 28 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 16000 specScale = mel ; perform auditory weighting of spectrum [audspec:cPlp] reader.dmLevel=melspec1 writer.dmLevel=audspec firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=0 RASTA=0 ; perform RASTA style filtering of auditory spectra [audspecRasta:cPlp] reader.dmLevel=melspec1 writer.dmLevel=audspecRasta nameAppend = Rfilt firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=1 RASTA=0 [audspecSum:cVectorOperation] reader.dmLevel = audspec writer.dmLevel = audspecSum // nameAppend = copyInputName = 1 processArrayFields = 0 operation = ll1 nameBase = audspec [audspecRastaSum:cVectorOperation] reader.dmLevel = audspecRasta writer.dmLevel = audspecRastaSum // nameAppend = copyInputName = 1 processArrayFields = 0 operation = ll1 nameBase = audspecRasta ;;;;;;;;;;;;;;; spectral [componentInstances:cComponentManager] instance[spectral].type=cSpectral [spectral:cSpectral] reader.dmLevel=fftmagH25 writer.dmLevel=spectral bands[0]=40-150 bands[1]=250-650 bands[2]=1000-4000 bands[3]=5000-15000 rollOff[0] = 0.25 rollOff[1] = 0.50 rollOff[2] = 0.75 rollOff[3] = 0.90 flux=1 centroid=1 maxPos=0 minPos=0 entropy=1 variance=1 skewness=1 kurtosis=1 slope=1 harmonicity=1 sharpness=1 ;;;;;;;;;;;;;;; mfcc [componentInstances:cComponentManager] instance[melspecMfcc].type=cMelspec instance[mfcc].type=cMfcc [melspecMfcc:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspecMfcc copyInputName = 1 processArrayFields = 1 ; htk compatible sample value scaling htkcompatible = 1 nBands = 28 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 16000 specScale = mel inverse = 0 [mfcc:cMfcc] reader.dmLevel=melspecMfcc writer.dmLevel=mfcc1_12 copyInputName = 1 processArrayFields = 1 firstMfcc = 1 lastMfcc = 16 cepLifter = 22.0 htkcompatible = 1 ;;;;;;;;;;;;;;;; zcr [componentInstances:cComponentManager] instance[mzcr].type=cMZcr [mzcr:cMZcr] reader.dmLevel = frame25 writer.dmLevel = zcr copyInputName = 1 processArrayFields = 1 zcr = 1 mcr = 0 amax = 0 maxmin = 0 dc = 0 ;;;;;;;;;;;;;;;;;;;; smoothing [componentInstances:cComponentManager] instance[smoA].type=cContourSmoother instance[smoB].type=cContourSmoother [smoA:cContourSmoother] reader.dmLevel = audspecSum;audspecRastaSum;energy;zcr writer.dmLevel = lldA_smo buffersize_sec = 16.0 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 [smoB:cContourSmoother] reader.dmLevel = spectral;mfcc1_12 writer.dmLevel = lldB_smo buffersize_sec = 16.0 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 ;;;;;;;;; deltas [componentInstances:cComponentManager] instance[deA].type=cDeltaRegression instance[deB].type=cDeltaRegression [deA:cDeltaRegression] reader.dmLevel = lldA_smo writer.dmLevel = lldA_smo_de buffersize_sec = 16.0 [deB:cDeltaRegression] reader.dmLevel = lldB_smo writer.dmLevel = lldB_smo_de buffersize_sec = 16.0 ;;;;;;;;; functionals / statistics [componentInstances:cComponentManager] instance[functionalsA].type=cFunctionals ;instance[functionalsB].type=cFunctionals ; functionals for energy related lld [functionalsA:cFunctionals] reader.dmLevel = lldA_smo;lldA_smo_de;lldB_smo;lldB_smo_de writer.dmLevel = functionalsA // nameAppend = copyInputName = 1 ;frameMode = full ;; TODO: debug, what happens when allowLastFrameIncomplete = 0 ... ! allowLastFrameIncomplete = 1 frameSize = 2.0 frameStep = 2.0 frameCenterSpecial = left noPostEOIprocessing = 0 functionalsEnabled = Means ; Extremes ; Peaks2 ; Regression ; Percentiles ; Moments ; Times ; Lpc Means.amean = 1 Means.rqmean = 1 Means.absmean = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.flatness = 1 Means.norm = segment Extremes.max = 0 Extremes.min = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 0 Regression.linregerrQ = 1 Regression.qregc1 = 1 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 1 Regression.oldBuggyQerr = 0 Regression.centroid = 1 Regression.normRegCoeff = 0 Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 1 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 1 Peaks2.peakRangeAbs = 1 Peaks2.peakRangeRel = 1 Peaks2.peakMeanAbs = 1 Peaks2.peakMeanMeanDist = 1 Peaks2.peakMeanRel = 1 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 1 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 1 Peaks2.minRisingSlope = 1 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 1 Peaks2.minFallingSlope = 1 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 Peaks2.noClearPeakList = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 0 Times.downleveltime25 = 1 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 1 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 1 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 0 masterTimeNorm = segment ;;;;;;;;; output all features.... [componentInstances:cComponentManager] instance[arffsink].type=cArffSink [arffsink:cArffSink] reader.dmLevel=functionalsA filename=\cm[output(O){output.arff}:output arff file for feature data] append=1 frameIndex=1 frameTime=0 relation=MediaEval_FT instanceName=\cm[instName{null}:instance name] \{arff_targets.conf} ================================================ FILE: config/mediaeval2012_tum_affect/MediaEval_Audio_IS12based_subwin2_step0.5.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for MediaEval 2012 TUM contrib. ////////////// ///////// ////////////////// ///////// * written 2012 by Felix Weninger, Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschränkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory printLevelStats=0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; main section ;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[waveIn].type=cWaveSource [waveIn:cWaveSource] writer.dmLevel=wave filename=\cm[inputfile(I){test.wav}:name of input file] monoMixdown=1 start=\cm[start(S){0}:segment start in seconds] end=\cm[end(E){-1}:segment end in seconds, -1 for end] ;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame60].type=cFramer instance[win60].type=cWindower instance[fft60].type=cTransformFFT instance[fftmp60].type=cFFTmagphase [frame60:cFramer] reader.dmLevel=wave writer.dmLevel=frame60 frameSize = 0.060 frameStep = 0.010 frameCenterSpecial = left [win60:cWindower] reader.dmLevel=frame60 writer.dmLevel=winG60 winFunc=gauss gain=1.0 sigma=0.4 [fft60:cTransformFFT] reader.dmLevel=winG60 writer.dmLevel=fftcG60 [fftmp60:cFFTmagphase] reader.dmLevel=fftcG60 writer.dmLevel=fftmagG60 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame25].type=cFramer instance[pe25].type=cVectorPreemphasis instance[win25].type=cWindower instance[fft25].type=cTransformFFT instance[fftmp25].type=cFFTmagphase [frame25:cFramer] reader.dmLevel=wave writer.dmLevel=frame25 frameSize = 0.025 frameStep = 0.005 frameCenterSpecial = left [pe25:cVectorPreemphasis] reader.dmLevel=frame25 writer.dmLevel=frame25pe k=0.97 de=0 [win25:cWindower] reader.dmLevel=frame25 writer.dmLevel=winH25 winFunc=hamming [fft25:cTransformFFT] reader.dmLevel=winH25 writer.dmLevel=fftcH25 [fftmp25:cFFTmagphase] reader.dmLevel=fftcH25 writer.dmLevel=fftmagH25 ;;;;;;;;;;;;;;;;;;;;; Energy / loudness [componentInstances:cComponentManager] instance[energy].type=cEnergy instance[melspec1].type=cMelspec instance[audspec].type=cPlp instance[audspecRasta].type=cPlp instance[audspecSum].type=cVectorOperation instance[audspecRastaSum].type=cVectorOperation [energy:cEnergy] reader.dmLevel = frame25 writer.dmLevel = energy log=1 rms=0 [melspec1:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspec1 ; htk compatible sample value scaling htkcompatible = 0 nBands = 28 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 16000 specScale = mel ; perform auditory weighting of spectrum [audspec:cPlp] reader.dmLevel=melspec1 writer.dmLevel=audspec firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=0 RASTA=0 ; perform RASTA style filtering of auditory spectra [audspecRasta:cPlp] reader.dmLevel=melspec1 writer.dmLevel=audspecRasta nameAppend = Rfilt firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=1 RASTA=0 [audspecSum:cVectorOperation] reader.dmLevel = audspec writer.dmLevel = audspecSum // nameAppend = copyInputName = 1 processArrayFields = 0 operation = ll1 nameBase = audspec [audspecRastaSum:cVectorOperation] reader.dmLevel = audspecRasta writer.dmLevel = audspecRastaSum // nameAppend = copyInputName = 1 processArrayFields = 0 operation = ll1 nameBase = audspecRasta ;;;;;;;;;;;;;;; spectral [componentInstances:cComponentManager] instance[spectral].type=cSpectral [spectral:cSpectral] reader.dmLevel=fftmagH25 writer.dmLevel=spectral bands[0]=40-150 bands[1]=250-650 bands[2]=1000-4000 bands[3]=5000-15000 rollOff[0] = 0.25 rollOff[1] = 0.50 rollOff[2] = 0.75 rollOff[3] = 0.90 flux=1 centroid=1 maxPos=0 minPos=0 entropy=1 variance=1 skewness=1 kurtosis=1 slope=1 harmonicity=1 sharpness=1 ;;;;;;;;;;;;;;; mfcc [componentInstances:cComponentManager] instance[melspecMfcc].type=cMelspec instance[mfcc].type=cMfcc [melspecMfcc:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspecMfcc copyInputName = 1 processArrayFields = 1 ; htk compatible sample value scaling htkcompatible = 1 nBands = 28 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 16000 specScale = mel inverse = 0 [mfcc:cMfcc] reader.dmLevel=melspecMfcc writer.dmLevel=mfcc1_12 copyInputName = 1 processArrayFields = 1 firstMfcc = 1 lastMfcc = 16 cepLifter = 22.0 htkcompatible = 1 ;;;;;;;;;;;;;;;; zcr [componentInstances:cComponentManager] instance[mzcr].type=cMZcr [mzcr:cMZcr] reader.dmLevel = frame25 writer.dmLevel = zcr copyInputName = 1 processArrayFields = 1 zcr = 1 mcr = 0 amax = 0 maxmin = 0 dc = 0 ;;;;;;;;;;;;;;;;;;;; smoothing [componentInstances:cComponentManager] instance[smoA].type=cContourSmoother instance[smoB].type=cContourSmoother [smoA:cContourSmoother] reader.dmLevel = audspecSum;audspecRastaSum;energy;zcr writer.dmLevel = lldA_smo buffersize_sec = 16.0 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 [smoB:cContourSmoother] reader.dmLevel = spectral;mfcc1_12 writer.dmLevel = lldB_smo buffersize_sec = 16.0 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 ;;;;;;;;; deltas [componentInstances:cComponentManager] instance[deA].type=cDeltaRegression instance[deB].type=cDeltaRegression [deA:cDeltaRegression] reader.dmLevel = lldA_smo writer.dmLevel = lldA_smo_de buffersize_sec = 16.0 [deB:cDeltaRegression] reader.dmLevel = lldB_smo writer.dmLevel = lldB_smo_de buffersize_sec = 16.0 ;;;;;;;;; functionals / statistics [componentInstances:cComponentManager] instance[functionalsA].type=cFunctionals ;instance[functionalsB].type=cFunctionals ; functionals for energy related lld [functionalsA:cFunctionals] reader.dmLevel = lldA_smo;lldA_smo_de;lldB_smo;lldB_smo_de writer.dmLevel = functionalsA // nameAppend = copyInputName = 1 ;frameMode = full ;; TODO: debug, what happens when allowLastFrameIncomplete = 0 ... ! allowLastFrameIncomplete = 1 frameSize = 2.0 frameStep = 0.5 frameCenterSpecial = left noPostEOIprocessing = 0 functionalsEnabled = Means ; Extremes ; Peaks2 ; Regression ; Percentiles ; Moments ; Times ; Lpc Means.amean = 1 Means.rqmean = 1 Means.absmean = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.flatness = 1 Means.norm = segment Extremes.max = 0 Extremes.min = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 0 Regression.linregerrQ = 1 Regression.qregc1 = 1 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 1 Regression.oldBuggyQerr = 0 Regression.centroid = 1 Regression.normRegCoeff = 0 Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 1 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 1 Peaks2.peakRangeAbs = 1 Peaks2.peakRangeRel = 1 Peaks2.peakMeanAbs = 1 Peaks2.peakMeanMeanDist = 1 Peaks2.peakMeanRel = 1 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 1 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 1 Peaks2.minRisingSlope = 1 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 1 Peaks2.minFallingSlope = 1 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 Peaks2.noClearPeakList = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 0 Times.downleveltime25 = 1 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 1 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 1 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 0 masterTimeNorm = segment ;;;;;;;;; output all features.... [componentInstances:cComponentManager] instance[arffsink].type=cArffSink ;instance[dbg].type=cArffSink [arffsink:cArffSink] ;reader.dmLevel=lld_nzsmo;lldA_smo;lldB_smo reader.dmLevel=functionalsA filename=\cm[output(O){output.arff}:output arff file for feature data] append=1 frameIndex=1 frameTime=0 relation=MediaEval_FT instanceName=\cm[instName{null}:instance name] \{arff_targets.conf} ================================================ FILE: config/mediaeval2012_tum_affect/MediaEval_VideoFunctionals.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for MediaEval 2012 TUM contrib. ////////////// ///////// ////////////////// ///////// * written 2012 by Felix Weninger, Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschränkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // Summarizes externally extracted video features ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory printLevelStats=0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; main section ;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[csvIn].type=cCsvSource instance[dsel].type=cDataSelector [csvIn:cCsvSource] writer.dmLevel=lld0 writer.levelconf.isRb = 0 writer.levelconf.growDyn = 1 writer.levelconf.T = 0.04 filename=\cm[inputfile(I){test.csv}:name of input file] start=\cm[start(S){1}:start line] end=\cm[end(E){-1}:end line] [dsel:cDataSelector] reader.dmLevel = lld0 writer.dmLevel = lld // nameAppend = copyInputName = 1 // selFile = // selected[] = selectedRange[0] = 2-$ // newNames[] = elementMode = 1 dummyMode = 0 ;;;;;;;;; deltas [componentInstances:cComponentManager] instance[deA].type=cDeltaRegression [deA:cDeltaRegression] reader.dmLevel = lld writer.dmLevel = lld_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ;;;;;;;;; functionals / statistics [componentInstances:cComponentManager] instance[functionalsA].type=cFunctionals ; functionals for energy related lld [functionalsA:cFunctionals] reader.dmLevel = lld;lld_de writer.dmLevel = functionals // nameAppend = copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Means; Peaks2 ; Percentiles ; Moments Means.amean = 1 Means.rqmean = 1 Means.absmean = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.flatness = 1 Means.norm = segment Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 0 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 0 Peaks2.peakRangeAbs = 0 Peaks2.peakRangeRel = 0 Peaks2.peakMeanAbs = 1 Peaks2.peakMeanMeanDist = 0 Peaks2.peakMeanRel = 0 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 0 Peaks2.minMeanAbs = 1 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 1 Peaks2.minRisingSlope = 1 Peaks2.stddevRisingSlope = 0 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 1 Peaks2.minFallingSlope = 1 Peaks2.stddevFallingSlope = 0 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 0 Moments.kurtosis = 0 Moments.amean = 0 Percentiles.quartiles = 0 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 nonZeroFuncts = 0 masterTimeNorm = segment ;;;;;;;;; output all features.... [componentInstances:cComponentManager] instance[arffsink].type=cArffSink [arffsink:cArffSink] reader.dmLevel=functionals filename=\cm[output(O){output.arff}:output arff file for feature data] append=1 frameIndex=0 frameTime=0 relation=MediaEval_FT_VideoNico1 instanceName=\cm[instName{null}:instance name] \{arff_targets.conf} ================================================ FILE: config/mediaeval2012_tum_affect/MediaEval_VideoFunctionals_subwin.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for MediaEval 2012 TUM contrib. ////////////// ///////// ////////////////// ///////// * written 2012 by Felix Weninger, Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) audEERING UG (haftungsbeschränkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // Summarizes externally extracted video features ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory printLevelStats=0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; main section ;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[csvIn].type=cCsvSource [csvIn:cCsvSource] writer.dmLevel=lld writer.levelconf.isRb = 0 writer.levelconf.growDyn = 1 writer.levelconf.T = 0.04 filename=\cm[inputfile(I){test.csv}:name of input file] start=\cm[start(S){1}:start line] end=\cm[end(E){-1}:end line] ;;;;;;;;; deltas [componentInstances:cComponentManager] instance[deA].type=cDeltaRegression [deA:cDeltaRegression] reader.dmLevel = lld writer.dmLevel = lld_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ;;;;;;;;; functionals / statistics [componentInstances:cComponentManager] instance[functionalsA].type=cFunctionals ; functionals for energy related lld [functionalsA:cFunctionals] reader.dmLevel = lld;lld_de writer.dmLevel = functionals // nameAppend = copyInputName = 1 frameMode = full frameSize = 4.0 frameStep = 4.0 frameCenterSpecial = left noPostEOIprocessing = 0 allowLastFrameIncomplete = 1 functionalsEnabled = Means ; Extremes ; Peaks2 ; Regression ; Percentiles ; Moments ; Times ; Lpc Means.amean = 1 Means.rqmean = 1 Means.absmean = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.flatness = 1 Means.norm = segment Extremes.max = 0 Extremes.min = 0 Extremes.maxpos = 1 Extremes.minpos = 1 Extremes.maxameandist = 0 Extremes.minameandist = 0 Regression.linregc1 = 1 Regression.linregc2 = 1 Regression.linregerrA = 0 Regression.linregerrQ = 1 Regression.qregc1 = 1 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 1 Regression.oldBuggyQerr = 0 Regression.centroid = 1 Regression.normRegCoeff = 0 Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 1 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 1 Peaks2.peakRangeAbs = 1 Peaks2.peakRangeRel = 1 Peaks2.peakMeanAbs = 1 Peaks2.peakMeanMeanDist = 1 Peaks2.peakMeanRel = 1 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 1 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 1 Peaks2.minRisingSlope = 1 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 1 Peaks2.minFallingSlope = 1 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 0 Times.downleveltime25 = 1 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 1 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 1 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 0 masterTimeNorm = segment ;;;;;;;;; output all features.... [componentInstances:cComponentManager] instance[arffsink].type=cArffSink [arffsink:cArffSink] reader.dmLevel=functionals filename=\cm[output(O){output.arff}:output arff file for feature data] append=1 frameIndex=1 frameTime=0 relation=MediaEval_FT instanceName=\cm[instName{null}:instance name] \{arff_targets.conf} ================================================ FILE: config/prosodyAcf.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for speech prosody features ////////////////// ///////// pitch (ACF) and intensity ////////////////// ///////// ////////////////// ///////// (c) 2013-2016 audEERING. ////////////////// ///////// All rights reserverd. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory \{shared/standard_wave_input.conf.inc} [componentInstances:cComponentManager] instance[frame].type=cFramer instance[int].type=cIntensity instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmp].type=cFFTmagphase instance[acf].type=cAcf instance[cep].type=cAcf instance[pitch].type=cPitchACF instance[smo].type=cContourSmoother printLevelStats=6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; main section ;;;;;;;;;;;;;;;;;;;;;;;;;;; [frame:cFramer] reader.dmLevel=wave writer.dmLevel=outp frameSize = 0.050 frameStep = 0.010 frameCenterSpecial = left [int:cIntensity] reader.dmLevel = outp writer.dmLevel = intens // nameAppend = copyInputName = 1 processArrayFields = 1 intensity = 0 loudness = 1 [win:cWindower] reader.dmLevel=outp writer.dmLevel=win winFunc=gauss gain=1.0 sigma=0.4 [fft:cTransformFFT] reader.dmLevel=win writer.dmLevel=fftc ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmp:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag [acf:cAcf] reader.dmLevel=fftmag writer.dmLevel=acf [cep:cAcf] reader.dmLevel=fftmag writer.dmLevel=cepstrum cepstrum=1 [pitch:cPitchACF] reader.dmLevel = acf;cepstrum writer.dmLevel = pitch // nameAppend = copyInputName = 1 processArrayFields = 0 maxPitch = 500 voiceProb = 1 voiceQual = 0 HNR = 0 F0 = 1 F0raw = 0 F0env = 0 voicingCutoff = 0.550000 [smo:cContourSmoother] reader.dmLevel = pitch;intens writer.dmLevel = lld nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 \{shared/standard_data_output_lldonly.conf.inc} ================================================ FILE: config/prosodyShs.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for speech prosody features ////////////////// ///////// pitch and intensity ////////////////// ///////// ////////////////// ///////// (c) 2014-2016 audEERING. ////////////////// ///////// All rights reserverd. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory \{shared/standard_wave_input.conf.inc} [componentInstances:cComponentManager] instance[frame].type=cFramer instance[int].type=cIntensity instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmp].type=cFFTmagphase instance[scale].type=cSpecScale instance[shs].type=cPitchShs instance[smooth].type=cPitchSmoother instance[smo].type=cContourSmoother printLevelStats=6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; main section ;;;;;;;;;;;;;;;;;;;;;;;;;;; [frame:cFramer] reader.dmLevel=wave writer.dmLevel=outp frameSize = 0.050 frameStep = 0.010 frameCenterSpecial = left [int:cIntensity] reader.dmLevel = outp writer.dmLevel = intens // nameAppend = copyInputName = 1 processArrayFields = 1 intensity = 0 loudness = 1 [win:cWindower] reader.dmLevel=outp writer.dmLevel=win winFunc=gauss gain=1.0 sigma=0.4 [fft:cTransformFFT] reader.dmLevel=win writer.dmLevel=fftc ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmp:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag [scale:cSpecScale] reader.dmLevel=fftmag writer.dmLevel=hps // nameAppend = copyInputName = 1 processArrayFields = 0 scale=octave sourceScale = lin // logScaleBase = 2 // logSourceScaleBase = 2 // firstNote = 55 interpMethod = spline minF = 25 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [shs:cPitchShs] reader.dmLevel=hps writer.dmLevel=pitchShs // nameAppend = copyInputName = 1 processArrayFields = 0 maxPitch = 620 minPitch = 52 nCandidates = 4 scores = 1 voicing = 1 F0C1 = 0 voicingC1 = 0 F0raw = 1 voicingClip = 1 voicingCutoff = 0.700000 inputFieldSearch = Mag_logScale octaveCorrection = 0 nHarmonics = 15 compressionFactor = 0.850000 [smooth:cPitchSmoother] reader.dmLevel=pitchShs writer.dmLevel=pitch // nameAppend = copyInputName = 1 processArrayFields = 0 medianFilter0 = 0 postSmoothing = 0 postSmoothingMethod = simple ; note: octave correction is too agressive, thus we disable it.. octaveCorrection = 0 F0final = 1 F0finalEnv = 0 no0f0 = 0 voicingFinalClipped = 0 voicingFinalUnclipped = 1 F0raw = 0 voicingC1 = 0 voicingClip = 0 [smo:cContourSmoother] reader.dmLevel = pitch;intens writer.dmLevel = lld nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 \{shared/standard_data_output_lldonly.conf.inc} ================================================ FILE: config/prosodyShsViterbiLoudness.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for speech prosody features ////////////////// ///////// pitch and loudness ////////////////// ///////// ////////////////// ///////// (c) 2014-2016 audEERING. ////////////////// ///////// All rights reserverd. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // === Newest version of prosody features: === // // Includes viterbi-smoothed SHS pitch // Loudness via simple auditory band model // HNR based on F0 harmonics and other spectral peaks // Supports both summarised features (over full input) with -O option (ARFF format) // and LLDs with -lld option (disabled by default if option is not given) [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory instance[waveIn].type=cWaveSource printLevelStats=0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; Wave input ;;;;;;;;;;;;;;;;;;;;;;;;;;; [waveIn:cWaveSource] writer.dmLevel=wave filename=\cm[inputfile(I){test.wav}:name of input file] monoMixdown=1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LOUDNESS ;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame25].type=cFramer instance[win25].type=cWindower instance[fft25].type=cTransformFFT instance[fftmp25].type=cFFTmagphase [frame25:cFramer] reader.dmLevel=wave writer.dmLevel=frame25 frameSize = 0.020 frameStep = 0.010 frameCenterSpecial = left [win25:cWindower] reader.dmLevel=frame25 writer.dmLevel=winH25 winFunc=hamming [fft25:cTransformFFT] reader.dmLevel=winH25 writer.dmLevel=fftcH25 ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmp25:cFFTmagphase] reader.dmLevel=fftcH25 writer.dmLevel=fftmagH25 [componentInstances:cComponentManager] instance[melspec1].type=cMelspec instance[audspec].type=cPlp instance[audspecSum].type=cVectorOperation [melspec1:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspec1 ; htk compatible sample value scaling htkcompatible = 0 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = mel showFbank = 0 ; perform auditory weighting of spectrum [audspec:cPlp] reader.dmLevel=melspec1 writer.dmLevel=audspec firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=0 RASTA=0 [audspecSum:cVectorOperation] reader.dmLevel = audspec writer.dmLevel = loudness writer.levelconf.growDyn = 0 writer.levelconf.isRb = 1 ; This must be > than buffersize of viterbi smoother writer.levelconf.nT = 200 nameAppend = loudness copyInputName = 0 processArrayFields = 0 operation = ll1 nameBase = loudness ;;;;;;;;;;;;;;;;;; F0, SHS, Viterbi smoothed ;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;; From 55 ms windows at 10 ms rate ;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame].type=cFramer instance[win].type=cWindower instance[fft].type=cTransformFFT instance[fftmp].type=cFFTmagphase instance[scale].type=cSpecScale instance[shs].type=cPitchShs instance[pitchSmooth].type=cPitchSmootherViterbi instance[harmonics].type = cHarmonics [frame:cFramer] reader.dmLevel=wave writer.dmLevel=outp frameSize = 0.055 frameStep = 0.010 frameCenterSpecial = left [win:cWindower] reader.dmLevel=outp writer.dmLevel=win winFunc=gauss gain=1.0 sigma=0.4 [fft:cTransformFFT] reader.dmLevel=win writer.dmLevel=fftc ; for compatibility with 2.2.0 and older versions zeroPadSymmetric = 0 [fftmp:cFFTmagphase] reader.dmLevel=fftc writer.dmLevel=fftmag ; greater than pitch smoother max. lag writer.levelconf.nT = 200 [scale:cSpecScale] reader.dmLevel=fftmag writer.levelconf.nT = 3 writer.dmLevel=hps // nameAppend = copyInputName = 1 processArrayFields = 0 scale=octave sourceScale = lin // logScaleBase = 2 // logSourceScaleBase = 2 // firstNote = 55 interpMethod = spline minF = 25 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [shs:cPitchShs] reader.dmLevel=hps writer.dmLevel=pitchShs // nameAppend = copyInputName = 1 processArrayFields = 0 maxPitch = 620 minPitch = 52 nCandidates = 4 scores = 1 voicing = 1 F0C1 = 0 voicingC1 = 0 F0raw = 1 voicingClip = 0 voicingCutoff = 0.700000 greedyPeakAlgo = 1 inputFieldSearch = Mag_octScale octaveCorrection = 0 nHarmonics = 15 compressionFactor = 0.850000 lfCut = 0 [pitchSmooth:cPitchSmootherViterbi] reader.dmLevel=pitchShs reader2.dmLevel=pitchShs writer.dmLevel=pitchG60 copyInputName = 1 bufferLength=90 F0final = 1 F0finalLog = 1 F0finalEnv = 0 voicingFinalClipped = 0 voicingFinalUnclipped = 1 F0raw = 0 voicingC1 = 0 voicingClip = 0 wTvv =10.0 wTvvd= 5.0 wTvuv=10.0 wThr = 4.0 wTuu = 0.0 wLocal=2.0 wRange=1.0 ;;;;;;;;;;;; NEW HNR [harmonics:cHarmonics] reader.dmLevel = fftmag;pitchG60 writer.dmLevel = harmonics writer.levelconf.growDyn = 0 writer.levelconf.isRb = 1 ; This must be > than buffersize of viterbi smoother writer.levelconf.nT = 200 nHarmonics = 10 f0ElementName = F0final magSpecFieldName = pcm_fftMag computeAcfHnrLogdB = 1 ;;;;;;;;;;;;;;; PITCH POST PROCCESSING ;;;;;;;;;;;;;;; AND SMOOTHING OF LLD [componentInstances:cComponentManager] instance[energy60].type=cEnergy instance[volmerge].type = cValbasedSelector instance[smo].type = cContourSmoother instance[smoNz].type = cContourSmoother [energy60:cEnergy] reader.dmLevel=win writer.dmLevel=e60 rms=1 log=0 writer.levelconf.nT=200 [volmerge:cValbasedSelector] reader.dmLevel = e60;pitchG60 writer.dmLevel = pitch idx=0 threshold=0.0008 removeIdx=1 zeroVec=1 outputVal=0.0 [smo:cContourSmoother] reader.dmLevel = loudness writer.dmLevel = smo writer.levelconf.growDyn = 1 writer.levelconf.isRb = 0 writer.levelconf.nT = 1000 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 0 [smoNz:cContourSmoother] reader.dmLevel = pitch;harmonics writer.dmLevel = smoNz writer.levelconf.growDyn = 1 writer.levelconf.isRb = 0 writer.levelconf.nT = 1000 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 1 ;;;;;;;;;;;;;;;;;; SUMMARIES over full input ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[functionalsNz].type = cFunctionals instance[functionals].type = cFunctionals [functionals:cFunctionals] reader.dmLevel = smo writer.dmLevel = stats frameMode = full functionalsEnabled = Moments;Regression;Percentiles Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 0 Moments.kurtosis = 0 Moments.amean = 1 Moments.stddevNorm = 0 Moments.doRatioLimit = 0 Regression.linregc1 = 1 Regression.linregc2 = 0 Regression.linregerrA = 0 Regression.linregerrQ = 0 Regression.qregc1 = 0 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 0 Regression.centroid = 1 Regression.centroidNorm = segment Regression.oldBuggyQerr = 0 Regression.centroidUseAbsValues = 0 Regression.centroidRatioLimit = 0 Regression.doRatioLimit = 0 Percentiles.quartiles = 0 Percentiles.iqr = 0 Percentiles.percentile[0] = 0.1 Percentiles.percentile[1] = 0.9 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 nonZeroFuncts = 0 [functionalsNz:cFunctionals] reader.dmLevel = smoNz writer.dmLevel = statsNz frameMode = full functionalsEnabled = Moments;Regression;Percentiles Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 0 Moments.kurtosis = 0 Moments.amean = 1 Moments.stddevNorm = 0 Moments.doRatioLimit = 0 Regression.linregc1 = 1 Regression.linregc2 = 0 Regression.linregerrA = 0 Regression.linregerrQ = 0 Regression.qregc1 = 0 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 0 Regression.qregerrQ = 0 Regression.centroid = 1 Regression.centroidNorm = segment Regression.oldBuggyQerr = 0 Regression.centroidUseAbsValues = 0 Regression.centroidRatioLimit = 0 Regression.doRatioLimit = 0 Percentiles.quartiles = 0 Percentiles.iqr = 0 Percentiles.percentile[0] = 0.1 Percentiles.percentile[1] = 0.9 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 nonZeroFuncts = 1 ;;;;;;;;;;;;;;;; DATA OUTPUT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[prosody_lldconcat].type=cVectorConcat instance[prosody_llddeconcat].type=cVectorConcat instance[prosody_funcconcat].type=cVectorConcat [prosody_lldconcat:cVectorConcat] reader.dmLevel = smo writer.dmLevel = lld includeSingleElementFields = 1 [prosody_llddeconcat:cVectorConcat] reader.dmLevel = smoNz writer.dmLevel = lld_de includeSingleElementFields = 1 [prosody_funcconcat:cVectorConcat] reader.dmLevel = statsNz;stats writer.dmLevel = func includeSingleElementFields = 1 \{shared/standard_data_output.conf.inc} ================================================ FILE: config/shared/BufferMode.conf.inc ================================================ writer.levelconf.growDyn = 1 writer.levelconf.isRb = 0 writer.levelconf.nT = 1000 ================================================ FILE: config/shared/BufferModeLive.conf.inc ================================================ writer.levelconf.growDyn = 0 writer.levelconf.isRb = 1 ;; must be > turndetector maxlength + grace writer.levelconf.nT = 1500 writer.levelconf.noHang = 2 ================================================ FILE: config/shared/BufferModeRb.conf.inc ================================================ writer.levelconf.growDyn = 0 writer.levelconf.isRb = 1 writer.levelconf.nT = 5 ; writer.levelconf.nT = 3 ================================================ FILE: config/shared/BufferModeRbLag.conf.inc ================================================ writer.levelconf.growDyn = 0 writer.levelconf.isRb = 1 ; This must be > than buffersize of viterbi smoother writer.levelconf.nT = 150 ================================================ FILE: config/shared/FrameModeFunctionals.conf.inc ================================================ ;; set this to override the previously included BufferModeRb.conf.inc (in GeMAPS sets only) for the functionals ;; or (in all other sets), define the RbConf here to save memory on the functionals levels: ;writer.levelconf.growDyn = 0 ;writer.levelconf.isRb = 1 ;writer.levelconf.nT = 5 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left ================================================ FILE: config/shared/FrameModeFunctionalsLive.conf.inc ================================================ ;; set this to override the previously included BufferModeRb.conf.inc (in GeMAPS sets only) for the functionals ;; or (in all other sets), define the RbConf here to save memory on the functionals levels: ;writer.levelconf.growDyn = 0 ;writer.levelconf.isRb = 1 ;writer.levelconf.nT = 5 frameMode = var frameCenterSpecial = left ================================================ FILE: config/shared/arff_targets.conf.inc ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// openSMILE arff targets generic config file ////////////////// ///////// (c) audEERING UG (haftungsbeschränkt), ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // // configuration of commandline options for target classes in an ARFF file // (cArffSink) // // change this file to match your labels! // class[0].name = class // use this for a nominal label (discrete classes) // class[0].type = {classA,classB,classC} class[0].type = \cm[classtype{numeric}:type of labelA, either numeric or a list of comma separated classes in curly brackets] target[0].all = \cm[class{?}:string value for labelA] /* class[1].name = labelB class[0].type = \cm[labelBtype{numeric}:type of labelB, either numeric or a list of comma separated classes in curly brackets] target[1].all = \cm[labelB{0.0}:numeric value for labelB] // you can add as many labels here as you want */ ================================================ FILE: config/shared/standard_data_output.conf.inc ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for data output < ////////////////// ///////// ////////////////// ///////// (c) 2014-2016 audEERING, ////////////////// ///////// All rights reserverd. See file COPYING for details ////////////////// /////////////////////////////////////////////////////////////////////////////////////// /* This file can be included as data output file for standard feature extraction configuration files. It provides commandline options for the batch extraction GUI, and supports LLD and Functionals (summaries) saving. It requires the main extrator configuration file to provide the following data memory levels: lld, lld_de, and func */ ;;;;;;;;; output LLD features to CSV ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[lldsink].type=cCsvSink instance[lldhtksink].type=cHtkSink instance[lldarffsink].type=cArffSink instance[arffsink].type=cArffSink instance[csvsink].type=cCsvSink instance[htksink].type=cHtkSink [lldsink:cCsvSink] reader.dmLevel = lld;lld_de filename=\cm[lldcsvoutput(D){?}:output csv file for LLD, disabled by default ?, only written if filename given] instanceName=\cm[instname(N){unknown}:instance name] append = \cm[appendcsvlld{0}:set to 1 to append to the LLD output csv file, default is not to append] timestamp = \cm[timestampcsvlld{1}:set to 0 to suppress timestamp column, default is 1, i.e. to show timestamp in second column] number = 0 printHeader = \cm[headercsvlld{1}:set to 0 to suppress header line with feature names, default is 1, i.e. to show header line] errorOnNoOutput = 1 [lldhtksink:cHtkSink] reader.dmLevel = lld;lld_de filename=\cm[lldhtkoutput{?}:output HTK binary file for LLD, disabled by default ?, only written if filename given] append = \cm[appendhtklld{0}:set to 1 to append to the LLD output htk file, default is not to append] ; this is broken for HTK sink... errorOnNoOutput = 0 parmKind = 9 [lldarffsink:cArffSink] reader.dmLevel = lld;lld_de frameIndex = 0 frameTime = \cm[timestamparfflld{1}:set to 0 to suppress timestamp column, default is 1, i.e. to show timestamp in second column] filename=\cm[lldarffoutput{?}:name of WEKA Arff output file, set to a valid filename to enable this output sink] relation=\cm[relation{openSMILE_features}:arff relation attribute, feature set name and/or corpus name] instanceName=\cm[instname] ;; use this line instead of the above to always set the instance name to the ;; name of the input wave file ;instanceName=\cm[inputfile] \{\cm[lldarfftargetsfile{arff_targets.conf.inc}:name of arff targets include file]} append=\cm[appendarfflld{1}:set to 0 to disable appending to an existing arff parameter summary file, given by the arffoutput option] errorOnNoOutput = 1 [arffsink:cArffSink] reader.dmLevel=func frameIndex = 0 frameTime = \cm[timestamparff{0}:set to 1 to include timestamp column, default is 0, i.e. to not save timestamp in second column] frameTimeAdd=\cm[frameTimeAdd{0}:frame time offset -start of segment in seconds- used by avec2013] filename=\cm[output(O){?}:name of WEKA Arff output file, set to a valid filename to enable this output sink] relation=\cm[relation{openSMILE_features}:arff relation attribute, feature set name and/or corpus name] instanceName=\cm[instname] ;; use this line instead of the above to always set the instance name to the ;; name of the input wave file ;instanceName=\cm[inputfile] \{\cm[arfftargetsfile{arff_targets.conf.inc}:name of arff targets include file]} append=\cm[appendarff{1}:set to 0 to disable appending to an existing arff parameter summary file, given by the arffoutput option] errorOnNoOutput = 1 [csvsink:cCsvSink] reader.dmLevel = func filename=\cm[csvoutput{?}:output CSV file for summarised parameters, set to a valid filename to enable this output sink, data is appended if file exists] append=\cm[appendcsv{1}:set to 0 to disable appending to an existing csv parameter summary file, given by the csvoutput option] frameIndex=0 frameTime=\cm[timestampcsv{1}:set to 0 to suppress timestamp column, default is 1, i.e. to show timestamp in second column] instanceName=\cm[instname] errorOnNoOutput = 1 printHeader = \cm[headercsv{1}:set to 0 to suppress header line with feature names, default is 1, i.e. to show header line] ; TODO: output without a frame period does not work so that HTK (HList) can read it! [htksink:cHtkSink] reader.dmLevel = func filename=\cm[htkoutput{?}:output HTK file for summarised parameters, set to a valid filename to enable this output sink, no append by default, use -appendstatichtk option to enable] append=\cm[appendhtk{0}:set to 1 to enable appending to an existing HTK parameter summary file, given by the htkoutput option] parmKind = 9 ; this is broken for HTK sink... errorOnNoOutput = 0 ; avoid broken files which HTK cannot read for period approx. > 0.06 (int16 overflow) forcePeriod = 0.01 ================================================ FILE: config/shared/standard_data_output_lldonly.conf.inc ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for data output < ////////////////// ///////// ////////////////// ///////// (c) 2014-2016 audEERING, ////////////////// ///////// All rights reserverd. See file COPYING for details ////////////////// /////////////////////////////////////////////////////////////////////////////////////// /* This file can be included as data output file for standard feature extraction configuration files. It provides commandline options for the batch extraction GUI, and supports LLD and Functionals (summaries) saving. It requires the main extrator configuration file to provide the following data memory levels: lld (including, if available lld_de) */ ;;;;;;;;; output LLD features to CSV ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[lldcsvsink].type=cCsvSink instance[lldhtksink].type=cHtkSink instance[lldarffsink].type=cArffSink [lldcsvsink:cCsvSink] reader.dmLevel = lld filename=\cm[csvoutput{?}:output csv file for LLD, disabled by default ?, only written if filename given] instanceName=\cm[instname(N){unknown}:instance name] append = \cm[appendcsv{0}:set to 1 to append to the LLD output csv file, default is not to append] timestamp = \cm[timestampcsv{1}:set to 0 to suppress timestamp column, default is 1, i.e. to show timestamp in second column] number = 0 printHeader = \cm[headercsv{1}:set to 0 to suppress header line with feature names, default is 1, i.e. to show header line] errorOnNoOutput = 1 [lldhtksink:cHtkSink] reader.dmLevel = lld filename=\cm[output(O){output.htk}:output HTK binary file for LLD. Use ? as value to disable] append = \cm[appendhtk{0}:set to 1 to append to the LLD output htk file, default is not to append] ; this is broken for HTK sink...: errorOnNoOutput = 0 parmKind = 9 [lldarffsink:cArffSink] reader.dmLevel = lld frameIndex = 0 frameTime = \cm[timestamparff{1}:set to 0 to suppress timestamp column, default is 1, i.e. to show timestamp in second column] filename=\cm[arffoutput{?}:name of WEKA Arff output file, set to a valid filename to enable this output sink] relation=\cm[relation{openSMILE_features}:arff relation attribute, feature set name and/or corpus name] instanceName=\cm[instname] ;; use this line instead of the above to always set the instance name to the ;; name of the input wave file ;instanceName=\cm[inputfile] \{\cm[arfftargetsfile{arff_targets.conf.inc}:name of arff targets include file]} append=\cm[appendarff{1}:set to 0 to disable appending to an existing arff parameter summary file, given by the arffoutput option] errorOnNoOutput = 1 ================================================ FILE: config/shared/standard_wave_input.conf.inc ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file for wave input < ////////////////// ///////// ////////////////// ///////// (c) audEERING GmbH, ////////////////// ///////// All rights reserverd. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// [componentInstances:cComponentManager] instance[waveIn].type=cWaveSource [waveIn:cWaveSource] writer.dmLevel=wave buffersize_sec = 5.0 filename=\cm[inputfile(I){test.wav}:name of input file] start=\cm[start{0}:audio start position in seconds] end=\cm[end{-1}:audio end position in seconds, -1 for end of file] monoMixdown=1 outFieldName = pcm ================================================ FILE: config/smileF0.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE config for SHS viterbi smoothed pitch < ////////////////// ///////// ////////////////// ///////// (c) 2013-2016 audEERING. ////////////////// ///////// All rights reserverd. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // output frame rate: 10ms // analysis window length : 60ms, gaussian window \{smileF0_base.conf} [componentInstances:cComponentManager] instance[F0_lldconcat].type=cVectorConcat [F0_lldconcat:cVectorConcat] reader.dmLevel = F0 writer.dmLevel = lld includeSingleElementFields = 1 \{shared/standard_data_output_lldonly.conf.inc} ================================================ FILE: config/smileF0_base.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE config for SHS viterbi smoothed pitch < ////////////////// ///////// ////////////////// ///////// (c) 2013-2016 audEERING. ////////////////// ///////// All rights reserverd. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // output frame rate: 10ms // analysis window length : 60ms, gaussian window ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory printLevelStats=0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; main section ;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[waveIn].type=cWaveSource [waveIn:cWaveSource] writer.dmLevel=wave filename=\cm[inputfile(I){test.wav}:name of input file] monoMixdown=1 ;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame60].type=cFramer instance[win60].type=cWindower instance[fft60].type=cTransformFFT instance[fftmp60].type=cFFTmagphase instance[energy60].type=cEnergy [frame60:cFramer] reader.dmLevel=wave writer.dmLevel=frame60 frameSize = 0.050 frameStep = 0.010 frameCenterSpecial = center [win60:cWindower] reader.dmLevel=frame60 writer.dmLevel=winG60 winFunc=gauss gain=1.0 sigma=0.4 [fft60:cTransformFFT] reader.dmLevel=winG60 writer.dmLevel=fftcG60 [fftmp60:cFFTmagphase] reader.dmLevel=fftcG60 writer.dmLevel=fftmagG60 [energy60:cEnergy] reader.dmLevel=winG60 writer.dmLevel=e60 rms=1 log=0 writer.levelconf.nT=100 [componentInstances:cComponentManager] instance[scale].type=cSpecScale instance[shs].type=cPitchShs instance[pitchSmooth].type=cPitchSmootherViterbi ;instance[shscsv].type = cCsvSink [scale:cSpecScale] reader.dmLevel=fftmagG60 writer.dmLevel=hpsG60 copyInputName = 1 processArrayFields = 0 scale=octave sourceScale = lin // logScaleBase = 2 // logSourceScaleBase = 2 // firstNote = 55 interpMethod = spline minF = 20 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [shs:cPitchShs] reader.dmLevel=hpsG60 writer.dmLevel=pitchShsG60 shsWriter.dmLevel = shsSpec shsSpectrumOutput = 0 copyInputName = 1 processArrayFields = 0 maxPitch = 620 minPitch = 42 nCandidates = 6 scores = 1 voicing = 1 F0C1 = 0 voicingC1 = 0 F0raw = 1 voicingClip = 1 voicingCutoff = 0.700000 inputFieldSearch = Mag_octScale octaveCorrection = 0 nHarmonics = 15 compressionFactor = 0.850000 greedyPeakAlgo = 1 [shscsv:cCsvSink] reader.dmLevel = shsSpec;hpsG60 filename=shs.csv printHeader = 0 timestamp = 0 number = 0 append = 0 [pitchSmooth:cPitchSmootherViterbi] reader.dmLevel=pitchShsG60 reader2.dmLevel=pitchShsG60 writer.dmLevel=pitchG60 copyInputName = 1 bufferLength=90 F0final = 1 F0finalEnv = 0 voicingFinalClipped = 0 voicingFinalUnclipped = 1 F0raw = 0 voicingC1 = 0 voicingClip = 0 wTvv =10.0 wTvvd= 5.0 wTvuv=10.0 wThr = 4.0 wTuu = 0.0 wLocal=2.0 wRange=1.0 ; old parameters for greedyPeakAlgo=0 ;wTvv=10.0 ;wTvuv=25.0 ;wRange=2.0 [componentInstances:cComponentManager] instance[smoF0].type=cContourSmoother instance[f0Selector].type=cDataSelector instance[volmerge].type = cValbasedSelector instance[f0Selector2].type=cDataSelector [smoF0:cContourSmoother] reader.dmLevel = pitchG60 writer.dmLevel = pitchSmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 2 noZeroSma = 1 [f0Selector:cDataSelector] reader.dmLevel = pitchSmo writer.dmLevel = F0a // nameAppend = copyInputName = 1 // selFile = selected[0] = F0final_sma // selectedRange[] = // newNames[] = elementMode = 1 //dummyMode =1 [volmerge:cValbasedSelector] reader.dmLevel = e60;F0a writer.dmLevel = F0cl idx=0 threshold=0.0008 removeIdx=0 zeroVec=1 outputVal=0.0 [f0Selector2:cDataSelector] reader.dmLevel = F0cl writer.dmLevel = F0 // nameAppend = copyInputName = 1 // selFile = selected[0] = F0final_sma // selectedRange[] = // newNames[] = elementMode = 1 //dummyMode =1 ================================================ FILE: config/smileF0_mean.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE config for SHS viterbi smoothed pitch < ////////////////// ///////// ////////////////// ///////// (c) 2013-2016 audEERING. ////////////////// ///////// All rights reserverd. See file COPYING for details. ////////////////// /////////////////////////////////////////////////////////////////////////////////////// // output frame rate: 10ms // analysis window length : 60ms, gaussian window \{smileF0_base.conf} [componentInstances:cComponentManager] instance[mean].type=cFunctionals [mean:cFunctionals] reader.dmLevel = F0 writer.dmLevel = F0mean copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Means Means.amean = 1 Means.posamean = 0 Means.absmean = 0 Means.rqmean = 0 Means.flatness = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames nonZeroFuncts = 1 ;;;;;;;;; output all features.... [componentInstances:cComponentManager] instance[csv].type=cCsvSink [csv:cCsvSink] reader.dmLevel=F0mean filename=\cm[output(O){pitch_mean.csv}:name of F0 output text file] append=0 printHeader=0 number=0 timestamp=0 ================================================ FILE: configure.ac ================================================ AC_INIT(openSMILE,2.3.0) AC_CONFIG_SRCDIR([.]) AM_INIT_AUTOMAKE AC_CONFIG_MACRO_DIR([m4]) AC_PROG_CC AC_PROG_CXX LT_INIT AM_PROG_CC_C_O CHECK_HAVE_PORTAUDIO CHECK_HAVE_ANDROID CHECK_HAVE_OPENCV ACX_PTHREAD CONFIGURE_TARGETS DLIB="-ldl" if test x`uname | grep mingw` != x ; then # AC_DEFINE([WIN32],[1], [Compile on MinGW32-Msys]) AC_DEFINE([__WINDOWS],[1], [Compile on MinGW32-Msys]) AC_DEFINE([__MINGW32],[1], [Compile on MinGW32-Msys]) AC_DEFINE([__MINGW],[1], [Compile on MinGW32-Msys]) DLIB="" fi if test x`uname | grep MINGW` != x ; then # AC_DEFINE([WIN32],[1], [Compile on MinGW32-Msys]) AC_DEFINE([__WINDOWS],[1], [Compile on MinGW32-Msys]) AC_DEFINE([__MINGW32],[1], [Compile on MinGW32-Msys]) AC_DEFINE([__MINGW],[1], [Compile on MinGW32-Msys]) AC_DEFINE([__HAVENT_GNULIBS],[1], [No getline implementation on Win]) DLIB="" fi if test x`uname | grep Darwin` != x ; then AC_DEFINE([__MACOS],[1], [Compile on Macs]) AC_DEFINE([__HAVENT_GNULIBS],[1], [No getline implementation on Mac]) fi AC_SUBST(DLIB) AC_DEFINE([HAVE_AUTOCONF],[1],[Build with autoconf]) AC_CONFIG_HEADERS(config.h) AC_CONFIG_FILES([Makefile]) AC_OUTPUT ================================================ FILE: doc/components.txt ================================================ A not really up-to-date list of components can be found in the developer/classes.txt file. For more up-to-date information, use the on-line documentation implemented in the openSMILE binary: ./SMILExtract -L displays a list of components currently available along with a brief description of each component. ./SMILExtract -H displays the configuration options available for each component (the term config-type is used here. Each component has it's own config-type, which by convention has the same name as the component) ================================================ FILE: doc/configfile.txt ================================================ Documentation of openSMILE config file format: ============================================== The default configuration file read by the current binary is 'smile.conf' in the current path. To change the file use the commandline option '-C path/to/config.file' openSMILE currently uses a simple, yet powerful, ini-style configuration file format. The file allows to specify configuration for individual "config instances", which correspond to instances of actual components. The format is the following: [instancename:configType] <-- this specifies the header for each instance variable1 = value <-- example of a string variable variable2 = 7.8 <-- example of a "numeric" variable variable3 = X <-- example of a "char" variable subconf.var1 = myname <-- example of a variable in a sub config type myarr[0] = value0 <-- example of an array given explicitely myarr[1] = value1 anotherarr = value0;value1 <-- example of an implicitely given array noarray = value0\;value1 <-- use \; to quote the array separator ';' strArr[name1] = value1 <-- associative arrays with name=value pairs are also supported strArr[name2]=value2 // .... Comments may be expressed by: - prefixing a line with ; // % or # - multiline comments (c-style): /*comment blah end of blah*/ NOTE /* */ comments must have the /* at the beginning of a line and the */ at the end of a line (or in empty lines) - end-of-line comments via // (everything on a line after a // is ignored (including the //)) reader.dmLevel=inputlevel // <- this is the level we read from - Note: comments within a line by the c-style syntax /* */ are not yet supported! Each openSMILE component will automatically register it's config type, which contains all configuration for the specific component. The configManager can print a complete help on all registered config types by calling the following function: configManager.printTypeHelp(0); // does not expand subtypes configManager.printTypeHelp(1); // expands all subtypes (i.e. redundant information is printed) In the current openSMILE binary this list can be printed by giving the -H commandline option. The get a template config section use the commandline option -configDflt type OR -configDflt type1,type2,... ********************* enabling/disabling components ************************************ The components which will be run, can be specified by configuring the componentManager: [componentInstances:cComponentManager] <-- this line must be exactly as printed here! ; the data memory component must always be specified! ; the default name is 'dataMemory' ; if you also call you data memory instance 'dataMemory', ; you will not have to specify the dmInstance variables for the readers of each other component! instance[dataMemory].type=cDataMemory <-- use the instance array to specify the ; instance names as array keys ; and the types by using the 'type' of the subtype instance[source1].type=cExampleSource NOTE: for each component instance specified int the 'instance' array a configuration instance in the file MUST exist, even if it is empty, i.e. if you want to use only default values. In that case you need to specify only the header line [XXX:type] ****************** including other config files *************************************** To include config files into the main configuration file use the following syntax: \{path/to/config.file} This include command can be used anywhere, and simply copies the lines of the included file into the main file while loading the configfile line by line. ****************** linking to commandline options ************************************* openSMILE allows to define new commandline options for the openSMILE binary directly in the configuration file. To do so, use the following syntax to set a value of a variable: exampleVariable = \cm[longoption(shortoption){default}:description] Note, that either default and/or description are required to define a new option. If neither of the two is specified, the option will not be added to the commandline parser. Use this to reference option that were already added, i.e. if you want to use existing options or link to options you already defined in the config file: exampleVariable2 = \cm[longoption(shortoption)] OR: exampleVariable2 = \cm[longoption] shortoption, default, and description are optional parameters. NOTE: \cm[...] must be the ONLY text specified as value, if used We are working on supporting prefixing and appending text to the \m[...] blocks, but currently this is not yet in the code! ****************** linking to other config instances or variables ********************* This is not yet supported, but may be supported soon. Instead of values you can then specify a reference to another variable (like $variablename). This will help you to avoid having the same values in multiple spots in the file. ================================================ FILE: doc/developer/classes.txt ================================================ cCommandlineParser cSmileLogger cConfigManager cComponentManager cSmileComponent cDataMemory cDataReader cDataWriter cDataSource exampleSource waveSource cDataSink exampleSink htkSink datadumpSink arffSink cDataProcessor (cWindowFramer) cWinToVecProcessor cFramer cToneFilt cVectorProcessor cVectorConcat cWindower cTransformFFT cFFTmagphase cVectorPreemphasis cMelspec cMfcc cDbA cTonespec cFunctionals cWindowProcessor [cFilter : TODO] cPreemphasis cDeltaRegression TODO: cFunctionals (or multiple objects...) cChroma cCens cCombfilter cWghtDiff cResample cLowpass cHighpass cGlidingMean ? cAcf cAmdf cCepstrum cPitchACF cPitchHPS cPitchAMDFACF cPlp cLpc cFormants support multi-pass processing in future versions?? (off-line only...) ================================================ FILE: doc/developer/component_configuration.txt ================================================ openSMILE has two major phases of operation: I) setup phase II) run-time phase During the "setup phase" the configuration file is read and all components are instanciated and configured. The components in this phase should check for any missing dependencies, try to open files, devices etc. They will also register configure their read-request to the dataMemory, which includes the configuration of the data fields they will output. It is also necessary to verify the input configuration of the levels the component reads from. Since this configuration may not be available since not all components have been configured, the configuration process consists of multiple iterations. The exact process of the setup phase is described in the next section in more detail, including various refactoring functions provided by base component classes. During the run-time phase, the tick() method of each instanciated component is called in turn from an indefinite loop in the componentManager. --- component configuration process in detail --- openSMILE components are subject to a multi step configuration process during the setup phase of openSMILE. This process basically consits of two stages for all cSmileComponent descendant: [ 0) the "register" stage ] A) the "configure" stage ( implemented in myConfigureInstance(), called via configureInstance() ) B) the "finalise" stage ( implemented in myFinaliseInstance(), called via finaliseInstance() ) Since most components will perform common tasks, such as configuring output data fields and validating or finding input data fields, various functions and refactoring hooks are provided by the cDataProcessor class (they are listed in the order they are called by cDataProcessor::myConfigureInstance): A) during the "configure" stage: ( the reader is configured [reader->configureInstance] ) ( the reader is finalised [reader->finaliseInstance] ) (reader->getConfig is called to get read level config) - configureReader(): return value > 1 indicates success, return value == 0 indicates failure and will make myConfigureInstance() fail! - configureWriter(sDmLevelCfg &): hook to change write level config (which at this stage is a clone of the read level config overwritten by the dataWriter levelconf config options) return value > 1 indicates success, return value == 0 indicates failure and will make myConfigureInstance() fail! (writer->setConfig is called to set level size, etc.) ( writer->configureInstance() is called ) B) during the "finalise" stage: + the 'namesAreSet' variable defined as protected in cDataProcessor indicates whether names for the output field have been set (i.e. the output field has been configured) - dataProcessorCustomFinalise() custom code.. return value 0 = failure, else success (i.e. continue with myFinaliseInstance code) IF 'namesAreSet' == FALSE (0): - setupNewNames( <# read level fields> ) to be implemented by descendant class, default behaviour is: "return 1;" IF 'namesAreSet' == FALSE (0): THEN default action to set the output field names: for each input field - setupNamesForField(index,name,#el) is called with the index, name, and number of elements of the input field followed by - configureField(index,__N,#el) ( writer->finaliseInstance() is called ) -- The default "setupNamesForField(index,name,#el)" calls - addNameAppendField to append the 'nameAppend' string to the input field name (if copyInputName==1) to set the output field name to 'nameAppend' only (if copyInputName==0) Moreover the cDataProcessor class provides various helper functions, which are sorted by phases/stages at which they may be first called: I.A: (configure) I.A.configureReader: - findField() - findInputField() - getFrameSizeSec() - getBasePeriod() I.B: (finalise) - addNameAppendField() - addNameAppendFieldAuto() - configureField() ?? II: - getInputFieldData() Next to these functions, the default dataReader (after and in I.A.configureReader) and dataWriter (after and in I.B.) interface is also available: WRITER: - addField() - setFieldInfo() READER: - getLevelNf() - getFrameMetaInfo() ?? ================================================ FILE: doc/developer/dataMemory.txt ================================================ TODO: complete description of dataMemory architecture - multiple levels (slots) for independent and asynchronous data - data types: INT and FLOAT - ring-buffer functionality for each level - automatic read/write indexing, fill status and waiting on read / writes Data organisation in each level: NxT buffer matrix: ( 'N' is the number of ELEMENTS in a frame for this level (i.e. total number of values) ) However, the frame is primarily composed of FIELDS. Each field has a unique name (within a level) and can be a single value field (e.g. RMSenergy, etc.) or an array field, e.g. FFTmagnitude[0..N]. The number of fields is often referred to as 'Nf'. The cVectorProcessor and cWindowProcessor components encapsulate processing of each field independently. E.g. the vector processor treats each array(!) field as a vector which will be processed individually. (see the vectorProcessor documentation for more details) The windowProcessor processes each element(!) individually. ================================================ FILE: doc/developer/defines.txt ================================================ ## pre processor switches: HAVE_NET build with socket interface and compile network components BUILD_NETVERSION build the remote controllable version of smilextract BUILD_NETSTANDALONE build the standalone net source/sink components (which operate indepently of the other stuff) HAVE_PORTAUDIO link to portaudio and build components for audio playback/recording on linux/windows/macOs HAVE_PORTAUDIO_V19 use new V19 API for portaudio (default) HAVE_SEMAINEAPI link to SEMAINE API and build semaine components and semaine executable HAVE_JULIUSLIB link to julius LVCSR engine, and build juliusSink component HAVE_SPEEXLIB link to speex lib. and build vad and preprocessing (denoising) components HAVE_ATKLIB link to ATK lib for ASR demo code. This also requires BUILD_OBSOLETE to be enabled HAVE_LIBSAMPLERATE link to libsamplerate, and build resampling component BUILD_OSMIRDEMO build opensmile MIR demo components (former ADMIRE) BUILD_SVMSMO build the non-opensource SMO SVM decoder component BUILD_RNN build the lstm rnn components BUILD_OBSOLETE build obsolete components BUILD_WITHOUT_EXPERIMENTAL build no experimental components BUILD_WITHOUT_GPL3rdP build without code which is based on GPL thirdparty code BUILD_LIBSVM build libSVM code and classifier component BUILD_NMF build non-opensource onlineNMF code (depends on openBlissart library) HAVE_GSL_ZSOLVE deprecated: HAVE_ATKLIB ================================================ FILE: doc/developer/implementing_components.txt ================================================ HOWTO implement new openSMILE components: ========================================= This manual is under heavy construction..... It only contains basic hints to get you started In the source directory some examples for various component types are provided, which you should use as a starting point. These files contain some helpful documentation as comments in the source. To create your new component from an existing component or an example source file use the perl scipt 'clonecomp.pl': > perl clonecomp.pl (For a complete openSMILE class and component hierarchy, please refer to the file classes.txt) Each component is a descendant of cSmileComponent. This base class encapsulates all the functionality required for accessing the configuration data, managing the configuration and finalisation process of all components, and running components ('ticking'). See smile_component.txt (TODO!) for more information on cSmileComponent and the complete component architecture of openSMILE. Generally speaking, there are three basic types of components used in openSMILE: 1. Data Sources (cDataSource descendants, see exampleSource.hpp/cpp) A data source contains a writer sub-component (cDataWriter), which is responsible for writing data to exactly one level of the data memory (see cDataProcessor description below). Implement a descendant of THIS component if you want to add a new input format, e.g. MP3 or feature file import (HTK, ARFF, etc.) 2. Data Processors (cDataProcessor descendants, see exampleProcessor.hpp/cpp) A data processor contains both reader and writer components (cDataReader and cDataWriter). The general purpose of a data processor is to read data from the data memory (from one or more levels) and write data to one single level (NOTE: each writer has exclusive access to exactly on level, i.e. each level is written to by exactly one writer and thus by exactly one data processor or data source component). THIS component is the one you most likely want to inherit if you want to implement new FEATURES. Please also see below, for special kinds of data processors for common processing tasks! 3. Data Sinks (cDataSink descendants, see exampleSink.hpp/cpp) A data sinks contains a reader sub-component (cDataReader), which is responsible for the 'read' interface to a specific data memory level (or multiple levels) Implement a descendant of THIS component, if you want to add support for more data output formats (e.g. sending data over a network, real-time visualisation of data via a GUI, etc.) Since the data processors are very general components, two special descendants have been implemented: cVectorProcessor: This class allows an easy frame by frame processing of data (mostly processing of feature frames in the spectral domain). Input framesize can be different from the output framesize, thus it is very flexible. Algorithms such as signal window function, FFT, Mfcc, Chroma, etc. are implemented using cVectorProcessor as base. See exampleVectorProcessor.hpp/cpp for an example to start with. cWindowProcessor: This class allows processing of signal windows (e.g. filters, functionals, etc.). The main functionality provided, is automatic overlap of signal windows, i.e. for having access to past and future samples in a certain window, yet still offering the possibility of block processing for efficient algorithms. See preemphasis.cpp/hpp for an example. cWinToVecProcessor: This class takes data from a signal window and produces a single value or vector of values (frame) for this window. You can specify an overlap (via frameStep and frameSize). This class is used for windowing the input wave-form signal, but can also be inherited for implementing data summaries (i.e. statistical functionals). See framer.cpp/hpp for an example implementation of a descendant class. ================================================ FILE: doc/developer/messages.txt ================================================ This file shall contain all messages various components send. So, if you add a component which sends a message (also as plugin), please add your message documentation to this file! You must list the type (name) of the message, and the parameters that are send along with the message f[x] is a float value and i[x] is an int value. (DocTodo: string values, message names, etc.) Component: cTurnDetector: ========================= **Sends:** Message: type = turnStart [sent when a turn start is detected] - f[0] = nPre setting of turn Detector, i.e. the number of frames that the actual turn start is in the past, when the message is sent - f[1] = vIdx start of turn (actual position, i.e. current - nPre) - f[2] = period of turn detector's input level(s) - userTime1 = smile time of actual turn start Message: type = turnEnd [sent when a turn end is detected] - f[0] = nPost setting of turn Detector, i.e. the number of frames that the actual turn end is in the past, when the message is sent - f[1] = vIdx end of turn (actual position, i.e. current - nPost) - f[2] = period of turn detector's input level(s) - i[0] = forced turn end - userTime1 = smile time of actual turn end Message: type = turnFrameTime (former frameTime!) [ sent at turn end and inbetween in configurable intervals ] - i[0] = isTurn end (1=message was sent at turn end, 0=message sent during turn) - i[1] = 0=normal end / 1=forced turn end (max length) / 2=forced turn End (EOI) - i[5] = custom chunk ID - f[0] = actual vIdx start of turn - f[1] = actual vIdx end of turn - f[2] = actual start of turn in seconds (vTime) - f[3] = actual end of turn in seconds (vTime) - f[4] = period of turn detector's input level(s) - userTime1 = smile time of actual turn start - userTime2 = smile time of actual turn end Message: type = turnSpeakingStatus [ sent always when voice activity starts/stops ] - i[0] = 1/0 voice activity true/false - f[1] = vIdx of voice act. start/end (actual position) - f[2] = period of turn detector's input level(s) - userTime1 = smile time of actual voice activity start / end Component: cLibSvmLiveSink: (or maybe general classifier??) =========================== **Sends:** Message: type = classificationResult - f[0] = result (either class index or regression target value) - i[0] = number of classes (0 => regression) - i[1] = isFInal flag - i[2] = model index - i[3] = mmm? - i[5] = custom ID (from tmeta->metadata.ID ; i[5] in turnFrameTime message) - custData * = pointer to a libsvm probEstim array (= double[nClasses]) - msgtext = name of target class (filled with NULL's, if regression problem) - msgname = set by user field in config section of cLibSvmLiveSink - userTime1 = smile time when first frame used for classification was initally (from source) written to data memory - userTime2 = smile time when last frame used for classification was initally (from source) written to data memory Component: cTumkwsjSink: (general: keyword spotter) ========================= **Sends:** Message: type = asrKeywordOutput - f[0] ... Component: cWinToVecProcessor / cFramer / etc. ========================== **Receives:** Message: type = turnEnd Message: type = turnFrameTime (??) Component: cJuliusSink ========================== **Sends:** Message: type = juliusResult Message: type = textString (sent to cBowProducer) ================================================ FILE: doc/knownBugs.txt ================================================ A current list of known bugs / issues in openSMILE: =================================================== ****************************************** ***** BUILD/COMPILE/INSTALL problems ***** ****************************************** -------- If you get errors during ./configure, such as: "Makefile.in" file not found! You might have ignored the error message from ./autogen.sh: configure.ac:11: required file `./ltmain.sh' not found Re-run ./autogen.sh a second time and run ./configure again to solve this. ------- ------- openEAR live system: if the console based live recogniser doesn't start up, check for error messages concerning "listDevices" if you find some, open emobase_live4.conf and comment of the line listDevices=1 ! the live system won't run in linux. - check if you have explicitely compiled with portaudio support! the live system does not run without openSmile being compiled with portaudio support ------- ------ using cArffSource: Please bear in mind that cArffSource reads only numeric/real attributes. If there are none in the arff file to read, you will get an error message. ------ ------ Problems with WAVE files: openEAR should read all standard RIFF PCM files with linear (no ADPCM, etc.), uncompressed (!) WAVE data and no fancy extensions to the wave header. However, there might be an issue with big endian and little endian. No conversion is performed there. You should always create the wave file on the system on which you compile and run openEAR. If you use Intel systems only, then there should be no problem. I have attached a wave file, which works with openEAR. Usually any wave file that is created with sox or audacity does work. If you still have trouble reading your wave files, please run SMILExtract with the additional parameters "-l 4 -d" and send us the file "smile.log". We would also appreciate to have a sample wave file, which is not working, so we can analyse the format. ------ ================================================ FILE: doc/logger.txt ================================================ Messages: SMILE_ERR(level,"text....%i",var1); SMILE_WRN SMILE_MSG SMILE_DBG Exceptions: COMP_ERR("text... variable %i",var1); ================================================ FILE: ide/vs10/generalProps.props ================================================  ..\..\src\include;..\..\src\svm;%(AdditionalIncludeDirectories) __VISTA;_WINDOWS;__WINDOWS;WIN32;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) ================================================ FILE: ide/vs10/generalPropsDebug.props ================================================  _DEBUG;%(PreprocessorDefinitions) ================================================ FILE: ide/vs10/generalPropsDll.props ================================================  _USRDLL;OPENSMILELIB_EXPORTS;BUILDING_DLL;%(PreprocessorDefinitions) ================================================ FILE: ide/vs10/generalPropsRelease.props ================================================  NDEBUG;%(PreprocessorDefinitions) ================================================ FILE: ide/vs10/lstmRnn.props ================================================  BUILD_RNN;%(PreprocessorDefinitions) ================================================ FILE: ide/vs10/openSmile.sln ================================================  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{DB5A63BC-5D9D-4E15-AAC6-644414035980}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SMILExtract", "openSmile.vcxproj", "{264EDD6D-E130-4E30-9607-D6D74EF856B5}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openSmileLib", "openSmileLib.vcxproj", "{F5F2B328-E89C-4ED7-9A16-91E547F99E6E}" ProjectSection(ProjectDependencies) = postProject {B2F72986-3DFF-4113-9346-DD4FD485C8B0} = {B2F72986-3DFF-4113-9346-DD4FD485C8B0} {7361A0F8-87E5-4539-B912-880FE6FAA86C} = {7361A0F8-87E5-4539-B912-880FE6FAA86C} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openSmileLibPortaudio", "openSmileLibPortaudio.vcxproj", "{B2F72986-3DFF-4113-9346-DD4FD485C8B0}" ProjectSection(ProjectDependencies) = postProject {0A18A071-125E-442F-AFF7-A3F68ABECF99} = {0A18A071-125E-442F-AFF7-A3F68ABECF99} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "portaudio", "..\..\thirdparty\portaudio\build\msvc\portaudio.vcxproj", "{0A18A071-125E-442F-AFF7-A3F68ABECF99}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openSmileLibClassif", "openSmileLibClassif.vcxproj", "{7361A0F8-87E5-4539-B912-880FE6FAA86C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openSmileLibLibsvm", "openSmileLibLibsvm.vcxproj", "{17F673EA-8364-4B82-BC98-895CCD40D5F0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 DebugOpenCV|Win32 = DebugOpenCV|Win32 DebugOpenCV|x64 = DebugOpenCV|x64 DebugPortaudio|Win32 = DebugPortaudio|Win32 DebugPortaudio|x64 = DebugPortaudio|x64 DebugPortaudioOpenCV|Win32 = DebugPortaudioOpenCV|Win32 DebugPortaudioOpenCV|x64 = DebugPortaudioOpenCV|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 ReleaseOpenCV|Win32 = ReleaseOpenCV|Win32 ReleaseOpenCV|x64 = ReleaseOpenCV|x64 ReleasePortaudio|Win32 = ReleasePortaudio|Win32 ReleasePortaudio|x64 = ReleasePortaudio|x64 ReleasePortaudioOpenCV|Win32 = ReleasePortaudioOpenCV|Win32 ReleasePortaudioOpenCV|x64 = ReleasePortaudioOpenCV|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {264EDD6D-E130-4E30-9607-D6D74EF856B5}.Debug|Win32.ActiveCfg = Debug|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.Debug|Win32.Build.0 = Debug|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.Debug|x64.ActiveCfg = Debug|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.DebugOpenCV|Win32.ActiveCfg = DebugOpenCV|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.DebugOpenCV|Win32.Build.0 = DebugOpenCV|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.DebugOpenCV|x64.ActiveCfg = DebugOpenCV|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.DebugPortaudio|Win32.ActiveCfg = DebugPortaudio|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.DebugPortaudio|Win32.Build.0 = DebugPortaudio|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.DebugPortaudio|x64.ActiveCfg = DebugPortaudio|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.DebugPortaudioOpenCV|Win32.ActiveCfg = DebugPortaudioOpenCV|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.DebugPortaudioOpenCV|Win32.Build.0 = DebugPortaudioOpenCV|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.DebugPortaudioOpenCV|x64.ActiveCfg = DebugPortaudioOpenCV|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.Release|Win32.ActiveCfg = Release|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.Release|Win32.Build.0 = Release|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.Release|x64.ActiveCfg = Release|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.ReleaseOpenCV|Win32.ActiveCfg = ReleaseOpenCV|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.ReleaseOpenCV|Win32.Build.0 = ReleaseOpenCV|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.ReleaseOpenCV|x64.ActiveCfg = ReleaseOpenCV|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.ReleasePortaudio|Win32.ActiveCfg = ReleasePortaudio|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.ReleasePortaudio|Win32.Build.0 = ReleasePortaudio|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.ReleasePortaudio|x64.ActiveCfg = ReleasePortaudio|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.ReleasePortaudioOpenCV|Win32.ActiveCfg = ReleasePortAudioOpenCV|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.ReleasePortaudioOpenCV|Win32.Build.0 = ReleasePortAudioOpenCV|Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5}.ReleasePortaudioOpenCV|x64.ActiveCfg = ReleasePortAudioOpenCV|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.Debug|Win32.ActiveCfg = Debug|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.Debug|Win32.Build.0 = Debug|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.Debug|x64.ActiveCfg = Debug|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.DebugOpenCV|Win32.ActiveCfg = DebugOpenCV|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.DebugOpenCV|Win32.Build.0 = DebugOpenCV|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.DebugOpenCV|x64.ActiveCfg = DebugOpenCV|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.DebugPortaudio|Win32.ActiveCfg = DebugPortaudio|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.DebugPortaudio|Win32.Build.0 = DebugPortaudio|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.DebugPortaudio|x64.ActiveCfg = DebugPortaudio|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.DebugPortaudioOpenCV|Win32.ActiveCfg = DebugPortaudioOpenCV|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.DebugPortaudioOpenCV|Win32.Build.0 = DebugPortaudioOpenCV|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.DebugPortaudioOpenCV|x64.ActiveCfg = DebugPortaudioOpenCV|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.Release|Win32.ActiveCfg = Release|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.Release|Win32.Build.0 = Release|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.Release|x64.ActiveCfg = Release|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.ReleaseOpenCV|Win32.ActiveCfg = ReleaseOpenCV|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.ReleaseOpenCV|Win32.Build.0 = ReleaseOpenCV|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.ReleaseOpenCV|x64.ActiveCfg = ReleaseOpenCV|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.ReleasePortaudio|Win32.ActiveCfg = ReleasePortaudio|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.ReleasePortaudio|Win32.Build.0 = ReleasePortaudio|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.ReleasePortaudio|x64.ActiveCfg = ReleasePortaudio|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.ReleasePortaudioOpenCV|Win32.ActiveCfg = ReleasePortAudioOpenCV|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.ReleasePortaudioOpenCV|Win32.Build.0 = ReleasePortAudioOpenCV|Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E}.ReleasePortaudioOpenCV|x64.ActiveCfg = ReleasePortAudioOpenCV|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.Debug|Win32.ActiveCfg = Debug|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.Debug|x64.ActiveCfg = Debug|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.DebugOpenCV|Win32.ActiveCfg = DebugOpenCV|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.DebugOpenCV|x64.ActiveCfg = DebugOpenCV|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.DebugPortaudio|Win32.ActiveCfg = DebugPortaudio|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.DebugPortaudio|Win32.Build.0 = DebugPortaudio|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.DebugPortaudio|x64.ActiveCfg = Debug|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.DebugPortaudioOpenCV|Win32.ActiveCfg = DebugPortaudioOpenCV|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.DebugPortaudioOpenCV|Win32.Build.0 = DebugPortaudioOpenCV|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.DebugPortaudioOpenCV|x64.ActiveCfg = DebugPortaudioOpenCV|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.Release|Win32.ActiveCfg = Release|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.Release|Win32.Build.0 = Release|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.Release|x64.ActiveCfg = Release|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.ReleaseOpenCV|Win32.ActiveCfg = ReleaseOpenCV|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.ReleaseOpenCV|Win32.Build.0 = ReleaseOpenCV|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.ReleaseOpenCV|x64.ActiveCfg = ReleaseOpenCV|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.ReleasePortaudio|Win32.ActiveCfg = ReleasePortaudio|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.ReleasePortaudio|Win32.Build.0 = ReleasePortaudio|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.ReleasePortaudio|x64.ActiveCfg = Release|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.ReleasePortaudioOpenCV|Win32.ActiveCfg = ReleasePortAudioOpenCV|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.ReleasePortaudioOpenCV|Win32.Build.0 = ReleasePortAudioOpenCV|Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0}.ReleasePortaudioOpenCV|x64.ActiveCfg = ReleasePortAudioOpenCV|Win32 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.ActiveCfg = Debug|Win32 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.ActiveCfg = Debug|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.Build.0 = Debug|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.DebugOpenCV|Win32.ActiveCfg = Debug|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.DebugOpenCV|x64.ActiveCfg = Debug|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.DebugOpenCV|x64.Build.0 = Debug|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.DebugPortaudio|Win32.ActiveCfg = Debug|Win32 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.DebugPortaudio|Win32.Build.0 = Debug|Win32 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.DebugPortaudio|x64.ActiveCfg = Debug|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.DebugPortaudio|x64.Build.0 = Debug|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.DebugPortaudioOpenCV|Win32.ActiveCfg = Debug|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.DebugPortaudioOpenCV|x64.ActiveCfg = Debug|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.DebugPortaudioOpenCV|x64.Build.0 = Debug|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.ActiveCfg = Release|Win32 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.Build.0 = Release|Win32 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.ActiveCfg = Release|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.Build.0 = Release|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.ReleaseOpenCV|Win32.ActiveCfg = Release|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.ReleaseOpenCV|x64.ActiveCfg = Release|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.ReleaseOpenCV|x64.Build.0 = Release|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.ReleasePortaudio|Win32.ActiveCfg = Release|Win32 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.ReleasePortaudio|Win32.Build.0 = Release|Win32 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.ReleasePortaudio|x64.ActiveCfg = Release|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.ReleasePortaudio|x64.Build.0 = Release|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.ReleasePortaudioOpenCV|Win32.ActiveCfg = Release|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.ReleasePortaudioOpenCV|x64.ActiveCfg = Release|x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99}.ReleasePortaudioOpenCV|x64.Build.0 = Release|x64 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.Debug|Win32.ActiveCfg = Debug|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.Debug|Win32.Build.0 = Debug|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.Debug|x64.ActiveCfg = Debug|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.DebugOpenCV|Win32.ActiveCfg = DebugOpenCV|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.DebugOpenCV|Win32.Build.0 = DebugOpenCV|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.DebugOpenCV|x64.ActiveCfg = DebugOpenCV|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.DebugPortaudio|Win32.ActiveCfg = Debug|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.DebugPortaudio|Win32.Build.0 = Debug|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.DebugPortaudio|x64.ActiveCfg = Debug|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.DebugPortaudioOpenCV|Win32.ActiveCfg = DebugPortaudioOpenCV|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.DebugPortaudioOpenCV|Win32.Build.0 = DebugPortaudioOpenCV|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.DebugPortaudioOpenCV|x64.ActiveCfg = DebugPortaudioOpenCV|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.Release|Win32.ActiveCfg = Release|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.Release|Win32.Build.0 = Release|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.Release|x64.ActiveCfg = Release|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.ReleaseOpenCV|Win32.ActiveCfg = ReleaseOpenCV|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.ReleaseOpenCV|Win32.Build.0 = ReleaseOpenCV|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.ReleaseOpenCV|x64.ActiveCfg = ReleaseOpenCV|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.ReleasePortaudio|Win32.ActiveCfg = Release|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.ReleasePortaudio|Win32.Build.0 = Release|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.ReleasePortaudio|x64.ActiveCfg = Release|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.ReleasePortaudioOpenCV|Win32.ActiveCfg = ReleasePortAudioOpenCV|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.ReleasePortaudioOpenCV|Win32.Build.0 = ReleasePortAudioOpenCV|Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C}.ReleasePortaudioOpenCV|x64.ActiveCfg = ReleasePortAudioOpenCV|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.Debug|Win32.ActiveCfg = Debug|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.Debug|Win32.Build.0 = Debug|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.Debug|x64.ActiveCfg = Debug|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.DebugOpenCV|Win32.ActiveCfg = DebugOpenCV|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.DebugOpenCV|Win32.Build.0 = DebugOpenCV|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.DebugOpenCV|x64.ActiveCfg = DebugOpenCV|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.DebugPortaudio|Win32.ActiveCfg = Debug|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.DebugPortaudio|Win32.Build.0 = Debug|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.DebugPortaudio|x64.ActiveCfg = Debug|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.DebugPortaudioOpenCV|Win32.ActiveCfg = DebugPortaudioOpenCV|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.DebugPortaudioOpenCV|Win32.Build.0 = DebugPortaudioOpenCV|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.DebugPortaudioOpenCV|x64.ActiveCfg = DebugPortaudioOpenCV|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.Release|Win32.ActiveCfg = Release|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.Release|Win32.Build.0 = Release|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.Release|x64.ActiveCfg = Release|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.ReleaseOpenCV|Win32.ActiveCfg = ReleaseOpenCV|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.ReleaseOpenCV|Win32.Build.0 = ReleaseOpenCV|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.ReleaseOpenCV|x64.ActiveCfg = ReleaseOpenCV|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.ReleasePortaudio|Win32.ActiveCfg = Release|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.ReleasePortaudio|Win32.Build.0 = Release|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.ReleasePortaudio|x64.ActiveCfg = Release|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.ReleasePortaudioOpenCV|Win32.ActiveCfg = ReleasePortAudioOpenCV|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.ReleasePortaudioOpenCV|Win32.Build.0 = ReleasePortAudioOpenCV|Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0}.ReleasePortaudioOpenCV|x64.ActiveCfg = ReleasePortAudioOpenCV|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: ide/vs10/openSmile.vcproj ================================================  ================================================ FILE: ide/vs10/openSmile.vcxproj ================================================  DebugOpenCV Win32 DebugPortaudioOpenCV Win32 DebugPortaudio Win32 Debug Win32 ReleaseOpenCV Win32 ReleasePortAudioOpenCV Win32 ReleasePortaudio Win32 Release Win32 {264EDD6D-E130-4E30-9607-D6D74EF856B5} Win32Proj SMILExtract Application Application Application Application Application Application Application Application <_ProjectFileVersion>10.0.30319.1 $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ true true $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ true true $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ true true $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ true true $(ProjectName)_$(Configuration) $(ProjectName)_$(Configuration) $(ProjectName)_$(Configuration) $(ProjectName)_$(Configuration) $(ProjectName)_$(Configuration) $(ProjectName)_$(Configuration) $(ProjectName)_$(Configuration) $(ProjectName)_$(Configuration) Disabled ..\..\progsrc\include;%(AdditionalIncludeDirectories) _CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue %(AdditionalDependencies) ..\..\..\msvcbuild\$(TargetName)$(TargetExt) %(AdditionalLibraryDirectories) true Console MachineX86 Disabled ..\..\progsrc\include;%(AdditionalIncludeDirectories) _CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue %(AdditionalDependencies) ..\..\..\msvcbuild\$(TargetName)$(TargetExt) %(AdditionalLibraryDirectories) true Console MachineX86 ..\..\progsrc\include;%(AdditionalIncludeDirectories) _CONSOLE;%(PreprocessorDefinitions) Async MultiThreadedDLL Level3 ProgramDatabase %(AdditionalDependencies) ..\..\..\msvcbuild\$(TargetName)$(TargetExt) %(AdditionalLibraryDirectories) true Console true true MachineX86 ..\..\progsrc\include;%(AdditionalIncludeDirectories) _CONSOLE;%(PreprocessorDefinitions) Async MultiThreadedDLL Level3 ProgramDatabase %(AdditionalDependencies) ..\..\..\msvcbuild\$(TargetName)$(TargetExt) %(AdditionalLibraryDirectories) true Console true true MachineX86 Disabled ..\..\progsrc\include;%(AdditionalIncludeDirectories) _CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue %(AdditionalDependencies) ..\..\..\msvcbuild\$(TargetName)$(TargetExt) %(AdditionalLibraryDirectories) true Console MachineX86 Disabled ..\..\progsrc\include;%(AdditionalIncludeDirectories) _CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue %(AdditionalDependencies) ..\..\..\msvcbuild\$(TargetName)$(TargetExt) %(AdditionalLibraryDirectories) true Console MachineX86 ..\..\progsrc\include;%(AdditionalIncludeDirectories) _CONSOLE;%(PreprocessorDefinitions) Async MultiThreadedDLL Level3 ProgramDatabase %(AdditionalDependencies) ..\..\..\msvcbuild\$(TargetName)$(TargetExt) %(AdditionalLibraryDirectories) true Console true true MachineX86 ..\..\progsrc\include;%(AdditionalIncludeDirectories) _CONSOLE;%(PreprocessorDefinitions) Async MultiThreadedDLL Level3 ProgramDatabase %(AdditionalDependencies) ..\..\..\msvcbuild\$(TargetName)$(TargetExt) %(AdditionalLibraryDirectories) true Console true true MachineX86 {f5f2b328-e89c-4ed7-9a16-91e547f99e6e} false ================================================ FILE: ide/vs10/openSmileComponents.props ================================================  BUILD_LIBSVM;BUILD_RNN;BUILD_NETSTANDALONE;BUILD_SVMSMO;%(PreprocessorDefinitions) ================================================ FILE: ide/vs10/openSmileLib.vcxproj ================================================  DebugOpenCV Win32 DebugPortaudioOpenCV Win32 DebugPortaudio Win32 Debug Win32 ReleaseOpenCV Win32 ReleasePortAudioOpenCV Win32 ReleasePortaudio Win32 Release Win32 {F5F2B328-E89C-4ED7-9A16-91E547F99E6E} Win32Proj DynamicLibrary DynamicLibrary DynamicLibrary DynamicLibrary DynamicLibrary DynamicLibrary DynamicLibrary DynamicLibrary <_ProjectFileVersion>10.0.30319.1 $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ true true $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ true true $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ true true $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ true true openSmileLib_$(Configuration) openSmileLib_$(Configuration) openSmileLib_$(Configuration) openSmileLib_$(Configuration) openSmileLib_$(Configuration) openSmileLib_$(Configuration) openSmileLib_$(Configuration) openSmileLib_$(Configuration) Disabled %(AdditionalIncludeDirectories) BUILD_LIBSVM;HAVE_GSL_ZSOLVE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue ..\..\..\msvcbuild\$(TargetName)$(TargetExt) %(AdditionalLibraryDirectories) true Windows ..\..\..\msvcbuild\openSmileLib_$(Configuration).lib MachineX86 Disabled %(AdditionalIncludeDirectories) BUILD_LIBSVM;HAVE_GSL_ZSOLVE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue ..\..\..\msvcbuild\$(TargetName)$(TargetExt) %(AdditionalLibraryDirectories) true Windows ..\..\..\msvcbuild\openSmileLib_$(Configuration).lib MachineX86 %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Async MultiThreadedDLL Level3 ProgramDatabase ..\..\..\msvcbuild\$(TargetName)$(TargetExt) %(AdditionalLibraryDirectories) true Windows true true ..\..\..\msvcbuild\openSmileLib_$(Configuration).lib MachineX86 %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Async MultiThreadedDLL Level3 ProgramDatabase ..\..\..\msvcbuild\$(TargetName)$(TargetExt) %(AdditionalLibraryDirectories) true Windows true true ..\..\..\msvcbuild\openSmileLib_$(Configuration).lib MachineX86 Disabled %(AdditionalIncludeDirectories) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue %(PreprocessorDefinitions) %(AdditionalDependencies) ..\..\..\msvcbuild\$(TargetName)$(TargetExt) %(AdditionalLibraryDirectories) true Windows ..\..\..\msvcbuild\openSmileLib_$(Configuration).lib MachineX86 Disabled %(AdditionalIncludeDirectories) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue %(PreprocessorDefinitions) %(AdditionalDependencies) ..\..\..\msvcbuild\$(TargetName)$(TargetExt) %(AdditionalLibraryDirectories) true Windows ..\..\..\msvcbuild\openSmileLib_$(Configuration).lib MachineX86 %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Async MultiThreadedDLL Level3 ProgramDatabase %(AdditionalDependencies) ..\..\..\msvcbuild\$(TargetName)$(TargetExt) %(AdditionalLibraryDirectories) true Windows true true ..\..\..\msvcbuild\openSmileLib_$(Configuration).lib MachineX86 %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Async MultiThreadedDLL Level3 ProgramDatabase %(AdditionalDependencies) ..\..\..\msvcbuild\$(TargetName)$(TargetExt) C:\Users\kir\Documents\open smile\branches\opensource2-acm2013\thirdparty\compiled\dll;C:\Users\kir\Documents\open smile\branches\opensource2-acm2013\thirdparty\compiled\lib;%(AdditionalLibraryDirectories) true Windows true true ..\..\..\msvcbuild\openSmileLib_$(Configuration).lib MachineX86 true true true true true true true true {7361a0f8-87e5-4539-b912-880fe6faa86c} {17f673ea-8364-4b82-bc98-895ccd40d5f0} {b2f72986-3dff-4113-9346-dd4fd485c8b0} ================================================ FILE: ide/vs10/openSmileLibClassif.vcxproj ================================================  DebugOpenCV Win32 DebugPortaudioOpenCV Win32 Debug Win32 ReleaseOpenCV Win32 ReleasePortAudioOpenCV Win32 Release Win32 {7361A0F8-87E5-4539-B912-880FE6FAA86C} openSmileLibClassif StaticLibrary true MultiByte StaticLibrary true MultiByte StaticLibrary true MultiByte StaticLibrary false true MultiByte StaticLibrary false true MultiByte StaticLibrary false true MultiByte $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ Level3 Disabled %(PreprocessorDefinitions) true $(OutDir)$(TargetName)$(TargetExt) Level3 Disabled %(PreprocessorDefinitions) true $(OutDir)$(TargetName)$(TargetExt) Level3 Disabled %(PreprocessorDefinitions) true $(OutDir)$(TargetName)$(TargetExt) Level3 MaxSpeed true true false true true true Level3 MaxSpeed true true false true true true Level3 MaxSpeed true true false true true true ================================================ FILE: ide/vs10/openSmileLibLibsvm.vcxproj ================================================  DebugOpenCV Win32 DebugPortaudioOpenCV Win32 Debug Win32 ReleaseOpenCV Win32 ReleasePortAudioOpenCV Win32 Release Win32 {17F673EA-8364-4B82-BC98-895CCD40D5F0} openSmileLibLibsvm StaticLibrary true MultiByte StaticLibrary true MultiByte StaticLibrary true MultiByte StaticLibrary false true MultiByte StaticLibrary false true MultiByte StaticLibrary false true MultiByte $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ Level3 Disabled %(PreprocessorDefinitions) true $(OutDir)$(TargetName)$(TargetExt) Level3 Disabled %(PreprocessorDefinitions) true $(OutDir)$(TargetName)$(TargetExt) Level3 Disabled %(PreprocessorDefinitions) true $(OutDir)$(TargetName)$(TargetExt) Level3 MaxSpeed true true false true true true Level3 MaxSpeed true true false true true true Level3 MaxSpeed true true false true true true ================================================ FILE: ide/vs10/openSmileLibPortaudio.props ================================================  <_ProjectFileVersion>10.0.30319.1 HAVE_PORTAUDIO;HAVE_PORTAUDIO_V19;%(PreprocessorDefinitions) openSmileLibPortaudio.lib;%(AdditionalDependencies) ================================================ FILE: ide/vs10/openSmileLibPortaudio.vcproj ================================================  ================================================ FILE: ide/vs10/openSmileLibPortaudio.vcxproj ================================================  DebugOpenCV Win32 DebugPortaudioOpenCV Win32 DebugPortaudio Win32 Debug Win32 ReleaseOpenCV Win32 ReleasePortAudioOpenCV Win32 ReleasePortaudio Win32 Release Win32 {B2F72986-3DFF-4113-9346-DD4FD485C8B0} openSmileLibPortaudio Win32Proj StaticLibrary StaticLibrary StaticLibrary StaticLibrary StaticLibrary StaticLibrary StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.30319.1 $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ $(Configuration)\ $(ProjectName) $(ProjectName) $(ProjectName) $(ProjectName) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue $(OutDir)$(TargetName)$(TargetExt) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue $(OutDir)$(TargetName)$(TargetExt) ../../../msvcbuild/portaudio_x86Dbg.lib;%(AdditionalDependencies) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue $(OutDir)$(TargetName)$(TargetExt) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue $(OutDir)$(TargetName)$(TargetExt) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Async MultiThreadedDLL Level3 ProgramDatabase $(OutDir)$(TargetName)$(TargetExt) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Async MultiThreadedDLL Level3 ProgramDatabase $(OutDir)$(TargetName)$(TargetExt) ../../../msvcbuild/portaudio_x86.lib;%(AdditionalDependencies) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Async MultiThreadedDLL Level3 ProgramDatabase $(OutDir)$(TargetName)$(TargetExt) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Async MultiThreadedDLL Level3 ProgramDatabase $(OutDir)$(TargetName)$(TargetExt) ================================================ FILE: ide/vs10/openSmileLibPortaudio.vsprops ================================================ ================================================ FILE: ide/vs10/openSmilePlugin.sln ================================================  Microsoft Visual Studio Solution File, Format Version 9.00 # Visual C++ Express 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openSmilePlugin", "openSmilePlugin.vcproj", "{B00964AF-9DB6-4E8C-9437-8C4D57C4F4A0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {B00964AF-9DB6-4E8C-9437-8C4D57C4F4A0}.Debug|Win32.ActiveCfg = Debug|Win32 {B00964AF-9DB6-4E8C-9437-8C4D57C4F4A0}.Debug|Win32.Build.0 = Debug|Win32 {B00964AF-9DB6-4E8C-9437-8C4D57C4F4A0}.Release|Win32.ActiveCfg = Release|Win32 {B00964AF-9DB6-4E8C-9437-8C4D57C4F4A0}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: ide/vs10/openSmilePlugin.vcproj ================================================  ================================================ FILE: ide/vs10/openSmilePluginGUI.sln ================================================  Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openSmilePluginGUI", "openSmilePluginGUI.vcproj", "{B00964AF-9DB6-4E8C-9437-8C4D57C4F4A0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {B00964AF-9DB6-4E8C-9437-8C4D57C4F4A0}.Debug|Win32.ActiveCfg = Debug|Win32 {B00964AF-9DB6-4E8C-9437-8C4D57C4F4A0}.Debug|Win32.Build.0 = Debug|Win32 {B00964AF-9DB6-4E8C-9437-8C4D57C4F4A0}.Release|Win32.ActiveCfg = Release|Win32 {B00964AF-9DB6-4E8C-9437-8C4D57C4F4A0}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: ide/vs10/openSmilePluginGUI.vcproj ================================================  ================================================ FILE: ide/vs10/opencv.props ================================================  <_PropertySheetDisplayName>opencv $(SolutionDir)..\..\..\thirdparty\compiled\include;$(IncludePath) $(SolutionDir)..\..\..\thirdparty\compiled\lib;$(LibraryPath) ..\..\..\thirdparty\compiled\include;%(AdditionalIncludeDirectories) WINDOWS_COMPILE;HAVE_OPENCV;%(PreprocessorDefinitions) opencv_core245.lib;opencv_highgui245.lib;%(AdditionalDependencies) %(AdditionalLibraryDirectories) opencv_calib3d245d.lib;opencv_contrib245d.lib;opencv_core245d.lib;opencv_features2d245d.lib;opencv_flann245d.lib;opencv_gpu245d.lib;opencv_haartraining_engined.lib;opencv_highgui245d.lib;opencv_imgproc245d.lib;opencv_legacy245d.lib;opencv_ml245d.lib;opencv_nonfree245d.lib;opencv_objdetect245d.lib;opencv_photo245d.lib;opencv_stitching245d.lib;opencv_ts245d.lib;opencv_video245d.lib;opencv_videostab245d.lib;%(AdditionalDependencies) ================================================ FILE: ide/vs10/portaudio.def ================================================ EXPORTS ; Pa_GetVersion @1 Pa_GetVersionText @2 Pa_GetErrorText @3 Pa_Initialize @4 Pa_Terminate @5 Pa_GetHostApiCount @6 Pa_GetDefaultHostApi @7 Pa_GetHostApiInfo @8 Pa_HostApiTypeIdToHostApiIndex @9 Pa_HostApiDeviceIndexToDeviceIndex @10 Pa_GetLastHostErrorInfo @11 Pa_GetDeviceCount @12 Pa_GetDefaultInputDevice @13 Pa_GetDefaultOutputDevice @14 Pa_GetDeviceInfo @15 Pa_IsFormatSupported @16 Pa_OpenStream @17 Pa_OpenDefaultStream @18 Pa_CloseStream @19 Pa_SetStreamFinishedCallback @20 Pa_StartStream @21 Pa_StopStream @22 Pa_AbortStream @23 Pa_IsStreamStopped @24 Pa_IsStreamActive @25 Pa_GetStreamInfo @26 Pa_GetStreamTime @27 Pa_GetStreamCpuLoad @28 Pa_ReadStream @29 Pa_WriteStream @30 Pa_GetStreamReadAvailable @31 Pa_GetStreamWriteAvailable @32 Pa_GetSampleSize @33 Pa_Sleep @34 PaUtil_InitializeX86PlainConverters @52 PaUtil_SetDebugPrintFunction @55 ================================================ FILE: ide/vs10/portaudio.props ================================================  HAVE_PORTAUDIO;HAVE_PORTAUDIO_V19;%(PreprocessorDefinitions) ..\..\..\thirdparty\portaudio\include;%(AdditionalIncludeDirectories) ================================================ FILE: ide/vs10/portaudio.vcxproj ================================================  Debug Win32 Debug x64 Release Win32 Release x64 {0A18A071-125E-442F-AFF7-A3F68ABECF99} DynamicLibrary false DynamicLibrary false DynamicLibrary false DynamicLibrary false <_ProjectFileVersion>10.0.30319.1 $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true NDEBUG;%(PreprocessorDefinitions) true true Win32 .\Release_x86/portaudio.tlb MaxSpeed OnlyExplicitInline ..\..\src\common;..\..\include;.\;..\..\src\os\win;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_USRDLL;PA_ENABLE_DEBUG_OUTPUT;_CRT_SECURE_NO_DEPRECATE;PAWIN_USE_WDMKS_DEVICE_INFO;PA_NO_ASIO;PA_NO_DS;PA_NO_WASAPI;%(PreprocessorDefinitions) true MultiThreadedDLL true $(Platform)\$(Configuration)/portaudio.pch $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ Level3 true NDEBUG;%(PreprocessorDefinitions) 0x0409 ksuser.lib;%(AdditionalDependencies) ..\..\..\..\msvcbuild\portaudio_x86.dll true .\portaudio.def $(Platform)\$(Configuration)\portaudio_x86.pdb ..\..\..\..\msvcbuild\portaudio_x86.lib MachineX86 true $(Platform)\$(Configuration)\portaudio.bsc NDEBUG;%(PreprocessorDefinitions) true true X64 .\Release_x86/portaudio.tlb MaxSpeed OnlyExplicitInline ..\..\src\common;..\..\include;.\;..\..\src\os\win;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_USRDLL;PA_ENABLE_DEBUG_OUTPUT;_CRT_SECURE_NO_DEPRECATE;PAWIN_USE_WDMKS_DEVICE_INFO;%(PreprocessorDefinitions) true MultiThreadedDLL true $(Platform)\$(Configuration)\portaudio.pch $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ Level3 true NDEBUG;%(PreprocessorDefinitions) 0x0409 ksuser.lib;%(AdditionalDependencies) $(Platform)\$(Configuration)\portaudio_x64.dll true .\portaudio.def $(Platform)\$(Configuration)/portaudio_x64.pdb $(Platform)\$(Configuration)/portaudio_x64.lib MachineX64 true $(Platform)\$(Configuration)\portaudio_x64.bsc _DEBUG;%(PreprocessorDefinitions) true true Win32 .\Debug_x86/portaudio.tlb Disabled ..\..\src\common;..\..\include;.\;..\..\src\os\win;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_USRDLL;PA_ENABLE_DEBUG_OUTPUT;_CRT_SECURE_NO_DEPRECATE;PAWIN_USE_WDMKS_DEVICE_INFO;PA_NO_ASIO;PA_NO_DS;PA_NO_WASAPI;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL $(Platform)\$(Configuration)/portaudio.pch $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ Level3 true EditAndContinue _DEBUG;%(PreprocessorDefinitions) 0x0409 ksuser.lib;%(AdditionalDependencies) ..\..\..\..\msvcbuild\portaudio_x86Dbg.dll true .\portaudio.def true $(Platform)\$(Configuration)\portaudio_x86.pdb ..\..\..\..\msvcbuild\portaudio_x86Dbg.lib MachineX86 true $(Platform)\$(Configuration)\portaudio.bsc _DEBUG;%(PreprocessorDefinitions) true true X64 .\Debug_x86/portaudio.tlb Disabled ..\..\src\common;..\..\include;.\;..\..\src\os\win;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_USRDLL;PA_ENABLE_DEBUG_OUTPUT;_CRT_SECURE_NO_DEPRECATE;PAWIN_USE_WDMKS_DEVICE_INFO;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL $(Platform)\$(Configuration)\portaudio.pch $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ Level3 true ProgramDatabase _DEBUG;%(PreprocessorDefinitions) 0x0409 ksuser.lib;%(AdditionalDependencies) $(Platform)\$(Configuration)\portaudio_x64.dll true .\portaudio.def true $(Platform)\$(Configuration)/portaudio_x64.pdb $(Platform)\$(Configuration)\portaudio_x64.lib MachineX64 true $(Platform)\$(Configuration)/portaudio_x64.bsc %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) ================================================ FILE: m4/android.m4 ================================================ AC_DEFUN([CHECK_HAVE_ANDROID], [ AC_CANONICAL_HOST define('ANDROID_LDFLAGS','-lOpenSLES') case "${host_os}" in *android*) ANDROID_LDFLAGS="-lOpenSLES" ;; *) ANDROID_LDFLAGS="" ;; esac AC_SUBST(ANDROID_LDFLAGS) ]) ================================================ FILE: m4/find_pthread.m4 ================================================ # from http://autoconf-archive.cryp.to/acx_pthread.html # Copyright © 2008 Steven G. Johnson # This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. # You should have received a copy of the GNU General Public License along with this program. If not, see . # As a special exception, the respective Autoconf Macro's copyright owner gives unlimited permission to copy, distribute and modify the configure scripts that are the output of Autoconf when processing the Macro. You need not follow the terms of the GNU General Public License when using or distributing such scripts, even though portions of the text of the Macro appear in them. The GNU General Public License (GPL) does govern all other use of the material that constitutes the Autoconf Macro. # This special exception to the GPL applies to versions of the Autoconf Macro released by the Autoconf Macro Archive. When you make and distribute a modified version of the Autoconf Macro, you may extend this special exception to the GPL to apply to your modified version as well. AC_DEFUN([ACX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_SAVE AC_LANG_C acx_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes) AC_MSG_RESULT($acx_pthread_ok) if test x"$acx_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. acx_pthread_flags="pthreads none -Kthread -kthread lthread pthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # pthreadVCE2 # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case "${host_cpu}-${host_os}" in *solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" ;; esac if test x"$acx_pthread_ok" = xno; then for flag in $acx_pthread_flags; do case $flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; -*) AC_MSG_CHECKING([whether pthreads work with $flag]) PTHREAD_CFLAGS="$flag" ;; pthread-config) AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) if test x"$acx_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) AC_MSG_CHECKING([for the pthreads library -l$flag]) PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. AC_TRY_LINK([#include ], [pthread_t th; pthread_join(th, 0); pthread_attr_init(0); pthread_cleanup_push(0, 0); pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], [acx_pthread_ok=yes]) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" AC_MSG_RESULT($acx_pthread_ok) if test "x$acx_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$acx_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. AC_MSG_CHECKING([for joinable pthread attribute]) attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do AC_TRY_LINK([#include ], [int attr=$attr; return attr;], [attr_name=$attr; break]) done AC_MSG_RESULT($attr_name) if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, [Define to necessary symbol if this constant uses a non-standard name on your system.]) fi AC_MSG_CHECKING([if more special flags are required for pthreads]) flag=no case "${host_cpu}-${host_os}" in *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; esac AC_MSG_RESULT(${flag}) if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: must compile with xlc_r or cc_r if test x"$GCC" != xyes; then AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC}) else PTHREAD_CC=$CC fi else PTHREAD_CC="$CC" fi AC_SUBST([PTHREAD_LIBS]) AC_SUBST([PTHREAD_CFLAGS]) AC_SUBST([PTHREAD_CC]) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$acx_pthread_ok" = xyes; then ifelse([$1],,AC_DEFINE([HAVE_PTHREAD],1,[Define if you have POSIX threads libraries and header files.]),[$1]) : else acx_pthread_ok=no $2 fi AC_LANG_RESTORE ])dnl ACX_PTHREAD ================================================ FILE: m4/opencv.m4 ================================================ dnl m4 macro to check for existance of OpenCV library dnl originally written by Florian Eyben, 11/2008 dnl amended by Florian Gross, 04/2013 dnl dnl usage: CHECK_HAVE_OPENCV( [default path] ) dnl if no default path is given, the default is /usr dnl dnl The following defines are set, if the library is found: dnl #define HAVE_OPENCV 1 (OpenCV Version 2.2 or higher is required) dnl dnl The following Makefile substitutions are added: dnl OPENCV_CPPFLAGS (for includes) dnl OPENCV_LDFLAGS (for libraries) dnl OPENCV_ROOT (points to the c++/ directory in the semaine folder) dnl AC_DEFUN([CHECK_HAVE_OPENCV], [ OPENCV='no' OPENCV_ROOT='' OPENCV_CPPFLAGS='' OPENCV_LDFLAGS='' have_opencv='no' if test "x$1" = "x" ; then DEFAULT='no' else DEFAULT=$1 fi dnl Define the root directory for the OpenCV installation. AC_ARG_WITH(opencv, [ --with-opencv= OpenCV installation dir. default=$DEFAULT], OPENCV_ROOT="$withval", OPENCV_ROOT=$DEFAULT) if test "x$OPENCV_ROOT" != "xno" ; then dnl Save these values in case they need to be restored later. save_CFLAGS="$CFLAGS" save_CPPFLAGS="$CPPFLAGS" save_LDFLAGS="$LDFLAGS" dnl Add the user-specified OpenCV installation directory to these dnl paths. Ensure that /usr/include and /usr/lib are not included dnl multiple times if $OPENCV_ROOT is "/usr". if test "x$OPENCV_ROOT" != "x/usr" ; then CPPFLAGS="$CPPFLAGS -I$OPENCV_ROOT/include" #CFLAGS="$CFLAGS -I$OPENCV_ROOT/include" cv_ldflags="-L$OPENCV_ROOT/lib" LDFLAGS="$cv_ldflags $LDFLAGS" fi AC_LANG_PUSH([C++]) save_LIBS="$LIBS" AC_SEARCH_LIBS([cvNorm], [opencv_core opencv_imgproc opencv_ml opencv_video opencv_features2d], [AC_CHECK_HEADER([opencv2/video/video.hpp], [have_opencv='yes'])]) LIBS="$save_LIBS" AC_LANG_POP() dnl If OpenCV API files were found, define this extra stuff that may dnl be helpful in some Makefiles. if test "x$have_opencv" = "xyes" ; then dnl NOTE: pkg-config returns the wrong commandline in some cases, so we disable it! dnl export PKG_CONFIG_PATH="$OPENCV_ROOT/lib/pkgconfig" dnl OPENCV_LDFLAGS=`pkg-config --silence-errors --libs opencv` dnl OPENCV_CPPFLAGS=`pkg-config --silence-errors --cflags opencv` dnl echo "OPCVCPP: $OPENCV_CPPFLAGS"; dnl OPENCV_CPPFLAGS="-I$OPENCV_ROOT/include" dnl unset PKG_CONFIG_PATH if test "x$OPENCV_LDFLAGS" = "x" ; then OPENCV_LDFLAGS="-lopencv_core -lopencv_imgproc -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_objdetect -lopencv_highgui"; if test "x$OPENCV_ROOT" != "x/usr" ; then OPENCV_LDFLAGS="-L$OPENCV_ROOT/lib $OPENCV_LDFLAGS" OPENCV_CPPFLAGS="-I$OPENCV_ROOT/include" fi fi AC_DEFINE([HAVE_OPENCV],1,[Compile with OpenCV support]) OPENCV='yes' else AC_MSG_WARN([Compiling WITHOUT OpenCV support! You won't be able to extract video features.]) fi dnl Restore all the variables now that we are done testing. CFLAGS="$save_CFLAGS" CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" fi dnl Export all of the output vars for use by makefiles and configure script. AC_SUBST(OPENCV_ROOT) AC_SUBST(OPENCV_CPPFLAGS) AC_SUBST(OPENCV_LDFLAGS) ]) ================================================ FILE: m4/portaudio.m4 ================================================ dnl m4 macro to check for existance of PortAudio library dnl written by Florian Eyben, 11/2008 dnl dnl usage: CHECK_HAVE_PORTAUDIO( [default path] ) dnl if no default path is given, the default is /usr dnl dnl The following defines are set, if the library is found: dnl #define HAVE_PORTAUDIO 1 dnl #define HAVE_PORTAUDIO_V19 1 (only if installed portaudio has newer V19 API) dnl dnl The following Makefile substitutions are added: dnl PORTAUDIO_CPPFLAGS (for includes) dnl PORTAUDIO_LDFLAGS (for libraries) dnl PORTAUDIO_ROOT (points to the c++/ directory in the semaine folder) dnl AC_DEFUN([CHECK_HAVE_PORTAUDIO], [ PORTAUDIO='no' PORTAUDIO_V19='no' PORTAUDIO_ROOT='' PORTAUDIO_CPPFLAGS='' PORTAUDIO_LDFLAGS='' have_portaudio='no' have_portaudio_v19='no' if test "x$1" = "x" ; then DEFAULT='/usr' else DEFAULT=$1 fi dnl Define the root directory for the PortAudio installation. AC_ARG_WITH(portaudio, [ --with-portaudio= PortAudio installation dir. default=$1], PORTAUDIO_ROOT="$withval", PORTAUDIO_ROOT=$DEFAULT) if test "x$PORTAUDIO_ROOT" != "xno" ; then dnl Save these values in case they need to be restored later. save_CFLAGS="$CFLAGS" save_CPPFLAGS="$CPPFLAGS" save_LDFLAGS="$LDFLAGS" dnl Add the user-specified PortAudio installation directory to these dnl paths. Ensure that /usr/include and /usr/lib are not included dnl multiple times if $PORTAUDIO_ROOT is "/usr". if test "x$PORTAUDIO_ROOT" != "x/usr" ; then CPPFLAGS="$CPPFLAGS -I$PORTAUDIO_ROOT/include" #CFLAGS="$CFLAGS -I$PORTAUDIO_ROOT/include" if test -d "$PORTAUDIO_ROOT/lib" ; then pa_ldflags="-L$PORTAUDIO_ROOT/lib" else pa_ldflags="-L$PORTAUDIO_ROOT/lib" fi LDFLAGS="$pa_ldflags $LDFLAGS" fi save_LIBS="$LIBS" AC_CHECK_LIB([portaudio], [Pa_Initialize], [AC_CHECK_HEADER([portaudio.h], [have_portaudio='yes'])]) AC_CHECK_LIB([portaudio], [Pa_GetHostApiCount], [have_portaudio_v19='yes']) LIBS="$save_LIBS" dnl test if portaudio is latest version... i.e. has Pa_streamStatus dnl TODO.... dnl If PortAudio API files were found, define this extra stuff that may dnl be helpful in some Makefiles. if test "x$have_portaudio" = "xyes" ; then export PKG_CONFIG_PATH="$PORTAUDIO_ROOT:$PORTAUDIO_ROOT/include:$PORTAUDIO_ROOT/build" PORTAUDIO_LDFLAGS=`pkg-config --silence-errors --libs portaudio-2.0` PORTAUDIO_CPPFLAGS=`pkg-config --silence-errors --cflags portaudio-2.0` #echo "PACPP: $PORTAUDIO_CPPFLAGS"; PORTAUDIO_CPPFLAGS="-I$PORTAUDIO_ROOT/include" unset PKG_CONFIG_PATH if test "x$PORTAUDIO_LDFLAGS" = "x" ; then PORTAUDIO_LDFLAGS="-lportaudio"; if test "x$PORTAUDIO_ROOT" != "x/usr" ; then PORTAUDIO_LDFLAGS="$PORTAUDIO_LDFLAGS -L$PORTAUDIO_ROOT/lib" PORTAUDIO_CPPFLAGS="-I$PORTAUDIO_ROOT/include" fi fi AC_DEFINE([HAVE_PORTAUDIO],1,[Compile with portaudio support]) if test "x$have_portaudio_v19" = "xyes" ; then AC_DEFINE([HAVE_PORTAUDIO_V19],1,[Detected portaudio has newer V19 api]) PORTAUDIO_V19='yes' fi PORTAUDIO='yes' else AC_MSG_WARN([Compiling WITHOUT PortAudio support!! Sound recording will probably be broken!]) fi dnl Restore all the variables now that we are done testing. CFLAGS="$save_CFLAGS" CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" fi dnl Export all of the output vars for use by makefiles and configure script. AC_SUBST(PORTAUDIO_ROOT) AC_SUBST(PORTAUDIO_CPPFLAGS) AC_SUBST(PORTAUDIO_LDFLAGS) ]) ================================================ FILE: m4/targets.m4 ================================================ dnl m4 macro to configure smile build targets dnl written by Florian Eyben, 11/2008 dnl dnl Configured the targets to be build based on the --enable/--disable options dnl Further, disables those targets that cannot be built due to missing dependencies dnl dnl IMPORTANT: call this macro AFTER the library checks! dnl AC_DEFUN([CONFIGURE_TARGETS], [ dnl the defaults: enable_liverec='yes' build_smilextract='yes' # program features:::: AC_ARG_ENABLE([liverec],[ --enable-liverec enable live input feature. default=yes], enable_liverec="$enableval", enable_liverec="$enable_liverec") if test x$enable_liverec = xyes; then AC_DEFINE([WITH_LIVEREC],[1],[Support live input from soundcard/microphone]) fi # build targets::: AC_ARG_ENABLE([SMILExtract],[ --enable-SMILExtract build standalone commandline feature extractor. default=yes], build_smilextract="$enableval", build_featum="$build_smilextract") AM_CONDITIONAL([BUILD_SMILExtract],[test x$build_smilextract = xyes]) ]) ================================================ FILE: plugindev/AUTHORS ================================================ Florian Eyben, Martin Woellmer, Bjoern Schuller ================================================ FILE: plugindev/COPYING ================================================ openSMILE - open-source Speech and Music Interpretation by Large-space Extraction - Main authors: Florian Eyben, Felix Weninger, Martin Woellmer, Bjoern Schuller Copyright (c) audEERING GmbH, Gilching, Germany. All rights reserved. http://www.audeeering.com/ Copyright (c) 2016, audEERING GmbH Copyright (c) 2013-2015, audEERING UG (haftungsbeschraenkt) Copyright (c) 2008-2013, Institute for Human-Machine Communication, Technische Universitaet Muenchen, Germany Licensing terms & your rights ============================= ********************************************************************** If you use openSMILE or any code from openSMILE in your research work, you are kindly asked to acknowledge the use of openSMILE in your publications. See the file CITING.txt for details. ********************************************************************** This audEERING Research License Agreement (license, license agreement, or agreement in the ongoing), is a legal agreement between you and audEERING GmbH, Gilching, Germany (audEERING or we in the following) for the software or data identified above, which may include source code, and any associated materials, text or speech files, associated media and "online" or electronic documentation (together, the "Software"). By installing, copying, or otherwise using this Software, you agree to be bound by the terms in this license. If you do not agree, you may not install copy or use the Software. The Software is protected by copyright and other intellectual property laws and is licensed, not sold. This license grants you the following rights: A. You may use, copy, reproduce, and distribute this Software for any non-commercial purpose, subject to the restrictions set out below. Some purposes which can be non-commercial are teaching, academic research, public demonstrations and personal experimentation or personal home use. You may also distribute this Software with books or other teaching materials, or publish the Software on websites, that are intended to teach the use of the Software for academic or other non-commercial purposes. You may NOT use or distribute this Software or any derivative works in any form for commercial purposes, except those outlined in (B). Examples of commercial purposes are running business operations, licensing, leasing, or selling the Software, distributing the Software for use with commercial products (no matter whether free or paid), using the Software in the creation or use of commercial products or any other activity which purpose is to procure a commercial gain to you or others (except for conditions set out in (B)). B. Further, you may use the software for commercial research, which meets the following conditions: commercial research which is not directly associated with product development and has the primary purpose of publishing and sharing results with the academic world; pre-product evaluations of algorithms and methods, as long as these evaluations are more of an evaluatory, planning, and research nature than of a product development nature. Any further commercial use requires you to obtain a commercial license or written approval from audEERING GmbH which grants you extended usage rights for this software. In particular any direct (software) or indirect (models, features extracted with the software) use of the software, parts of the software, or derivatives in a product (no matter whether free or paid), is not allowed without an additional commercial license. C. If the software includes source code or data, you may create derivative works of such portions of the software and distribute the modified software for non-commercial purposes, as provided herein. If you distribute the software or any derivative works of the Software, you must distribute them under the same terms and conditions as in this license, and you must not grant other rights to the software or derivative works that are different from those provided by this license agreement. If you have created derivative works of the software, and distribute such derivative works, you will cause the modified files to carry prominent notices so that recipients know that they are not receiving the original software. Such notices must state: (i) that you have altered the software; and (ii) the date of any changes as well as your name. In return for the above rights, you agree to: 1. That you will not remove any copyright or other notices (authors and citing information, for example) from the software. 2. That if any of the software is in binary format, you will not attempt to modify such portions of the software, or to reverse engineer or decompile them, except and only to the extent authorized by applicable law. 3. That the copyright holders (audEERING) are granted back, without any restrictions or limitations, a non-exclusive, perpetual, irrevocable, royalty-free, assignable and sub-licensable license, to reproduce, publicly perform or display, install, use, modify, post, distribute, make and have made, sell and transfer your modifications to and/or derivative works of the software source code or data, for any purpose. 4. That any feedback about the software provided by you to us is voluntarily given, and audEERING shall be free to use the feedback as they see fit without obligation or restriction of any kind, even if the feedback is designated by you as confidential. 5. THAT THE SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. 6. THAT NEITHER AUDEERING NOR ANY AUTHOR OR CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE, INCLUDING DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. 7. That we have no duty of reasonable care or lack of negligence, and we are not obligated to (and will not) provide technical support for the Software. 8. That if you breach this license agreement or if you sue anyone over patents that you think may apply to or read on the software or anyone's use of the software, this license agreement (and your license and rights obtained herein) terminate automatically. Upon any such termination, you shall destroy all of your copies of the software immediately. Sections 3, 4, 5, 6, 7, 10 and 11 of this license agreement shall survive any termination of this license agreement. 9. That the patent rights, if any, granted to you in this license agreement only apply to the software, not to any derivative works you make. 10.That the software may be subject to European export or import laws or such laws in other places. You agree to comply with all such laws and regulations that may apply to the software after the delivery of the software to you. 11.That all rights not expressly granted to you in this license agreement are reserved by audEERING. 12.That this license agreement shall be construed and controlled by the laws of the Federal Republic of Germany, without regard to conflicts of law. If any provision of this license agreement shall be deemed unenforceable or contrary to law, the rest of this license agreement shall remain in full effect and interpreted in an enforceable manner that most closely captures the intent of the original language. Commerical license options ========================== For commercial and other licensing options, please contact us at audEERING via E-mail: info@audeering.com Third-party contributions and dependencies ========================================== openSMILE contains third-party contributions from the Speex codec package (in the cLsp component), which are distributed unter the following terms: ----------------------------------------------------------------------- Copyright 2002-2008 Xiph.org Foundation Copyright 2002-2008 Jean-Marc Valin Copyright 2005-2007 Analog Devices Inc. Copyright 2005-2008 Commonwealth Scientific and Industrial Research Organisation (CSIRO) Copyright 1993, 2002, 2006 David Rowe Copyright 2003 EpicGames Copyright 1992-1994 Jutta Degener, Carsten Bormann Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------- openSMILE uses rapidjson to read RNN files in json format. Rapidjson can be obtained from: https://code.google.com/p/rapidjson/ It is distributed under the MIT license and included with openSMILE in src/include/rapidjson It is distributed under these terms: ----------------------------------------- Copyright (C) 2011 Milo Yip Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----------------------------------------- openSMILE uses LibSVM (by Chih-Chung Chang and Chih-Jen Lin) for classification tasks. It is distributed with openSMILE and is included in the src/classifiers/libsvm/ directory. See the COPYRIGHT file in that directory for details on license terms of LivSVM. PortAudio is required for live recording from sound card and for the SEMAINE components. You can get the latest version from: http://www.portaudio.com However, we cannot guarantee compatibility with the latest versions. A snapshot of portaudio that is known to work with openSMILE is included in thirdparty/portaudio.tgz. Copyright and licensing information for portaudio is also contained in the .tgz package. Optionally, openSMILE can be linked against the SEMAINE API and the Julius LVCSR engine, enabling an interface to the SEMAINE system and a keyword spotter component. See http://www.semaine-project.eu/ for details on running the SEMAINE system. Only the older versions of openSMILE (1.0.1) are officially supported to be build with the SEMAINE system. For recent developments, check out the status of the ARIA VALUSPA EU-project: http://aria-agent.eu/ ================================================ FILE: plugindev/ChangeLog ================================================ ================================================ FILE: plugindev/ClassifierResultGUI.cpp ================================================ /*F*************************************************************************** * * openSMILE - the Munich open source Multimedia Interpretation by * Large-scale Extraction toolkit * * This file is part of openSMILE. * * openSMILE is copyright (c) by audEERING GmbH. All rights reserved. * * See file "COPYING" for details on usage rights and licensing terms. * By using, copying, editing, compiling, modifying, reading, etc. this * file, you agree to the licensing terms in the file COPYING. * If you do not agree to the licensing terms, * you must immediately destroy all copies of this file. * * THIS SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, * IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST * INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE * OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL * ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS * DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. * NEITHER TUM NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY * DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE AGREEMENT, INCLUDING * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE * MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. * ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE * THE SOFTWARE OR DERIVATIVE WORKS. * * Main authors: Florian Eyben, Felix Weninger, * Martin Woellmer, Bjoern Schuller * * Copyright (c) 2008-2013, * Institute for Human-Machine Communication, * Technische Universitaet Muenchen, Germany * * Copyright (c) 2013-2015, * audEERING UG (haftungsbeschraenkt), * Gilching, Germany * * Copyright (c) 2016, * audEERING GmbH, * Gilching Germany ***************************************************************************E*/ /* openSMILE component: example dataSink: reads data from data memory and outputs it to console/logfile (via smileLogger) this component is also useful for debugging */ #include #define MODULE "cClassifierResultGUI" SMILECOMPONENT_STATICS(cClassifierResultGUI) SMILECOMPONENT_REGCOMP(cClassifierResultGUI) { SMILECOMPONENT_REGCOMP_INIT scname = COMPONENT_NAME_CCLASSIFIERRESULTGUI; sdescription = COMPONENT_DESCRIPTION_CCLASSIFIERRESULTGUI; // we inherit cDataSink configType and extend it: SMILECOMPONENT_INHERIT_CONFIGTYPE("cDataSink") SMILECOMPONENT_IFNOTREGAGAIN( ct->setField("classes","names of classification classes",(const char *)NULL,ARRAY_TYPE); ct->setField("regression","names of regression targets",(const char *)NULL,ARRAY_TYPE); ct->setField("images","The names of the image files to load for each class (array).",(const char *)NULL,ARRAY_TYPE); //ct->setField("showRegval","Show a regression value computed from the confidences (if showRegval=2), or which was received via the smileMessage (showRegval=1), or not at all (showRegval=0).",0); ) SMILECOMPONENT_MAKEINFO(cClassifierResultGUI); } //SMILECOMPONENT_CREATE(cClassifierResultGUI) cSmileComponent * cClassifierResultGUI::create(const char*_instname) { cSmileComponent *c = new cClassifierResultGUI(_instname); if (c!=NULL) c->setComponentInfo(sconfman,COMPONENT_NAME_CCLASSIFIERRESULTGUI,COMPONENT_DESCRIPTION_CCLASSIFIERRESULTGUI); return c; } //--- wx --- /* enum { ID_Quit = 1, ID_About, }; BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(ID_Quit, MyFrame::OnQuit) EVT_MENU(ID_About, MyFrame::OnAbout) END_EVENT_TABLE() */ wxMultiImagePanel::wxMultiImagePanel(wxFrame* parent, int _nClasses, int nRegr) : wxPanel(parent), nClasses(_nClasses), image(NULL), confidence(NULL), clsName(NULL), regressionValue(NULL), regressionText(NULL), nRegression(nRegr) { // load the file... ideally add a check to see if loading was successful //image.LoadFile(file, format); if (nClasses > 0) { image = new wxBitmap[nClasses]; confidence = new float[nClasses]; clsName = (const char **)calloc(1,sizeof(const char*)*nClasses); } if (nRegr > 0) { regressionValue = new float[nRegression]; regressionText = (const char **)calloc(1,sizeof(const char*)*nRegression); } } void wxMultiImagePanel::loadClassImage(int clsIdx, const char *clsname, wxString file, wxBitmapType format) { if (image != NULL && clsIdx >= 0 && clsIdx < nClasses) { image[clsIdx].LoadFile(file, format); } if (clsName != NULL && clsIdx >= 0 && clsIdx < nClasses) { clsName[clsIdx] = clsname; } } /* * Called by the system of by wxWidgets when the panel needs * to be redrawn. You can also trigger this call by * calling Refresh()/Update(). */ void wxMultiImagePanel::paintEvent(wxPaintEvent & evt) { // depending on your system you may need to look at double-buffered dcs wxPaintDC dc(this); render(dc); } /* * Alternatively, you can use a clientDC to paint on the panel * at any time. Using this generally does not free you from * catching paint events, since it is possible that e.g. the window * manager throws away your drawing when the window comes to the * background, and expects you will redraw it when the window comes * back (by sending a paint event). */ void wxMultiImagePanel::paintNow() { // depending on your system you may need to look at double-buffered dcs wxClientDC dc(this); render(dc); } // render a simple meter gauge (vertical) // val = 0..100 (percentage of filling) void wxMultiImagePanel::renderGauge(wxDC& dc, int x, int y, int w, int h, int val, const char * label, const char *col) { dc.SetPen(wxPen(wxColour("black"))); dc.SetBrush(wxBrush(wxColour("white"))); dc.DrawRectangle(x,y,w,h); int fill=0; fill = (int)(((float)val / 100.0) * (float)w); if (fill >= w) fill = w-1; if (fill > 1) { dc.DrawLine(x+fill,y+1,x+fill,y+h-1); dc.SetBrush(wxBrush(wxColour(col))); dc.FloodFill(x+2,y+2,wxColour("black"),wxFLOOD_BORDER); dc.SetPen(wxPen(wxColour(col))); dc.DrawLine(x+fill,y+1,x+fill,y+h-1); } else if (fill == 1) { dc.SetPen(wxPen(wxColour(col))); dc.DrawLine(x+fill,y+1,x+fill,y+h-1); } if (label != NULL) { dc.DrawText(label,x+w+10,y); } } /* * Here we do the actual rendering. I put it in a separate * method so that it can work no matter what type of DC * (e.g. wxPaintDC or wxClientDC) is used. */ void wxMultiImagePanel::render(wxDC& dc) { int imgX = 50; int imgY = 70; int imgW = 200; int imgH = 200; // position (upper left) of first gauge. int regGaugeX = 50; int regGaugeY = imgY+imgH+50; int gaugeW = 100; int gaugeH = 20; int gaugeSpace = 5; // position (upper left) of first gauge. int confGaugeX = 50+imgW+25; int confGaugeY = imgY+50; dc.Clear(); //regressison value if (nRegression > 0) { int i; dc.DrawText("Regression result(s):",regGaugeX,regGaugeY-25); for (i=0; i 0) { int i; dc.DrawText("Class confidences:",confGaugeX,confGaugeY-25); for (i=0; i 0 && _classActive >= 0 && _classActive < nClasses && image != NULL) { dc.DrawBitmap( image[_classActive], imgX, imgY, false ); if (clsName != NULL) { dc.DrawText("Classification result:", imgX,imgY-40); dc.DrawText(clsName[_classActive], imgX+10, imgY-20); } } // confidence centroid... dc.DrawText("Centroid of class confidences (pseudo regression:)",confGaugeX, confGaugeY+(gaugeH+gaugeSpace)*nClasses+10); renderGauge(dc, confGaugeX, confGaugeY+(gaugeH+gaugeSpace)*nClasses+30, gaugeW, gaugeH, (int)(ctr*100.0), "<- level of interest", "green"); } // catch the event from the thread BEGIN_EVENT_TABLE(ClsResultFrame, wxFrame) EVT_COMMAND (RESULT_UPDATE_ID, wxEVT_COMMAND_TEXT_UPDATED, ClsResultFrame::onResultUpdate) END_EVENT_TABLE() BEGIN_EVENT_TABLE(wxMultiImagePanel, wxPanel) // catch paint events EVT_PAINT(wxMultiImagePanel::paintEvent) END_EVENT_TABLE() const int ID_CHECKBOX = 100; bool ClsResultApp::OnInit() { // make sure to call this first wxInitAllImageHandlers(); mframe = new ClsResultFrame( _("TUM openSMILE classifier demo output"), wxPoint(50, 50), wxSize(650, 350), smileObj->nClasses, smileObj->nRegression ); mframe->Show(true); int i; for (i=0; inClasses ; i++) { mframe->drawPane->loadClassImage(i,smileObj->className[i],smileObj->imageFile[i],wxBITMAP_TYPE_JPEG); } for (i=0; inRegression ; i++) { mframe->drawPane->setRegressionText(i,smileObj->regressionName[i]); } SetTopWindow(mframe); return true; } ClsResultFrame::ClsResultFrame(const wxString& title, const wxPoint& pos, const wxSize& size, int nCls, int nReg) : wxFrame(NULL, wxID_ANY, title, pos, size) { //wxPanel *panel = new wxPanel(this, wxID_ANY); if (nCls < 0) nCls = 0; if (nReg < 0) nReg = 0; //wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); drawPane = new wxMultiImagePanel( this, nCls, nReg ); // wxT("vo.jpg"), wxBITMAP_TYPE_JPEG //sizer->Add(drawPane, 10, wxEXPAND); //this->SetSizer(sizer); // m_cb = new wxCheckBox(panel, ID_CHECKBOX, wxT("Voice activity"), // wxPoint(20, 20)); // m_cb->SetValue(false); // wxImageHandler * jpegLoader = new wxJPEGHandler(); // wxImage::AddHandler(jpegLoader); // bmp.LoadFile("vo.jpg", wxBITMAP_TYPE_JPEG); /* Connect(ID_CHECKBOX, wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(CheckBox::OnToggle)); Centre(); */ /* wxMenu *menuFile = new wxMenu; menuFile->Append( ID_About, _("&About...") ); menuFile->AppendSeparator(); menuFile->Append( ID_Quit, _("E&xit") ); wxMenuBar *menuBar = new wxMenuBar; menuBar->Append( menuFile, _("&File") ); SetMenuBar( menuBar ); */ CreateStatusBar(); SetStatusText( _("openSMILE GUI plugin.") ); } /* void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { Close(true); } void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxMessageBox( _("This is a wxWidgets Hello world sample"), _("About Hello World"), wxOK | wxICON_INFORMATION, this ); } */ //IMPLEMENT_APP(MyApp) //----- cClassifierResultGUI::cClassifierResultGUI(const char *_name) : cSmileComponent(_name) { // ... } void cClassifierResultGUI::fetchConfig() { //cSmileComponent::fetchConfig(); nClasses = getArraySize("classes"); nRegression = getArraySize("regression"); int nImages = getArraySize("images"); if (nClasses > 0) { int i; className = (const char**)calloc(1,sizeof(const char*)*nClasses); imageFile = (const char**)calloc(1,sizeof(const char*)*nClasses); for (i=0; i 0) { regressionName = (const char**)calloc(1,sizeof(const char*)*nRegression); int i; for (i=0; iwxMtx); obj->pApp = new ClsResultApp(); obj->pApp->smileObj = obj; wxApp::SetInstance(obj->pApp); smileMutexUnlock(obj->wxMtx); wxEntry(0, NULL); obj->pApp = NULL; // obj->terminate = 1; printf("wxwin terminate.\n"); } SMILE_THREAD_RET; } int cClassifierResultGUI::myFinaliseInstance() { // FIRST call cDataSink myFinaliseInstance, this will finalise our dataWriter... //int ret = cSmileComponent::myFinaliseInstance(); /* if that was SUCCESSFUL (i.e. ret == 1), then do some stuff like loading models or opening output files: */ //fo = new openSmilePluginGUI::TestForm(); //IMPLEMENT_APP_NO_MAIN(appname) int ret = 1; smileMutexCreate(wxMtx); if (!(int)smileThreadCreate(guiThr, wxClsThreadRunner, this)) { SMILE_ERR(1,"error creating GUI thread!!"); } return ret; } // search for a class by its name and get the local index int cClassifierResultGUI::getClassIndex(const char *name) { int i; if (className == NULL) return -1; if (name == NULL) return -1; for (i=0; iintData[0]; // number of classes in message (for class confidences) SMILE_IMSG(3,"received 'classificationResult' message (nCl = %i)",nCl); //int cl = getClassIndex((const char*)_msg->custData2); //int rg = -1; //if (nCl <= 1) { int rg = getRegressionIndex((const char*)(_msg->custData2)); if (rg < 0) { //SMILE_IERR(3,"unknown classification result message '%s', name not found in local gui config",(const char*)(_msg->custData2)); //return 0; classificationEvent *c = new classificationEvent(nClasses,(int)(_msg->floatData[0]),_msg->msgname,0); int i; for (i=0; icustData != NULL) { c->confidences[i] = ((double*)(_msg->custData))[i]; } else { c->confidences[i] = 0.0; } } wxCommandEvent myevent(wxEVT_COMMAND_TEXT_UPDATED, RESULT_UPDATE_ID); myevent.SetClientData(c); pApp->mframe->GetEventHandler()->AddPendingEvent( myevent ); } else { classificationEvent *c = new classificationEvent(0,0,(const char*)(_msg->custData2),nRegression); c->regUpdate = rg; c->regressionValue[rg] = _msg->floatData[0]; printf ("regression rg=%i val=%f\n",rg,_msg->floatData[0]); wxCommandEvent myevent(wxEVT_COMMAND_TEXT_UPDATED, RESULT_UPDATE_ID); myevent.SetClientData(c); pApp->mframe->GetEventHandler()->AddPendingEvent( myevent ); } return 1; // message was processed } return 0; } int cClassifierResultGUI::myTick(long long t) { return 0; } #if 0 SMILE_DBG(4,"tick # %i, reading value vector:",t); cVector *vec= reader->getFrameRel(lag); //new cVector(nValues+1); if (vec == NULL) return 0; //else reader->nextFrame(); long vi = vec->tmeta->vIdx; double tm = vec->tmeta->time; // update VA status in GUI.... // pApp->AddPendingEvent(); // notify the main thread if ((int)(vec->dataF[0]) != old) { old = (int)(vec->dataF[0]); wxCommandEvent myevent(wxEVT_COMMAND_TEXT_UPDATED, VAD_UPDATE_ID); myevent.SetInt((int)(vec->dataF[0])); // pass some data along the event, a number in this case pApp->mframe->GetEventHandler()->AddPendingEvent( myevent ); } /* // now print the vector: int i; for (i=0; iN; i++) { //SMILE_PRINT(" (a=%i vi=%i, tm=%fs) %s.%s = %f",reader->getCurR(),vi,tm,reader->getLevelName(),vec->name(i),vec->dataF[i]); printf(" %s.%s = %f\n",reader->getLevelName(),vec->name(i),vec->dataF[i]); } if (fHandle != NULL) { for (i=0; iN; i++) { fprintf(fHandle, "%s = %f\n",vec->name(i),vec->dataF[i]); } } */ // tick success return 1; } #endif cClassifierResultGUI::~cClassifierResultGUI() { if (className != NULL) free(className); if (regressionName != NULL) free(regressionName); if (imageFile != NULL) free(imageFile); } ================================================ FILE: plugindev/ClassifierResultGUI.hpp ================================================ /*F*************************************************************************** * * openSMILE - the Munich open source Multimedia Interpretation by * Large-scale Extraction toolkit * * This file is part of openSMILE. * * openSMILE is copyright (c) by audEERING GmbH. All rights reserved. * * See file "COPYING" for details on usage rights and licensing terms. * By using, copying, editing, compiling, modifying, reading, etc. this * file, you agree to the licensing terms in the file COPYING. * If you do not agree to the licensing terms, * you must immediately destroy all copies of this file. * * THIS SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, * IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST * INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE * OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL * ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS * DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. * NEITHER TUM NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY * DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE AGREEMENT, INCLUDING * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE * MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. * ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE * THE SOFTWARE OR DERIVATIVE WORKS. * * Main authors: Florian Eyben, Felix Weninger, * Martin Woellmer, Bjoern Schuller * * Copyright (c) 2008-2013, * Institute for Human-Machine Communication, * Technische Universitaet Muenchen, Germany * * Copyright (c) 2013-2015, * audEERING UG (haftungsbeschraenkt), * Gilching, Germany * * Copyright (c) 2016, * audEERING GmbH, * Gilching Germany ***************************************************************************E*/ /* openSMILE component: example dataSink: reads data from data memory and outputs it to console/logfile (via smileLogger) this component is also useful for debugging */ #ifndef __CCLASSIFIERRESULTGUI_HPP #define __CCLASSIFIERRESULTGUI_HPP #include #include #include #define COMPONENT_DESCRIPTION_CCLASSIFIERRESULTGUI "This is an example of a cDataSink descendant. It reads data from the data memory and prints it to the console. This component is intended as a template for developers." #define COMPONENT_NAME_CCLASSIFIERRESULTGUI "cClassifierResultGUI" #undef class #include class wxMultiImagePanel : public wxPanel { const char **clsName; int classActive; int nClasses; wxBitmap *image; float *confidence; int nRegression; const char ** regressionText; float * regressionValue; public: wxMultiImagePanel(wxFrame* parent, int _nClasses=0, int nRegr=0); void loadClassImage(int clsIdx, const char *clsname, wxString file, wxBitmapType format); void setRegressionText(int nr, const char *text) { if (regressionText != NULL && nr>=0 && nr < nRegression) { regressionText[nr] = text; } } void paintEvent(wxPaintEvent & evt); void paintNow(); void renderGauge(wxDC& dc, int x, int y, int w, int h, int val, const char * label, const char *col="blue"); void render(wxDC& dc); void setClassResult(int nr) { if (nr >= 0 && nr < nClasses) { classActive = nr; } } void setClassConfidence(int idx, float conf) { if (confidence != NULL && idx >= 0 && idx < nClasses) { confidence[idx] = conf; } } void setRegressionVal(int nr, float val) { if (regressionValue != NULL && nr >= 0 && nr < nRegression) { regressionValue[nr] = val; } } ~wxMultiImagePanel() { if (regressionText != NULL) free(regressionText); if (clsName != NULL) free(clsName); if (regressionValue != NULL) delete[] regressionValue; if (confidence != NULL) delete[] confidence; if (image != NULL) delete[] image; } DECLARE_EVENT_TABLE() }; class classificationEvent { public: classificationEvent(int _nClasses=0, int _maxClsIdx=0, const char *_classname=NULL, int nRegr=0) : confidences(NULL), nClasses(_nClasses), maxClsIdx(_maxClsIdx), classname(_classname), nRegression(nRegr), regUpdate(-1) { if (nClasses > 0) { confidences = new float[nClasses]; } if (nRegression > 0) { regressionValue = new float[nRegression]; } } ~classificationEvent() { if (confidences != NULL) delete[] confidences; if (regressionValue != NULL) delete[] regressionValue; } const char *classname; int maxClsIdx; int nClasses; int nRegression; int regUpdate; // the index to update, set to -1 to update all float *confidences; float *regressionValue; }; // the ID we'll use to identify our event const int RESULT_UPDATE_ID = 100002; class ClsResultFrame: public wxFrame { //wxBitmap bmp; wxCheckBox *m_cb; public: wxMultiImagePanel * drawPane; ClsResultFrame(const wxString& title, const wxPoint& pos, const wxSize& size, int nCls, int nReg); /* void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event);*/ // this is called when the event from the thread is received void onResultUpdate(wxCommandEvent& evt) { //smileMutexLock(wxMtx); // replot classificationEvent *ce = (classificationEvent *)evt.GetClientData(); if (ce->nClasses > 0) { drawPane->setClassResult(ce->maxClsIdx); } else { if (ce->regUpdate >= 0) { printf("event: clsidx = %i val=%f\n",ce->regUpdate,ce->regressionValue[ce->regUpdate]); drawPane->setRegressionVal(ce->regUpdate, ce->regressionValue[ce->regUpdate]); } else { int i; for (i=0; inRegression; i++) { drawPane->setRegressionVal(i, ce->regressionValue[i]); } } } int i; for (i=0; inClasses; i++) { drawPane->setClassConfidence(i,ce->confidences[i]); } drawPane->paintNow(); //smileMutexUnlock(wxMtx); } DECLARE_EVENT_TABLE() }; class cClassifierResultGUI; class ClsResultApp: public wxApp { virtual bool OnInit(); public: cClassifierResultGUI * smileObj; ClsResultFrame * mframe; }; class cClassifierResultGUI : public cSmileComponent { private: smileThread guiThr; //gcroot fo; protected: SMILECOMPONENT_STATIC_DECL_PR int getClassIndex(const char *name); int getRegressionIndex(const char *name); virtual void fetchConfig(); //virtual int myConfigureInstance(); virtual int myFinaliseInstance(); virtual int myTick(long long t); virtual int processComponentMessage( cComponentMessage *_msg ); public: SMILECOMPONENT_STATIC_DECL int nClasses; int nRegression; const char **className; const char **imageFile; const char **regressionName; smileMutex wxMtx; ClsResultApp* pApp; cClassifierResultGUI(const char *_name); virtual ~cClassifierResultGUI(); }; #endif // __CCLASSIFIERRESULTGUI_HPP ================================================ FILE: plugindev/INSTALL ================================================ Installation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. ================================================ FILE: plugindev/Makefile.am ================================================ # NOTE: you need to add custom LIBS and CFLAGS here:::: lib_LTLIBRARIES = libexampleplugin.la libexampleplugin_la_SOURCES = pluginMain.cpp \ plug_exampleSink.cpp libexampleplugin_la_LIBADD = $(OPENSMILELIB_LIBS) INCLUDES = $(OPENSMILELIB_CFLAGS) ================================================ FILE: plugindev/NEWS ================================================ ================================================ FILE: plugindev/README ================================================ The files in this subdirecory are the build tree for opensmile plugins ================================================ FILE: plugindev/autogen.sh ================================================ # Copyright (C) 2008 Florian Eyben # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. #!/bin/sh rm -f config.cache echo "- aclocal." aclocal -I m4 echo "- autoconf." autoconf echo "- autoheader." autoheader echo "- automake." automake -a libtoolize exit ================================================ FILE: plugindev/configure.ac ================================================ AC_INIT([.],1) AM_INIT_AUTOMAKE(testplugin,0.0.0) AC_PROG_CC AC_PROG_CXX # AC_PROG_RANLIB AC_PROG_LIBTOOL AM_PROG_CC_C_O ACX_PTHREAD #CHECK_HAVE_SEMAINEAPI CHECK_HAVE_OPENSMILELIB # CONFIGURE_TARGETS if test x`uname | grep mingw` != x ; then AC_DEFINE([WIN32],[1], [Compile on MinGW32-Msys]) AC_DEFINE([__WINDOWS],[1], [Compile on MinGW32-Msys]) AC_DEFINE([__MINGW32],[1], [Compile on MinGW32-Msys]) AC_DEFINE([__MINGW],[1], [Compile on MinGW32-Msys]) fi if test x`uname | grep MINGW` != x ; then AC_DEFINE([WIN32],[1], [Compile on MinGW32-Msys]) AC_DEFINE([__WINDOWS],[1], [Compile on MinGW32-Msys]) AC_DEFINE([__MINGW32],[1], [Compile on MinGW32-Msys]) AC_DEFINE([__MINGW],[1], [Compile on MinGW32-Msys]) fi AM_CONFIG_HEADER(config.h) AC_OUTPUT(Makefile) ================================================ FILE: plugindev/exampleGuipluginSink.cpp ================================================ /*F*************************************************************************** * * openSMILE - the Munich open source Multimedia Interpretation by * Large-scale Extraction toolkit * * This file is part of openSMILE. * * openSMILE is copyright (c) by audEERING GmbH. All rights reserved. * * See file "COPYING" for details on usage rights and licensing terms. * By using, copying, editing, compiling, modifying, reading, etc. this * file, you agree to the licensing terms in the file COPYING. * If you do not agree to the licensing terms, * you must immediately destroy all copies of this file. * * THIS SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, * IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST * INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE * OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL * ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS * DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. * NEITHER TUM NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY * DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE AGREEMENT, INCLUDING * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE * MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. * ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE * THE SOFTWARE OR DERIVATIVE WORKS. * * Main authors: Florian Eyben, Felix Weninger, * Martin Woellmer, Bjoern Schuller * * Copyright (c) 2008-2013, * Institute for Human-Machine Communication, * Technische Universitaet Muenchen, Germany * * Copyright (c) 2013-2015, * audEERING UG (haftungsbeschraenkt), * Gilching, Germany * * Copyright (c) 2016, * audEERING GmbH, * Gilching Germany ***************************************************************************E*/ /* openSMILE component: example dataSink: reads data from data memory and outputs it to console/logfile (via smileLogger) this component is also useful for debugging */ #include #define MODULE "cExampleGuipluginSink" SMILECOMPONENT_STATICS(cExampleGuipluginSink) SMILECOMPONENT_REGCOMP(cExampleGuipluginSink) { SMILECOMPONENT_REGCOMP_INIT scname = COMPONENT_NAME_CEXAMPLEGUIPLUGINSINK; sdescription = COMPONENT_DESCRIPTION_CEXAMPLEGUIPLUGINSINK; // we inherit cDataSink configType and extend it: SMILECOMPONENT_INHERIT_CONFIGTYPE("cDataSink") SMILECOMPONENT_IFNOTREGAGAIN( ct->setField("filename","The name of a text file to dump values to (this file will be overwritten, if it exists)",(const char *)NULL); ct->setField("lag","Output data frames behind",0,0,0); ) SMILECOMPONENT_MAKEINFO(cExampleGuipluginSink); } //SMILECOMPONENT_CREATE(cExampleGuipluginSink) cSmileComponent * cExampleGuipluginSink::create(const char*_instname) { cSmileComponent *c = new cExampleGuipluginSink(_instname); if (c!=NULL) c->setComponentInfo(sconfman,COMPONENT_NAME_CEXAMPLEGUIPLUGINSINK,COMPONENT_DESCRIPTION_CEXAMPLEGUIPLUGINSINK); return c; } //--- wx --- /* enum { ID_Quit = 1, ID_About, }; BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(ID_Quit, MyFrame::OnQuit) EVT_MENU(ID_About, MyFrame::OnAbout) END_EVENT_TABLE() */ wxImagePanel::wxImagePanel(wxFrame* parent, wxString file, wxBitmapType format) : wxPanel(parent) { // load the file... ideally add a check to see if loading was successful image.LoadFile(file, format); } /* * Called by the system of by wxWidgets when the panel needs * to be redrawn. You can also trigger this call by * calling Refresh()/Update(). */ void wxImagePanel::paintEvent(wxPaintEvent & evt) { // depending on your system you may need to look at double-buffered dcs wxPaintDC dc(this); render(dc); } /* * Alternatively, you can use a clientDC to paint on the panel * at any time. Using this generally does not free you from * catching paint events, since it is possible that e.g. the window * manager throws away your drawing when the window comes to the * background, and expects you will redraw it when the window comes * back (by sending a paint event). */ void wxImagePanel::paintNow() { // depending on your system you may need to look at double-buffered dcs wxClientDC dc(this); render(dc); } /* * Here we do the actual rendering. I put it in a separate * method so that it can work no matter what type of DC * (e.g. wxPaintDC or wxClientDC) is used. */ void wxImagePanel::render(wxDC& dc) { if (showImg) { dc.DrawBitmap( image, 50, 50, false ); } else { dc.Clear(); } } // catch the event from the thread BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_COMMAND (VAD_UPDATE_ID, wxEVT_COMMAND_TEXT_UPDATED, MyFrame::onVadUpdate) END_EVENT_TABLE() BEGIN_EVENT_TABLE(wxImagePanel, wxPanel) // catch paint events EVT_PAINT(wxImagePanel::paintEvent) END_EVENT_TABLE() const int ID_CHECKBOX = 100; bool MyApp::OnInit() { // make sure to call this first wxInitAllImageHandlers(); mframe = new MyFrame( _("TUM openSMILE status window"), wxPoint(50, 50), wxSize(450, 340) ); mframe->Show(true); SetTopWindow(mframe); return true; } MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame(NULL, wxID_ANY, title, pos, size) { //wxPanel *panel = new wxPanel(this, wxID_ANY); //wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); drawPane = new wxImagePanel( this, wxT("vo.jpg"), wxBITMAP_TYPE_JPEG); //sizer->Add(drawPane, 10, wxEXPAND); //this->SetSizer(sizer); // m_cb = new wxCheckBox(panel, ID_CHECKBOX, wxT("Voice activity"), // wxPoint(20, 20)); // m_cb->SetValue(false); // wxImageHandler * jpegLoader = new wxJPEGHandler(); // wxImage::AddHandler(jpegLoader); // bmp.LoadFile("vo.jpg", wxBITMAP_TYPE_JPEG); /* Connect(ID_CHECKBOX, wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(CheckBox::OnToggle)); Centre(); */ /* wxMenu *menuFile = new wxMenu; menuFile->Append( ID_About, _("&About...") ); menuFile->AppendSeparator(); menuFile->Append( ID_Quit, _("E&xit") ); wxMenuBar *menuBar = new wxMenuBar; menuBar->Append( menuFile, _("&File") ); SetMenuBar( menuBar ); */ CreateStatusBar(); SetStatusText( _("openSMILE status GUI.") ); } /* void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { Close(true); } void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxMessageBox( _("This is a wxWidgets Hello world sample"), _("About Hello World"), wxOK | wxICON_INFORMATION, this ); } */ //IMPLEMENT_APP(MyApp) //----- cExampleGuipluginSink::cExampleGuipluginSink(const char *_name) : cDataSink(_name), fHandle(NULL) { // ... } void cExampleGuipluginSink::fetchConfig() { cDataSink::fetchConfig(); filename = getStr("filename"); SMILE_DBG(2,"filename = '%s'",filename); lag = getInt("lag"); SMILE_DBG(2,"lag = %i",lag); } /* int cExampleGuipluginSink::myConfigureInstance() { return cDataSink::myConfigureInstance(); } */ SMILE_THREAD_RETVAL wxAppThreadRunner(void *_data) { if (_data != NULL) { cExampleGuipluginSink *obj = (cExampleGuipluginSink*)_data; obj->pApp = new MyApp(); wxApp::SetInstance(obj->pApp); wxEntry(0, NULL); } SMILE_THREAD_RET; } int cExampleGuipluginSink::myFinaliseInstance() { // FIRST call cDataSink myFinaliseInstance, this will finalise our dataWriter... int ret = cDataSink::myFinaliseInstance(); /* if that was SUCCESSFUL (i.e. ret == 1), then do some stuff like loading models or opening output files: */ if ((ret)&&(filename != NULL)) { fHandle = fopen(filename,"w"); if (fHandle == NULL) { SMILE_IERR(1,"failed to open file '%s' for writing!",filename); COMP_ERR("aborting"); //return 0; } } //fo = new openSmilePluginGUI::TestForm(); //IMPLEMENT_APP_NO_MAIN(appname) if (!(int)smileThreadCreate(guiThr, wxAppThreadRunner, this)) { SMILE_ERR(1,"error creating GUI thread!!"); } return ret; } int cExampleGuipluginSink::myTick(long long t) { SMILE_DBG(4,"tick # %i, reading value vector:",t); cVector *vec= reader->getFrameRel(lag); //new cVector(nValues+1); if (vec == NULL) return 0; //else reader->nextFrame(); long vi = vec->tmeta->vIdx; double tm = vec->tmeta->time; // update VA status in GUI.... // pApp->AddPendingEvent(); // notify the main thread if ((int)(vec->dataF[0]) != old) { old = (int)(vec->dataF[0]); wxCommandEvent myevent(wxEVT_COMMAND_TEXT_UPDATED, VAD_UPDATE_ID); myevent.SetInt((int)(vec->dataF[0])); // pass some data along the event, a number in this case pApp->mframe->GetEventHandler()->AddPendingEvent( myevent ); } /* // now print the vector: int i; for (i=0; iN; i++) { //SMILE_PRINT(" (a=%i vi=%i, tm=%fs) %s.%s = %f",reader->getCurR(),vi,tm,reader->getLevelName(),vec->name(i),vec->dataF[i]); printf(" %s.%s = %f\n",reader->getLevelName(),vec->name(i),vec->dataF[i]); } if (fHandle != NULL) { for (i=0; iN; i++) { fprintf(fHandle, "%s = %f\n",vec->name(i),vec->dataF[i]); } } */ // tick success return 1; } cExampleGuipluginSink::~cExampleGuipluginSink() { if (fHandle != NULL) { fclose(fHandle); } } ================================================ FILE: plugindev/exampleGuipluginSink.hpp ================================================ /*F*************************************************************************** * * openSMILE - the Munich open source Multimedia Interpretation by * Large-scale Extraction toolkit * * This file is part of openSMILE. * * openSMILE is copyright (c) by audEERING GmbH. All rights reserved. * * See file "COPYING" for details on usage rights and licensing terms. * By using, copying, editing, compiling, modifying, reading, etc. this * file, you agree to the licensing terms in the file COPYING. * If you do not agree to the licensing terms, * you must immediately destroy all copies of this file. * * THIS SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, * IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST * INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE * OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL * ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS * DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. * NEITHER TUM NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY * DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE AGREEMENT, INCLUDING * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE * MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. * ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE * THE SOFTWARE OR DERIVATIVE WORKS. * * Main authors: Florian Eyben, Felix Weninger, * Martin Woellmer, Bjoern Schuller * * Copyright (c) 2008-2013, * Institute for Human-Machine Communication, * Technische Universitaet Muenchen, Germany * * Copyright (c) 2013-2015, * audEERING UG (haftungsbeschraenkt), * Gilching, Germany * * Copyright (c) 2016, * audEERING GmbH, * Gilching Germany ***************************************************************************E*/ /* openSMILE component: example dataSink: reads data from data memory and outputs it to console/logfile (via smileLogger) this component is also useful for debugging */ #ifndef __CEXAMPLEGUIPLUGINSINK_HPP #define __CEXAMPLEGUIPLUGINSINK_HPP #include #include #include #define COMPONENT_DESCRIPTION_CEXAMPLEGUIPLUGINSINK "This is an example of a cDataSink descendant. It reads data from the data memory and prints it to the console. This component is intended as a template for developers." #define COMPONENT_NAME_CEXAMPLEGUIPLUGINSINK "cExampleGuipluginSink" #undef class #include class wxImagePanel : public wxPanel { wxBitmap image; public: bool showImg; wxImagePanel(wxFrame* parent, wxString file, wxBitmapType format); void paintEvent(wxPaintEvent & evt); void paintNow(); void render(wxDC& dc); DECLARE_EVENT_TABLE() }; // the ID we'll use to identify our event const int VAD_UPDATE_ID = 100000; class MyFrame: public wxFrame { //wxBitmap bmp; wxImagePanel * drawPane; wxCheckBox *m_cb; public: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size); /* void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event);*/ // this is called when the event from the thread is received void onVadUpdate(wxCommandEvent& evt) { // get the number sent along the event and use it to update the GUI if (evt.GetInt()==1) { //m_cb->SetValue( true ); drawPane->showImg = true; drawPane->paintNow(); } else { //m_cb->SetValue( false ); drawPane->showImg = false; drawPane->paintNow(); } } DECLARE_EVENT_TABLE() }; class MyApp: public wxApp { virtual bool OnInit(); public: MyFrame * mframe; }; class cExampleGuipluginSink : public cDataSink { private: const char *filename; FILE * fHandle; int lag; //wxCommandEvent &myevent; //( wxEVT_COMMAND_TEXT_UPDATED, VAD_UPDATE_ID ); int old; smileThread guiThr; //gcroot fo; protected: SMILECOMPONENT_STATIC_DECL_PR virtual void fetchConfig(); //virtual int myConfigureInstance(); virtual int myFinaliseInstance(); virtual int myTick(long long t); public: SMILECOMPONENT_STATIC_DECL MyApp* pApp; cExampleGuipluginSink(const char *_name); virtual ~cExampleGuipluginSink(); }; #endif // __CEXAMPLEGUIPLUGINSINK_HPP ================================================ FILE: plugindev/m4/find_pthread.m4 ================================================ # from http://autoconf-archive.cryp.to/acx_pthread.html # Copyright © 2008 Steven G. Johnson # This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. # You should have received a copy of the GNU General Public License along with this program. If not, see . # As a special exception, the respective Autoconf Macro's copyright owner gives unlimited permission to copy, distribute and modify the configure scripts that are the output of Autoconf when processing the Macro. You need not follow the terms of the GNU General Public License when using or distributing such scripts, even though portions of the text of the Macro appear in them. The GNU General Public License (GPL) does govern all other use of the material that constitutes the Autoconf Macro. # This special exception to the GPL applies to versions of the Autoconf Macro released by the Autoconf Macro Archive. When you make and distribute a modified version of the Autoconf Macro, you may extend this special exception to the GPL to apply to your modified version as well. AC_DEFUN([ACX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_SAVE AC_LANG_C acx_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes) AC_MSG_RESULT($acx_pthread_ok) if test x"$acx_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. acx_pthread_flags="pthreads none -Kthread -kthread lthread pthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case "${host_cpu}-${host_os}" in *solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" ;; esac if test x"$acx_pthread_ok" = xno; then for flag in $acx_pthread_flags; do case $flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; -*) AC_MSG_CHECKING([whether pthreads work with $flag]) PTHREAD_CFLAGS="$flag" ;; pthread-config) AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) if test x"$acx_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) AC_MSG_CHECKING([for the pthreads library -l$flag]) PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. AC_TRY_LINK([#include ], [pthread_t th; pthread_join(th, 0); pthread_attr_init(0); pthread_cleanup_push(0, 0); pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], [acx_pthread_ok=yes]) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" AC_MSG_RESULT($acx_pthread_ok) if test "x$acx_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$acx_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. AC_MSG_CHECKING([for joinable pthread attribute]) attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do AC_TRY_LINK([#include ], [int attr=$attr; return attr;], [attr_name=$attr; break]) done AC_MSG_RESULT($attr_name) if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, [Define to necessary symbol if this constant uses a non-standard name on your system.]) fi AC_MSG_CHECKING([if more special flags are required for pthreads]) flag=no case "${host_cpu}-${host_os}" in *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; esac AC_MSG_RESULT(${flag}) if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: must compile with xlc_r or cc_r if test x"$GCC" != xyes; then AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC}) else PTHREAD_CC=$CC fi else PTHREAD_CC="$CC" fi AC_SUBST([PTHREAD_LIBS]) AC_SUBST([PTHREAD_CFLAGS]) AC_SUBST([PTHREAD_CC]) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$acx_pthread_ok" = xyes; then ifelse([$1],,AC_DEFINE([HAVE_PTHREAD],1,[Define if you have POSIX threads libraries and header files.]),[$1]) : else acx_pthread_ok=no $2 fi AC_LANG_RESTORE ])dnl ACX_PTHREAD ================================================ FILE: plugindev/m4/opensmile.m4 ================================================ AC_DEFUN([CHECK_HAVE_OPENSMILELIB], [ # Ask user for path to libmysqlclient stuff:. AC_ARG_WITH(opensmilelib, [ --with-opensmilelib= prefix of opensmile build directory. e.g. /home/myname/opensmile], [OPENSMILELIB_PREFIX=$with_opensmilelib], AC_MSG_ERROR([You must call configure with the --with-opensmilelib option. This tells configure where to find the opensmilelib library and headers necessary for building the plugin.]) ) AC_SUBST(OPENSMILELIB_PREFIX) OPENSMILELIB_LIBS="-L${OPENSMILELIB_PREFIX}/.libs -lopensmile" OPENSMILELIB_CFLAGS="-I${OPENSMILELIB_PREFIX}/src" AC_SUBST(OPENSMILELIB_LIBS) AC_SUBST(OPENSMILELIB_CFLAGS) ]); ================================================ FILE: plugindev/plug_exampleSink.cpp ================================================ /*F*************************************************************************** * * openSMILE - the Munich open source Multimedia Interpretation by * Large-scale Extraction toolkit * * This file is part of openSMILE. * * openSMILE is copyright (c) by audEERING GmbH. All rights reserved. * * See file "COPYING" for details on usage rights and licensing terms. * By using, copying, editing, compiling, modifying, reading, etc. this * file, you agree to the licensing terms in the file COPYING. * If you do not agree to the licensing terms, * you must immediately destroy all copies of this file. * * THIS SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, * IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST * INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE * OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL * ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS * DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. * NEITHER TUM NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY * DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE AGREEMENT, INCLUDING * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE * MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. * ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE * THE SOFTWARE OR DERIVATIVE WORKS. * * Main authors: Florian Eyben, Felix Weninger, * Martin Woellmer, Bjoern Schuller * * Copyright (c) 2008-2013, * Institute for Human-Machine Communication, * Technische Universitaet Muenchen, Germany * * Copyright (c) 2013-2015, * audEERING UG (haftungsbeschraenkt), * Gilching, Germany * * Copyright (c) 2016, * audEERING GmbH, * Gilching Germany ***************************************************************************E*/ /* openSMILE component: example dataSink writes data to data memory... */ #include #define MODULE "cExampleSinkPlugin" SMILECOMPONENT_STATICS(cExampleSinkPlugin) SMILECOMPONENT_REGCOMP(cExampleSinkPlugin) { SMILECOMPONENT_REGCOMP_INIT scname = COMPONENT_NAME_CEXAMPLESINK; sdescription = COMPONENT_DESCRIPTION_CEXAMPLESINK; // we inherit cDataSink configType and extend it: SMILECOMPONENT_INHERIT_CONFIGTYPE("cDataSink") SMILECOMPONENT_IFNOTREGAGAIN( ct->setField("filename","file to dump values to","dump.txt"); ct->setField("lag","output data frames behind",0); ) SMILECOMPONENT_MAKEINFO(cExampleSinkPlugin); } SMILECOMPONENT_CREATE(cExampleSinkPlugin) //----- cExampleSinkPlugin::cExampleSinkPlugin(const char *_name) : cDataSink(_name) { // ... printf("I'm here...\n"); } void cExampleSinkPlugin::fetchConfig() { cDataSink::fetchConfig(); printf("I'm here in fetchConfig...\n"); filename = getStr("filename"); printf("filename=%s\n",filename); printf("log=%i\n",(long)&smileLog); smileLog.message(FMT("test"), 2, "cYEAH"); SMILE_DBG(2,"filename = '%s'",filename); lag = getInt("lag"); SMILE_DBG(2,"lag = %i",lag); } /* int cExampleSink::myConfigureInstance() { int ret=1; ret *= cDataSink::myConfigureInstance(); // .... //return ret; } */ /* int cExampleSink::myFinaliseInstance() { int ret=1; ret *= cDataSink::myFinaliseInstance(); // .... //return ret; } */ int cExampleSinkPlugin::myTick(long long t) { SMILE_DBG(4,"tick # %i, reading value vector:",t); cVector *vec= reader->getFrameRel(lag); //new cVector(nValues+1); if (vec == NULL) return 0; else reader->nextFrame(); long vi = vec->tmeta->vIdx; double tm = vec->tmeta->time; // now print the vector: SMILE_IMSG(2,"FUCKING AWSOME PLUGIN OUTPUT:"); int i; for (i=0; iN; i++) { printf(" (a=%i vi=%i, tm=%fs) %s.%s = %f\n",reader->getCurR(),vi,tm,reader->getLevelName(),vec->name(i),vec->dataF[i]); } // SMILE_PRINT("%i",var1,) // tick success return 1; } cExampleSinkPlugin::~cExampleSinkPlugin() { // ... } ================================================ FILE: plugindev/plug_exampleSink.hpp ================================================ /*F*************************************************************************** * * openSMILE - the Munich open source Multimedia Interpretation by * Large-scale Extraction toolkit * * This file is part of openSMILE. * * openSMILE is copyright (c) by audEERING GmbH. All rights reserved. * * See file "COPYING" for details on usage rights and licensing terms. * By using, copying, editing, compiling, modifying, reading, etc. this * file, you agree to the licensing terms in the file COPYING. * If you do not agree to the licensing terms, * you must immediately destroy all copies of this file. * * THIS SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, * IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST * INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE * OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL * ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS * DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. * NEITHER TUM NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY * DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE AGREEMENT, INCLUDING * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE * MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. * ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE * THE SOFTWARE OR DERIVATIVE WORKS. * * Main authors: Florian Eyben, Felix Weninger, * Martin Woellmer, Bjoern Schuller * * Copyright (c) 2008-2013, * Institute for Human-Machine Communication, * Technische Universitaet Muenchen, Germany * * Copyright (c) 2013-2015, * audEERING UG (haftungsbeschraenkt), * Gilching, Germany * * Copyright (c) 2016, * audEERING GmbH, * Gilching Germany ***************************************************************************E*/ /* openSMILE component: example plugin: data sink example */ #ifndef __EXAMPLE_SINK_HPP #define __EXAMPLE_SINK_HPP #include #include #include #define COMPONENT_DESCRIPTION_CEXAMPLESINK "dataSink example, read data and prints it to screen" #define COMPONENT_NAME_CEXAMPLESINK "cExampleSinkPlugin" // add this for plugins to compile properly in MSVC++ #ifdef SMILEPLUGIN #ifdef class #undef class #endif #endif class cExampleSinkPlugin : public cDataSink { private: /* static cConfigManager *sconfman; static const char *cname; // name of component object type static const char *description;*/ const char *filename; int lag; protected: SMILECOMPONENT_STATIC_DECL_PR virtual void fetchConfig(); //virtual int myConfigureInstance(); //virtual int myFinaliseInstance(); virtual int myTick(long long t); public: //static sComponentInfo * registerComponent(cConfigManager *_confman); //static cSmileComponent * create(const char *_instname); SMILECOMPONENT_STATIC_DECL cExampleSinkPlugin(const char *_name); virtual ~cExampleSinkPlugin(); }; #endif // __EXAMPLE_SINK_HPP ================================================ FILE: plugindev/pluginGuiMain.cpp ================================================ /*F*************************************************************************** * * openSMILE - the Munich open source Multimedia Interpretation by * Large-scale Extraction toolkit * * This file is part of openSMILE. * * openSMILE is copyright (c) by audEERING GmbH. All rights reserved. * * See file "COPYING" for details on usage rights and licensing terms. * By using, copying, editing, compiling, modifying, reading, etc. this * file, you agree to the licensing terms in the file COPYING. * If you do not agree to the licensing terms, * you must immediately destroy all copies of this file. * * THIS SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, * IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST * INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE * OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL * ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS * DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. * NEITHER TUM NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY * DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE AGREEMENT, INCLUDING * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE * MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. * ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE * THE SOFTWARE OR DERIVATIVE WORKS. * * Main authors: Florian Eyben, Felix Weninger, * Martin Woellmer, Bjoern Schuller * * Copyright (c) 2008-2013, * Institute for Human-Machine Communication, * Technische Universitaet Muenchen, Germany * * Copyright (c) 2013-2015, * audEERING UG (haftungsbeschraenkt), * Gilching, Germany * * Copyright (c) 2016, * audEERING GmbH, * Gilching Germany ***************************************************************************E*/ /* openSMILE plugin loader */ #include #include #include //++ include all your component headers here: ---------------- #include #include #include //++ --------------------------------------------------------- // dll export for msvc++ #ifdef _MSC_VER #define DLLEXPORT_P __declspec(dllexport) #else #define DLLEXPORT_P #endif #define MODULE "pluginLoader" static DLLLOCAL const registerFunction complist[] = { //++ add your component register functions here: ------------- cExampleGuipluginSink::registerComponent, cSimpleVisualiserGUI::registerComponent, cClassifierResultGUI::registerComponent, //++ --------------------------------------------------------- NULL // last element must always be NULL to terminate the list !! }; sComponentInfo *master=NULL; //Library: extern "C" DLLEXPORT_P sComponentInfo * registerPluginComponent(cConfigManager *_confman, cComponentManager *_compman) { registerFunction f; sComponentInfo *cur = NULL, *last = NULL; int i=0; f = complist[i]; while (f!=NULL) { cur = (f)(_confman, _compman); cur->next = NULL; if (i==0) master = cur; else { last->next = cur; } last = cur; f=complist[++i]; } return master; } /*extern "C" DLLEXPORT_P sComponentInfo * registerPluginComponent(cConfigManager *_confman, cComponentManager *_compman) { return (sComponentInfo *)complist; }*/ // this function frees all memory allocated within the scope of the dll ... extern "C" DLLEXPORT_P void unRegisterPluginComponent() { while (master != NULL) { sComponentInfo *tmp = master; if (master->next != NULL) master = master->next; delete tmp; } } ================================================ FILE: plugindev/pluginMain.cpp ================================================ /*F*************************************************************************** * * openSMILE - the Munich open source Multimedia Interpretation by * Large-scale Extraction toolkit * * This file is part of openSMILE. * * openSMILE is copyright (c) by audEERING GmbH. All rights reserved. * * See file "COPYING" for details on usage rights and licensing terms. * By using, copying, editing, compiling, modifying, reading, etc. this * file, you agree to the licensing terms in the file COPYING. * If you do not agree to the licensing terms, * you must immediately destroy all copies of this file. * * THIS SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, * IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST * INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE * OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL * ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS * DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. * NEITHER TUM NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY * DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE AGREEMENT, INCLUDING * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE * MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. * ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE * THE SOFTWARE OR DERIVATIVE WORKS. * * Main authors: Florian Eyben, Felix Weninger, * Martin Woellmer, Bjoern Schuller * * Copyright (c) 2008-2013, * Institute for Human-Machine Communication, * Technische Universitaet Muenchen, Germany * * Copyright (c) 2013-2015, * audEERING UG (haftungsbeschraenkt), * Gilching, Germany * * Copyright (c) 2016, * audEERING GmbH, * Gilching Germany ***************************************************************************E*/ /* openSMILE plugin loader */ #include #include #include //++ include all your component headers here: ---------------- #include //++ --------------------------------------------------------- // dll export for msvc++ #ifdef _MSC_VER #define DLLEXPORT_P __declspec(dllexport) #else #define DLLEXPORT_P #endif #define MODULE "pluginLoader" static DLLLOCAL const registerFunction complist[] = { //++ add your component register functions here: ------------- cExampleSinkPlugin::registerComponent, //++ --------------------------------------------------------- NULL // last element must always be NULL to terminate the list !! }; //Library: extern "C" DLLEXPORT_P sComponentInfo * registerPluginComponent(cConfigManager *_confman, cComponentManager *_compman) { registerFunction f; sComponentInfo *master=NULL; sComponentInfo *cur = NULL, *last = NULL; int i=0; f = complist[i]; while (f!=NULL) { cur = (f)(_confman, _compman); cur->next = NULL; if (i==0) master = cur; else { last->next = cur; } last = cur; f=complist[++i]; } return master; } ================================================ FILE: plugindev/simpleVisualiserGUI.cpp ================================================ /*F*************************************************************************** * * openSMILE - the Munich open source Multimedia Interpretation by * Large-scale Extraction toolkit * * This file is part of openSMILE. * * openSMILE is copyright (c) by audEERING GmbH. All rights reserved. * * See file "COPYING" for details on usage rights and licensing terms. * By using, copying, editing, compiling, modifying, reading, etc. this * file, you agree to the licensing terms in the file COPYING. * If you do not agree to the licensing terms, * you must immediately destroy all copies of this file. * * THIS SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, * IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST * INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE * OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL * ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS * DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. * NEITHER TUM NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY * DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE AGREEMENT, INCLUDING * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE * MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. * ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE * THE SOFTWARE OR DERIVATIVE WORKS. * * Main authors: Florian Eyben, Felix Weninger, * Martin Woellmer, Bjoern Schuller * * Copyright (c) 2008-2013, * Institute for Human-Machine Communication, * Technische Universitaet Muenchen, Germany * * Copyright (c) 2013-2015, * audEERING UG (haftungsbeschraenkt), * Gilching, Germany * * Copyright (c) 2016, * audEERING GmbH, * Gilching Germany ***************************************************************************E*/ /* openSMILE component: example dataSink: reads data from data memory and outputs it to console/logfile (via smileLogger) this component is also useful for debugging */ #include #define MODULE "cSimpleVisualiserGUI" SMILECOMPONENT_STATICS(cSimpleVisualiserGUI) SMILECOMPONENT_REGCOMP(cSimpleVisualiserGUI) { SMILECOMPONENT_REGCOMP_INIT scname = COMPONENT_NAME_CSIMPLEVISUALISERGUI; sdescription = COMPONENT_DESCRIPTION_CSIMPLEVISUALISERGUI; // we inherit cDataSink configType and extend it: SMILECOMPONENT_INHERIT_CONFIGTYPE("cDataSink") SMILECOMPONENT_IFNOTREGAGAIN( //ct->setField("filename","The name of a text file to dump values to (this file will be overwritten, if it exists)",(const char *)NULL); //ct->setField("lag","Output data frames behind",0,0,0); ct->setField("action","type of visualisation action to perform: moving2dplot, movingMatplot","moving2dplot"); ct->setField("inputs","array that selects the inputs to plot (by name!) (see inputsIdx for listing them by index in the input vector)",(const char*)NULL,ARRAY_TYPE); ct->setField("inputsIdx","array that selects the inputs to plot by index in the input vector",0,ARRAY_TYPE); ct->setField("fullVectorAsInput","don't select individual elements, use full input vector for plotting (this is especially useful for matrix plots)",0); ct->setField("inputScale","scale factor for each input element",1.0,ARRAY_TYPE); ct->setField("inputscaleFullinput","scale factor for all fields when fullVectorAsInput=1.",1.0); ct->setField("inputoffsetFullinput","additive offset for all fields when fullVectorAsInput=1.",0.0); ct->setField("inputOffset","additive offset for each input element (the offset is applied before the scaling: y=(x+offset)*scale ",0.0,ARRAY_TYPE); ct->setField("inputColours","array that configures the plot colours for each input element.",(const char*)NULL,ARRAY_TYPE); ct->setField("matMultiplier","number of times to repeat each line in a mat-plot, use this to zoom in on the y axis",1); ) SMILECOMPONENT_MAKEINFO(cSimpleVisualiserGUI); } //SMILECOMPONENT_CREATE(cSimpleVisualiserGUI) cSmileComponent * cSimpleVisualiserGUI::create(const char*_instname) { cSmileComponent *c = new cSimpleVisualiserGUI(_instname); if (c!=NULL) c->setComponentInfo(sconfman,COMPONENT_NAME_CSIMPLEVISUALISERGUI,COMPONENT_DESCRIPTION_CSIMPLEVISUALISERGUI); return c; } //--- wx --- wxRtplotPanel::wxRtplotPanel(wxFrame* parent) : wxPanel(parent), lastT(0),curT(0), //curval(0),lastval(0) paintEventCur(NULL),paintEventLast(NULL) { } /* * Called by the system of by wxWidgets when the panel needs * to be redrawn. You can also trigger this call by * calling Refresh()/Update(). */ void wxRtplotPanel::paintEvent(wxPaintEvent & evt) { // depending on your system you may need to look at double-buffered dcs wxPaintDC dc(this); render(dc); } /* * Alternatively, you can use a clientDC to paint on the panel * at any time. Using this generally does not free you from * catching paint events, since it is possible that e.g. the window * manager throws away your drawing when the window comes to the * background, and expects you will redraw it when the window comes * back (by sending a paint event). */ void wxRtplotPanel::paintNow() { // depending on your system you may need to look at double-buffered dcs wxClientDC dc(this); render(dc); } /* * Here we do the actual rendering. I put it in a separate * method so that it can work no matter what type of DC * (e.g. wxPaintDC or wxClientDC) is used. */ void wxRtplotPanel::render(wxDC& dc) { smileMutexLock(wxMtx); int action; if (showImg && paintEventCur != NULL) { action = paintEventCur->action; } else { return; } smileMutexUnlock(wxMtx); switch (action) { case VIS_ACT_MOVINGMATPLOT: renderMovingMatPlot(dc); break; case VIS_ACT_MOVING2DPLOT: default: renderMoving2dPlot(dc); } } void wxRtplotPanel::renderMoving2dPlot(wxDC& dc) { smileMutexLock(wxMtx); if (showImg && paintEventCur != NULL) { ////// draw the plot from the plot data if (curT == 0) dc.Clear(); int coord0x = 50; int coord0y = 350; int coordWidth = 600; int coordHeight = 300; // background dc.FloodFill(1,1,wxColour("white"),wxFLOOD_BORDER); // axes dc.DrawLine(coord0x,coord0y-coordHeight,coord0x,coord0y+10); dc.DrawLine(coord0x-10,coord0y,coord0x+coordWidth+20,coord0y); // axes arrows dc.DrawLine(coord0x,coord0y-coordHeight,coord0x+10,coord0y-coordHeight+10); dc.DrawLine(coord0x,coord0y-coordHeight,coord0x-10,coord0y-coordHeight+10); if (paintEventCur->names != NULL && paintEventCur->names[0] != NULL) { dc.DrawText(paintEventCur->names[0],coord0x-20,coord0y-coordHeight-30); } else { dc.DrawText("value",coord0x-20,coord0y-coordHeight-30); } dc.DrawLine(coord0x+coordWidth+20,coord0y,coord0x+coordWidth+10,coord0y-10); dc.DrawLine(coord0x+coordWidth+20,coord0y,coord0x+coordWidth+10,coord0y+10); dc.DrawText("t / sec.",coord0x+coordWidth+15,coord0y+20); // axes ticks int i; for (i=0; i<=(coordWidth / 100); i++) { // t axis dc.DrawLine(coord0x+i*100,coord0y-5,coord0x+i*100,coord0y+5); char * x = myvprint("%i",i); if (x!=NULL) { dc.DrawText(x,coord0x+i*100-5,coord0y+20); free(x); } } for (i=0; i<(coordHeight / 100); i++) { // y axis dc.DrawLine(coord0x-5,coord0y-i*100,coord0x+5,coord0y-i*100); FLOAT_DMEM tv = (FLOAT_DMEM)i*paintEventCur->scale0 + paintEventCur->offset0; char * x; if ((tv < 1.0)&&(tv>-1.0)) { if (tv == 0.0) x = myvprint("0.0"); else x = myvprint("%.3f",tv); } else { if ((tv < 100.0)&&(tv >-100.0)) { x = myvprint("%.2f",tv); } else { x = myvprint("%i",(int)tv); } } if (x!=NULL) { dc.DrawText(x,5,coord0y-i*100); free(x); } } // TODO: save the axes and background as bitmap, and only plot bitmap // data curve(s) //int i; for (i=0; inVals; i++) { int lastval = 0; if (paintEventLast != NULL && paintEventLast->val != NULL) { if (inVals) lastval = paintEventLast->val[i]; } if (paintEventCur->colours != NULL && paintEventCur->colours[i] != NULL) { // there is some kind of bug here... either wrong indicies, or uncaught exceptions dc.SetPen(wxPen(wxColour(paintEventCur->colours[i]),2)); } else { dc.SetPen(wxPen(wxColour("blue"),2)); } if (curT != 0) { dc.DrawLine(coord0x+lastT,coord0y-lastval,coord0x+curT,coord0y-(paintEventCur->val[i])); } } if (paintEventLast != NULL) { delete paintEventLast; } paintEventLast = paintEventCur; lastT = curT; curT = (curT+1)%coordWidth; // TODO: save plot as bitmap for OnPaint event // wxBitmap b = dc.GetAsBitmap(); } else { dc.Clear(); } smileMutexUnlock(wxMtx); } void wxRtplotPanel::renderMovingMatPlot(wxDC& dc) { smileMutexLock(wxMtx); if (showImg && paintEventCur != NULL) { ////// draw the plot from the plot data if (curT == 0) dc.Clear(); int coord0x = 50; int coord0y = 350; int coordWidth = 600; int coordHeight = 300; // background dc.FloodFill(1,1,wxColour("white"),wxFLOOD_BORDER); // axes dc.DrawLine(coord0x,coord0y-coordHeight,coord0x,coord0y+10); dc.DrawLine(coord0x-10,coord0y,coord0x+coordWidth+20,coord0y); // axes arrows dc.DrawLine(coord0x,coord0y-coordHeight,coord0x+10,coord0y-coordHeight+10); dc.DrawLine(coord0x,coord0y-coordHeight,coord0x-10,coord0y-coordHeight+10); if (paintEventCur->names != NULL && paintEventCur->names[0] != NULL) { dc.DrawText(paintEventCur->names[0],coord0x-20,coord0y-coordHeight-30); } else { dc.DrawText("value",coord0x-20,coord0y-coordHeight-30); } dc.DrawLine(coord0x+coordWidth+20,coord0y,coord0x+coordWidth+10,coord0y-10); dc.DrawLine(coord0x+coordWidth+20,coord0y,coord0x+coordWidth+10,coord0y+10); dc.DrawText("t / sec.",coord0x+coordWidth+15,coord0y+20); // axes ticks int i; for (i=0; i<=(coordWidth / 100); i++) { // t axis dc.DrawLine(coord0x+i*100,coord0y-5,coord0x+i*100,coord0y+5); char * x = myvprint("%i",i); if (x!=NULL) { dc.DrawText(x,coord0x+i*100-5,coord0y+20); free(x); } } for (i=0; i<(coordHeight / 100); i++) { // y axis dc.DrawLine(coord0x-5,coord0y-i*100,coord0x+5,coord0y-i*100); FLOAT_DMEM tv = (FLOAT_DMEM)i*paintEventCur->scale0 + paintEventCur->offset0; char * x; if ((tv < 1.0)&&(tv>-1.0)) { if (tv == 0.0) x = myvprint("0.0"); else x = myvprint("%.3f",tv); } else { if ((tv < 100.0)&&(tv >-100.0)) { x = myvprint("%.2f",tv); } else { x = myvprint("%i",(int)tv); } } if (x!=NULL) { dc.DrawText(x,5,coord0y-i*100); free(x); } } // TODO: save the axes and background as bitmap, and only plot bitmap int mu = paintEventCur->matMultiplier; // data curve(s) //int i; for (i=0; inVals,coordHeight); i++) { int v = paintEventCur->val[i]; if (v > 255) v = 255; if (v < 0) v = 0; dc.SetPen(wxPen(wxColour(v,v,v))); if (curT != 0) { if (mu > 1) { dc.DrawLine(coord0x+curT,coord0y-i*mu-1 , coord0x+curT,coord0y-(i+1)*mu-2 ); } else { dc.DrawPoint(coord0x+curT,coord0y-i-1); } } } if (paintEventLast != NULL) { delete paintEventLast; } paintEventLast = paintEventCur; lastT = curT; curT = (curT+1)%coordWidth; // TODO: save plot as bitmap for OnPaint event // wxBitmap b = dc.GetAsBitmap(); } else { dc.Clear(); } smileMutexUnlock(wxMtx); } enum { ID_Quit = 1, ID_About, }; // catch the event from the thread BEGIN_EVENT_TABLE(visFrame, wxFrame) EVT_COMMAND (PLOT_UPDATE_ID, wxEVT_COMMAND_TEXT_UPDATED, visFrame::onPlotUpdate) END_EVENT_TABLE() BEGIN_EVENT_TABLE(wxRtplotPanel, wxPanel) // catch paint events EVT_PAINT(wxRtplotPanel::paintEvent) END_EVENT_TABLE() const int ID_CHECKBOX = 100; bool visApp::OnInit() { // make sure to call this first //wxInitAllImageHandlers(); vframe = new visFrame( _("TUM openSMILE visualiser demo window"), wxPoint(50, 50), wxSize(750, 440), wxMtx ); //vframe->yscale100 = yscale100; vframe->Show(true); SetTopWindow(vframe); return true; } visFrame::visFrame(const wxString& title, const wxPoint& pos, const wxSize& size, smileMutex _wxMtx) : wxFrame(NULL, wxID_ANY, title, pos, size) { drawPane = new wxRtplotPanel( this ); drawPane->wxMtx = _wxMtx; wxMtx = _wxMtx; CreateStatusBar(); SetStatusText( _("openSMILE visualiser GUI.") ); } void visFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { Close(true); } //IMPLEMENT_APP(MyApp) //----- cSimpleVisualiserGUI::cSimpleVisualiserGUI(const char *_name) : cDataSink(_name), inputsIdx(NULL), nInputs(0), inputScale(NULL), inputOffset(NULL), inputNames(NULL), inputColours(NULL), pApp(NULL), terminate(0) { // ... } void cSimpleVisualiserGUI::fetchConfig() { cDataSink::fetchConfig(); /* ct->setField("action","type of visualisation action to perform","movingplot"); ct->setField("inputs","array that selects the inputs to plot (by name!) (see inputsIdx for listing them by index in the input vector)",(const char*)NULL,ARRAY_TYPE); ct->setField("inputsIdx","array */ const char * actStr = getStr("action"); if (!strncmp(actStr,"moving2dplot",12)) { action = VIS_ACT_MOVING2DPLOT; } else if (!strncmp(actStr,"movingMatplot",13)) { action = VIS_ACT_MOVINGMATPLOT; } else { // default action: action = VIS_ACT_MOVING2DPLOT; } fullinput = getInt("fullVectorAsInput"); if (!fullinput) { int i; nInputs = getArraySize("inputs"); if (nInputs <= 0 ) { nInputs = getArraySize("inputsIdx"); if (nInputs <= 0) { SMILE_IERR(1,"either 'inputs' or 'inputsIdx' with at least one element must be set in the config to configure at least on element in the input vector to plot"); COMP_ERR("aborting."); } // read indicies directly from inputsIdx inputsIdx = new int[nInputs]; for (i=0; i 0) { inputScale = new FLOAT_DMEM[nInputs]; inputOffset = new FLOAT_DMEM[nInputs]; inputColours = (const char **)calloc(1,sizeof(const char *)*nInputs); int i; for (i=0; iwxMtx); obj->pApp = new visApp(); obj->pApp->wxMtx = obj->wxMtx; //obj->pApp->yscale100 = obj->yscale100; wxApp::SetInstance(obj->pApp); // we need a mutex / flag here, to notify the main app that our wxApp was created! smileMutexUnlock(obj->wxMtx); wxEntry(0, NULL); smileMutexLock(obj->wxMtx); //delete (obj->pApp); obj->pApp = NULL; obj->terminate = 1; printf("wxwin terminate.\n"); smileMutexUnlock(obj->wxMtx); } SMILE_THREAD_RET; } // TODO: use dataProcessor::findElement, once it is comitted to the openSMILE trunk int cSimpleVisualiserGUI::getElidxFromName(const char *_name) { const FrameMetaInfo * fmeta = reader->getFrameMetaInfo(); int ri; long elIdx=-1; long idx = fmeta->findFieldByPartialName( _name , &ri, NULL ); if (idx < 0) { SMILE_IWRN(2,"Requested input element '*%s*' not found, check your config!",_name); } else { elIdx = fmeta->fieldToElementIdx( idx ) + ri; } return elIdx; } int cSimpleVisualiserGUI::myFinaliseInstance() { // FIRST call cDataSink myFinaliseInstance, this will finalise our dataWriter... int ret = cDataSink::myFinaliseInstance(); int i; if (ret && fullinput) { nInputs = reader->getLevelN(); if (nInputs > 0) { inputNames = (const char**)calloc(1,sizeof(const char *)*nInputs); inputScale = new FLOAT_DMEM[nInputs]; inputOffset = new FLOAT_DMEM[nInputs]; inputsIdx = new int[nInputs]; FLOAT_DMEM scaleAll = getDouble("inputscaleFullinput"); FLOAT_DMEM offsetAll = getDouble("inputoffsetFullinput"); for (i=0; igetElementName(inputsIdx[i]); inputScale[i] = scaleAll; inputOffset[i] = offsetAll; } } } else if (ret && nInputs > 0 ) { inputNames = (const char**)calloc(1,sizeof(const char *)*nInputs); if (inputsIdx == NULL) { inputsIdx = new int[nInputs]; for (i=0; igetElementName(inputsIdx[i]); } } } smileMutexCreate(wxMtx); //yscale100 = 100.0 / inputScale[0]; //fo = new openSmilePluginGUI::TestForm(); //IMPLEMENT_APP_NO_MAIN(appname) if (!(int)smileThreadCreate(guiThr, wxVisAppThreadRunner, this)) { SMILE_ERR(1,"error creating GUI thread!!"); } return ret; } int cSimpleVisualiserGUI::myTick(long long t) { SMILE_DBG(4,"tick # %i, reading value vector:",t); cVector *vec = NULL; if (!terminate) vec= reader->getNextFrame(); if (vec == NULL) return 0; //else reader->nextFrame(); long vi = vec->tmeta->vIdx; double tm = vec->tmeta->time; smileMutexLock(wxMtx); if (pApp == NULL) { smileMutexUnlock(wxMtx); if (terminate) return 0; else return 1; } smileMutexUnlock(wxMtx); // update VA status in GUI.... // pApp->AddPendingEvent(); // notify the main thread int nr = 0; paintDataEvent *pe = new paintDataEvent(nInputs); for (nr = 0; nr= 0) data = vec->dataF[idx]; pe->val[nr] = (int)((data+inputOffset[nr])*inputScale[nr]); } pe->scale0 = 100.0 / inputScale[0]; pe->offset0 = inputOffset[nr]*inputScale[0]; pe->names = inputNames; pe->colours = inputColours; pe->action = action; pe->matMultiplier = matMultiplier; //smileMutexLock(wxMtx); wxCommandEvent myevent(wxEVT_COMMAND_TEXT_UPDATED, PLOT_UPDATE_ID); // myevent.SetInt((int)((data+inputOffset[nr])*inputScale[nr])); // pass some data along the event, a number in this case // myevent.SetString(vec->fmeta->getName(idx)); // TODO: this name is not present when using inputsIdx in the config... myevent.SetClientData(pe); pApp->vframe->GetEventHandler()->AddPendingEvent( myevent ); //smileMutexUnlock(wxMtx); // tick success return 1; } cSimpleVisualiserGUI::~cSimpleVisualiserGUI() { if (inputsIdx != NULL) { delete[] inputsIdx; } if (inputScale != NULL) { delete[] inputScale; } if (inputOffset != NULL) { delete[] inputOffset; } if (inputColours != NULL) { free(inputColours); } if (inputNames != NULL) { free(inputNames); } // TODO: send event to make wxApp terminate smileThreadJoin(guiThr); smileMutexDestroy(wxMtx); } ================================================ FILE: plugindev/simpleVisualiserGUI.hpp ================================================ /*F*************************************************************************** * * openSMILE - the Munich open source Multimedia Interpretation by * Large-scale Extraction toolkit * * This file is part of openSMILE. * * openSMILE is copyright (c) by audEERING GmbH. All rights reserved. * * See file "COPYING" for details on usage rights and licensing terms. * By using, copying, editing, compiling, modifying, reading, etc. this * file, you agree to the licensing terms in the file COPYING. * If you do not agree to the licensing terms, * you must immediately destroy all copies of this file. * * THIS SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, * IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST * INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE * OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL * ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS * DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. * NEITHER TUM NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY * DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE AGREEMENT, INCLUDING * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE * MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. * ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE * THE SOFTWARE OR DERIVATIVE WORKS. * * Main authors: Florian Eyben, Felix Weninger, * Martin Woellmer, Bjoern Schuller * * Copyright (c) 2008-2013, * Institute for Human-Machine Communication, * Technische Universitaet Muenchen, Germany * * Copyright (c) 2013-2015, * audEERING UG (haftungsbeschraenkt), * Gilching, Germany * * Copyright (c) 2016, * audEERING GmbH, * Gilching Germany ***************************************************************************E*/ /* openSMILE component: example dataSink: reads data from data memory and outputs it to console/logfile (via smileLogger) this component is also useful for debugging */ #ifndef __CSIMPLEVISUALISERGUI_HPP #define __CSIMPLEVISUALISERGUI_HPP #include #include #include #define COMPONENT_DESCRIPTION_CSIMPLEVISUALISERGUI "This is an example of a cDataSink descendant. It reads data from the data memory and prints it to the console. This component is intended as a template for developers." #define COMPONENT_NAME_CSIMPLEVISUALISERGUI "cSimpleVisualiserGUI" #undef class class paintDataEvent { public: paintDataEvent(int _nvals=1) : val(NULL) { nVals = _nvals; if (_nvals > 0) { val = new int[_nvals]; } } ~paintDataEvent() { if (val != NULL) delete[] val; } int action; // type of plot int matMultiplier; int nVals; int *val; const char **colours; const char **names; FLOAT_DMEM scale0; FLOAT_DMEM offset0; }; #include class wxRtplotPanel : public wxPanel { //wxBitmap image; public: paintDataEvent *paintEventCur; paintDataEvent *paintEventLast; bool showImg; smileMutex wxMtx; //int curval, lastval; int curT, lastT; //const char * featureName; //FLOAT_DMEM yscale100; wxRtplotPanel(wxFrame* parent); void paintEvent(wxPaintEvent & evt); void paintNow(); void render(wxDC& dc); void renderMoving2dPlot(wxDC& dc); void renderMovingMatPlot(wxDC& dc); DECLARE_EVENT_TABLE() }; // the ID we'll use to identify our event const int PLOT_UPDATE_ID = 100001; class visFrame: public wxFrame { //wxBitmap bmp; wxRtplotPanel * drawPane; wxCheckBox *m_cb; public: //FLOAT_DMEM yscale100; smileMutex wxMtx; visFrame(const wxString& title, const wxPoint& pos, const wxSize& size, smileMutex _wxMtx); void OnQuit(wxCommandEvent& event); /* void OnAbout(wxCommandEvent& event);*/ // this is called when the event from the thread is received void onPlotUpdate(wxCommandEvent& evt) { //int val = evt.GetInt(); // update the plot data (cyclic buffer) smileMutexLock(wxMtx); // replot drawPane->paintEventCur = (paintDataEvent *)evt.GetClientData(); smileMutexUnlock(wxMtx); /* drawPane->yscale100 = yscale100; drawPane->featureName = evt.GetString(); drawPane->curval = val; */ drawPane->showImg = true; drawPane->paintNow(); } DECLARE_EVENT_TABLE() }; class visApp: public wxApp { virtual bool OnInit(); public: //FLOAT_DMEM yscale100; smileMutex wxMtx; visFrame * vframe; }; #define VIS_ACT_MOVING2DPLOT 1 #define VIS_ACT_MOVINGMATPLOT 2 class cSimpleVisualiserGUI : public cDataSink { private: int action; int fullinput; int nInputs; int *inputsIdx; FLOAT_DMEM *inputScale; FLOAT_DMEM *inputOffset; const char **inputNames; const char **inputColours; //wxCommandEvent &myevent; //( wxEVT_COMMAND_TEXT_UPDATED, VAD_UPDATE_ID ); //int old; smileThread guiThr; //gcroot fo; protected: SMILECOMPONENT_STATIC_DECL_PR int getElidxFromName(const char *_name); virtual void fetchConfig(); //virtual int myConfigureInstance(); virtual int myFinaliseInstance(); virtual int myTick(long long t); public: SMILECOMPONENT_STATIC_DECL //FLOAT_DMEM yscale100; int matMultiplier; int terminate; visApp* pApp; smileMutex wxMtx; cSimpleVisualiserGUI(const char *_name); virtual ~cSimpleVisualiserGUI(); }; #endif // __CSIMPLEVISUALISERGUI ================================================ FILE: progsrc/android-template/.gitignore ================================================ *.iml .gradle /local.properties /.idea/workspace.xml /.idea/libraries .DS_Store /build /captures ================================================ FILE: progsrc/android-template/.idea/.name ================================================ openSMILE Android Template ================================================ FILE: progsrc/android-template/.idea/compiler.xml ================================================ ================================================ FILE: progsrc/android-template/.idea/copyright/profiles_settings.xml ================================================ ================================================ FILE: progsrc/android-template/.idea/encodings.xml ================================================ ================================================ FILE: progsrc/android-template/.idea/gradle.xml ================================================ ================================================ FILE: progsrc/android-template/.idea/misc.xml ================================================ ================================================ FILE: progsrc/android-template/.idea/modules.xml ================================================ ================================================ FILE: progsrc/android-template/.idea/runConfigurations.xml ================================================ ================================================ FILE: progsrc/android-template/.idea/vcs.xml ================================================ ================================================ FILE: progsrc/android-template/README_SETUP.TXT ================================================ After checking out from SVN, the following steps might be necessary: 1. edit app/src/main/jni/sync-build-libopensmile.sh and adapt OPENSMILE_DIR to point to your trunk of opensmile 2. if you have not yet run buildAndroid.sh in the opensmile trunk, do so now to fully build the android libs 3. To sync the libs with the app project, do: cd app/src/main/jni sh sync-build-libopensmile.sh 4. open project in android studio 5. Change sdk.dir= ndk.dir= in GradleScripts -> local.properties to your SDK and NDK locations. (take a NDK version _NOT_ higher than ndk-r10e-rc4) 6. Edit the OPENSMILE path in app/src/main/jni/Android.mk 7. Edit the ndk-build command (and path) in app/build.gradle or better: add the NDK directory to your system path and then use 'ndk-build' as command 8. Copy openSMILE configs and models to app/src/assets. Load these by specifying them in app/src/plugins/Config.scala. 9. For a new GUI application, create a new SmilePlugin within app/src/scala/.../plugins See the existing example and config code and respective documentation there. 10. If you want to do something different than just showing some live openSMILE output, take a look at the following classes and respective methods: - src/scala/.../MainActivity.scala -> SmileThread & onSmileMessageReceived() - src/java/.../SmileJNI.java -> interface Listener & registerListener() ================================================ FILE: progsrc/android-template/app/.gitignore ================================================ /build ================================================ FILE: progsrc/android-template/app/build.gradle ================================================ apply plugin: 'com.android.application' apply plugin: "jp.leafytree.android-scala" android { compileSdkVersion 23 buildToolsVersion "22.0.1" defaultConfig { applicationId "com.audeering.opensmile.androidtemplate" minSdkVersion 21 targetSdkVersion 23 versionCode 1 versionName "1.0" multiDexEnabled true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main { scala { srcDir "src/main/scala" } jniLibs.srcDir 'src/main/libs' jni.srcDirs = [] //disable automatic ndk-build call } androidTest { scala { srcDir "src/androidTest/scala" } } } project.ext.versionCodes = ['armeabi': 1] //versionCode digit for each supported ABI, with 64bit>32bit and x86>armeabi-* android.applicationVariants.all { variant -> // assign different version code for each output variant.outputs.each { output -> output.versionCodeOverride = project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0) * 1000000 + defaultConfig.versionCode } } // call regular ndk-build(.cmd) script from app directory task ndkBuild(type: Exec) { commandLine '/path/to/android/ndk-r10e/ndk-build', 'NDK_DEBUG=1', 'TARGET_PLATFORM=android-21', '-C', file('src/main').absolutePath } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn ndkBuild } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.4.0' compile 'org.scala-lang:scala-library:2.11.7' compile 'org.json:json:20160212' compile 'javax.vecmath:vecmath:1.5.2' } ================================================ FILE: progsrc/android-template/app/proguard-rules.pro ================================================ # Add project specific ProGuard rules here. # By default, the flags in this file are appended to flags specified # in /home/gerry/Android/Sdk/tools/proguard/proguard-android.txt # You can edit the include path and order by changing the proguardFiles # directive in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # Add any project specific keep options here: # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} ================================================ FILE: progsrc/android-template/app/src/androidTest/java/com/audeering/opensmile/androidtemplate/ApplicationTest.java ================================================ package com.audeering.opensmile.androidtemplate; import android.app.Application; import android.test.ApplicationTestCase; /** * Testing Fundamentals */ public class ApplicationTest extends ApplicationTestCase { public ApplicationTest() { super(Application.class); } } ================================================ FILE: progsrc/android-template/app/src/main/AndroidManifest.xml ================================================ ================================================ FILE: progsrc/android-template/app/src/main/assets/BufferModeRb.conf.inc ================================================ writer.levelconf.growDyn = 0 writer.levelconf.isRb = 1 writer.levelconf.nT = 10 writer.levelconf.noHang = 2 ================================================ FILE: progsrc/android-template/app/src/main/assets/features.conf.inc ================================================ // This file is part of openSMILE. // (c) 2016 by audEERING GmbH. All rights reserved. // See file COPYING for details on licensing terms. // // Written by Florian Eyben. fe@audeering.com [componentInstances:cComponentManager] instance[framesB].type=cFramer instance[energyMeter].type=cEnergy instance[winB].type=cWindower instance[fftB].type=cTransformFFT instance[fftmagB].type=cFFTmagphase instance[bandspec].type=cMelspec [framesB:cFramer] reader.dmLevel = wave writer.dmLevel = framesB \{\cm[bufferModeRbConf{BufferModeRb.conf.inc}:buffer mode for pre-functionals levels]} frameSize = 0.025 frameStep = 0.010 [energyMeter:cEnergy] reader.dmLevel=framesB writer.dmLevel=energyB log=1 rms=0 ebiasLog = 30 escaleLog = 12 [winB:cWindower] reader.dmLevel=framesB writer.dmLevel=windowsB copyInputName = 1 processArrayFields = 1 ; hamming window winFunc = ham [fftB:cTransformFFT] reader.dmLevel=windowsB writer.dmLevel=fftB copyInputName = 1 processArrayFields = 1 inverse = 0 [fftmagB:cFFTmagphase] reader.dmLevel=fftB writer.dmLevel=fftmagB copyInputName = 1 processArrayFields = 1 inverse = 0 magnitude = 1 phase = 0 [fftmagBphase:cFFTmagphase] reader.dmLevel=fftB writer.dmLevel=fftmagBphase copyInputName = 1 processArrayFields = 1 inverse = 0 magnitude = 0 phase = 1 [bandspec:cMelspec] reader.dmLevel=fftmagB writer.dmLevel=melspec copyInputName = 1 processArrayFields = 1 htkcompatible = 0 nBands = 3 usePower = 1 lofreq = 0 hifreq = 8000 specScale = bark inverse = 0 ================================================ FILE: progsrc/android-template/app/src/main/assets/liveinput_android.conf ================================================ // This file is part of openSMILE. // (c) 2016 by audEERING GmbH. All rights reserved. // See file COPYING for details on licensing terms. // // Written by Florian Eyben. fe@audeering.com [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory instance[waveIn].type=cOpenslesSource instance[jniMessageInterface].type = cJniMessageInterface printLevelStats = 5 profiling = 0 nThreads = 1 [waveIn:cOpenslesSource] writer.dmLevel=wave monoMixdown = 0 writer.levelconf.growDyn = 0 writer.levelconf.isRb = 1 writer.levelconf.nT = 32000 sampleRate = 16000 nBits = 16 channels = 1 audioBuffersize = 256 \{features.conf.inc} \{messages.conf.inc} [jniMessageInterface:cJniMessageInterface] sendMessagesInTick = 1 JNIcallbackClass = com/audeering/opensmile/androidtemplate/SmileJNI JNIstringReceiverMethod = receiveText ================================================ FILE: progsrc/android-template/app/src/main/assets/messages.conf.inc ================================================ // This file is part of openSMILE. // (c) 2016 by audEERING GmbH. All rights reserved. // See file COPYING for details on licensing terms. // // Written by Florian Eyben. fe@audeering.com [componentInstances:cComponentManager] instance[bandEnergy].type=cSimpleMessageSender [bandEnergy:cSimpleMessageSender] reader.dmLevel = melspec;energyB sendPeriodically = 2 messageName = energy_act messageType = energy messageRecp = jniMessageInterface enableDebugSender = 0 ================================================ FILE: progsrc/android-template/app/src/main/java/com/audeering/opensmile/androidtemplate/SmileJNI.java ================================================ /* Copyright (c) 2015 audEERING UG. All rights reserved. Date: 17.08.2015 Author(s): Florian Eyben E-mail: fe@audeering.com This is the interface between the Android app and the openSMILE binary. openSMILE is called via SMILExtractJNI() Messages from openSMILE are received by implementing the SmileJNI.Listener interface. */ package com.audeering.opensmile.androidtemplate; public class SmileJNI { /** * load the JNI interface */ static { System.loadLibrary("smile_jni"); } /** * method to execute openSMILE binary from the Android app activity, see smile_jni.cpp. * @param configfile * @param externalStoragePath * @param updateProfile * @return */ public static native String SMILExtractJNI(String configfile, int updateProfile); public static native String SMILEndJNI(); /** * process the messages from openSMILE (redirect to app activity etc.) */ public interface Listener { void onSmileMessageReceived(String text); } private static Listener listener_; public static void registerListener (Listener listener) { listener_ = listener; } /** * this is the first method called by openSMILE binary. it redirects the call to the Android * app activity. * @param text JSON encoded string */ static void receiveText(String text) { if (listener_ != null) listener_.onSmileMessageReceived(text); } } ================================================ FILE: progsrc/android-template/app/src/main/jni/Android.mk ================================================ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := opensmile LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libopensmile.a #LOCAL_EXPORT_C_INCLUDES := include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) ############ set here the absolute path of your opensmile directory OPENSMILE_ROOT := /path/to/opensmile/root/dir ########################################################## OPENSMILE_INCLUDES_DIR := $(OPENSMILE_ROOT)/src/include OPENSMILE_LIBS_DIR := $(OPENSMILE_ROOT)/inst/android LOCAL_MODULE := smile_jni LOCAL_SRC_FILES := smile_jni.cpp LOCAL_SRC_FILES += smilextract.cpp LOCAL_CPP_FEATURES := exceptions LOCAL_C_INCLUDES := $(OPENSMILE_INCLUDES_DIR) LOCAL_STATIC_LIBRARIES := opensmile LOCAL_LDLIBS := -ggdb -lstdc++ -lm -ldl -llog -D__STDC_CONSTANT_MACROS -lc LOCAL_LDLIBS += -lOpenSLES include $(BUILD_SHARED_LIBRARY) ================================================ FILE: progsrc/android-template/app/src/main/jni/Application.mk ================================================ APP_STL := gnustl_shared APP_MODULES := smile_jni ================================================ FILE: progsrc/android-template/app/src/main/jni/smile_jni.cpp ================================================ /*F*************************************************************************** * * openSMILE - the Munich open source Multimedia Interpretation by * Large-scale Extraction toolkit * * This file is part of openSMILE. * * openSMILE is copyright (c) by audEERING GmbH. All rights reserved. * * See file "COPYING" for details on usage rights and licensing terms. * By using, copying, editing, compiling, modifying, reading, etc. this * file, you agree to the licensing terms in the file COPYING. * If you do not agree to the licensing terms, * you must immediately destroy all copies of this file. * * THIS SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, * IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST * INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE * OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL * ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS * DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. * NEITHER TUM NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY * DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE AGREEMENT, INCLUDING * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE * MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. * ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE * THE SOFTWARE OR DERIVATIVE WORKS. * * Main authors: Florian Eyben, Felix Weninger, * Martin Woellmer, Bjoern Schuller * * Copyright (c) 2008-2013, * Institute for Human-Machine Communication, * Technische Universitaet Muenchen, Germany * * Copyright (c) 2013-2015, * audEERING UG (haftungsbeschraenkt), * Gilching, Germany * * Copyright (c) 2016, * audEERING GmbH, * Gilching Germany ***************************************************************************E*/ #include #include #include #include #include "smilextract.h" #include "smile_jni.h" extern "C" { cComponentManager * myCmanGlob = NULL; JavaVM *javaVm = NULL; JavaVM * JNIcallback_getJavaVm() { return javaVm; } static jobject gClassLoader; static jmethodID gFindClassMethod; // http://stackoverflow.com/questions/14765776/jni-error-app-bug-accessed-stale-local-reference-0xbc00021-index-8-in-a-tabl JNIEnv* getEnv() { JNIEnv *env; int status = javaVm->GetEnv((void**)&env, JNI_VERSION_1_6); if(status < 0) { status = javaVm->AttachCurrentThread(&env, NULL); if(status < 0) { return NULL; } } return env; } JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *pjvm, void *reserved) { javaVm = pjvm; JNIEnv * env = getEnv(); jclass randomClass = env->FindClass("com/audeering/opensmile/androidtemplate/SmileJNI"); jclass classClass = env->GetObjectClass(randomClass); jclass classLoaderClass = env->FindClass("java/lang/ClassLoader"); jmethodID getClassLoaderMethod = env->GetMethodID(classClass, "getClassLoader", "()Ljava/lang/ClassLoader;"); jobject tmp1 = env->CallObjectMethod(randomClass, getClassLoaderMethod); gClassLoader = (jobject)env->NewGlobalRef(tmp1); gFindClassMethod = env->GetMethodID(classLoaderClass, "findClass", "(Ljava/lang/String;)Ljava/lang/Class;"); return JNI_VERSION_1_6; } // Starts openSMILE through JNI. JNIEXPORT jstring JNICALL Java_com_audeering_opensmile_androidtemplate_SmileJNI_SMILExtractJNI( JNIEnv* env, jobject thiz, jstring conf, jint updateProfile){ const char SMILExtract[] = "SMILExtract"; const char * configfile = env->GetStringUTFChars(conf, NULL); //"-nologfile" necessary, as we cannot write to the default logfile location! // -l sets the debugging level. 5 is most verbose. 0 supresses all messages. 2 is recommended. // -O option is a dummy, no actual output file should be written to this location const char *cmd[] = {SMILExtract, "-C", configfile, "-nologfile", "-l", "2"}; // TODO: sdcard location, if needed: Environment.getExternalStorageDirectory() int cmd_num = 6; // IMPORTANT: synchronize with the size of the cmd array // NOTE: app will seg-fault if cmd_num is larger than the actual number of arguments! __android_log_print(ANDROID_LOG_INFO, "opensmile", "starting opensmile..."); // gets and stores global pointer to java vm env->GetJavaVM(&javaVm); // executes SMILExtract main function, modified for Android int ret = SMILExtractFunction(cmd_num, cmd, javaVm, &gClassLoader, &gFindClassMethod); __android_log_print(ANDROID_LOG_INFO, "opensmile", "stopped opensmile."); return env->NewStringUTF("openSMILE ran"); } // Terminates openSMILE upon external/user request. JNIEXPORT jstring JNICALL Java_com_audeering_opensmile_androidtemplate_SmileJNI_SMILEndJNI(JNIEnv* env, jobject thiz , jlong cmanglob){ myCmanGlob = getComponentManager(); if (myCmanGlob != NULL){ myCmanGlob->requestAbort(); return env->NewStringUTF("Finished openSMILE"); } else { return env->NewStringUTF("component manager pointer was null"); } } } ================================================ FILE: progsrc/android-template/app/src/main/jni/smile_jni.h ================================================ /*F*************************************************************************** * * openSMILE - the Munich open source Multimedia Interpretation by * Large-scale Extraction toolkit * * This file is part of openSMILE. * * openSMILE is copyright (c) by audEERING GmbH. All rights reserved. * * See file "COPYING" for details on usage rights and licensing terms. * By using, copying, editing, compiling, modifying, reading, etc. this * file, you agree to the licensing terms in the file COPYING. * If you do not agree to the licensing terms, * you must immediately destroy all copies of this file. * * THIS SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, * IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST * INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE * OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL * ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS * DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. * NEITHER TUM NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY * DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE AGREEMENT, INCLUDING * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE * MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. * ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE * THE SOFTWARE OR DERIVATIVE WORKS. * * Main authors: Florian Eyben, Felix Weninger, * Martin Woellmer, Bjoern Schuller * * Copyright (c) 2008-2013, * Institute for Human-Machine Communication, * Technische Universitaet Muenchen, Germany * * Copyright (c) 2013-2015, * audEERING UG (haftungsbeschraenkt), * Gilching, Germany * * Copyright (c) 2016, * audEERING GmbH, * Gilching Germany ***************************************************************************E*/ #ifndef OPENSMILE_ANDROID_SMILE_JNI_H #define OPENSMILE_ANDROID_SMILE_JNI_H #endif // OPENSMILE_ANDROID_SMILE_JNI_H ================================================ FILE: progsrc/android-template/app/src/main/jni/smilextract.cpp ================================================ /*F*************************************************************************** * * openSMILE - the Munich open source Multimedia Interpretation by * Large-scale Extraction toolkit * * This file is part of openSMILE. * * openSMILE is copyright (c) by audEERING GmbH. All rights reserved. * * See file "COPYING" for details on usage rights and licensing terms. * By using, copying, editing, compiling, modifying, reading, etc. this * file, you agree to the licensing terms in the file COPYING. * If you do not agree to the licensing terms, * you must immediately destroy all copies of this file. * * THIS SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, * IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST * INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE * OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL * ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS * DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. * NEITHER TUM NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY * DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE AGREEMENT, INCLUDING * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE * MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. * ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE * THE SOFTWARE OR DERIVATIVE WORKS. * * Main authors: Florian Eyben, Felix Weninger, * Martin Woellmer, Bjoern Schuller * * Copyright (c) 2008-2013, * Institute for Human-Machine Communication, * Technische Universitaet Muenchen, Germany * * Copyright (c) 2013-2015, * audEERING UG (haftungsbeschraenkt), * Gilching, Germany * * Copyright (c) 2016, * audEERING GmbH, * Gilching Germany ***************************************************************************E*/ // NOTE: it is important that this include comes before #define MODULE.. // why is unclear, but otherwise it does not compile ;-) #include "smilextract.h" #define MODULE "SMILExtract" #include #include cComponentManager *cmanGlob = NULL; cComponentManager *getComponentManager() { return cmanGlob; }; int SMILExtractFunction(int argc, const char *argv[], JavaVM *jvm, void * classLoader, void * findClassMethod) { cmanGlob = NULL; __android_log_print(ANDROID_LOG_INFO, "opensmile", "Started openSMILE thread."); //same as SMILEXtract, only renamed the main() function try { smileCommon_fixLocaleEnUs(); // set up the smile logger LOGGER.setLogLevel(1); LOGGER.enableConsoleOutput(); // commandline parser: cCommandlineParser cmdline(argc, argv); cmdline.addStr( "configfile", 'C', "Path to openSMILE config file", "smile.conf" ); cmdline.addInt( "loglevel", 'l', "Verbosity level (0-9)", 2 ); #ifdef DEBUG cmdline.addBoolean( "debug", 'd', "Show debug messages (on/off)", 0 ); #endif cmdline.addInt( "nticks", 't', "Number of ticks to process (-1 = infinite) (only works for single thread processing, i.e. nThreads=1)", -1 ); //cmdline.addBoolean( "configHelp", 'H', "Show documentation of registered config types (on/off)", 0 ); cmdline.addBoolean( "components", 'L', "Show component list", 0 ); cmdline.addStr( "configHelp", 'H', "Show documentation of registered config types (on/off/argument) (if an argument is given, show only documentation for config types beginning with the name given in the argument)", NULL, 0 ); cmdline.addStr( "configDflt", 0, "Show default config section templates for each config type (on/off/argument) (if an argument is given, show only documentation for config types beginning with the name given in the argument, OR for a list of components in conjunctions with the 'cfgFileTemplate' option enabled)", NULL, 0 ); cmdline.addBoolean( "cfgFileTemplate", 0, "Print a complete template config file for a configuration containing the components specified in a comma separated string as argument to the 'configDflt' option", 0 ); cmdline.addBoolean( "cfgFileDescriptions", 0, "Include description in config file templates.", 0 ); cmdline.addBoolean( "ccmdHelp", 'c', "Show custom commandline option help (those specified in config file)", 0 ); cmdline.addStr( "logfile", 0, "set log file", "smile.log" ); cmdline.addBoolean( "nologfile", 0, "don't write to a log file (e.g. on a read-only filesystem)", 0 ); cmdline.addBoolean( "noconsoleoutput", 0, "don't output any messages to the console (log file is not affected by this option)", 0 ); cmdline.addBoolean( "appendLogfile", 0, "append log messages to an existing logfile instead of overwriting the logfile at every start", 0 ); int help = 0; if (cmdline.doParse() == -1) { LOGGER.setLogLevel(0); help = 1; } if (argc <= 1) { __android_log_print(ANDROID_LOG_INFO, "opensmile", "\nNo commandline options were given.\n Please run ' SMILExtract -h ' to see some usage information!\n\n"); return 10; } if (help==1) { return 0; } if (cmdline.getBoolean("nologfile")) { LOGGER.setLogFile((const char *)NULL,0,!(cmdline.getBoolean("noconsoleoutput"))); } else { LOGGER.setLogFile(cmdline.getStr("logfile"),cmdline.getBoolean("appendLogfile"),!(cmdline.getBoolean("noconsoleoutput"))); } LOGGER.setLogLevel(cmdline.getInt("loglevel")); SMILE_MSG(2,"openSMILE starting!"); #ifdef DEBUG if (!cmdline.getBoolean("debug")) LOGGER.setLogLevel(LOG_DEBUG, 0); #endif SMILE_MSG(2,"config file is: %s",cmdline.getStr("configfile")); // create configManager: cConfigManager *configManager = new cConfigManager(&cmdline); cComponentManager *cMan = new cComponentManager(configManager,componentlist); const char *selStr=NULL; if (cmdline.isSet("configHelp")) { #ifndef EXTERNAL_BUILD selStr = cmdline.getStr("configHelp"); configManager->printTypeHelp(1/*!!! -> 1*/,selStr,0); #endif help = 1; } if (cmdline.isSet("configDflt")) { #ifndef EXTERNAL_BUILD int fullMode=0; int wDescr = 0; if (cmdline.getBoolean("cfgFileTemplate")) fullMode=1; if (cmdline.getBoolean("cfgFileDescriptions")) wDescr=1; selStr = cmdline.getStr("configDflt"); configManager->printTypeDfltConfig(selStr,1,fullMode,wDescr); #endif help = 1; } if (cmdline.getBoolean("components")) { #ifndef EXTERNAL_BUILD cMan->printComponentList(); #endif // EXTERNAL_BUILD help = 1; } if (help==1) { delete configManager; delete cMan; return -1; } try{ configManager->addReader( new cFileConfigReader( cmdline.getStr("configfile"), -1, &cmdline) ); configManager->readConfig(); } catch (cConfigException *cc) { return 0; } /* re-parse the command-line to include options created in the config file */ cmdline.doParse(1,0); // warn if unknown options are detected on the commandline if (cmdline.getBoolean("ccmdHelp")) { cmdline.showUsage(); delete configManager; delete cMan; return -1; } configManager->addExternalPointer("JavaVM", jvm); configManager->addExternalPointer("ClassLoader", classLoader); configManager->addExternalPointer("FindClassMethod", findClassMethod); /* create all instances specified in the config file */ cMan->createInstances(0); // 0 = do not read config (we already did that above..) cmanGlob = cMan; /* run single or mutli-threaded, depending on componentManager config in config file */ long long nTicks = cMan->runMultiThreaded(cmdline.getInt("nticks")); /* it is important that configManager is deleted BEFORE componentManger! (since component Manger unregisters plugin Dlls, which might have allocated configTypes, etc.) */ delete configManager; delete cMan; } catch (cSMILException *c) { // TODO: free cMan and configManager !? // free exception ?? return EXIT_ERROR; } return EXIT_SUCCESS; } ================================================ FILE: progsrc/android-template/app/src/main/jni/smilextract.h ================================================ /*F*************************************************************************** * * openSMILE - the Munich open source Multimedia Interpretation by * Large-scale Extraction toolkit * * This file is part of openSMILE. * * openSMILE is copyright (c) by audEERING GmbH. All rights reserved. * * See file "COPYING" for details on usage rights and licensing terms. * By using, copying, editing, compiling, modifying, reading, etc. this * file, you agree to the licensing terms in the file COPYING. * If you do not agree to the licensing terms, * you must immediately destroy all copies of this file. * * THIS SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, * IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST * INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE * OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL * ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS * DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. * NEITHER TUM NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY * DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE AGREEMENT, INCLUDING * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE * MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. * ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE * THE SOFTWARE OR DERIVATIVE WORKS. * * Main authors: Florian Eyben, Felix Weninger, * Martin Woellmer, Bjoern Schuller * * Copyright (c) 2008-2013, * Institute for Human-Machine Communication, * Technische Universitaet Muenchen, Germany * * Copyright (c) 2013-2015, * audEERING UG (haftungsbeschraenkt), * Gilching, Germany * * Copyright (c) 2016, * audEERING GmbH, * Gilching Germany ***************************************************************************E*/ #ifndef OPENSMILEANDROID_SMILEXTRACT_H #define OPENSMILEANDROID_SMILEXTRACT_H #include #include #include #include #include cComponentManager *getComponentManager(); int SMILExtractFunction(int argc, const char *argv[], JavaVM *jvm, void * classLoader, void * findClassMethod); #endif // OPENSMILE_ANDROID_SMILEXTRACT_H ================================================ FILE: progsrc/android-template/app/src/main/jni/sync-build-libopensmile.sh ================================================ #!/usr/bin/env bash # This file is part of openSMILE. # # Copyright (c) audEERING. All rights reserved. # See the file COPYING for details on license terms. ARCH="armeabi"; ############ you might need to change this if you move the ############ android studio project somewhere else, i.e. ############ outside of the opensmile root folder OPENSMILE_DIR="../../../../../../" ########################################################## PWDD=`pwd`; cd $OPENSMILE_DIR ## IMPORTANT: ## run buildAndroid.sh in the opensmile trunk directory ## once first to set up the build environment, ## or comment out the line below: # sh buildAndroid.sh ## NOTE: leaving this enabled, will cause a full re-build, every time you run ## this script to include a change in openSMILE in the compiled ## android library. # Alternatively, just use make to re-build the changed parts: make -j8 make install cd $PWDD mkdir -p $ARCH cp -f $OPENSMILE_DIR/inst/android/lib/libopensmile.a ./$ARCH # not needed... # cp -af $OPENSMILE_DIR/inst/android/lib/libopensmile.so* ./$ARCH ================================================ FILE: progsrc/android-template/app/src/main/res/layout/fragment_show.xml ================================================ ================================================ FILE: progsrc/android-template/app/src/main/res/layout/main.xml ================================================ ================================================ FILE: progsrc/android-template/app/src/main/res/menu/toolbar.xml ================================================ ================================================ FILE: progsrc/android-template/app/src/main/res/values/colors.xml ================================================ #3F51B5 #303F9F #FF4081 ================================================ FILE: progsrc/android-template/app/src/main/res/values/strings.xml ================================================ openSMILE Treble: Middle: Bass: play Caching AI models ================================================ FILE: progsrc/android-template/app/src/main/res/values/styles.xml ================================================ ================================================ FILE: progsrc/android-template/app/src/main/scala/com/audeering/opensmile/androidtemplate/MainActivity.scala ================================================ package com.audeering.opensmile.androidtemplate import java.io._ import android.Manifest.permission._ import android.app.ProgressDialog import android.content.pm.PackageManager._ import android.os.{Bundle, Handler} import android.support.v4.app._ import android.support.v4.content.ContextCompat import android.support.v4.view.ViewPager import android.support.v7.app.AppCompatActivity import android.util.Log import android.view._ import com.audeering.opensmile.androidtemplate.plugins.Config /* Copyright (c) 2016 audEERING UG. All rights reserved. Date: 08.08.2016 Author(s): Gerhard Hagerer E-mail: gh@audeering.com This is the main activity and the initialization class for this app */ class MainActivity extends AppCompatActivity { val TAG = classOf[MainActivity].getCanonicalName var pagerAdapter: PagerAdapter = null var pager: ViewPager = null val assets = Config.assets def conf = getCacheDir + "/" + Config.mainConf val PERMISSION_REQUEST = 0 val permissions = Array[String](RECORD_AUDIO, WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE) override def onCreate(state: Bundle) { super.onCreate(state) setContentView(R.layout.main) pagerAdapter = new PagerAdapter(getSupportFragmentManager) pager = R.id.pager.as[ViewPager] pager.setAdapter(pagerAdapter) SmilePlugin pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener{ override def onPageSelected(pos: Int) { SmilePlugin.updateView(activeFragment.get, pos) } }) setupAssets } object SmileThread { var isActive = false def start { (() => { isActive = true SmileJNI.SMILExtractJNI(conf, 1) }).run } def stop { isActive = false SmileJNI.SMILEndJNI } } def setMenuItemIcon(item: MenuItem, icon: Int, delay: Int = 2000) { (() => { item.setEnabled(false) item.setVisible(false) }).runUi (() => { item.setIcon(icon) item.setEnabled(true) item.setVisible(true) }).runUiDelayed(delay) } override def onOptionsItemSelected(item: MenuItem): Boolean = { item.getItemId match { case R.id.home => case R.id.action_play_stop => if (SmileThread.isActive) { SmileThread.stop setMenuItemIcon(item, R.drawable.ic_play_arrow_white_24dp) } else { SmileThread.start setMenuItemIcon(item, R.drawable.ic_stop_white_24dp) } case _ => } true } /** * show a loading popup while the openSMILE conf-files are being loaded * if the required permissions are not granted yet, it covers that, too */ def setupAssets { val grants = permissions.map( ContextCompat.checkSelfPermission(this, _) ) if (grants contains PERMISSION_DENIED) { ActivityCompat.requestPermissions(this, permissions, PERMISSION_REQUEST) } else { val dialog = new ProgressDialog(this) dialog.setTitle(R.string.asset_dialog_title) dialog.setMessage("Please wait...") dialog.show() (() => { assets.foreach(cacheAsset(_)) (() => dialog.dismiss ).runUi }).run } } override def onRequestPermissionsResult(request: Int, permissions: Array[String], grants: Array[Int]) { if (request != PERMISSION_REQUEST || Option(grants) == None || grants.contains(PERMISSION_DENIED)) log("Permission denied") else log("Permission granted") setupAssets } /** * copies a file to a given destination * * @param filename the file to be copied * @param dst destination directory (default: cacheDir) */ def cacheAsset(filename: String, dst: String = getCacheDir.toString) { val is = getAssets.open(filename) val outfile = new File(dst + "/" + filename) outfile.getParentFile.mkdirs() val os = new FileOutputStream(outfile) val buffer = new Array[Byte](50000) Stream.continually(is.read(buffer)) .takeWhile(_ != -1) .foreach(os.write(buffer, 0, _)) is.close os.flush os.close } // START shortcut methods def log(str: String) = Log.i(TAG, str) def activeFragment: Option[View] = { val tag = "android:switcher:" + R.id.pager + ":" + pager.getCurrentItem val fragment = getSupportFragmentManager.findFragmentByTag(tag) if (Option(fragment) != None) return Option(fragment.getView()) None } implicit class ViewGetter(id: Int) { def as[t] = findViewById(id).asInstanceOf[t] def as[t](v: View) = v.findViewById(id).asInstanceOf[t] } implicit class Closure(func: () => Any) { def asRunnable = new Runnable { override def run() = func() } def asThread = new Thread(asRunnable) def run = asThread.start() def runUi = runOnUiThread(asRunnable) def runUiDelayed(delay: Int) = new Handler().postDelayed(func.asRunnable, delay) } // END shortcut methods /** * this adds items like buttons to the action bar */ override def onCreateOptionsMenu(menu: Menu) = { getMenuInflater.inflate(R.menu.toolbar, menu) super.onCreateOptionsMenu(menu) } class PagerAdapter(fm: FragmentManager) extends FragmentPagerAdapter(fm) { override def getItem(pos: Int) = new SlideFragment(pos) override def getCount = SmilePlugin.layoutsNum override def instantiateItem(container: ViewGroup, pos: Int): Object = { val obj = super.instantiateItem(container, pos) if (obj.isInstanceOf[Fragment] && pos == 0 && SmilePlugin.activeView == None) { SmilePlugin.updateView(container, 0) } obj } } class SlideFragment(val pos: Int) extends Fragment { override def onCreateView(inflater: LayoutInflater, container: ViewGroup, state: Bundle) = { inflater.inflate(SmilePlugin.layouts(pos), container, false) } } } ================================================ FILE: progsrc/android-template/app/src/main/scala/com/audeering/opensmile/androidtemplate/SmileMessage.scala ================================================ package com.audeering.opensmile.androidtemplate import org.json.{JSONArray, JSONObject} import scala.collection.mutable /* Copyright (c) 2016 audEERING UG. All rights reserved. Date: 08.08.2016 Author(s): Gerhard Hagerer E-mail: gh@audeering.com This is for parsing a text message coming from openSMILE JNI in JSON format Additional helper methods are provided too for easier access to standard attributes */ class SmileMessage(jsn: String) extends JSONObject(jsn) { def floatData(i: Int) = getJSONObject("floatData").getDouble(""+i).toFloat def intData(i: Int) = getJSONObject("floatData").getInt(""+i) def apply(key: String) = getString(key) } ================================================ FILE: progsrc/android-template/app/src/main/scala/com/audeering/opensmile/androidtemplate/SmilePlugin.scala ================================================ package com.audeering.opensmile.androidtemplate import android.app.Activity import android.view.View import com.audeering.opensmile.androidtemplate.plugins.{Config, Energy} import scala.collection.mutable.ListBuffer /* Copyright (c) 2016 audEERING UG. All rights reserved. Date: 08.08.2016 Author(s): Gerhard Hagerer E-mail: gh@audeering.com Here classes for receiving and showing the output values from openSMILE can be defined as plugins */ object SmilePlugin extends SmileJNI.Listener { var activePage = 0 var activeView: Option[View] = None val fragments = ListBuffer[Int]() val plugins = Config.plugins SmileJNI.registerListener(this) def updateView(v: View, id: Int): Unit = { activeView = Option(v) activePage = id } /** * this gets called when openSMILE sends a message to the app * * @param text JSON encoded string */ override def onSmileMessageReceived(text: String) { // at first parse JSON val msg = new SmileMessage(text) val msgtype = msg("msgtype") val msgname = msg("msgname") // now see which SmilePlugins are there for that kind of openSMILE message (filtering) // and iterate over all SmilePlugins and execute their values plugins.filter( _.filter(msg) ).foreach( _.updateValues(msg) ) // now only take the plugin which is visible and call its ui update (don't forget VAD) runUI(() => { val visiblePlugin = plugins.filter( _.layoutId == plugins(activePage).layoutId )(0) visiblePlugin.updateUI }) } def runUI(func: () => Unit) { val act = activeView.get.getContext.asInstanceOf[Activity] act.runOnUiThread(new Runnable { override def run(): Unit = func() }) } def view[t](id: Int) = activeView.get.findViewById(id).asInstanceOf[t] def layoutsNum = plugins.size def layouts = plugins.map(_.layoutId) } trait SmilePlugin { val layoutId: Int def updateValues(values: SmileMessage) def updateUI() def runUI(func: () => Unit) = SmilePlugin.runUI(func) def filter(jsn: SmileMessage): Boolean = true implicit class idToView(id: Int) { def as[t]: t = SmilePlugin.view[t](id) } } ================================================ FILE: progsrc/android-template/app/src/main/scala/com/audeering/opensmile/androidtemplate/plugins/Config.scala ================================================ package com.audeering.opensmile.androidtemplate.plugins import com.audeering.opensmile.androidtemplate.SmilePlugin /* Copyright (c) 2016 audEERING UG. All rights reserved. Date: 09.08.16 Author(s): Gerhard Hagerer E-mail: gh@audeering.com Place a short description of what this code does here (1-2 sentences). This class contains everything to configure the plugins. Each plugin must be declared as an object of the package com.audeering.opensmile.androidtemplate.plugins. Then, you have to add our own plugin object to the plugin list of the present Config object, see plugins attribute below. Do not forget to include your openSMILE config files to the assets attribute. It is assumed, that you place your configs within the app/src/assets folder. Your main config, which includes all the other ones, must be declared explicitly as such by defining the mainConf accordingly. */ object Config { val assets = List( "liveinput_android.conf", "BufferModeRb.conf.inc", "messages.conf.inc", "features.conf.inc" ) val mainConf = "liveinput_android.conf" val plugins: List[SmilePlugin] = List(Energy) } ================================================ FILE: progsrc/android-template/app/src/main/scala/com/audeering/opensmile/androidtemplate/plugins/Energy.scala ================================================ package com.audeering.opensmile.androidtemplate.plugins import android.widget.TextView import com.audeering.opensmile.androidtemplate.{SmileMessage, SmilePlugin, R} /* Copyright (c) 2016 audEERING UG. All rights reserved. Date: 08.08.16 Author(s): Gerhard Hagerer E-mail: gh@audeering.com this is an example plugin showing the energy as number from three bands: treble, middle, bass */ object Energy extends SmilePlugin { // here is the reference to the layout to display values coming from openSMILE // it contains three text fields, one for each band override val layoutId = R.layout.fragment_show // this is a filter function, which is applie override def filter(jsn: SmileMessage) = { jsn("msgtype") == "energy" && jsn("msgname") == "energy_act" } // these attributes hold values calculated by updateValues() var bass, middle, treble = 0f /** * openSMILE sends information to the app in the form of JSON messages. * These are * * @param msg a JSONObject representing an openSMILE message */ override def updateValues(msg: SmileMessage): Unit = { treble = msg.floatData(2) middle = msg.floatData(1) bass = msg.floatData(0) } /** * this method runs on the UI thread. it should take the object attributes saved in * updateValues() and display these on GUI elements. */ override def updateUI() { R.id.treble.as[TextView].setText("" + treble) R.id.middle.as[TextView].setText("" + middle) R.id.bass.as[TextView].setText("" + bass) } } ================================================ FILE: progsrc/android-template/app/src/test/java/com/audeering/opensmile/androidtemplate/ExampleUnitTest.java ================================================ package com.audeering.opensmile.androidtemplate; import org.junit.Test; import static org.junit.Assert.*; /** * To work on unit tests, switch the Test Artifact in the Build Variants view. */ public class ExampleUnitTest { @Test public void addition_isCorrect() throws Exception { assertEquals(4, 2 + 2); } } ================================================ FILE: progsrc/android-template/build.gradle ================================================ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.3.1' classpath "jp.leafytree.gradle:gradle-android-scala-plugin:1.4" } } allprojects { repositories { jcenter() maven { url 'https://maven.google.com' } } } task clean(type: Delete) { delete rootProject.buildDir } ================================================ FILE: progsrc/android-template/gradle/wrapper/gradle-wrapper.properties ================================================ #Mon Aug 08 15:02:37 CEST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-2.2-all.zip ================================================ FILE: progsrc/android-template/gradle.properties ================================================ # Project-wide Gradle settings. # IDE (e.g. Android Studio) users: # Gradle settings configured through the IDE *will override* # any settings specified in this file. # For more details on how to configure your build environment visit # http://www.gradle.org/docs/current/userguide/build_environment.html # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. # Default value: -Xmx10248m -XX:MaxPermSize=256m # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true ================================================ FILE: progsrc/android-template/gradlew ================================================ #!/usr/bin/env bash ############################################################################## ## ## Gradle start up script for UN*X ## ############################################################################## # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS="" APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" warn ( ) { echo "$*" } die ( ) { echo echo "$*" echo exit 1 } # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false case "`uname`" in CYGWIN* ) cygwin=true ;; Darwin* ) darwin=true ;; MINGW* ) msys=true ;; esac # Attempt to set APP_HOME # Resolve links: $0 may be a link PRG="$0" # Need this for relative symlinks. while [ -h "$PRG" ] ; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG=`dirname "$PRG"`"/$link" fi done SAVED="`pwd`" cd "`dirname \"$PRG\"`/" >/dev/null APP_HOME="`pwd -P`" cd "$SAVED" >/dev/null CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables JAVACMD="$JAVA_HOME/jre/sh/java" else JAVACMD="$JAVA_HOME/bin/java" fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else JAVACMD="java" which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi # Increase the maximum file descriptors if we can. if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then MAX_FD="$MAX_FD_LIMIT" fi ulimit -n $MAX_FD if [ $? -ne 0 ] ; then warn "Could not set maximum file descriptor limit: $MAX_FD" fi else warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" fi fi # For Darwin, add options to specify how the application appears in the dock if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi # For Cygwin, switch paths to Windows format before running java if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` SEP="" for dir in $ROOTDIRSRAW ; do ROOTDIRS="$ROOTDIRS$SEP$dir" SEP="|" done OURCYGPATTERN="(^($ROOTDIRS))" # Add a user-defined pattern to the cygpath arguments if [ "$GRADLE_CYGPATTERN" != "" ] ; then OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" fi # Now convert the arguments - kludge to limit ourselves to /bin/sh i=0 for arg in "$@" ; do CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` else eval `echo args$i`="\"$arg\"" fi i=$((i+1)) done case $i in (0) set -- ;; (1) set -- "$args0" ;; (2) set -- "$args0" "$args1" ;; (3) set -- "$args0" "$args1" "$args2" ;; (4) set -- "$args0" "$args1" "$args2" "$args3" ;; (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules function splitJvmOpts() { JVM_OPTS=("$@") } eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" ================================================ FILE: progsrc/android-template/gradlew.bat ================================================ @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @rem @rem ########################################################################## @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS= set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if "%ERRORLEVEL%" == "0" goto init echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto init echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :init @rem Get command-line arguments, handling Windowz variants if not "%OS%" == "Windows_NT" goto win9xME_args if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. set CMD_LINE_ARGS= set _SKIP=2 :win9xME_args_slurp if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* goto execute :4NT_args @rem Get arguments from the 4NT Shell from JP Software set CMD_LINE_ARGS=%$ :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% :end @rem End local scope for the variables with windows NT shell if "%ERRORLEVEL%"=="0" goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 exit /b 1 :mainEnd if "%OS%"=="Windows_NT" endlocal :omega ================================================ FILE: progsrc/android-template/settings.gradle ================================================ include ':app' ================================================ FILE: progsrc/openSMILEbatchGUI/Form1.Designer.cs ================================================ namespace openSMILEbatchGUI { partial class Form1 { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.button1 = new System.Windows.Forms.Button(); this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog(); this.fileListBox = new System.Windows.Forms.CheckedListBox(); this.progressBar1 = new System.Windows.Forms.ProgressBar(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.button12 = new System.Windows.Forms.Button(); this.button11 = new System.Windows.Forms.Button(); this.label9 = new System.Windows.Forms.Label(); this.labelFile = new System.Windows.Forms.TextBox(); this.arffAppend = new System.Windows.Forms.CheckBox(); this.csvAppend = new System.Windows.Forms.CheckBox(); this.lldCsvAppend = new System.Windows.Forms.CheckBox(); this.button10 = new System.Windows.Forms.Button(); this.label5 = new System.Windows.Forms.Label(); this.workDirectory = new System.Windows.Forms.TextBox(); this.button9 = new System.Windows.Forms.Button(); this.csvOutName = new System.Windows.Forms.TextBox(); this.button8 = new System.Windows.Forms.Button(); this.lldCsvOutName = new System.Windows.Forms.TextBox(); this.button7 = new System.Windows.Forms.Button(); this.label4 = new System.Windows.Forms.Label(); this.arffOutName = new System.Windows.Forms.TextBox(); this.label3 = new System.Windows.Forms.Label(); this.configurations = new System.Windows.Forms.ComboBox(); this.haveCsvOut = new System.Windows.Forms.CheckBox(); this.haveArffOut = new System.Windows.Forms.CheckBox(); this.haveLldCsvOut = new System.Windows.Forms.CheckBox(); this.button2 = new System.Windows.Forms.Button(); this.selectedFolder = new System.Windows.Forms.TextBox(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.groupBox2 = new System.Windows.Forms.GroupBox(); this.logBox = new System.Windows.Forms.TextBox(); this.label6 = new System.Windows.Forms.Label(); this.progressLabel = new System.Windows.Forms.Label(); this.button5 = new System.Windows.Forms.Button(); this.button6 = new System.Windows.Forms.Button(); this.button4 = new System.Windows.Forms.Button(); this.button3 = new System.Windows.Forms.Button(); this.label7 = new System.Windows.Forms.Label(); this.fileExtensionFilter = new System.Windows.Forms.TextBox(); this.label8 = new System.Windows.Forms.Label(); this.saveFileDialogArff = new System.Windows.Forms.SaveFileDialog(); this.saveFileDialogCsv = new System.Windows.Forms.SaveFileDialog(); this.saveFileDialogLldCsv = new System.Windows.Forms.SaveFileDialog(); this.folderBrowserDialog2 = new System.Windows.Forms.FolderBrowserDialog(); this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); this.button13 = new System.Windows.Forms.Button(); this.groupBox1.SuspendLayout(); this.groupBox2.SuspendLayout(); this.SuspendLayout(); // // button1 // this.button1.Enabled = false; this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.button1.Location = new System.Drawing.Point(466, 378); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(75, 39); this.button1.TabIndex = 0; this.button1.Text = "3. Start!"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); // // fileListBox // this.fileListBox.FormattingEnabled = true; this.fileListBox.HorizontalScrollbar = true; this.fileListBox.Location = new System.Drawing.Point(15, 94); this.fileListBox.Name = "fileListBox"; this.fileListBox.Size = new System.Drawing.Size(426, 409); this.fileListBox.TabIndex = 1; this.fileListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.fileListBox_ItemCheck); this.fileListBox.SelectedIndexChanged += new System.EventHandler(this.checkedListBox1_SelectedIndexChanged); // // progressBar1 // this.progressBar1.Location = new System.Drawing.Point(25, 42); this.progressBar1.Name = "progressBar1"; this.progressBar1.Size = new System.Drawing.Size(373, 23); this.progressBar1.TabIndex = 2; // // groupBox1 // this.groupBox1.Controls.Add(this.button13); this.groupBox1.Controls.Add(this.button12); this.groupBox1.Controls.Add(this.button11); this.groupBox1.Controls.Add(this.label9); this.groupBox1.Controls.Add(this.labelFile); this.groupBox1.Controls.Add(this.arffAppend); this.groupBox1.Controls.Add(this.csvAppend); this.groupBox1.Controls.Add(this.lldCsvAppend); this.groupBox1.Controls.Add(this.button10); this.groupBox1.Controls.Add(this.label5); this.groupBox1.Controls.Add(this.workDirectory); this.groupBox1.Controls.Add(this.button9); this.groupBox1.Controls.Add(this.csvOutName); this.groupBox1.Controls.Add(this.button8); this.groupBox1.Controls.Add(this.lldCsvOutName); this.groupBox1.Controls.Add(this.button7); this.groupBox1.Controls.Add(this.label4); this.groupBox1.Controls.Add(this.arffOutName); this.groupBox1.Controls.Add(this.label3); this.groupBox1.Controls.Add(this.configurations); this.groupBox1.Controls.Add(this.haveCsvOut); this.groupBox1.Controls.Add(this.haveArffOut); this.groupBox1.Controls.Add(this.haveLldCsvOut); this.groupBox1.Location = new System.Drawing.Point(466, 29); this.groupBox1.Name = "groupBox1"; this.groupBox1.Size = new System.Drawing.Size(506, 274); this.groupBox1.TabIndex = 4; this.groupBox1.TabStop = false; this.groupBox1.Text = "Options"; // // button12 // this.button12.Location = new System.Drawing.Point(406, 222); this.button12.Name = "button12"; this.button12.Size = new System.Drawing.Size(53, 23); this.button12.TabIndex = 30; this.button12.Text = "Info..."; this.button12.UseVisualStyleBackColor = true; this.button12.Click += new System.EventHandler(this.button12_Click); // // button11 // this.button11.Location = new System.Drawing.Point(465, 247); this.button11.Name = "button11"; this.button11.Size = new System.Drawing.Size(34, 21); this.button11.TabIndex = 29; this.button11.Text = "..."; this.button11.UseVisualStyleBackColor = true; this.button11.Click += new System.EventHandler(this.button11_Click_1); // // label9 // this.label9.AutoSize = true; this.label9.Location = new System.Drawing.Point(28, 232); this.label9.Name = "label9"; this.label9.Size = new System.Drawing.Size(372, 13); this.label9.TabIndex = 28; this.label9.Text = "File selection list and labels (csv, with first column, filenames, and then label" + "s):"; // // labelFile // this.labelFile.Location = new System.Drawing.Point(24, 248); this.labelFile.Name = "labelFile"; this.labelFile.Size = new System.Drawing.Size(435, 20); this.labelFile.TabIndex = 27; this.labelFile.TextChanged += new System.EventHandler(this.labelFile_TextChanged); // // arffAppend // this.arffAppend.AutoSize = true; this.arffAppend.Checked = true; this.arffAppend.CheckState = System.Windows.Forms.CheckState.Checked; this.arffAppend.Location = new System.Drawing.Point(334, 195); this.arffAppend.Name = "arffAppend"; this.arffAppend.Size = new System.Drawing.Size(167, 17); this.arffAppend.TabIndex = 26; this.arffAppend.Text = "Append to Functionals Arff file"; this.arffAppend.UseVisualStyleBackColor = true; // // csvAppend // this.csvAppend.AutoSize = true; this.csvAppend.Checked = true; this.csvAppend.CheckState = System.Windows.Forms.CheckState.Checked; this.csvAppend.Location = new System.Drawing.Point(164, 195); this.csvAppend.Name = "csvAppend"; this.csvAppend.Size = new System.Drawing.Size(172, 17); this.csvAppend.TabIndex = 25; this.csvAppend.Text = "Append to Functionals CSV file"; this.csvAppend.UseVisualStyleBackColor = true; // // lldCsvAppend // this.lldCsvAppend.AutoSize = true; this.lldCsvAppend.Checked = true; this.lldCsvAppend.CheckState = System.Windows.Forms.CheckState.Checked; this.lldCsvAppend.Location = new System.Drawing.Point(24, 195); this.lldCsvAppend.Name = "lldCsvAppend"; this.lldCsvAppend.Size = new System.Drawing.Size(138, 17); this.lldCsvAppend.TabIndex = 24; this.lldCsvAppend.Text = "Append to LLD CSV file"; this.lldCsvAppend.UseVisualStyleBackColor = true; // // button10 // this.button10.Location = new System.Drawing.Point(389, 45); this.button10.Name = "button10"; this.button10.Size = new System.Drawing.Size(34, 21); this.button10.TabIndex = 23; this.button10.Text = "..."; this.button10.UseVisualStyleBackColor = true; this.button10.Click += new System.EventHandler(this.button10_Click); // // label5 // this.label5.AutoSize = true; this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.label5.Location = new System.Drawing.Point(27, 49); this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(109, 13); this.label5.TabIndex = 22; this.label5.Text = "1. Work directory:"; this.label5.Click += new System.EventHandler(this.label5_Click); // // workDirectory // this.workDirectory.Location = new System.Drawing.Point(142, 46); this.workDirectory.Name = "workDirectory"; this.workDirectory.Size = new System.Drawing.Size(241, 20); this.workDirectory.TabIndex = 21; this.workDirectory.Text = "..\\..\\..\\..\\"; this.workDirectory.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.workDirectory.TextChanged += new System.EventHandler(this.workDirectory_TextChanged); // // button9 // this.button9.Location = new System.Drawing.Point(465, 157); this.button9.Name = "button9"; this.button9.Size = new System.Drawing.Size(34, 21); this.button9.TabIndex = 20; this.button9.Text = "..."; this.button9.UseVisualStyleBackColor = true; this.button9.Click += new System.EventHandler(this.button9_Click); // // csvOutName // this.csvOutName.Location = new System.Drawing.Point(150, 158); this.csvOutName.Name = "csvOutName"; this.csvOutName.Size = new System.Drawing.Size(309, 20); this.csvOutName.TabIndex = 19; // // button8 // this.button8.Location = new System.Drawing.Point(465, 135); this.button8.Name = "button8"; this.button8.Size = new System.Drawing.Size(34, 21); this.button8.TabIndex = 18; this.button8.Text = "..."; this.button8.UseVisualStyleBackColor = true; this.button8.Click += new System.EventHandler(this.button8_Click); // // lldCsvOutName // this.lldCsvOutName.Location = new System.Drawing.Point(150, 136); this.lldCsvOutName.Name = "lldCsvOutName"; this.lldCsvOutName.Size = new System.Drawing.Size(309, 20); this.lldCsvOutName.TabIndex = 17; // // button7 // this.button7.Location = new System.Drawing.Point(465, 112); this.button7.Name = "button7"; this.button7.Size = new System.Drawing.Size(34, 21); this.button7.TabIndex = 16; this.button7.Text = "..."; this.button7.UseVisualStyleBackColor = true; this.button7.Click += new System.EventHandler(this.button7_Click); // // label4 // this.label4.AutoSize = true; this.label4.Location = new System.Drawing.Point(32, 97); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(427, 13); this.label4.TabIndex = 7; this.label4.Text = "** The following options are only available if supported by the selected configur" + "ation file **"; // // arffOutName // this.arffOutName.Location = new System.Drawing.Point(150, 113); this.arffOutName.Name = "arffOutName"; this.arffOutName.Size = new System.Drawing.Size(309, 20); this.arffOutName.TabIndex = 5; // // label3 // this.label3.AutoSize = true; this.label3.Location = new System.Drawing.Point(21, 24); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(146, 13); this.label3.TabIndex = 4; this.label3.Text = "openSMILE configuration file:"; // // configurations // this.configurations.FormattingEnabled = true; this.configurations.Location = new System.Drawing.Point(175, 19); this.configurations.Name = "configurations"; this.configurations.Size = new System.Drawing.Size(324, 21); this.configurations.TabIndex = 3; // // haveCsvOut // this.haveCsvOut.AutoSize = true; this.haveCsvOut.Location = new System.Drawing.Point(24, 161); this.haveCsvOut.Name = "haveCsvOut"; this.haveCsvOut.Size = new System.Drawing.Size(97, 17); this.haveCsvOut.TabIndex = 2; this.haveCsvOut.Text = "Save CSV File:"; this.haveCsvOut.UseVisualStyleBackColor = true; // // haveArffOut // this.haveArffOut.AutoSize = true; this.haveArffOut.Checked = true; this.haveArffOut.CheckState = System.Windows.Forms.CheckState.Checked; this.haveArffOut.Location = new System.Drawing.Point(24, 116); this.haveArffOut.Name = "haveArffOut"; this.haveArffOut.Size = new System.Drawing.Size(102, 17); this.haveArffOut.TabIndex = 1; this.haveArffOut.Text = "Output file (Arff):"; this.haveArffOut.UseVisualStyleBackColor = true; // // haveLldCsvOut // this.haveLldCsvOut.AutoSize = true; this.haveLldCsvOut.Location = new System.Drawing.Point(24, 139); this.haveLldCsvOut.Name = "haveLldCsvOut"; this.haveLldCsvOut.Size = new System.Drawing.Size(120, 17); this.haveLldCsvOut.TabIndex = 0; this.haveLldCsvOut.Text = "Save LLD CSV File:"; this.haveLldCsvOut.UseVisualStyleBackColor = true; this.haveLldCsvOut.CheckedChanged += new System.EventHandler(this.haveLldCsvOut_CheckedChanged); // // button2 // this.button2.Location = new System.Drawing.Point(254, 6); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(187, 20); this.button2.TabIndex = 5; this.button2.Text = "Select folder to process ..."; this.button2.UseVisualStyleBackColor = true; this.button2.Click += new System.EventHandler(this.button2_Click); // // selectedFolder // this.selectedFolder.Location = new System.Drawing.Point(15, 29); this.selectedFolder.Name = "selectedFolder"; this.selectedFolder.Size = new System.Drawing.Size(426, 20); this.selectedFolder.TabIndex = 8; this.selectedFolder.Text = "..\\..\\..\\..\\example-audio"; this.selectedFolder.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; // // label1 // this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(12, 13); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(163, 13); this.label1.TabIndex = 9; this.label1.Text = "Folder with audio files to process:"; // // label2 // this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(12, 75); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(102, 13); this.label2.TabIndex = 10; this.label2.Text = "List of selected files:"; // // groupBox2 // this.groupBox2.Controls.Add(this.logBox); this.groupBox2.Controls.Add(this.label6); this.groupBox2.Controls.Add(this.progressLabel); this.groupBox2.Controls.Add(this.progressBar1); this.groupBox2.Location = new System.Drawing.Point(553, 323); this.groupBox2.Name = "groupBox2"; this.groupBox2.Size = new System.Drawing.Size(419, 229); this.groupBox2.TabIndex = 11; this.groupBox2.TabStop = false; this.groupBox2.Text = "Job progress"; // // logBox // this.logBox.Location = new System.Drawing.Point(25, 97); this.logBox.Multiline = true; this.logBox.Name = "logBox"; this.logBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; this.logBox.Size = new System.Drawing.Size(373, 115); this.logBox.TabIndex = 7; // // label6 // this.label6.AutoSize = true; this.label6.Location = new System.Drawing.Point(22, 81); this.label6.Name = "label6"; this.label6.Size = new System.Drawing.Size(227, 13); this.label6.TabIndex = 6; this.label6.Text = "openSMILE console output and log messages:"; // // progressLabel // this.progressLabel.AutoSize = true; this.progressLabel.Location = new System.Drawing.Point(22, 26); this.progressLabel.Name = "progressLabel"; this.progressLabel.Size = new System.Drawing.Size(0, 13); this.progressLabel.TabIndex = 5; // // button5 // this.button5.Enabled = false; this.button5.Location = new System.Drawing.Point(466, 453); this.button5.Name = "button5"; this.button5.Size = new System.Drawing.Size(75, 23); this.button5.TabIndex = 12; this.button5.Text = "Cancel"; this.button5.UseVisualStyleBackColor = true; this.button5.Click += new System.EventHandler(this.button5_Click); // // button6 // this.button6.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.button6.Location = new System.Drawing.Point(299, 67); this.button6.Name = "button6"; this.button6.Size = new System.Drawing.Size(142, 23); this.button6.TabIndex = 13; this.button6.Text = "2. Refresh Audio Files"; this.button6.UseVisualStyleBackColor = true; this.button6.Click += new System.EventHandler(this.button6_Click); // // button4 // this.button4.Location = new System.Drawing.Point(313, 531); this.button4.Name = "button4"; this.button4.Size = new System.Drawing.Size(104, 21); this.button4.TabIndex = 15; this.button4.Text = "Select none"; this.button4.UseVisualStyleBackColor = true; this.button4.Click += new System.EventHandler(this.button4_Click_1); // // button3 // this.button3.Location = new System.Drawing.Point(25, 531); this.button3.Name = "button3"; this.button3.Size = new System.Drawing.Size(103, 21); this.button3.TabIndex = 14; this.button3.Text = "Select all"; this.button3.UseVisualStyleBackColor = true; this.button3.Click += new System.EventHandler(this.button3_Click); // // label7 // this.label7.AutoSize = true; this.label7.Location = new System.Drawing.Point(12, 52); this.label7.Name = "label7"; this.label7.Size = new System.Drawing.Size(96, 13); this.label7.TabIndex = 17; this.label7.Text = "File extension filter:"; // // fileExtensionFilter // this.fileExtensionFilter.Location = new System.Drawing.Point(114, 49); this.fileExtensionFilter.Name = "fileExtensionFilter"; this.fileExtensionFilter.Size = new System.Drawing.Size(61, 20); this.fileExtensionFilter.TabIndex = 18; this.fileExtensionFilter.Text = "*.wav"; // // label8 // this.label8.AutoSize = true; this.label8.Location = new System.Drawing.Point(120, 75); this.label8.Name = "label8"; this.label8.Size = new System.Drawing.Size(150, 13); this.label8.TabIndex = 19; this.label8.Text = "Use double click to (de-)select"; // // openFileDialog1 // this.openFileDialog1.DefaultExt = "csv"; this.openFileDialog1.FileName = "openFileDialog1"; // // button13 // this.button13.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.button13.Location = new System.Drawing.Point(429, 45); this.button13.Name = "button13"; this.button13.Size = new System.Drawing.Size(77, 21); this.button13.TabIndex = 31; this.button13.Text = "Refresh!"; this.button13.UseVisualStyleBackColor = true; this.button13.Click += new System.EventHandler(this.button13_Click); // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(978, 564); this.Controls.Add(this.label8); this.Controls.Add(this.fileExtensionFilter); this.Controls.Add(this.label7); this.Controls.Add(this.button4); this.Controls.Add(this.button3); this.Controls.Add(this.button6); this.Controls.Add(this.button5); this.Controls.Add(this.groupBox2); this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Controls.Add(this.selectedFolder); this.Controls.Add(this.button2); this.Controls.Add(this.groupBox1); this.Controls.Add(this.fileListBox); this.Controls.Add(this.button1); this.Name = "Form1"; this.Text = "openSMILE batch processing GUI"; this.Load += new System.EventHandler(this.Form1_Load); this.groupBox1.ResumeLayout(false); this.groupBox1.PerformLayout(); this.groupBox2.ResumeLayout(false); this.groupBox2.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button button1; private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1; private System.Windows.Forms.CheckedListBox fileListBox; private System.Windows.Forms.ProgressBar progressBar1; private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.CheckBox haveCsvOut; private System.Windows.Forms.CheckBox haveArffOut; private System.Windows.Forms.CheckBox haveLldCsvOut; private System.Windows.Forms.Button button2; private System.Windows.Forms.TextBox selectedFolder; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.GroupBox groupBox2; private System.Windows.Forms.Label progressLabel; private System.Windows.Forms.Button button5; private System.Windows.Forms.Button button6; private System.Windows.Forms.Button button4; private System.Windows.Forms.Button button3; private System.Windows.Forms.Button button9; private System.Windows.Forms.TextBox csvOutName; private System.Windows.Forms.Button button8; private System.Windows.Forms.TextBox lldCsvOutName; private System.Windows.Forms.Button button7; private System.Windows.Forms.Label label4; private System.Windows.Forms.TextBox arffOutName; private System.Windows.Forms.Label label3; private System.Windows.Forms.ComboBox configurations; private System.Windows.Forms.Button button10; private System.Windows.Forms.Label label5; private System.Windows.Forms.TextBox workDirectory; private System.Windows.Forms.Label label6; private System.Windows.Forms.CheckBox arffAppend; private System.Windows.Forms.CheckBox csvAppend; private System.Windows.Forms.CheckBox lldCsvAppend; private System.Windows.Forms.Label label7; private System.Windows.Forms.TextBox fileExtensionFilter; private System.Windows.Forms.Label label8; private System.Windows.Forms.SaveFileDialog saveFileDialogArff; private System.Windows.Forms.SaveFileDialog saveFileDialogCsv; private System.Windows.Forms.SaveFileDialog saveFileDialogLldCsv; private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog2; private System.Windows.Forms.TextBox logBox; private System.Windows.Forms.Label label9; private System.Windows.Forms.TextBox labelFile; private System.Windows.Forms.Button button11; private System.Windows.Forms.OpenFileDialog openFileDialog1; private System.Windows.Forms.Button button12; private System.Windows.Forms.Button button13; } } ================================================ FILE: progsrc/openSMILEbatchGUI/Form1.cs ================================================ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; using System.IO; using System.Diagnostics; namespace openSMILEbatchGUI { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button4_Click(object sender, EventArgs e) { } private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e) { } private void buildSelFileListFromFolder() { fileListBox.Items.Clear(); // iterate through directory if (System.IO.Directory.Exists(selectedFolder.Text)) { string[] files = System.IO.Directory.GetFiles(@selectedFolder.Text, fileExtensionFilter.Text); foreach (string f in files) { string fname = System.IO.Path.GetFileName(f); fileListBox.Items.Add(fname); } } selectAllFiles(true); } private void button2_Click(object sender, EventArgs e) { if (selectedFolder.Text != "") { folderBrowserDialog1.SelectedPath = selectedFolder.Text; } else { folderBrowserDialog1.SelectedPath = System.IO.Directory.GetCurrentDirectory(); } folderBrowserDialog1.RootFolder = Environment.SpecialFolder.MyComputer; if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) { selectedFolder.Text = folderBrowserDialog1.SelectedPath; buildSelFileListFromFolder(); } } private void Form1_Load(object sender, EventArgs e) { workDirectory.Text = System.IO.Path.GetFullPath("."); // System.IO.Directory.GetCurrentDirectory(); refreshConfigFiles(); MessageBox.Show("Please set work directory to the root (trunk) directory of the openSMILE package!"); } private void refreshConfigFiles() { string cd = workDirectory.Text + "\\config"; if (System.IO.Directory.Exists(cd)) { string[] files = System.IO.Directory.GetFiles(@cd, "*.conf"); string defaultConfig = ""; foreach (string f in files) { string fname = System.IO.Path.GetFileName(f); configurations.Items.Add(fname); if (fname == "GenevaExtended.conf") { defaultConfig = fname; } if (defaultConfig == "" && fname == "IS09_emotion.conf") { defaultConfig = fname; } } // default: Geneva Extended, if available, else IS09 emotion configurations.Text = defaultConfig; } else { //MessageBox.Show("Directory with openSMILE configuration files (" + cd + ") does not exist. Please change the 'Work directory' setting accordingly!"); } } private void button11_Click(object sender, EventArgs e) { refreshConfigFiles(); } private void button6_Click(object sender, EventArgs e) { selectedFolder.Text = System.IO.Path.GetFullPath(selectedFolder.Text); buildSelFileListFromFolder(); } private void selectAllFiles(bool state = true) { for (int i = 0; i < fileListBox.Items.Count; i++) { fileListBox.SetItemChecked(i, state); } } private void button3_Click(object sender, EventArgs e) { selectAllFiles(true); } private void button4_Click_1(object sender, EventArgs e) { selectAllFiles(false); } private void initProgress(int N) { progressBar1.Maximum = N; progressBar1.Minimum = 0; progressBar1.Step = 1; progressBar1.Value = 0; } private void logProgress(int i, int N) { progressBar1.Value = i; progressLabel.Text = "Processing file " + i.ToString() + " of " + N.ToString() + " ..."; } private void logOutput(string line) { logBox.AppendText(line + "\n"); } private int runSmileBinary(string workpath, string binary, string options) { try { // run opensmile Process p = new System.Diagnostics.Process(); p.EnableRaisingEvents = true; // p.StartInfo.FileName = smilePath; //p.StartInfo.Arguments = smileArgs; p.StartInfo.FileName = "wrapper.exe"; p.StartInfo.Arguments = binary + " " + options; p.StartInfo.WorkingDirectory = workpath; p.StartInfo.UseShellExecute = false; p.StartInfo.CreateNoWindow = true; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardError = true; //p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived); p.ErrorDataReceived += new DataReceivedEventHandler(p_ErrorDataReceived); p.Exited += new EventHandler(p_Exited); // delete old log file if (System.IO.File.Exists(logfile)) { System.IO.File.Delete(logfile); } if (p.Start()) { return p.Id; } else { return 0; } } catch (Win32Exception e) { MessageBox.Show("Could not run wrapper.exe to invoke " + binary + ": " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return 0; } } List filesToProcessQueue; int nextFileIndex = 0; int fileSelCount = 0; string logfile = ""; private void p_ErrorDataReceived(object sendingProcess, DataReceivedEventArgs errLine) { // Write the error text to the file if there is something // to write and an error file has been specified. if (!String.IsNullOrEmpty(errLine.Data)) { this.Invoke(new MethodInvoker(delegate { logOutput(errLine.Data); })); } } // a smile process has finished void p_Exited(object sender, EventArgs e) { // get exit code from process object Process p = (Process)sender; // load log file: string txt = File.ReadAllText(logfile); this.Invoke(new MethodInvoker(delegate { logOutput(txt + "\n"); })); if (p.ExitCode != 0) { // error running smile... this.Invoke(new MethodInvoker(delegate { progressLabel.Text = "An error occurred, see log for details."; prepareUiAfterAnalysisRun(); })); // exit the loop /*int idx = ad.getIndex(); listView1.Invoke(new MethodInvoker(delegate { listView1.Items[idx].Checked = false; listView1.Items[idx].SubItems[2].Text = "error"; listView1.Items[idx].ForeColor = Color.Gray; } ));*/ } else { // run next file in loop this.Invoke(new MethodInvoker(delegate { processNextFile(); })); } p.Dispose(); } private string getLabels(string filename) { if (labels == null) { return ""; } string basename = System.IO.Path.GetFileNameWithoutExtension(filename); string opts = ""; string[] vals = (string[])labels[basename]; if (vals != null) { for (int i = 1; i < vals.Count(); i++) { opts += "-" + classnames[i] + " " + vals[i] + " "; } //MessageBox.Show(opts); } return opts; } private void processNextFile() { bool next = true; while (next) { logProgress(nextFileIndex, fileSelCount); if (nextFileIndex < fileSelCount) { string f = filesToProcessQueue[nextFileIndex]; nextFileIndex++; this.Invoke(new MethodInvoker(delegate { // get labels string extraoptions = getLabels(f); if (labelFile.Text != "" && extraoptions == "") { logOutput("Skipping file '" + f + "'. Not in label list.\n"); } else { logOutput("Processing file '" + f + "'.\n"); next = false; // run openSMILE runOpenSMILE(f, extraoptions); } } )); } else { this.Invoke(new MethodInvoker(delegate { progressLabel.Text = "Done."; prepareUiAfterAnalysisRun(); })); next = false; } } } System.Collections.Hashtable labels; string[] classnames; private void runOpenSMILE(string filename, string extraoptions="") { string binary = System.IO.Path.GetFullPath(workDirectory.Text + "\\SMILExtract_Release.exe"); logfile = System.IO.Path.GetFullPath(workDirectory.Text + "\\smile.log"); string options = "-C \"" + System.IO.Path.GetFullPath(workDirectory.Text + "\\config\\" + configurations.Text) + "\" "; options += "-logfile \"" + logfile + "\" "; string wavFilename = System.IO.Path.GetFullPath(filename); options += "-I \"" + wavFilename + "\" "; options += "-instname \"" + Path.GetFileName(wavFilename) + "\" "; string arffOutFile = System.IO.Path.GetFullPath(arffOutName.Text); string csvOutFile = System.IO.Path.GetFullPath(csvOutName.Text); string lldCsvOutFile = System.IO.Path.GetFullPath(lldCsvOutName.Text); if (haveArffOut.Checked) { options += "-O \"" + arffOutFile + "\" "; if (arffAppend.Checked) { options += "-appendarff 1 "; // note: this is the default } else { options += "-appendarff 0 "; } } else { options += "-O ? "; } if (haveCsvOut.Checked) { options += "-csvoutput \"" + csvOutFile + "\" "; if (csvAppend.Checked) { options += "-appendcsv 1 "; } else { options += "-appendcsv 0 "; } } else { options += "-csvoutput ? "; } if (haveLldCsvOut.Checked) { options += "-lldcsvoutput \"" + lldCsvOutFile + "\" "; if (lldCsvAppend.Checked) { options += "-appendcsvlld 1 "; } else { options += "-appendcsvlld 0 "; } } else { options += "-lldcsvoutput ? "; } /* * if (!createLogFile.Checked) { options += "-nologfile "; } * */ options += "-l 2 "; options += extraoptions + " "; logBox.AppendText("Running command: '" + binary + " " + options + "'\n"); if (runSmileBinary(System.IO.Path.GetFullPath(workDirectory.Text), binary, options) == 0) { prepareUiAfterAnalysisRun(); } } private void prepareUiForAnalysisRun() { // disable all controls that should not be changed during the analysis run groupBox1.Enabled = false; selectedFolder.Enabled = false; button1.Enabled = false; button2.Enabled = false; button3.Enabled = false; button4.Enabled = false; button5.Enabled = true; fileListBox.Enabled = false; } private void prepareUiAfterAnalysisRun() { groupBox1.Enabled = true; selectedFolder.Enabled = true; button1.Enabled = true; button2.Enabled = true; button3.Enabled = true; button4.Enabled = true; button5.Enabled = false; fileListBox.Enabled = true; } private int getNumFilesSelected() { int fileSelCount = 0; for (int i = 0; i < fileListBox.Items.Count; i++) { if (fileListBox.GetItemChecked(i)) { fileSelCount++; } } return fileSelCount; } private void runAnalysisLoop() { fileSelCount = getNumFilesSelected(); if (fileSelCount > 0) { prepareUiForAnalysisRun(); initProgress(fileSelCount); // TODO: thread this! filesToProcessQueue = new List(); for (int i = 0; i < fileListBox.Items.Count; i++) { if (fileListBox.GetItemChecked(i)) { string f = selectedFolder.Text + "\\" + fileListBox.Items[i].ToString(); filesToProcessQueue.Add(f); } } // in append mode, delete existing files if (haveArffOut.Checked && arffAppend.Checked && File.Exists(arffOutName.Text)) { DialogResult dlrs = MessageBox.Show("The ARFF output file already exists. The existing file will be deleted now. Proceed?", "Overwrite files?", MessageBoxButtons.YesNo); if (dlrs == DialogResult.Yes) { File.Delete(arffOutName.Text); } else { prepareUiAfterAnalysisRun(); return; } // TODO: show a warning dialogue and ask for overwrite yes/no } if (haveCsvOut.Checked && csvAppend.Checked && File.Exists(csvOutName.Text)) { DialogResult dlrs = MessageBox.Show("The CSV output file already exists. The existing file will be deleted now. Proceed?", "Overwrite files?", MessageBoxButtons.YesNo); if (dlrs == DialogResult.Yes) { File.Delete(csvOutName.Text); } else { prepareUiAfterAnalysisRun(); return; } } if (haveLldCsvOut.Checked && lldCsvAppend.Checked && File.Exists(lldCsvOutName.Text)) { DialogResult dlrs = MessageBox.Show("The LLD CSV output file already exists. The existing file will be deleted now. Proceed?", "Overwrite files?", MessageBoxButtons.YesNo); if (dlrs == DialogResult.Yes) { File.Delete(lldCsvOutName.Text); } else { prepareUiAfterAnalysisRun(); return; } } nextFileIndex = 0; processNextFile(); // start with the first } else { MessageBox.Show("No files selected for processing! Please select some files in the box on the left (use double click, or the 'select all' button)"); } } private bool loadLabelList() { if (labelFile.Text == "") { return true; } if (System.IO.File.Exists(labelFile.Text)) { string[] labelLines = File.ReadAllLines(@labelFile.Text); string[] labelVals = labelLines[0].Split(';'); classnames = new string[labelLines.Count()]; classnames[0] = "Filename"; for (int i = 1; i < labelVals.Count(); i++) { classnames[i] = labelVals[i]; } labels = new System.Collections.Hashtable(); for (int i = 1; i < labelLines.Count(); i++) { string[] labelValues = labelLines[i].Split(';'); string filename = System.IO.Path.GetFileNameWithoutExtension(labelValues[0]); labels.Add(filename, labelValues); } return true; } else { MessageBox.Show("ERROR: Label file not found! Please leave field empty if you do not have a label file."); } return false; } private void button1_Click(object sender, EventArgs e) { if (loadLabelList()) { runAnalysisLoop(); } } private void button7_Click(object sender, EventArgs e) { if (saveFileDialogArff.ShowDialog() == DialogResult.OK) { arffOutName.Text = saveFileDialogArff.FileName; haveArffOut.Checked = true; } } private void button8_Click(object sender, EventArgs e) { if (saveFileDialogLldCsv.ShowDialog() == DialogResult.OK) { lldCsvOutName.Text = saveFileDialogLldCsv.FileName; haveLldCsvOut.Checked = true; } } private void button9_Click(object sender, EventArgs e) { if (saveFileDialogCsv.ShowDialog() == DialogResult.OK) { csvOutName.Text = saveFileDialogCsv.FileName; haveCsvOut.Checked = true; } } private void fileListBox_ItemCheck(object sender, ItemCheckEventArgs e) { if (getNumFilesSelected() > 0) { button1.Enabled = true; } else { button1.Enabled = false; } } private void workDirectory_TextChanged(object sender, EventArgs e) { refreshConfigFiles(); } private void button10_Click(object sender, EventArgs e) { folderBrowserDialog2.RootFolder = Environment.SpecialFolder.MyComputer; folderBrowserDialog2.SelectedPath = workDirectory.Text; if (folderBrowserDialog2.ShowDialog() == DialogResult.OK) { workDirectory.Text = folderBrowserDialog2.SelectedPath; } if (System.IO.Directory.Exists(workDirectory.Text)) { System.IO.Directory.CreateDirectory(workDirectory.Text + "\\data"); } } private void haveLldCsvOut_CheckedChanged(object sender, EventArgs e) { } private void button5_Click(object sender, EventArgs e) { filesToProcessQueue.Clear(); } private void button11_Click_1(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == DialogResult.OK) { labelFile.Text = openFileDialog1.FileName; } } private void labelFile_TextChanged(object sender, EventArgs e) { } Form2 form2 = null; private void button12_Click(object sender, EventArgs e) { if (form2 == null) { form2 = new Form2(); } form2.Show(); } private void label5_Click(object sender, EventArgs e) { } private void button13_Click(object sender, EventArgs e) { workDirectory.Text = System.IO.Path.GetFullPath(workDirectory.Text); refreshConfigFiles(); if (arffOutName.Text == "") { arffOutName.Text = workDirectory.Text + "\\data\\output.arff"; } if (csvOutName.Text == "") { csvOutName.Text = workDirectory.Text + "\\data\\output.csv"; } if (lldCsvOutName.Text == "") { lldCsvOutName.Text = workDirectory.Text + "\\data\\output_lld.csv"; } } } } ================================================ FILE: progsrc/openSMILEbatchGUI/Form1.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 17, 17 175, 17 315, 17 455, 17 609, 17 17, 54 ================================================ FILE: progsrc/openSMILEbatchGUI/Form2.Designer.cs ================================================ namespace openSMILEbatchGUI { partial class Form2 { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form2)); this.richTextBox1 = new System.Windows.Forms.RichTextBox(); this.button1 = new System.Windows.Forms.Button(); this.SuspendLayout(); // // richTextBox1 // this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; this.richTextBox1.Location = new System.Drawing.Point(31, 25); this.richTextBox1.Name = "richTextBox1"; this.richTextBox1.ReadOnly = true; this.richTextBox1.Size = new System.Drawing.Size(477, 213); this.richTextBox1.TabIndex = 0; this.richTextBox1.Text = resources.GetString("richTextBox1.Text"); // // button1 // this.button1.Location = new System.Drawing.Point(247, 247); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(75, 23); this.button1.TabIndex = 1; this.button1.Text = "Close"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); // // Form2 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(540, 282); this.Controls.Add(this.button1); this.Controls.Add(this.richTextBox1); this.Name = "Form2"; this.Text = "Label File Format"; this.ResumeLayout(false); } #endregion private System.Windows.Forms.RichTextBox richTextBox1; private System.Windows.Forms.Button button1; } } ================================================ FILE: progsrc/openSMILEbatchGUI/Form2.cs ================================================ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace openSMILEbatchGUI { public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Hide(); } } } ================================================ FILE: progsrc/openSMILEbatchGUI/Program.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace openSMILEbatchGUI { static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } ================================================ FILE: progsrc/openSMILEbatchGUI/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("openSMILEbatchGUI")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Microsoft")] [assembly: AssemblyProduct("openSMILEbatchGUI")] [assembly: AssemblyCopyright("Copyright © Microsoft 2014")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("74eac452-fa25-4e21-89a3-30088f659b20")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] ================================================ FILE: progsrc/openSMILEbatchGUI/Properties/Resources.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.2034 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace openSMILEbatchGUI.Properties { /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if ((resourceMan == null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("openSMILEbatchGUI.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } } } ================================================ FILE: progsrc/openSMILEbatchGUI/Properties/Resources.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ================================================ FILE: progsrc/openSMILEbatchGUI/Properties/Settings.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.2034 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace openSMILEbatchGUI.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); public static Settings Default { get { return defaultInstance; } } } } ================================================ FILE: progsrc/openSMILEbatchGUI/Properties/Settings.settings ================================================  ================================================ FILE: progsrc/openSMILEbatchGUI/openSMILEbatchGUI.csproj ================================================  Debug x86 8.0.30703 2.0 {2DE82BD3-FE77-4ADD-8537-B4451DBDBB39} WinExe Properties openSMILEbatchGUI openSMILEbatchGUI v4.0 Client 512 x86 true full false bin\Debug\ DEBUG;TRACE prompt 4 x86 pdbonly true bin\Release\ TRACE prompt 4 Form Form1.cs Form Form2.cs Form1.cs Form2.cs ResXFileCodeGenerator Resources.Designer.cs Designer True Resources.resx SettingsSingleFileGenerator Settings.Designer.cs True Settings.settings True ================================================ FILE: progsrc/openSMILEbatchGUI/openSMILEbatchGUI.sln ================================================  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "openSMILEbatchGUI", "openSMILEbatchGUI.csproj", "{2DE82BD3-FE77-4ADD-8537-B4451DBDBB39}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x86 = Debug|x86 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {2DE82BD3-FE77-4ADD-8537-B4451DBDBB39}.Debug|x86.ActiveCfg = Debug|x86 {2DE82BD3-FE77-4ADD-8537-B4451DBDBB39}.Debug|x86.Build.0 = Debug|x86 {2DE82BD3-FE77-4ADD-8537-B4451DBDBB39}.Release|x86.ActiveCfg = Release|x86 {2DE82BD3-FE77-4ADD-8537-B4451DBDBB39}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: progsrc/smilextract/SMILExtract.cpp ================================================ /*F*************************************************************************** * * openSMILE - the Munich open source Multimedia Interpretation by * Large-scale Extraction toolkit * * This file is part of openSMILE. * * openSMILE is copyright (c) by audEERING GmbH. All rights reserved. * * See file "COPYING" for details on usage rights and licensing terms. * By using, copying, editing, compiling, modifying, reading, etc. this * file, you agree to the licensing terms in the file COPYING. * If you do not agree to the licensing terms, * you must immediately destroy all copies of this file. * * THIS SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, * IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST * INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE * OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL * ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS * DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. * NEITHER TUM NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY * DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE AGREEMENT, INCLUDING * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE * MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. * ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE * THE SOFTWARE OR DERIVATIVE WORKS. * * Main authors: Florian Eyben, Felix Weninger, * Martin Woellmer, Bjoern Schuller * * Copyright (c) 2008-2013, * Institute for Human-Machine Communication, * Technische Universitaet Muenchen, Germany * * Copyright (c) 2013-2015, * audEERING UG (haftungsbeschraenkt), * Gilching, Germany * * Copyright (c) 2016, * audEERING GmbH, * Gilching Germany ***************************************************************************E*/ /* This is the main commandline application */ #include #include #include #include #define MODULE "SMILExtract" /************** Ctrl+C signal handler **/ #include cComponentManager *cmanGlob = NULL; void INThandler(int); int ctrlc = 0; void INThandler(int sig) { signal(sig, SIG_IGN); if (cmanGlob != NULL) cmanGlob->requestAbort(); signal(SIGINT, INThandler); ctrlc = 1; } /*******************************************/ int main(int argc, const char *argv[]) { try { smileCommon_fixLocaleEnUs(); // set up the smile logger LOGGER.setLogLevel(1); LOGGER.enableConsoleOutput(); // commandline parser: cCommandlineParser cmdline(argc,argv); cmdline.addStr( "configfile", 'C', "Path to openSMILE config file", "smile.conf" ); cmdline.addInt( "loglevel", 'l', "Verbosity level (0-9)", 2 ); #ifdef DEBUG cmdline.addBoolean( "debug", 'd', "Show debug messages (on/off)", 0 ); #endif cmdline.addInt( "nticks", 't', "Number of ticks to process (-1 = infinite) (only works for single thread processing, i.e. nThreads=1)", -1 ); //cmdline.addBoolean( "configHelp", 'H', "Show documentation of registered config types (on/off)", 0 ); cmdline.addBoolean( "components", 'L', "Show component list", 0 ); cmdline.addStr( "configHelp", 'H', "Show documentation of registered config types (on/off/argument) (if an argument is given, show only documentation for config types beginning with the name given in the argument)", NULL, 0 ); cmdline.addStr( "configDflt", 0, "Show default config section templates for each config type (on/off/argument) (if an argument is given, show only documentation for config types beginning with the name given in the argument, OR for a list of components in conjunctions with the 'cfgFileTemplate' option enabled)", NULL, 0 ); cmdline.addBoolean( "cfgFileTemplate", 0, "Print a complete template config file for a configuration containing the components specified in a comma separated string as argument to the 'configDflt' option", 0 ); cmdline.addBoolean( "cfgFileDescriptions", 0, "Include description in config file templates.", 0 ); cmdline.addBoolean( "ccmdHelp", 'c', "Show custom commandline option help (those specified in config file)", 0 ); cmdline.addStr( "logfile", 0, "set log file", "smile.log" ); cmdline.addBoolean( "nologfile", 0, "don't write to a log file (e.g. on a read-only filesystem)", 0 ); cmdline.addBoolean( "noconsoleoutput", 0, "don't output any messages to the console (log file is not affected by this option)", 0 ); cmdline.addBoolean( "appendLogfile", 0, "append log messages to an existing logfile instead of overwriting the logfile at every start", 0 ); int help = 0; if (cmdline.doParse() == -1) { LOGGER.setLogLevel(0); help = 1; } if (argc <= 1) { printf("\nNo commandline options were given.\n Please run ' SMILExtract -h ' to see some usage information!\n\n"); return 10; } if (help==1) { return 0; } if (cmdline.getBoolean("nologfile")) { LOGGER.setLogFile((const char *)NULL,0,!(cmdline.getBoolean("noconsoleoutput"))); } else { LOGGER.setLogFile(cmdline.getStr("logfile"),cmdline.getBoolean("appendLogfile"),!(cmdline.getBoolean("noconsoleoutput"))); } LOGGER.setLogLevel(cmdline.getInt("loglevel")); SMILE_MSG(2,"openSMILE starting!"); #ifdef DEBUG // ?? if (!cmdline.getBoolean("debug")) LOGGER.setLogLevel(LOG_DEBUG, 0); #endif SMILE_MSG(2,"config file is: %s",cmdline.getStr("configfile")); // create configManager: cConfigManager *configManager = new cConfigManager(&cmdline); cComponentManager *cMan = new cComponentManager(configManager,componentlist); const char *selStr=NULL; if (cmdline.isSet("configHelp")) { #ifndef EXTERNAL_BUILD selStr = cmdline.getStr("configHelp"); configManager->printTypeHelp(1/*!!! -> 1*/,selStr,0); #endif help = 1; } if (cmdline.isSet("configDflt")) { #ifndef EXTERNAL_BUILD int fullMode=0; int wDescr = 0; if (cmdline.getBoolean("cfgFileTemplate")) fullMode=1; if (cmdline.getBoolean("cfgFileDescriptions")) wDescr=1; selStr = cmdline.getStr("configDflt"); configManager->printTypeDfltConfig(selStr,1,fullMode,wDescr); #endif help = 1; } if (cmdline.getBoolean("components")) { #ifndef EXTERNAL_BUILD cMan->printComponentList(); #endif // EXTERNAL_BUILD help = 1; } if (help==1) { delete configManager; delete cMan; return -1; } // TODO: read config here and print ccmdHelp... // add the file config reader: try{ configManager->addReader( new cFileConfigReader( cmdline.getStr("configfile"), -1, &cmdline) ); configManager->readConfig(); } catch (cConfigException *cc) { return 0; } /* re-parse the command-line to include options created in the config file */ cmdline.doParse(1,0); // warn if unknown options are detected on the commandline if (cmdline.getBoolean("ccmdHelp")) { cmdline.showUsage(); delete configManager; delete cMan; return -1; } /* create all instances specified in the config file */ cMan->createInstances(0); // 0 = do not read config (we already did that above..) /* MAIN TICK LOOP : */ cmanGlob = cMan; signal(SIGINT, INThandler); // install Ctrl+C signal handler /* run single or mutli-threaded, depending on componentManager config in config file */ long long nTicks = cMan->runMultiThreaded(cmdline.getInt("nticks")); /* it is important that configManager is deleted BEFORE componentManger! (since component Manager unregisters plugin Dlls, which might have allocated configTypes, etc.) */ delete configManager; delete cMan; } catch(cSMILException *c) { // free exception ?? return EXIT_ERROR; } if (ctrlc) return EXIT_CTRLC; return EXIT_SUCCESS; } ================================================ FILE: progsrc/tools/compile_libsvmBinaryModelconverter.sh ================================================ #!/bin/sh # This file is part of openSMILE. # # Copyright (c) audEERING. All rights reserved. # See the file COPYING for details on license terms. echo g++ -g -DNOSMILE -I../../src/include -c ../../src/classifiers/libsvm/svm.cpp -o svm.o g++ -g -DNOSMILE -c -I../../src/include ../../src/classifiers/libsvm/svm.cpp -o svm.o echo g++ -g -DNOSMILE -I../../src/include libsvmBinaryModelconverter.cpp svm.o -o modelconverter g++ -g -DNOSMILE -I../../src/include libsvmBinaryModelconverter.cpp svm.o -o modelconverter ================================================ FILE: progsrc/tools/convertAllLibsvmModels.sh ================================================ #!/bin/sh BINDIR=`dirname "$0"` MODELDIR="$BINDIR/../models" MODELDIR=`(cd $MODELDIR ; pwd)` for f in `find $MODELDIR -name allft.model -print` ; do $BINDIR/modelconverter $f ${f}.bin done ================================================ FILE: progsrc/tools/libsvmBinaryModelconverter.cpp ================================================ /*F*************************************************************************** * * openSMILE - the Munich open source Multimedia Interpretation by * Large-scale Extraction toolkit * * This file is part of openSMILE. * * openSMILE is copyright (c) by audEERING GmbH. All rights reserved. * * See file "COPYING" for details on usage rights and licensing terms. * By using, copying, editing, compiling, modifying, reading, etc. this * file, you agree to the licensing terms in the file COPYING. * If you do not agree to the licensing terms, * you must immediately destroy all copies of this file. * * THIS SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, * IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST * INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE * OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL * ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS * DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. * NEITHER TUM NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY * DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE AGREEMENT, INCLUDING * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE * MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. * ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE * THE SOFTWARE OR DERIVATIVE WORKS. * * Main authors: Florian Eyben, Felix Weninger, * Martin Woellmer, Bjoern Schuller * * Copyright (c) 2008-2013, * Institute for Human-Machine Communication, * Technische Universitaet Muenchen, Germany * * Copyright (c) 2013-2015, * audEERING UG (haftungsbeschraenkt), * Gilching, Germany * * Copyright (c) 2016, * audEERING GmbH, * Gilching Germany ***************************************************************************E*/ #include #include int main(int argc, char**argv) { if (argc < 3) { printf("\nUSAGE: %s \n",argv[0]); printf(" Convert an ASCII LibSVM model file into a binary LibSVM model file.\n\n"); printf("USAGE: %s - \n",argv[0]); printf(" Convert a binary LibSVM model file into an ASCII LibSVM model file.\n\n"); return -1; } if (argv[1][0] == '-') { // bin -> ASCII if (argc < 4) { printf("USAGE: %s - \n",argv[0]); printf(" Convert a binary LibSVM model file into an ASCII LibSVM model file.\n\n"); return -1; } printf("Loading binary model '%s'... ",argv[2]); svm_model * m = svm_load_binary_model(argv[2]); if (m==NULL) { printf("\nERROR: failed loading model '%s'!\n",argv[2]); return -2; } printf ("OK\n"); printf("Saving ASCII model '%s'... ",argv[3]); int r = svm_save_model(argv[3],m); if (!r) printf ("OK\n"); else { printf("ERROR: failed saving ASCII model '%s' (code=%i)\n",argv[3],r); return -3; } svm_destroy_model(m); } else { // ASCII -> bin printf("Loading ASCII model '%s'... ",argv[1]); svm_model * m = svm_load_model(argv[1]); if (m==NULL) { printf("\nERROR: failed loading model '%s'!\n",argv[1]); return -2; } printf ("OK\n"); printf("Saving binary model '%s'... ",argv[2]); int r = svm_save_binary_model(argv[2],m); if (!r) printf ("OK\n"); else { printf("ERROR: failed saving binary model '%s' (code=%i)\n",argv[2],r); return -3; } svm_destroy_model(m); } return 0; } ================================================ FILE: progsrc/tools/modelmake.c ================================================ /*F*************************************************************************** * * openSMILE - the Munich open source Multimedia Interpretation by * Large-scale Extraction toolkit * * This file is part of openSMILE. * * openSMILE is copyright (c) by audEERING GmbH. All rights reserved. * * See file "COPYING" for details on usage rights and licensing terms. * By using, copying, editing, compiling, modifying, reading, etc. this * file, you agree to the licensing terms in the file COPYING. * If you do not agree to the licensing terms, * you must immediately destroy all copies of this file. * * THIS SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, * IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST * INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE * OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL * ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS * DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. * NEITHER TUM NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY * DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE AGREEMENT, INCLUDING * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE * MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. * ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE * THE SOFTWARE OR DERIVATIVE WORKS. * * Main authors: Florian Eyben, Felix Weninger, * Martin Woellmer, Bjoern Schuller * * Copyright (c) 2008-2013, * Institute for Human-Machine Communication, * Technische Universitaet Muenchen, Germany * * Copyright (c) 2013-2015, * audEERING UG (haftungsbeschraenkt), * Gilching, Germany * * Copyright (c) 2016, * audEERING GmbH, * Gilching Germany ***************************************************************************E*/ #include #include /* sample code to make a 1-nn model from mfcc feature files (bianry format.. ??) */ int main(int argc, char**argv) { if (argc < 3) { printf("Usage: a.out \n"); return -1; } int i; long Nv=0; float N,nVec; float *means = NULL; for (i=1; i\n"; exit; } open(FILE,"<$arff"); $data=0; my @attr; @nonzero; $N=0; while() { my $line=$_; $line=~ s/\n$//; $line=~s/\r$//; if ($data) { @el = split(/,/,$line); $N=$#el+1; for ($i=0; $i<=$#el; $i++) { if ($el[$i] != 0.0) { $nonzero[$i] = 1; } #if ($el[$i] !~ /^0\.000000e\+00/) { # $nonzero[$i] = 1; #} if (($el[$i] =~ /nan/i)||($el[$i] =~ /inf/i)) { print "nan/inf @ # $i = $attr[$i]\n"; } } } else { if($line=~/^\@data/) { $data = 1; } else { if($line=~/^\@attribute ([^ ]+) /) { push(@attr,$1); } } } } close(FILE); for ($i=0; $i<$N; $i++) { unless ($nonzero[$i]) { print "all-zero: ".$attr[$i]."\n"; } } ================================================ FILE: scripts/avec2012/README.txt ================================================ Root folder: avec2012/ place scripts and configs into avec2012/featureextraction extract the train/test/devel zips into avec2012/audio so that you have avec2012/audio/devel/wav/ avec2012/audio/devel/words/ ... then cd avec2012/featureextraction and run "perl extr.pl" This creates the features in avec2012/arff/ For word-level audio features, (voiced) segment level features, and phrase level features and the LLDs based on voiced segments All the feature files include frame timestamps and durations (except for the LLD files). These are the two fields following the instance ID string (they are relative to the start time found in the instance ID strin). The instance ID string contains the start time (seconds) of the current word, phrase, or voiced segment relative to the start of the audio file. Voiced segment level functionals follow an incremental and overlapping sampling : every 0.5s a 2s window is sampled Phrase and word functionals are computed over the whole unit (phrase or word) Phrase and voiced segment boundaries are put when a pause between words is > 1.0 seconds. The threshold is decreased linearly for phrase boundaries it make a phrase end more likely and force it at the next pause > 0 after 20 seconds. (i.e. after 10 seconds phrase duration the threshold will be 0.5 seconds) Currently missing: averaging of 4 LLD frames (~resampling of LLD to match the video rate...) ================================================ FILE: scripts/avec2012/avec2011_full.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file ////////////////// ///////// for AVEC 2011 ////////////////// ///////// based on avec2011.conf ////////////////// ///////// * written 2012 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) 2011-2013 TUM, MMK ////////////////// ///////// (c) 2014 audEERING UG (limited) ////////////////// ///////// All rights reserved, see file COPYING for license terms ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory printLevelStats=0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; main section ;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[waveIn].type=cWaveSource [waveIn:cWaveSource] writer.dmLevel=wave filename=\cm[inputfile(I){test.wav}:name of input file] monoMixdown=1 start = \cm[start{0}:start in input wave file in seconds] end = \cm[end{-1}:end in input wave file in seconds] ;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame60].type=cFramer instance[win60].type=cWindower instance[fft60].type=cTransformFFT instance[fftmp60].type=cFFTmagphase [frame60:cFramer] reader.dmLevel=wave writer.dmLevel=frame60 frameSize = 0.060 frameStep = 0.010 frameCenterSpecial = left [win60:cWindower] reader.dmLevel=frame60 writer.dmLevel=winG60 winFunc=gauss gain=1.0 sigma=0.4 [fft60:cTransformFFT] reader.dmLevel=winG60 writer.dmLevel=fftcG60 [fftmp60:cFFTmagphase] reader.dmLevel=fftcG60 writer.dmLevel=fftmagG60 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame25].type=cFramer instance[pe25].type=cVectorPreemphasis instance[win25].type=cWindower instance[fft25].type=cTransformFFT instance[fftmp25].type=cFFTmagphase [frame25:cFramer] reader.dmLevel=wave writer.dmLevel=frame25 frameSize = 0.025 frameStep = 0.010 frameCenterSpecial = left [pe25:cVectorPreemphasis] reader.dmLevel=frame25 writer.dmLevel=frame25pe k=0.97 de=0 [win25:cWindower] reader.dmLevel=frame25 writer.dmLevel=winH25 winFunc=hamming [fft25:cTransformFFT] reader.dmLevel=winH25 writer.dmLevel=fftcH25 [fftmp25:cFFTmagphase] reader.dmLevel=fftcH25 writer.dmLevel=fftmagH25 ;;;;;;;;;;;;;;;;;;;; HPS pitch [componentInstances:cComponentManager] instance[scale].type=cSpecScale instance[shs].type=cPitchShs instance[pitchSmooth].type=cPitchSmootherViterbi instance[energy60].type=cEnergy instance[volmerge].type=cValbasedSelector [energy60:cEnergy] reader.dmLevel=winG60 writer.dmLevel=e60 rms=1 log=0 writer.levelconf.nT=200 [scale:cSpecScale] reader.dmLevel=fftmagG60 writer.dmLevel=hpsG60 copyInputName = 1 processArrayFields = 0 scale=octave sourceScale = lin // logScaleBase = 2 // logSourceScaleBase = 2 // firstNote = 55 interpMethod = spline minF = 20 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [shs:cPitchShs] reader.dmLevel=hpsG60 writer.dmLevel=pitchShsG60 copyInputName = 1 processArrayFields = 0 maxPitch = 620 minPitch = 42 nCandidates = 6 scores = 1 voicing = 1 F0C1 = 0 voicingC1 = 0 F0raw = 1 voicingClip = 1 voicingCutoff = 0.700000 inputFieldSearch = Mag_octScale octaveCorrection = 0 nHarmonics = 15 compressionFactor = 0.850000 greedyPeakAlgo = 1 [pitchSmooth:cPitchSmootherViterbi] reader.dmLevel=pitchShsG60 reader2.dmLevel=pitchShsG60 writer.dmLevel=pitchG60a copyInputName = 1 bufferLength=90 F0final = 1 F0finalEnv = 0 voicingFinalClipped = 0 voicingFinalUnclipped = 1 F0raw = 0 voicingC1 = 0 voicingClip = 0 wTvv =10.0 wTvvd= 5.0 wTvuv=10.0 wThr = 4.0 wTuu = 0.0 wLocal=2.0 wRange=1.0 // SHS/Viterbi pitch algo does strange things at very low amplitudes, so we filter these out [volmerge:cValbasedSelector] reader.dmLevel = e60;pitchG60a writer.dmLevel = pitchG60 idx=0 threshold=0.0008 removeIdx=1 zeroVec=1 outputVal=0.0 ;;;;;;;;;;;;;;;;;;; VQ [componentInstances:cComponentManager] instance[pitchJitter].type=cPitchJitter [pitchJitter:cPitchJitter] reader.dmLevel = wave writer.dmLevel = jitterShimmer // nameAppend = copyInputName = 1 ; is pitchF really necessary, or can we use pitchG60 ? F0reader.dmLevel = pitchG60 F0field = F0final searchRangeRel = 0.250000 jitterLocal = 1 jitterDDP = 1 jitterLocalEnv = 0 jitterDDPEnv = 0 shimmerLocal = 1 shimmerLocalEnv = 0 onlyVoiced = 0 logHNR = 1 ;periodLengths = 0 ;periodStarts = 0 ;;;;;;;;;;;;;;;;;;;;; Energy / loudness [componentInstances:cComponentManager] instance[melspec1].type=cMelspec instance[audspec].type=cPlp instance[audspecSum].type=cVectorOperation [melspec1:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspec1 ; htk compatible sample value scaling htkcompatible = 0 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = bark ; perform auditory weighting of spectrum [audspec:cPlp] reader.dmLevel=melspec1 writer.dmLevel=audspec firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=0 RASTA=0 [audspecSum:cVectorOperation] reader.dmLevel = audspec writer.dmLevel = audspecSum // nameAppend = copyInputName = 1 processArrayFields = 0 operation = ll1 nameBase = audspec ;;;;;;;;;;;;;;; spectral [componentInstances:cComponentManager] instance[spectral].type=cSpectral [spectral:cSpectral] reader.dmLevel=fftmagH25 writer.dmLevel=spectral bands[0]=250-650 bands[1]=1000-4000 rollOff[0] = 0.25 rollOff[1] = 0.50 rollOff[2] = 0.75 rollOff[3] = 0.90 flux=1 centroid=0 maxPos=0 minPos=0 entropy=1 variance=1 skewness=1 kurtosis=1 slope=0 sharpness = 1 tonality = 0 harmonicity = 1 flatness = 0 ;;;;;;;;;;;;;;; mfcc [componentInstances:cComponentManager] instance[melspecMfcc].type=cMelspec instance[mfcc].type=cMfcc [melspecMfcc:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspecMfcc copyInputName = 1 processArrayFields = 1 ; htk compatible sample value scaling htkcompatible = 1 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = mel inverse = 0 [mfcc:cMfcc] reader.dmLevel=melspecMfcc writer.dmLevel=mfcc1_12 copyInputName = 1 processArrayFields = 1 firstMfcc = 1 lastMfcc = 10 cepLifter = 22.0 htkcompatible = 1 ;;;;;;;;;;;;;;;; zcr [componentInstances:cComponentManager] instance[mzcr].type=cMZcr [mzcr:cMZcr] reader.dmLevel = frame25 writer.dmLevel = zcr copyInputName = 1 processArrayFields = 1 zcr = 1 mcr = 0 amax = 0 maxmin = 0 dc = 0 ;;;;;;;;;;;;;;;;;;;; smoothing and selection [componentInstances:cComponentManager] instance[smoNz].type=cContourSmoother instance[smoA].type=cContourSmoother instance[smoB].type=cContourSmoother instance[f0sel].type=cDataSelector instance[f0psel].type=cDataSelector [smoNz:cContourSmoother] reader.dmLevel = pitchG60;jitterShimmer writer.dmLevel = lld_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 1 [f0sel:cDataSelector] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_f0v_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = f0v selected = F0final_sma [f0psel:cDataSelector] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_f0p_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = f0p selected = F0final_sma [smoA:cContourSmoother] reader.dmLevel = audspecSum;zcr writer.dmLevel = lldA_smo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 [smoB:cContourSmoother] reader.dmLevel = spectral;mfcc1_12 writer.dmLevel = lldB_smo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 ;;;;;;;;; deltas [componentInstances:cComponentManager] instance[deNz].type=cDeltaRegression instance[deA].type=cDeltaRegression instance[deB].type=cDeltaRegression [deNz:cDeltaRegression] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_nzsmo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ; TODO? delta with zero segments removed... [deA:cDeltaRegression] reader.dmLevel = lldA_smo writer.dmLevel = lldA_smo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 [deB:cDeltaRegression] reader.dmLevel = lldB_smo writer.dmLevel = lldB_smo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ;;;;;;;;; functionals / statistics [componentInstances:cComponentManager] instance[functionalsA].type=cFunctionals instance[functionalsAde].type=cFunctionals instance[functionalsF0v].type=cFunctionals instance[functionalsF0p].type=cFunctionals instance[functionalsNz].type=cFunctionals instance[functionalsNzDe].type=cFunctionals instance[functionalsDur].type=cFunctionals ; functionals for energy and spectral related lld [functionalsA:cFunctionals] reader.dmLevel = lldA_smo;lldB_smo writer.dmLevel = functionalsA // nameAppend = copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Percentiles ; Means ; Moments ; Peaks2 ; Segments ; Regression ; Times ; Lpc Means.amean = 1 Means.absmean = 0 Means.rqmean = 1 Means.flatness = 1 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 1 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 1 Peaks2.peakRangeAbs = 0 Peaks2.peakRangeRel = 1 Peaks2.peakMeanAbs = 0 Peaks2.peakMeanMeanDist = 0 Peaks2.peakMeanRel = 1 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 1 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 0 Peaks2.minRisingSlope = 0 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 0 Peaks2.minFallingSlope = 0 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = NArelTh Segments.thresholds = 0.25 Segments.rangeRelThreshold = 0.200000 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Regression.linregc1 = 1 Regression.linregc2 = 0 Regression.linregerrA = 1 Regression.linregerrQ = 0 Regression.qregc1 = 1 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 1 Regression.qregerrQ = 0 Regression.oldBuggyQerr = 0 Regression.centroid = 0 Regression.normRegCoeff = 1 Regression.normInputs = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for energy and spectral related lld [functionalsAde:cFunctionals] reader.dmLevel = lldA_smo_de;lldB_smo_de writer.dmLevel = functionalsAde // nameAppend = copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Percentiles ; Means ; Moments ; Times Means.amean = 0 Means.posamean = 1 Means.absmean = 0 Means.rqmean = 1 Means.flatness = 1 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch onsets/offsets (voiced) [functionalsF0v:cFunctionals] reader.dmLevel = lld_f0v_nzsmo ;lld_f0_nzsmo_de writer.dmLevel = functionalsF0v //nameAppend = ff0 copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Means ; Segments Means.amean = 0 Means.absmean = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 1 Means.norm = segment Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = nonX Segments.X = 0.0 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch onsets (pauses) [functionalsF0p:cFunctionals] reader.dmLevel = lld_f0p_nzsmo writer.dmLevel = functionalsF0p //nameAppend = pauses copyInputName = 0 frameMode = full frameCenterSpecial = left functionalsEnabled = Means ; Segments Means.amean = 0 Means.posamean = 0 Means.absmean = 0 Means.qmean = 0 Means.rqmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 1 Means.flatness = 0 Means.norm = segment Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = eqX Segments.X = 0.0 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch and vq related lld in voiced regions [functionalsNz:cFunctionals] reader.dmLevel = lld_nzsmo writer.dmLevel = functionalsNz // nameAppend = copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Percentiles ; Means ; Moments ; Peaks2 ; Regression ; Times Means.amean = 1 Means.absmean = 0 Means.rqmean = 1 Means.qmean = 0 Means.flatness = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 1 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 1 Peaks2.peakRangeAbs = 0 Peaks2.peakRangeRel = 1 Peaks2.peakMeanAbs = 0 Peaks2.peakMeanMeanDist = 0 Peaks2.peakMeanRel = 1 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 1 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 0 Peaks2.minRisingSlope = 0 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 0 Peaks2.minFallingSlope = 0 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Regression.linregc1 = 1 Regression.linregc2 = 0 Regression.linregerrA = 1 Regression.linregerrQ = 0 Regression.qregc1 = 1 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 1 Regression.qregerrQ = 0 Regression.oldBuggyQerr = 0 Regression.centroid = 0 Regression.normRegCoeff = 1 Regression.normInputs = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 1 masterTimeNorm = segment ; functionals for pitch and vq related lld in voiced regions [functionalsNzDe:cFunctionals] reader.dmLevel = lld_nzsmo_de writer.dmLevel = functionalsNzDe // nameAppend = copyInputName = 1 frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left functionalsEnabled = Percentiles ; Means ; Moments ; Times Means.amean = 0 Means.posamean = 1 Means.absmean = 0 Means.rqmean = 1 Means.qmean = 0 Means.flatness = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 1 masterTimeNorm = segment ; functionals for pitch and vq related lld in voiced regions [functionalsDur:cFunctionals] reader.dmLevel = lld_f0v_nzsmo writer.dmLevel = functionalsDur // nameAppend = copyInputName = 1 frameMode = full frameCenterSpecial = left noPostEOIprocessing=0 functionalsEnabled = Times Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 0 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 1 Times.buggySecNorm = 0 Times.norm = second nonZeroFuncts = 0 masterTimeNorm = second ;;;;;;;;; output all features.... [componentInstances:cComponentManager] instance[arffsink].type=cArffSink [arffsink:cArffSink] reader.dmLevel=functionalsDur;functionalsA;functionalsNz;functionalsAde;functionalsNzDe;functionalsF0v;functionalsF0p filename=\cm[output(O){default.arff}:output arff file for feature data] append=1 frameIndex=0 frameTime=1 relation=avec2012_fullsegment instanceName=\cm[instname{unlabelled}:name of file which will be saved in arff file] ; name of class label class[0].name = arousal class[0].type = numeric class[1].name = expectancy class[1].type = numeric class[2].name = power class[2].type = numeric class[3].name = valence class[3].type = numeric ; the class label or value for the current instance \{labels.inc} ================================================ FILE: scripts/avec2012/avec2011_list.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file ////////////////// ///////// for AVEC 2012 ////////////////// ///////// based on avec2011.conf ////////////////// ///////// * written 2012 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) 2011-2013 TUM, MMK ////////////////// ///////// (c) 2014 audEERING UG (limited) ////////////////// ///////// All rights reserved, see file COPYING for license terms ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory printLevelStats=0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; main section ;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[waveIn].type=cWaveSource [waveIn:cWaveSource] writer.dmLevel=wave filename=\cm[inputfile(I){test.wav}:name of input file] monoMixdown=1 start = \cm[start{0}:start in input wave file in seconds] end = \cm[end{-1}:end in input wave file in seconds] ;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame60].type=cFramer instance[win60].type=cWindower instance[fft60].type=cTransformFFT instance[fftmp60].type=cFFTmagphase [frame60:cFramer] reader.dmLevel=wave writer.dmLevel=frame60 frameSize = 0.060 frameStep = 0.010 frameCenterSpecial = left [win60:cWindower] reader.dmLevel=frame60 writer.dmLevel=winG60 winFunc=gauss gain=1.0 sigma=0.4 [fft60:cTransformFFT] reader.dmLevel=winG60 writer.dmLevel=fftcG60 [fftmp60:cFFTmagphase] reader.dmLevel=fftcG60 writer.dmLevel=fftmagG60 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame25].type=cFramer instance[pe25].type=cVectorPreemphasis instance[win25].type=cWindower instance[fft25].type=cTransformFFT instance[fftmp25].type=cFFTmagphase [frame25:cFramer] reader.dmLevel=wave writer.dmLevel=frame25 frameSize = 0.025 frameStep = 0.010 frameCenterSpecial = left [pe25:cVectorPreemphasis] reader.dmLevel=frame25 writer.dmLevel=frame25pe k=0.97 de=0 [win25:cWindower] reader.dmLevel=frame25 writer.dmLevel=winH25 winFunc=hamming [fft25:cTransformFFT] reader.dmLevel=winH25 writer.dmLevel=fftcH25 [fftmp25:cFFTmagphase] reader.dmLevel=fftcH25 writer.dmLevel=fftmagH25 ;;;;;;;;;;;;;;;;;;;; HPS pitch [componentInstances:cComponentManager] instance[scale].type=cSpecScale instance[shs].type=cPitchShs instance[pitchSmooth].type=cPitchSmootherViterbi instance[energy60].type=cEnergy instance[volmerge].type=cValbasedSelector [energy60:cEnergy] reader.dmLevel=winG60 writer.dmLevel=e60 rms=1 log=0 writer.levelconf.nT=200 [scale:cSpecScale] reader.dmLevel=fftmagG60 writer.dmLevel=hpsG60 copyInputName = 1 processArrayFields = 0 scale=octave sourceScale = lin // logScaleBase = 2 // logSourceScaleBase = 2 // firstNote = 55 interpMethod = spline minF = 20 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [shs:cPitchShs] reader.dmLevel=hpsG60 writer.dmLevel=pitchShsG60 copyInputName = 1 processArrayFields = 0 maxPitch = 620 minPitch = 42 nCandidates = 6 scores = 1 voicing = 1 F0C1 = 0 voicingC1 = 0 F0raw = 1 voicingClip = 1 voicingCutoff = 0.700000 inputFieldSearch = Mag_octScale octaveCorrection = 0 nHarmonics = 15 compressionFactor = 0.850000 greedyPeakAlgo = 1 [pitchSmooth:cPitchSmootherViterbi] reader.dmLevel=pitchShsG60 reader2.dmLevel=pitchShsG60 writer.dmLevel=pitchG60a copyInputName = 1 bufferLength=90 F0final = 1 F0finalEnv = 0 voicingFinalClipped = 0 voicingFinalUnclipped = 1 F0raw = 0 voicingC1 = 0 voicingClip = 0 wTvv =10.0 wTvvd= 5.0 wTvuv=10.0 wThr = 4.0 wTuu = 0.0 wLocal=2.0 wRange=1.0 // SHS/Viterbi pitch algo does strange things at very low amplitudes, so we filter these out [volmerge:cValbasedSelector] reader.dmLevel = e60;pitchG60a writer.dmLevel = pitchG60 idx=0 threshold=0.0008 removeIdx=1 zeroVec=1 outputVal=0.0 ;;;;;;;;;;;;;;;;;;; VQ [componentInstances:cComponentManager] instance[pitchJitter].type=cPitchJitter [pitchJitter:cPitchJitter] reader.dmLevel = wave writer.dmLevel = jitterShimmer // nameAppend = copyInputName = 1 ; is pitchF really necessary, or can we use pitchG60 ? F0reader.dmLevel = pitchG60 F0field = F0final searchRangeRel = 0.250000 jitterLocal = 1 jitterDDP = 1 jitterLocalEnv = 0 jitterDDPEnv = 0 shimmerLocal = 1 shimmerLocalEnv = 0 onlyVoiced = 0 logHNR = 1 ;periodLengths = 0 ;periodStarts = 0 ;;;;;;;;;;;;;;;;;;;;; Energy / loudness [componentInstances:cComponentManager] instance[melspec1].type=cMelspec instance[audspec].type=cPlp instance[audspecSum].type=cVectorOperation [melspec1:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspec1 ; htk compatible sample value scaling htkcompatible = 0 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = bark ; perform auditory weighting of spectrum [audspec:cPlp] reader.dmLevel=melspec1 writer.dmLevel=audspec firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=0 RASTA=0 [audspecSum:cVectorOperation] reader.dmLevel = audspec writer.dmLevel = audspecSum // nameAppend = copyInputName = 1 processArrayFields = 0 operation = ll1 nameBase = audspec ;;;;;;;;;;;;;;; spectral [componentInstances:cComponentManager] instance[spectral].type=cSpectral [spectral:cSpectral] reader.dmLevel=fftmagH25 writer.dmLevel=spectral bands[0]=250-650 bands[1]=1000-4000 rollOff[0] = 0.25 rollOff[1] = 0.50 rollOff[2] = 0.75 rollOff[3] = 0.90 flux=1 centroid=0 maxPos=0 minPos=0 entropy=1 variance=1 skewness=1 kurtosis=1 slope=0 sharpness = 1 tonality = 0 harmonicity = 1 flatness = 0 ;;;;;;;;;;;;;;; mfcc [componentInstances:cComponentManager] instance[melspecMfcc].type=cMelspec instance[mfcc].type=cMfcc [melspecMfcc:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspecMfcc copyInputName = 1 processArrayFields = 1 ; htk compatible sample value scaling htkcompatible = 1 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = mel inverse = 0 [mfcc:cMfcc] reader.dmLevel=melspecMfcc writer.dmLevel=mfcc1_12 copyInputName = 1 processArrayFields = 1 firstMfcc = 1 lastMfcc = 10 cepLifter = 22.0 htkcompatible = 1 ;;;;;;;;;;;;;;;; zcr [componentInstances:cComponentManager] instance[mzcr].type=cMZcr [mzcr:cMZcr] reader.dmLevel = frame25 writer.dmLevel = zcr copyInputName = 1 processArrayFields = 1 zcr = 1 mcr = 0 amax = 0 maxmin = 0 dc = 0 ;;;;;;;;;;;;;;;;;;;; smoothing and selection [componentInstances:cComponentManager] instance[smoNz].type=cContourSmoother instance[smoA].type=cContourSmoother instance[smoB].type=cContourSmoother instance[f0sel].type=cDataSelector instance[f0psel].type=cDataSelector [smoNz:cContourSmoother] reader.dmLevel = pitchG60;jitterShimmer writer.dmLevel = lld_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 1 [f0sel:cDataSelector] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_f0v_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = f0v selected = F0final_sma [f0psel:cDataSelector] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_f0p_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = f0p selected = F0final_sma [smoA:cContourSmoother] reader.dmLevel = audspecSum;zcr writer.dmLevel = lldA_smo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 [smoB:cContourSmoother] reader.dmLevel = spectral;mfcc1_12 writer.dmLevel = lldB_smo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 ;;;;;;;;; deltas [componentInstances:cComponentManager] instance[deNz].type=cDeltaRegression instance[deA].type=cDeltaRegression instance[deB].type=cDeltaRegression [deNz:cDeltaRegression] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_nzsmo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ; TODO? delta with zero segments removed... [deA:cDeltaRegression] reader.dmLevel = lldA_smo writer.dmLevel = lldA_smo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 [deB:cDeltaRegression] reader.dmLevel = lldB_smo writer.dmLevel = lldB_smo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ;;;;;;;;; LLD dump ;;;;;;;;;; [componentInstances:cComponentManager] instance[lldDumper].type=cArffSink [lldDumper:cArffSink] reader.dmLevel = lldA_smo;lldB_smo;lldA_smo_de;lldB_smo_de;lld_nzsmo;lld_nzsmo_de filename = \cm[lldArff(B){lld.arff}:arff file to write LLDs from voiced regions to] frameTime = 1 frameIndex = 0 append = 1 relation = avec2012_lld instanceName=\cm[instnameLld{unlabelled}:name of file which will be saved in arff file] ; dummy class label for ARFF compatibility class[0].name = class class[0].type = numeric target[0].all = 0.0 ;;;;;;;;; functionals / statistics [componentInstances:cComponentManager] instance[functionalsA].type=cFunctionals instance[functionalsAde].type=cFunctionals instance[functionalsF0v].type=cFunctionals instance[functionalsF0p].type=cFunctionals instance[functionalsNz].type=cFunctionals instance[functionalsNzDe].type=cFunctionals instance[functionalsDur].type=cFunctionals ; functionals for energy and spectral related lld [functionalsA:cFunctionals] reader.dmLevel = lldA_smo;lldB_smo writer.dmLevel = functionalsA // nameAppend = copyInputName = 1 frameMode = list frameListFile = \cm[frameListFile{frame_functionals.list}:frame list] frameCenterSpecial = left noPostEOIprocessing=0 functionalsEnabled = Percentiles ; Means ; Moments ; Peaks2 ; Segments ; Regression ; Times ; Lpc Means.amean = 1 Means.absmean = 0 Means.rqmean = 1 Means.flatness = 1 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 1 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 1 Peaks2.peakRangeAbs = 0 Peaks2.peakRangeRel = 1 Peaks2.peakMeanAbs = 0 Peaks2.peakMeanMeanDist = 0 Peaks2.peakMeanRel = 1 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 1 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 0 Peaks2.minRisingSlope = 0 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 0 Peaks2.minFallingSlope = 0 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = NArelTh Segments.thresholds = 0.25 Segments.rangeRelThreshold = 0.200000 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Regression.linregc1 = 1 Regression.linregc2 = 0 Regression.linregerrA = 1 Regression.linregerrQ = 0 Regression.qregc1 = 1 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 1 Regression.qregerrQ = 0 Regression.oldBuggyQerr = 0 Regression.centroid = 0 Regression.normRegCoeff = 1 Regression.normInputs = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for energy and spectral related lld [functionalsAde:cFunctionals] reader.dmLevel = lldA_smo_de;lldB_smo_de writer.dmLevel = functionalsAde // nameAppend = copyInputName = 1 frameMode = list frameListFile = \cm[frameListFile{frame_functionals.list}:frame list] frameCenterSpecial = left noPostEOIprocessing=0 functionalsEnabled = Percentiles ; Means ; Moments ; Times Means.amean = 0 Means.posamean = 1 Means.absmean = 0 Means.rqmean = 1 Means.flatness = 1 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch onsets/offsets (voiced) [functionalsF0v:cFunctionals] reader.dmLevel = lld_f0v_nzsmo ;lld_f0_nzsmo_de writer.dmLevel = functionalsF0v //nameAppend = ff0 copyInputName = 1 frameMode = list frameListFile = \cm[frameListFile{frame_functionals.list}:frame list] frameCenterSpecial = left noPostEOIprocessing=0 functionalsEnabled = Means ; Segments Means.amean = 0 Means.absmean = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 1 Means.norm = segment Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = nonX Segments.X = 0.0 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch onsets (pauses) [functionalsF0p:cFunctionals] reader.dmLevel = lld_f0p_nzsmo writer.dmLevel = functionalsF0p //nameAppend = pauses copyInputName = 0 frameMode = list frameListFile = \cm[frameListFile{frame_functionals.list}:frame list] noPostEOIprocessing=0 frameCenterSpecial = left functionalsEnabled = Means ; Segments Means.amean = 0 Means.posamean = 0 Means.absmean = 0 Means.qmean = 0 Means.rqmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 1 Means.flatness = 0 Means.norm = segment Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = eqX Segments.X = 0.0 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch and vq related lld in voiced regions [functionalsDur:cFunctionals] reader.dmLevel = lld_f0v_nzsmo writer.dmLevel = functionalsDur // nameAppend = copyInputName = 1 frameMode = list frameListFile = \cm[frameListFile{frame_functionals.list}:frame list] frameCenterSpecial = left noPostEOIprocessing=0 functionalsEnabled = Times Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 0 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 1 Times.buggySecNorm = 0 Times.norm = second nonZeroFuncts = 0 masterTimeNorm = second ; functionals for pitch and vq related lld in voiced regions [functionalsNz:cFunctionals] reader.dmLevel = lld_nzsmo writer.dmLevel = functionalsNz // nameAppend = copyInputName = 1 frameMode = list frameListFile = \cm[frameListFile{frame_functionals.list}:frame list] frameCenterSpecial = left noPostEOIprocessing=0 functionalsEnabled = Percentiles ; Means ; Moments ; Peaks2 ; Regression ; Times Means.amean = 1 Means.absmean = 0 Means.rqmean = 1 Means.qmean = 0 Means.flatness = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 1 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 1 Peaks2.peakRangeAbs = 0 Peaks2.peakRangeRel = 1 Peaks2.peakMeanAbs = 0 Peaks2.peakMeanMeanDist = 0 Peaks2.peakMeanRel = 1 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 1 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 0 Peaks2.minRisingSlope = 0 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 0 Peaks2.minFallingSlope = 0 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Regression.linregc1 = 1 Regression.linregc2 = 0 Regression.linregerrA = 1 Regression.linregerrQ = 0 Regression.qregc1 = 1 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 1 Regression.qregerrQ = 0 Regression.oldBuggyQerr = 0 Regression.centroid = 0 Regression.normRegCoeff = 1 Regression.normInputs = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 1 masterTimeNorm = segment ; functionals for pitch and vq related lld in voiced regions [functionalsNzDe:cFunctionals] reader.dmLevel = lld_nzsmo_de writer.dmLevel = functionalsNzDe // nameAppend = copyInputName = 1 frameMode = list frameListFile = \cm[frameListFile{frame_functionals.list}:frame list] frameCenterSpecial = left noPostEOIprocessing=0 functionalsEnabled = Percentiles ; Means ; Moments ; Times Means.amean = 0 Means.posamean = 1 Means.absmean = 0 Means.rqmean = 1 Means.qmean = 0 Means.flatness = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 1 masterTimeNorm = segment ;;;;;;;;; output all features.... [componentInstances:cComponentManager] instance[arffsink].type=cArffSink [arffsink:cArffSink] reader.dmLevel=functionalsDur;functionalsA;functionalsNz;functionalsAde;functionalsNzDe;functionalsF0v;functionalsF0p filename=\cm[output(O){default.arff}:output arff file for feature data] append=1 frameIndex=0 frameTime=1 relation=avec2012_segments instanceName=\cm[instname{unlabelled}:name of file which will be saved in arff file] class[0].name = arousal class[0].type = numeric class[1].name = expectancy class[1].type = numeric class[2].name = power class[2].type = numeric class[3].name = valence class[3].type = numeric ; the class label or value for the current instance \{labels.inc} ================================================ FILE: scripts/avec2012/extr.pl ================================================ use File::Basename; ## ## openSMILE audio feature extraction script ## for AVEC 2012 challenge ## written by Florian Eyben, TUM, MMK. All rights reserved. ## (c) 2012-2013, TUM, MMK ## (c) 2014 audEERING UG (limited) ## All rights reserved, see file COPYING for license terms. ## ## This script was written for Linux, but should be portable ## to windows with a few modifications. ## You need "sox" to convert wave files to a format that openSMILE ## can read (the wavext header is currently not yet supported) ## # IMPORTANT: when running multiple instances of this script # at the same time, please run from a different directory # as the scripts will use the same filenames in the current # directory, and thus interefere with each other!! # path to openSMILE binary $OS = "../opensmile/inst/bin/SMILExtract"; # if set to 1, don't do extraction, just print details $debugprint = 0; # incremental functionals window parameters (.segments.arff) in seconds $samplingStep = 0.5; $samplingSize = 2.0; # the affective dimensions used in the challenge @dimensions = ("arousal", "expectancy", "power", "valence"); # on which sets to run: use one of devel, train, tests @sets = ("devel", "train", "tests"); $label_samplingrate = 0.02; # in seconds # temporary files created in the working directory $framelistfile = ".tmp.frame.list"; $labelincludefile = "labels.inc"; foreach $set (@sets) { ################################################### $base = "."; $setpath = "../audio/$set"; # output directory $arffbase = "../arff"; $labelspath = "$setpath/labels"; mkdir($arffbase); $conf_full = "$base/avec2011_full.conf"; $conf_list = "$base/avec2011_list.conf"; $arff_words = "$arffbase/$set\_words.arff"; $arff_phrases = "$arffbase/$set\_phrases.arff"; $arff_segments = "$arffbase/$set\_segments.arff"; $lldarff = "$arffbase/$set\_lld.arff"; sub deleteArffs { my $a = $_[0]; $a =~ s/\.arff$/*.arff/; my @f = glob("$a"); foreach $F (@f) { unlink($F); } } # delete existing files, as opensmile will append to them &deleteArffs($arff_words); &deleteArffs($arff_phrases); &deleteArffs($arff_segments); &deleteArffs($lldarff); sub validate_word_duration { # old avec2011 algo for forcing minimum word length of 120ms by iteratively # increasing the length on both sides by 10ms steps my $start = ${$_[0]}[0]; my $end = ${$_[0]}[1]; while ($end - $start < 0.25) { $start -= 0.01; $end += 0.01; } ${$_[0]}[0] = $start; ${$_[0]}[1] = $end; } @wds = glob("$setpath/words/*.txt"); foreach $wordfile (@wds) { print "==== wordfile: $wordfile ===\n"; open(F,"<$wordfile"); my @words; my @segment; my @phrase; $n = 0; $ns=0; $np=0; $t0 = 0; $s0 = -1; $p0 = -1; $curpause = 1.0; while() { chomp; $_=~s/^\s+//; $_=~s/\s+$//; @x = split(/\s+/,$_); $x[0] /= 1000; $x[1] /= 1000; $pause = $x[0] - $t0; $words[$n][0] = $x[0]; $words[$n][1] = $x[1]; &validate_word_duration($words[$n]); $n++; if ($pause < 0) { $pause = 0.0; } if ($pause > 1.0 && $s0 != -1) { # begin a new segment $segment[$ns][0] = $s0-0.2; $segment[$ns][1] = $t0+0.2; $s0 = -1; $ns++; } if ($pause > $curpause && $p0 != -1) { # begin a new phrase $phrase[$np][0] = $p0-0.2; $phrase[$np][1] = $t0+0.2; $p0 = -1; $np++; $curpause = 1.0; } if ($s0 == -1) { $s0 = $x[0]; } if ($p0 == -1) { $p0 = $x[0]; } $curpause -= ($x[1]-$t0)/5.0; if ($curpause < 0.0) { $curpause = 0.0; } $t0 = $x[1]; } close(F); # end the segment and phrase $segment[$ns][0] = $s0-0.25; $segment[$ns][1] = $t0+0.25; $phrase[$np][0] = $p0-0.25; $phrase[$np][1] = $t0+0.25; $np++; $ns++; sub recording_ID_from_basename { my $basename = shift; my $ID = "XXX"; if ($basename =~ /(\d+)\.wav$/i) { $ID = $1; } return $ID; } # words, phrases: full turn conf, w. start/end # segments: incremental conf, with start end of turn, and framelist for segs sub runsmile { my $start = shift; my $end = shift; my $wave = shift; my $arff = shift; my $conf = shift; my $nn = shift; my $labelinc = shift; my $lldarff = shift; my $framelistfile = shift; my $extra = ""; if ($start < 0) { $start = 0; } if ($end < $start) { return; } my $basename = basename($wave); my $ID = &recording_ID_from_basename($basename); $basename =~ s/\.wav$//i; $arff =~ s/\.arff$/$ID.arff/i; if ($lldarff) { $extra .= "-lldArff \"$lldarff\" "; $extra .= "-instnameLld \"$basename.seg$nn.start$start\" "; } if ($framelistfile) { $extra .= "-frameListFile \"$framelistfile\""; } print " File $wave - start=$start - end=$end\n"; print(" $OS -l 1 -C \"$conf\" -start $start -end $end -I \"$wave\" -O \"$arff\" -instname \"$basename.seg$nn.start$start\" $extra\n"); if ($debugprint) { return; } $ret = system("$OS -l 1 -C \"$conf\" -start $start -end $end -I \"$wave\" -O \"$arff\" -instname \"$basename.seg$nn.start$start\" $extra"); if ($ret) { exit -1; } } $wave = $wordfile; $wave =~ s/.txt$/.wav/; $wave =~ s/words\//wav\//; $wave =~ s/_wordTimings/_audio/; $wavebase = basename($wave); system("sox \"$wave\" -c 1 -2 -s ./$wavebase"); $wave = "$wavebase"; my %labels; my $nolabels = 0; sub load_labels_file { my $basename = shift; my $ID = &recording_ID_from_basename($basename); my $dim; foreach $dim (@dimensions) { my $labels_file = "$labelspath/labels_continuous_$set$ID\_$dim.dat"; unless (-e $labels_file) { print "ERROR: label file $labels_file does not exist.\n This is ok, if you're extracting features for the tests,\n the target values in the arff files will all be set to 0.0 in this case.\n"; return 0; } my $n = 0; open(LF, "<$labels_file"); while() { chomp; $_=~s/^\s+//; $_=~s/\s+$//; $labels{$dim}[$n] = $_; $n++; } close(LF); } return 1; } my $have_labels = &load_labels_file($wavebase); sub compute_label_for_segment { my $start = shift; my $end = shift; my $dim = shift; my $i; my $labelsum = 0.0; my $start_i = int($start / $label_samplingrate); my $end_i = int($end / $label_samplingrate); for ($i = $start_i; $i <= $end_i; $i++) { $labelsum += $labels{$dim}[$i]; } if ($end_i > $start_i) { $labelsum /= ($end_i - $start_i + 1); } return $labelsum; } sub compute_label_string_for_segment { my $start = shift; my $end = shift; my $have_labels = shift; my $label_string = ""; if ($have_labels) { foreach $dim (@dimensions) { my $label = &compute_label_for_segment($start, $end, $dim); $label_string .= "-label_$dim \"$label\""; ## TODO: negative labels will break openSMILE option parsing!! # Solution: have this script generate an includable config file with the targets (or one file for each dimension) } } return $label_string; } sub generate_label_include_for_segment { my $start = shift; my $end = shift; my $have_labels = shift; my $segment_num = shift; my $label_string = ""; if ($have_labels) { my $d = 0; foreach $dim (@dimensions) { my $label = &compute_label_for_segment($start, $end, $dim); if ($segment_num) { $label_string .= "target[$d].instance[".($segment_num - 1)."] = $label\n"; } else { $label_string .= "target[$d].all = $label\n"; } $d++; } } else { my $d = 0; foreach $dim (@dimensions) { if ($segment_num) { $label_string .= "target[$d].instance[".($segment_num - 1)."] = 0.0\n"; } else { $label_string .= "target[$d].all = 0.0\n"; } $d++; } } return $label_string; } # words print "Num words: $n\n"; for ($i=0; $i<$n; $i++) { my $label_str = &generate_label_include_for_segment($words[$i][0], $words[$i][1], $have_labels); print " word $i : $words[$i][0] - $words[$i][1]\n"; open(F,">$labelincludefile"); print F $label_str."\n"; close(F); &runsmile($words[$i][0], $words[$i][1], $wave, $arff_words, $conf_full, $i, $labelincludefile); } # phrases if(0) { print "Num phrases: $np\n"; for ($i=0; $i<$np; $i++) { my $label_str = &generate_label_include_for_segment($phrase[$i][0], $phrase[$i][1], $have_labels); print " phrase $i : $phrase[$i][0] - $phrase[$i][1]\n"; open(F,">$labelincludefile"); print F $label_str."\n"; close(F); &runsmile($phrase[$i][0], $phrase[$i][1], $wave, $arff_phrases, $conf_full, $i, $labelincludeile); } } # segments print "Num segments: $ns\n"; for ($i=0; $i<$ns; $i++) { # generate frame list $len = $segment[$i][1] - $segment[$i][0]; $framelist = ""; my $label_str = ""; my $n = 0; if ($len > ($samplingSize-$samplingStep+0.05)) { for ($j=0; $j<$len-($samplingSize-$samplingStep); $j+=$samplingStep) { $st = $j; $ed = $st+$samplingSize; if ($ed > $len-0.05) { $ed = $len-0.05; } $framelist .= $st."s-".$ed."s,"; $label_str .= &generate_label_include_for_segment($segment[$i][0] + $st, $segment[$i][0] + $ed, $have_labels, $n + 1); $n++; } } else { $framelist = "0s-$len"."s,"; $label_str .= &generate_label_include_for_segment($segment[$i][0] + $st, $segment[$i][0] + $ed, $have_labels, $n + 1); $n++; } chop($framelist); open(F,">$labelincludefile"); print F $label_str."\n"; close(F); open(F,">$framelistfile"); print F $framelist; close(F); print " segment $i : $segment[$i][0] - $segment[$i][1]\n"; print " FRAMELIST($ns, $len): $framelist\n"; &runsmile($segment[$i][0], $segment[$i][1], $wave, $arff_segments, $conf_list, $i, $labelincludefile, $lldarff, $framelistfile); } unlink($framelistfile); unlink("$wavebase"); } } ================================================ FILE: scripts/avec2012/labels.inc ================================================ ================================================ FILE: scripts/avec2013/avec2013_functionals.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file ////////////////// ///////// for AVEC 2013 ////////////////// ///////// based on avec2011.conf ////////////////// ///////// * written 2013 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) 2013 TUM, MMK ////////////////// ///////// (c) 2014-2016 audEERING ////////////////// ///////// All rights reserved, see file COPYING for license terms ////////////////// /////////////////////////////////////////////////////////////////////////////////////// \{avec2013_lld_core.conf} \{avec2013_functionals_core.conf} ;;;;;;;;; output all features.... [componentInstances:cComponentManager] instance[arffsink].type=cArffSink [arffsink:cArffSink] reader.dmLevel=functionalsDur;functionalsA;functionalsNz;functionalsAde;functionalsNzDe;functionalsF0v;functionalsF0p filename=\cm[output(O){default_functionals.arff}:output arff file for feature data] append=1 frameIndex=0 frameTime=1 frameTimeAdd=\cm[frameTimeAdd(F){0}:frame time offset (start of segment in seconds)] relation=\cm[frameModeConf] instanceName=\cm[instname{unlabelled}:name of file which will be saved in arff file] errorOnNoOutput = 1 class[0].name = unused_target_label class[0].type = numeric target[0].all = 0.0 ;; more class labels, nor used for now.. ;class[0].name = arousal ;class[0].type = numeric ;class[1].name = valence ;class[1].type = numeric ;class[2].type = depression ;class[2].type = numeric ; the class label or value for the current instance ;\{labels.inc} ================================================ FILE: scripts/avec2013/avec2013_functionals_core.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file ////////////////// ///////// for AVEC 2013 ////////////////// ///////// based on avec2011.conf ////////////////// ///////// * written 2013 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) 2013 TUM, MMK ////////////////// ///////// (c) 2014 audEERING ////////////////// ///////// All rights reserved, see file COPYING for license terms ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;;;; functionals / statistics [componentInstances:cComponentManager] instance[functionalsA].type=cFunctionals instance[functionalsAde].type=cFunctionals instance[functionalsF0v].type=cFunctionals instance[functionalsF0p].type=cFunctionals instance[functionalsNz].type=cFunctionals instance[functionalsNzDe].type=cFunctionals instance[functionalsDur].type=cFunctionals ; functionals for energy and spectral related lld [functionalsA:cFunctionals] reader.dmLevel = lldA_smo;lldB_smo writer.dmLevel = functionalsA // nameAppend = copyInputName = 1 \{\cm[frameModeConf{avec2013_functionals_frame_mode.conf}:functionals frame mode config]} functionalsEnabled = Percentiles ; Means ; Moments ; Peaks2 ; Segments ; Regression ; Times ; Lpc Means.amean = 1 Means.absmean = 0 Means.rqmean = 1 Means.flatness = 1 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Peaks2.doRatioLimit = 0 Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 1 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 1 Peaks2.peakRangeAbs = 0 Peaks2.peakRangeRel = 1 Peaks2.peakMeanAbs = 0 Peaks2.peakMeanMeanDist = 0 Peaks2.peakMeanRel = 1 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 1 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 0 Peaks2.minRisingSlope = 0 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 0 Peaks2.minFallingSlope = 0 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 Segments.maxNumSeg = 100 Segments.segmentationAlgorithm = NArelTh Segments.thresholds = 0.25 Segments.rangeRelThreshold = 0.200000 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Moments.doRatioLimit = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Regression.linregc1 = 1 Regression.linregc2 = 0 Regression.linregerrA = 1 Regression.linregerrQ = 0 Regression.qregc1 = 1 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 1 Regression.qregerrQ = 0 Regression.oldBuggyQerr = 0 Regression.centroid = 0 Regression.normRegCoeff = 1 Regression.normInputs = 1 Regression.centroidUseAbsValues = 0 Regression.centroidRatioLimit = 0 Regression.doRatioLimit = 0 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for energy and spectral related lld (deltas) [functionalsAde:cFunctionals] reader.dmLevel = lldA_smo_de;lldB_smo_de writer.dmLevel = functionalsAde // nameAppend = copyInputName = 1 \{\cm[frameModeConf]} functionalsEnabled = Percentiles ; Means ; Moments ; Times Means.amean = 0 Means.posamean = 1 Means.absmean = 0 Means.rqmean = 1 Means.flatness = 1 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Moments.doRatioLimit = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for voiced segments and pitch onsets [functionalsF0v:cFunctionals] reader.dmLevel = lld_f0v_nzsmo ;lld_f0_nzsmo_de writer.dmLevel = functionalsF0v //nameAppend = ff0 copyInputName = 1 \{\cm[frameModeConf]} functionalsEnabled = Means ; Segments Means.amean = 0 Means.absmean = 0 Means.qmean = 0 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 1 Means.norm = segment Segments.maxNumSeg = 999 Segments.segmentationAlgorithm = nonX Segments.X = 0.0 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second Onset.threshold = 1 Onset.onsetRate = 1 Onset.norm = second nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for unvoiced segments [functionalsF0p:cFunctionals] reader.dmLevel = lld_f0p_nzsmo writer.dmLevel = functionalsF0p //nameAppend = pauses copyInputName = 0 \{\cm[frameModeConf]} frameCenterSpecial = left functionalsEnabled = Segments Segments.maxNumSeg = 999 Segments.segmentationAlgorithm = eqX Segments.X = 0.0 Segments.numSegments = 0 Segments.meanSegLen = 1 Segments.maxSegLen = 1 Segments.minSegLen = 1 Segments.segLenStddev = 1 Segments.norm = second nonZeroFuncts = 0 masterTimeNorm = segment ; functionals for pitch and vq related lld in voiced regions [functionalsNz:cFunctionals] reader.dmLevel = lld_nzsmo writer.dmLevel = functionalsNz // nameAppend = copyInputName = 1 \{\cm[frameModeConf]} functionalsEnabled = Percentiles ; Means ; Moments ; Peaks2 ; Regression ; Times Means.amean = 1 Means.absmean = 0 Means.rqmean = 1 Means.qmean = 0 Means.flatness = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Peaks2.doRatioLimit = 0 Peaks2.numPeaks = 0 Peaks2.meanPeakDist = 1 Peaks2.meanPeakDistDelta = 0 Peaks2.peakDistStddev = 1 Peaks2.peakRangeAbs = 0 Peaks2.peakRangeRel = 1 Peaks2.peakMeanAbs = 0 Peaks2.peakMeanMeanDist = 0 Peaks2.peakMeanRel = 1 Peaks2.ptpAmpMeanAbs = 0 Peaks2.ptpAmpMeanRel = 0 Peaks2.ptpAmpStddevAbs = 0 Peaks2.ptpAmpStddevRel = 0 Peaks2.minRangeAbs = 0 Peaks2.minRangeRel = 1 Peaks2.minMeanAbs = 0 Peaks2.minMeanMeanDist = 0 Peaks2.minMeanRel = 0 Peaks2.mtmAmpMeanAbs = 0 Peaks2.mtmAmpMeanRel = 0 Peaks2.mtmAmpStddevAbs = 0 Peaks2.mtmAmpStddevRel = 0 Peaks2.meanRisingSlope = 1 Peaks2.maxRisingSlope = 0 Peaks2.minRisingSlope = 0 Peaks2.stddevRisingSlope = 1 Peaks2.meanFallingSlope = 1 Peaks2.maxFallingSlope = 0 Peaks2.minFallingSlope = 0 Peaks2.stddevFallingSlope = 1 Peaks2.norm = seconds Peaks2.relThresh = 0.100000 Peaks2.dynRelThresh = 0 ;Peaks2.posDbgOutp = minmax.txt Peaks2.posDbgAppend = 0 Peaks2.consoleDbg = 0 Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Regression.linregc1 = 1 Regression.linregc2 = 0 Regression.linregerrA = 1 Regression.linregerrQ = 0 Regression.qregc1 = 1 Regression.qregc2 = 0 Regression.qregc3 = 0 Regression.qregerrA = 1 Regression.qregerrQ = 0 Regression.oldBuggyQerr = 0 Regression.centroid = 0 Regression.normRegCoeff = 1 Regression.normInputs = 1 Regression.centroidUseAbsValues = 0 Regression.centroidRatioLimit = 0 Regression.doRatioLimit = 0 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 1 masterTimeNorm = segment ; functionals for pitch and vq related lld in voiced regions (deltas) [functionalsNzDe:cFunctionals] reader.dmLevel = lld_nzsmo_de writer.dmLevel = functionalsNzDe // nameAppend = copyInputName = 1 \{\cm[frameModeConf]} functionalsEnabled = Percentiles ; Means ; Moments ; Times Means.amean = 0 Means.posamean = 1 Means.absmean = 0 Means.rqmean = 1 Means.qmean = 0 Means.flatness = 1 Means.nzamean = 0 Means.nzabsmean = 0 Means.nzqmean = 0 Means.nzgmean = 0 Means.nnz = 0 Means.norm = frames Moments.variance = 0 Moments.stddev = 1 Moments.skewness = 1 Moments.kurtosis = 1 Moments.amean = 0 Moments.doRatioLimit = 0 Percentiles.quartiles = 1 Percentiles.iqr = 1 Percentiles.percentile[0] = 0.01 Percentiles.percentile[1] = 0.99 Percentiles.pctlrange[0] = 0-1 Percentiles.interp = 1 Times.upleveltime25 = 1 Times.downleveltime25 = 0 Times.upleveltime50 = 1 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 1 Times.downleveltime90 = 0 Times.risetime = 1 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 0 Times.buggySecNorm = 0 Times.norm = segment Lpc.lpGain = 1 Lpc.lpc = 1 Lpc.firstCoeff = 0 Lpc.order = 5 nonZeroFuncts = 1 masterTimeNorm = segment ; functionals for input segment duration [functionalsDur:cFunctionals] reader.dmLevel = lld_f0v_nzsmo writer.dmLevel = functionalsDur // nameAppend = copyInputName = 1 \{\cm[frameModeConf]} noPostEOIprocessing=0 functionalsEnabled = Times Times.upleveltime25 = 0 Times.downleveltime25 = 0 Times.upleveltime50 = 0 Times.downleveltime50 = 0 Times.upleveltime75 = 0 Times.downleveltime75 = 0 Times.upleveltime90 = 0 Times.downleveltime90 = 0 Times.risetime = 0 Times.falltime = 0 Times.leftctime = 0 Times.rightctime = 0 Times.duration = 1 Times.buggySecNorm = 0 Times.norm = second nonZeroFuncts = 0 masterTimeNorm = second ================================================ FILE: scripts/avec2013/avec2013_functionals_frame_mode.conf ================================================ frameMode = full frameSize = 0 frameStep = 0 frameCenterSpecial = left ================================================ FILE: scripts/avec2013/avec2013_functionals_frame_mode_long.conf ================================================ frameMode = fixed frameSize = 20.0 frameStep = 2.0 frameCenterSpecial = left ================================================ FILE: scripts/avec2013/avec2013_functionals_frame_mode_short.conf ================================================ frameMode = fixed frameSize = 3.0 frameStep = 2.0 frameCenterSpecial = left ================================================ FILE: scripts/avec2013/avec2013_functionals_frame_mode_short_with_last.conf ================================================ frameMode = fixed frameSize = 3.0 frameStep = 2.0 frameCenterSpecial = left allowLastFrameIncomplete = 1 ================================================ FILE: scripts/avec2013/avec2013_lld_arff.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file ////////////////// ///////// for AVEC 2013 ////////////////// ///////// based on avec2011.conf ////////////////// ///////// * written 2013 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) 2013 TUM, MMK ////////////////// ///////// (c) 2014 audEERING UG (limited) ////////////////// ///////// All rights reserved, see file COPYING for license terms ////////////////// /////////////////////////////////////////////////////////////////////////////////////// \{avec2013_lld_core.conf} ;;;;;;;;; output all features.... [componentInstances:cComponentManager] instance[arffsink].type=cArffSink [arffsink:cArffSink] reader.dmLevel=lldA_smo;lldA_smo_de;lldB_smo;lldB_smo_de;lld_nzsmo;lld_nzsmo_de filename=\cm[output_arff{default_lld.arff}:output arff file for feature data] append=0 frameIndex=0 frameTime=1 relation=avec2013_lld_per_session instanceBase=\cm[instname{unlabelled}:name of file which will be saved in arff file] errorOnNoOutput = 1 class[0].name = unused_target_label class[0].type = numeric target[0].all = 0.0 ;; more class labels, nor used for now.. ;class[0].name = arousal ;class[0].type = numeric ;class[1].name = valence ;class[1].type = numeric ;class[2].type = depression ;class[2].type = numeric ; the class label or value for the current instance ;\{labels.inc} ================================================ FILE: scripts/avec2013/avec2013_lld_core.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file ////////////////// ///////// for AVEC 2013 ////////////////// ///////// based on avec2011.conf ////////////////// ///////// * written 2013 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) 2013 TUM, MMK ////////////////// ///////// (c) 2014-2016 audEERING ////////////////// ///////// All rights reserved, see file COPYING for license terms ////////////////// /////////////////////////////////////////////////////////////////////////////////////// ;;;;;;; component list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[dataMemory].type=cDataMemory printLevelStats=0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; main section ;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[waveIn].type=cWaveSource [waveIn:cWaveSource] writer.dmLevel=wave filename=\cm[inputfile(I){test.wav}:name of input file] monoMixdown=1 start = \cm[start{0}:start in input wave file in seconds] end = \cm[end{-1}:end in input wave file in seconds] ;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame60].type=cFramer instance[win60].type=cWindower instance[fft60].type=cTransformFFT instance[fftmp60].type=cFFTmagphase [frame60:cFramer] reader.dmLevel=wave writer.dmLevel=frame60 frameSize = 0.060 frameStep = 0.010 frameCenterSpecial = left [win60:cWindower] reader.dmLevel=frame60 writer.dmLevel=winG60 winFunc=gauss gain=1.0 sigma=0.4 [fft60:cTransformFFT] reader.dmLevel=winG60 writer.dmLevel=fftcG60 zeroPadSymmetric = 0 [fftmp60:cFFTmagphase] reader.dmLevel=fftcG60 writer.dmLevel=fftmagG60 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [componentInstances:cComponentManager] instance[frame25].type=cFramer instance[pe25].type=cVectorPreemphasis instance[win25].type=cWindower instance[fft25].type=cTransformFFT instance[fftmp25].type=cFFTmagphase [frame25:cFramer] reader.dmLevel=wave writer.dmLevel=frame25 frameSize = 0.025 frameStep = 0.010 frameCenterSpecial = left [pe25:cVectorPreemphasis] reader.dmLevel=frame25 writer.dmLevel=frame25pe k=0.97 de=0 [win25:cWindower] reader.dmLevel=frame25 writer.dmLevel=winH25 winFunc=hamming [fft25:cTransformFFT] reader.dmLevel=winH25 writer.dmLevel=fftcH25 zeroPadSymmetric = 0 [fftmp25:cFFTmagphase] reader.dmLevel=fftcH25 writer.dmLevel=fftmagH25 ;;;;;;;;;;;;;;;;;;;; HPS pitch [componentInstances:cComponentManager] instance[scale].type=cSpecScale instance[shs].type=cPitchShs instance[pitchSmooth].type=cPitchSmootherViterbi instance[energy60].type=cEnergy instance[volmerge].type=cValbasedSelector [energy60:cEnergy] reader.dmLevel=winG60 writer.dmLevel=e60 rms=1 log=0 writer.levelconf.nT=200 [scale:cSpecScale] reader.dmLevel=fftmagG60 writer.dmLevel=hpsG60 copyInputName = 1 processArrayFields = 0 scale=octave sourceScale = lin // logScaleBase = 2 // logSourceScaleBase = 2 // firstNote = 55 interpMethod = spline minF = 20 maxF = -1 nPointsTarget = 0 specSmooth = 1 specEnhance = 1 auditoryWeighting = 1 [shs:cPitchShs] reader.dmLevel=hpsG60 writer.dmLevel=pitchShsG60 copyInputName = 1 processArrayFields = 0 maxPitch = 620 minPitch = 42 nCandidates = 6 scores = 1 voicing = 1 F0C1 = 0 voicingC1 = 0 F0raw = 1 voicingClip = 1 voicingCutoff = 0.700000 inputFieldSearch = Mag_octScale octaveCorrection = 0 nHarmonics = 15 compressionFactor = 0.850000 greedyPeakAlgo = 1 [pitchSmooth:cPitchSmootherViterbi] reader.dmLevel=pitchShsG60 reader2.dmLevel=pitchShsG60 writer.dmLevel=pitchG60a copyInputName = 1 bufferLength=90 F0final = 1 F0finalEnv = 0 voicingFinalClipped = 0 voicingFinalUnclipped = 1 F0raw = 0 voicingC1 = 0 voicingClip = 0 wTvv =10.0 wTvvd= 5.0 wTvuv=10.0 wThr = 4.0 wTuu = 0.0 wLocal=2.0 wRange=1.0 // SHS/Viterbi pitch algo does strange things at very low amplitudes, so we filter these out [volmerge:cValbasedSelector] reader.dmLevel = e60;pitchG60a writer.dmLevel = pitchG60 idx=0 threshold=0.0008 removeIdx=1 zeroVec=1 outputVal=0.0 ;;;;;;;;;;;;;;;;;;; VQ [componentInstances:cComponentManager] instance[pitchJitter].type=cPitchJitter [pitchJitter:cPitchJitter] reader.dmLevel = wave writer.dmLevel = jitterShimmer // nameAppend = copyInputName = 1 ; is pitchF really necessary, or can we use pitchG60 ? F0reader.dmLevel = pitchG60 F0field = F0final searchRangeRel = 0.250000 jitterLocal = 1 jitterDDP = 1 jitterLocalEnv = 0 jitterDDPEnv = 0 shimmerLocal = 1 shimmerLocalEnv = 0 onlyVoiced = 0 logHNR = 1 inputMaxDelaySec = 2.0 ;periodLengths = 0 ;periodStarts = 0 useBrokenJitterThresh = 1 ;;;;;;;;;;;;;;;;;;;;; Energy / loudness [componentInstances:cComponentManager] instance[melspec1].type=cMelspec instance[audspec].type=cPlp instance[audspecSum].type=cVectorOperation [melspec1:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspec1 ; htk compatible sample value scaling htkcompatible = 0 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = bark ; perform auditory weighting of spectrum [audspec:cPlp] reader.dmLevel=melspec1 writer.dmLevel=audspec firstCC = 0 lpOrder = 5 cepLifter = 22 compression = 0.33 htkcompatible = 0 doIDFT = 0 doLpToCeps = 0 doLP = 0 doInvLog = 0 doAud = 1 doLog = 0 newRASTA=0 RASTA=0 [audspecSum:cVectorOperation] reader.dmLevel = audspec writer.dmLevel = audspecSum // nameAppend = copyInputName = 1 processArrayFields = 0 operation = ll1 nameBase = audspec ;;;;;;;;;;;;;;; spectral [componentInstances:cComponentManager] instance[spectral].type=cSpectral [spectral:cSpectral] reader.dmLevel=fftmagH25 writer.dmLevel=spectral bands[0]=250-650 bands[1]=1000-4000 rollOff[0] = 0.25 rollOff[1] = 0.50 rollOff[2] = 0.75 rollOff[3] = 0.90 flux=1 centroid=0 maxPos=0 minPos=0 entropy=1 variance=1 skewness=1 kurtosis=1 slope=0 sharpness = 1 tonality = 0 harmonicity = 1 flatness = 1 ;;;;;;;;;;;;;;; mfcc [componentInstances:cComponentManager] instance[melspecMfcc].type=cMelspec instance[mfcc].type=cMfcc [melspecMfcc:cMelspec] reader.dmLevel=fftmagH25 writer.dmLevel=melspecMfcc copyInputName = 1 processArrayFields = 1 ; htk compatible sample value scaling htkcompatible = 1 nBands = 26 ; use power spectrum instead of magnitude spectrum usePower = 1 lofreq = 20 hifreq = 8000 specScale = mel inverse = 0 [mfcc:cMfcc] reader.dmLevel=melspecMfcc writer.dmLevel=mfcc1_12 copyInputName = 1 processArrayFields = 1 firstMfcc = 1 lastMfcc = 16 cepLifter = 22.0 htkcompatible = 1 ;;;;;;;;;;;;;;;; zcr [componentInstances:cComponentManager] instance[mzcr].type=cMZcr [mzcr:cMZcr] reader.dmLevel = frame25 writer.dmLevel = zcr copyInputName = 1 processArrayFields = 1 zcr = 1 mcr = 0 amax = 0 maxmin = 0 dc = 0 ;;;;;;;;;;;;;;;;;;;; smoothing and selection [componentInstances:cComponentManager] instance[smoNz].type=cContourSmoother instance[smoA].type=cContourSmoother instance[smoB].type=cContourSmoother instance[f0sel].type=cDataSelector instance[f0psel].type=cDataSelector [smoNz:cContourSmoother] reader.dmLevel = pitchG60;jitterShimmer writer.dmLevel = lld_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 noZeroSma = 1 [f0sel:cDataSelector] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_f0v_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = f0v selected = F0final_sma [f0psel:cDataSelector] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_f0p_nzsmo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = f0p selected = F0final_sma [smoA:cContourSmoother] reader.dmLevel = audspecSum;zcr writer.dmLevel = lldA_smo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 [smoB:cContourSmoother] reader.dmLevel = spectral;mfcc1_12 writer.dmLevel = lldB_smo writer.levelconf.isRb=0 writer.levelconf.growDyn=1 nameAppend = sma copyInputName = 1 noPostEOIprocessing = 0 smaWin = 3 ;;;;;;;;; deltas [componentInstances:cComponentManager] instance[deNz].type=cDeltaRegression instance[deA].type=cDeltaRegression instance[deB].type=cDeltaRegression [deNz:cDeltaRegression] reader.dmLevel = lld_nzsmo writer.dmLevel = lld_nzsmo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 onlyInSegments = 1 zeroSegBound = 1 ; TODO? delta with zero segments removed... [deA:cDeltaRegression] reader.dmLevel = lldA_smo writer.dmLevel = lldA_smo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 [deB:cDeltaRegression] reader.dmLevel = lldB_smo writer.dmLevel = lldB_smo_de writer.levelconf.isRb=0 writer.levelconf.growDyn=1 ; OUTPUTS: lldA_smo;lldA_smo_de;lldB_smo;lldB_smo_de;lld_nzsmo;lld_nzsmo_de ; optional for pitch functionals: lld_f0v_smo;lld_f0p_smo ================================================ FILE: scripts/avec2013/avec2013_lld_htk.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file ////////////////// ///////// for AVEC 2013 ////////////////// ///////// based on avec2011.conf ////////////////// ///////// * written 2013 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) 2013 TUM, MMK ////////////////// ///////// (c) 2014 audEERING UG (limited) ////////////////// ///////// All rights reserved, see file COPYING for license terms ////////////////// /////////////////////////////////////////////////////////////////////////////////////// \{avec2013_lld_core.conf} ;;;;;;;;; output all features.... [componentInstances:cComponentManager] instance[htksink].type=cHtkSink [htksink:cHtkSink] reader.dmLevel=lldA_smo;lldA_smo_de;lldB_smo;lldB_smo_de;lld_nzsmo;lld_nzsmo_de filename=\cm[output_htk(O){default_lld.htk}:output binary htk file for feature data] parmKind = 9 errorOnNoOutput = 1 append = 0 ================================================ FILE: scripts/avec2013/avec2013_lld_htk_and_arff.conf ================================================ /////////////////////////////////////////////////////////////////////////////////////// ///////// > openSMILE configuration file ////////////////// ///////// for AVEC 2013 ////////////////// ///////// based on avec2011.conf ////////////////// ///////// * written 2013 by Florian Eyben * ////////////////// ///////// ////////////////// ///////// (c) 2013 TUM, MMK ////////////////// ///////// (c) 2014 audEERING UG (limited) ////////////////// ///////// All rights reserved, see file COPYING for license terms ////////////////// /////////////////////////////////////////////////////////////////////////////////////// \{avec2013_lld_core.conf} ;;;;;;;;; output all features in HTK and ARFF format ... [componentInstances:cComponentManager] instance[htksink].type=cHtkSink [htksink:cHtkSink] reader.dmLevel=lldA_smo;lldA_smo_de;lldB_smo;lldB_smo_de;lld_nzsmo;lld_nzsmo_de filename=\cm[output_htk(O){default_lld.htk}:output binary htk file for feature data] parmKind = 9 errorOnNoOutput = 1 append = 0 [componentInstances:cComponentManager] instance[arffsink].type=cArffSink [arffsink:cArffSink] reader.dmLevel=lldA_smo;lldA_smo_de;lldB_smo;lldB_smo_de;lld_nzsmo;lld_nzsmo_de filename=\cm[output_arff{default_lld.arff}:output arff file for feature data] append=0 frameIndex=0 frameTime=1 relation=avec2013_lld_per_session instanceBase=\cm[instname{unlabelled}:name of file which will be saved in arff file] errorOnNoOutput = 1 class[0].name = unused_target_label class[0].type = numeric target[0].all = 0.0 ;; more class labels, nor used for now.. ;class[0].name = arousal ;class[0].type = numeric ;class[1].name = valence ;class[1].type = numeric ;class[2].type = depression ;class[2].type = numeric ; the class label or value for the current instance ;\{labels.inc} ================================================ FILE: scripts/avec2013/extract_all_audio.pl ================================================ #!/usr/bin/perl # # AVEC 2013 audio feature batch extraction script # (c) 2013 by Florian Eyben # (c) 2014 audEERING UG (limited) # All rights reserved, see file COPYING for license terms. # use File::Basename; my @instances = glob("../Audio/*.mp4"); for (my $i = 0; $i <= $#instances; $i++) { my $inst = $instances[$i]; $inst = basename($inst); $inst =~ s/_audio\.mp4$//; print "== Extracting features for instance \"$inst\" ==\n"; my $ret = system("perl extractor_script.pl \"$inst\""); print "\n\n"; if ($ret) { exit -1; } } ================================================ FILE: scripts/avec2013/extractor_script.pl ================================================ #!/usr/bin/perl # # AVEC 2013 audio feature extraction script for openSMILE # (c) 2013 by Florian Eyben, TUM # (c) 2014-2016 audEERING. # All rights reserved, see file COPYING for license terms. # my $instance = $ARGV[0]; my $clean = $ARGV[1]; if ($#ARGV < 0) { print "Usage: $0 [clean = 2 (recompute all files), = 1 (first instance, delete existing arff files to avoid appending to old file), = 0 delete nothing]\n"; exit -1; } ### # path to SMILExtract binary my $SE = "./SMILExtract"; # base path with Audio and Annotation folders my $bp = ".."; # file names for files generated by the script my $wav = "$bp/Audio/$instance\_audio.wav"; mkdir("vad"); my $vadcsv = "vad/$instance\_audio.csv"; mkdir("lld"); my $lld_htk = "lld/$instance\_audio.htk"; my $lld_arff = "lld/$instance\_audio.arff"; mkdir("functionals"); my $func_short = "functionals/$instance\_short.arff"; my $func_long = "functionals/$instance\_long.arff"; my $func_short_vad = "functionals/$instance\_short_vad_aligned.arff"; my $func_vad_seg = "functionals/$instance\_vad_seg.arff"; my $func_per_instance = "functionals/$instance\_per_instance.arff"; #### code ... # generate WAV if ($clean == 2) { unlink($vadcsv); } unless (-e $wav) { print "Converting mp4 to wav for instance $instance ...\n"; my $ret = system("mplayer -ao pcm:file=\"$wav\" -vo null \"$bp/Audio/$instance\_audio.mp4\" 2>/dev/null > /dev/null"); print "DONE.\n"; } # perform VAD to CSV if ($clean == 2) { unlink($vadcsv); } unless (-e $vadcsv) { if (-e "tum_vad_2012.conf") { print "Performing VAD on audio stream $instance ...\n"; my $cmd = "$SE -l 0 -C tum_vad_2012.conf -I \"$wav\" -csv \"$vadcsv\" -nologfile >/dev/null 2>/dev/null"; my $ret = system($cmd); if ($ret) { print " ERROR: Failed to run openSMILE! Instance: $instance.\n Command: $cmd\n"; exit -1; } else { print "DONE.\n"; } } else { print "WARN: Not performing VAD, vad config and data files not included in this package! Please contact the author for obtaining these.\n"; } } ### read VAD from CSV print "Loading VAD targets from $vadcsv.\n"; my @vad = (); my $i = 0; open(F, "<$vadcsv"); while() { chomp; my @x = split(/\s*;\s*/, $_); $vad[$i][0] = $x[0]; $vad[$i][1] = $x[1]; $i++; } close(F); print "DONE. Loaded targets for ".($#vad+1)." frames.\n"; # find VAD segments my @vad_segs = (); my $voice = 0; my $threshS = -0.2; my $threshV = 0.2; my $sil_num = 20; my $voice_num = 10; my $voice_cnt = 0; my $sil_cnt = 0; my $seg_nr = 0; my $seg_start = 0; for (my $i = 0; $i <= $#vad; $i++) { my $t = $vad[$i]->[0]; my $v = $vad[$i]->[1]; # hystereses: if ($voice) { if ($v < $threshS) { $sil_cnt++; if ($sil_cnt > $sil_num) { $voice = 0; $vad_segs[$seg_nr]{"start"} = $seg_start - 1; $vad_segs[$seg_nr]{"end"} = $i - $sil_cnt + 3; $seg_nr++; } } else { $sil_cnt = 0; } } else { if ($v > $threshV) { $voice_cnt++; if ($voice_cnt > $voice_num) { $seg_start = $i - $voice_cnt; $voice = 1; } } else { $voice_cnt = 0; } } } ## cut VAD segments for debugging purpose print "Trimming VAD segments for debugging purpose..\n"; mkdir("vad/".$instance."_audio_voicesegs"); open(F, ">vad/$instance\_audio_voiceseg.sh"); print F "#!/bin/sh\n\n"; print F "mkdir $instance\_audio_voicesegs\n"; for (my $i = 0; $i <= $#vad_segs; $i++) { my $start = $vad_segs[$i]{"start"} * 0.01; my $end = $vad_segs[$i]{"end"} * 0.01; my $len = $end - $start; if ($clean == 2) { unlink("vad/$instance\_audio_voicesegs/seg_$i.wav"); } unless (-e "vad/$instance\_audio_voicesegs/seg_$i.wav") { my $cmd = "sox \"$wav\" \"vad/$instance\_audio_voicesegs/seg_$i.wav\" trim $start $len"; #print " seg_$i.wav (start: $start, len: $len)\n"; my $ret = system($cmd); if ($ret) { print " ERROR: Failed to run sox! Instance: $instance.\n Command: $cmd\n"; exit -1; } } my $cmd = "sox \"../$wav\" \"$instance\_audio_voicesegs/seg_$i.wav\" trim $start $len"; print F "$cmd\n"; } print F "\n"; close(F); print "DONE. (voice segmenter script in: vad/$instance\_audio_voiceseg.sh)\n"; # extract LLD to HTK format and ARFF if ($clean == 2) { unlink("$lld_arff"); unlink("$lld_htk"); } unless (-e "$lld_arff") { print "Extracting LLD features ...\n"; my $cmd = "$SE -C avec2013_lld_htk_and_arff.conf -I \"$wav\" -output_htk \"$lld_htk\" -output_arff \"$lld_arff\" -instname \"$instance\" -nologfile 2> /dev/null >/dev/null"; my $ret = system($cmd); if ($ret) { unlink("$lld_arff"); unlink("$lld_htk"); print " ERROR: Failed to run openSMILE! Instance: $instance.\n Command: $cmd\n"; exit -1; } else { print "DONE.\n"; } } # extract functionals (3s) at rate 1s to ARFF with labels (A/V/Depri/VAD%) if ($clean) { unlink("$func_short"); } unless (-e $func_short) { print "Extracting Functionals (short) ...\n"; my $cmd = "$SE -C avec2013_functionals.conf -I \"$wav\" -O \"$func_short\" -frameModeConf avec2013_functionals_frame_mode_short.conf -instname \"$instance\" -nologfile 2> /dev/null >/dev/null"; my $ret = system($cmd); if ($ret) { print " ERROR: Failed to run openSMILE! Instance: $instance.\n Command: $cmd\n"; unlink("$func_short"); exit -1; } else { print "DONE.\n"; } } # extract functionals long (20s) at rate 1s to ARFF with labels (A/V/Depri) if ($clean) { unlink("$func_long"); } unless (-e $func_long) { print "Extracting Functionals (long) ...\n"; my $cmd = "$SE -C avec2013_functionals.conf -I \"$wav\" -O \"$func_long\" -frameModeConf avec2013_functionals_frame_mode_long.conf -instname \"$instance\" -nologfile 2>/dev/null >/dev/null"; my $ret = system($cmd); if ($ret) { print " ERROR: Failed to run openSMILE! Instance: $instance.\n Command: $cmd\n"; unlink("$func_long"); exit -1; } else { print "DONE.\n"; } } # extract functionals for whole segment to ARFF with labels (A/V/Depri) if ($clean) { unlink("$func_per_instance"); } unless (-e $func_per_instance) { print "Extracting Functionals (per instance) ...\n"; my $cmd = "$SE -C avec2013_functionals.conf -I \"$wav\" -O \"$func_per_instance\" -frameModeConf avec2013_functionals_frame_mode.conf -instname \"$instance\" -nologfile 2>/dev/null >/dev/null"; my $ret = system($cmd); if ($ret) { print " ERROR: Failed to run openSMILE! Instance: $instance.\n Command: $cmd\n"; unlink("$func_per_instance"); exit -1; } else { print "DONE.\n"; } } ## VAD segment functionals: if ($clean) { unlink("$func_vad_seg"); } # extract functionals of VAD segments to ARFF with labels (A/V/Depri) unless (-e $func_vad_seg) { print "Extracting functionals for VAD segments (full) ...\n"; for (my $i = 0; $i <= $#vad_segs; $i++) { my $start = $vad_segs[$i]{"start"} * 0.01; my $end = $vad_segs[$i]{"end"} * 0.01; my $cmd = "$SE -C avec2013_functionals.conf -frameTimeAdd \"$start\" -start \"$start\" -end \"$end\" -I \"$wav\" -O \"$func_vad_seg\" -frameModeConf avec2013_functionals_frame_mode.conf -instname \"$instance\_seg$i\" -nologfile 2>/dev/null >/dev/null"; my $ret = system($cmd); if ($ret) { print " ERROR: Failed to run openSMILE! Instance: $instance.\n Command: $cmd\n"; unlink("$func_vad_seg"); exit -1; } } print "DONE.\n"; } if ($clean) { unlink("$func_short_vad"); } # extract functionals of VAD segments to ARFF with labels (A/V/Depri) if (0) { unless (-e $func_short_vad) { print "Extracting functionals for VAD segments (short) ...\n"; for (my $i = 0; $i <= $#vad_segs; $i++) { my $start = $vad_segs[$i]{"start"} * 0.01; my $end = $vad_segs[$i]{"end"} * 0.01; my $cmd = "$SE -C avec2013_functionals.conf -frameTimeAdd \"$start\" -start \"$start\" -end \"$end\" -I \"$wav\" -O \"$func_short_vad\" -frameModeConf avec2013_functionals_frame_mode_short_with_last.conf -instname \"$instance\_seg$i\" -nologfile 2>/dev/null >/dev/null"; my $ret = system($cmd); if ($ret) { print " ERROR: Failed to run openSMILE! Instance: $instance.\n Command: $cmd\n"; unlink("$func_short_vad"); exit -1; } } print "DONE.\n"; } } exit 0; ================================================ FILE: scripts/avec2013/feature_set_news.txt ================================================ delta's for voicing only in voiced segments! + spectral slope and flatness + mfcc 11-16 functionals: + voiced segment onset rate ================================================ FILE: scripts/clonecomp.pl ================================================ #!/usr/bin/perl # This file is part of openSMILE. # # Copyright (c) audEERING. All rights reserved. # See the file COPYING for details on license terms. # script to clone an openSMILE component # .cpp and .hpp files are copied and the classname is updated if ($#ARGV <3 ) { print "USAGE: clonecomp.pl \n"; exit; } $src="../src"; $in=$ARGV[2]; $on=$ARGV[3]; $inT=$in; $inT=~tr/a-z/A-Z/; $onT=$on; $onT=~tr/a-z/A-Z/; $if=$ARGV[0]; $of=$ARGV[1]; print "$in (in)\n"; print "$on (out)\n"; @ex=("cpp","hpp"); foreach $ext (@ex) { my $pref = ""; if ($ext =~ /h/) { $pref = "include/"; } open(IN,"<$src/$pref".$ARGV[0].".$ext"); open(OUT,">$src/$pref".$ARGV[1].".$ext"); while() { my $line=$_; $line =~ s/$in/$on/g; $line =~ s/_$inT/_$onT/; if ($ext eq "cpp") { $line =~ s/<$if.hpp>/<$of.hpp>/; } else { $onTh = $onT."_HPP"; $line =~ s/^#ifndef __.+?_HPP/#ifndef __$onTh/; $line =~ s/^#define __.+?_HPP/#define __$onTh/; $line =~ s/^#endif *\/\/ *__.+?_HPP/#endif \/\/ __$onTh/; } print OUT $line; } close(OUT); close(IN); } ================================================ FILE: scripts/extract_features_batch.pl ================================================ ############################################################# # Generic batch feature extraction script. # Requires perl to run. # Calls openSMILE on multiple files in a directory. # # This file is part of openSMILE. # (c) 2016 by audEERING. # All rights reserved. See file COPYING for details. ############################################################# use strict; use FileHandle; use File::Basename; ### change these variables to match your setting my $openSMILE_root = ".."; my $SMILExtract = "$openSMILE_root/SMILExtract"; my $config = "$openSMILE_root/config/IS13_ComParE.conf"; my $corpus = "corpus_name"; ## glob expression to list all wave files my $wavs = "/path/to/*.wav"; ## NOTE: comment out these two lines once the above settings have been changed... print("\nThis script has no parameters.\nPlease edit the variables in the code to fit your configuration.\n\n"); exit 1; ### # see load_labels documentation for details (loading labels from a list file) # my $labels = "path to text based label file...."; #### my $arff_all = "$corpus-all.arff"; ## for data-set partitioning based on filename (see below) #my $arff_train = "$corpus-train.arff"; #my $arff_devel = "$corpus-devel.arff"; #my $arff_test = "$corpus-test.arff"; ### ## example function to load labels from ## a ';' separated table file ## first line is a header with field names ## first column is the filename (wav) ## second column is the label sub load_labels { my $labels = shift; my $F = FileHandle->new(); open($F, "<$labels"); my $head = <$F>; $head =~ s/\r?\n$//; my @headEl = split(/;/, $head); my %labs = (); while(<$F>) { my $line = $_; $line =~ s/\r?\n$//; my @x = split(/;/, $line); $labs{$x[0]}{"label"} = $x[1]; # .. can add more labels here ... } $F->close(); return \%labs; } ## deletes existing arff files, so that openSMILE does not append to them. unlink($arff_all); #unlink($arff_train); #unlink($arff_devel); #unlink($arff_test); ## enable this to load labels... #my $lab = load_labels($labels); #my @labs = keys %{$lab}; ## use this to iterate through labels.... #foreach my $l (@labs) { # my $wav = $wavs."/".$l; ## alternatively we iterate through the list of wave files my @Wavs = glob($wavs); foreach my $wav (@Wavs) { my $l = basename($wav); #### my $arff = $arff_all; ### example for splitting in 3 partitions based on filename expression #if ($l =~ /^training_/) { # $arff = $arff_train; #} #if ($l =~ /^validation_/) { # $arff = $arff_devel; #} #if ($l =~ /^test_/) { # $arff = $arff_test; #} if ($arff) { my $targets = ""; ## this is an example for adding labels loaded from a text file directly into the arff file: ## the options -class and -classtype must be defined in the given arff_targets.conf.inc file, ## this file allows to define multiple such options for a multi-target arff file. # my $targets = "-arfftargetsfile ./arff_targets.conf.inc"; # $targets .= " -class ".$lab->{$l}{"label"}; # $targets .= " -classtype {emotional,neutral}"; ################# my $inst = $l; ## if you get errors that the wave file format cannot be read by openSMILE, ## you first need to convert your audio files with the open-source tool 'sox'. ## e.g. sox -R $wav -c 1 -e signed-integer -b 16 tmp-output.wav ## then set $wav = "tmp-output.wav" ## and don't forget to delete tmp-output.wav at the end... my $cmd = "$SMILExtract -nologfile -l 2 -C \"$config\" -I \"$wav\" -O \"$arff\" -instname \"$inst\" $targets"; print "running: $cmd\n"; my $ret = system($cmd); if ($ret) { print "ERROR: $cmd\n"; exit -1; } } } ================================================ FILE: scripts/gnuplot/gpconvert.pl ================================================ #!/usr/bin/perl # Usage: gpconvert.pl [output file , default: same as input] # # this script converts a CSV file (; delimiter) # and saves it as a space separated file for gnuplot # $col = $ARGV[0]; unless ($ARGV[1]) { print "Usage: gpconvert.pl [output file, default: overwrite input file]\n"; exit -1; } $j=0; open(F,"<$ARGV[1]"); while() { $_=~s/\r?\n//; if ($_ !~ /;/) { print "no column delimiter ; found !"; exit -1; } if ($_ !~ /[a-df-zA-DF-Z]/) { # skip a header line with alphanumeric characters split(/;/); # <<- the delimiter ; for ($i=0;$i<=$#_;$i++) { $d[$i][$j] = $_[$i]; } $j++; } } close(F); if ($ARGV[2]) { open(F,">$ARGV[2]"); } else { open(F,">$ARGV[1]"); } for ($n=0; $n<$j; $n++) { $s="$n "; # for ($i=0; $i<$#d; $i++) { $s.=$d[$col][$n]." "; # } chop($s); print F $s."\n"; } close(F); ================================================ FILE: scripts/gnuplot/gpframeconvert.pl ================================================ #!/usr/bin/perl # Usage: gpconvert.pl [output file , default: same as input] # # this script converts a CSV file (; delimiter) # and saves it as a space separated file for gnuplot # $col = $ARGV[0]; unless ($ARGV[1]) { print "Usage: gpframeconvert.pl [output file, default: overwrite input file]\n"; exit -1; } $j=0; open(F,"<$ARGV[1]"); while() { $_=~s/\r?\n//; if ($_ !~ /;/) { print "no column delimiter ; found !"; exit -1; } if ($_ !~ /[a-df-zA-DF-Z]/) { # skip a header line with alphanumeric characters split(/;/); # <<- the delimiter ; for ($i=0;$i<=$#_;$i++) { $d[$i][$j] = $_[$i]; } $j++; } } close(F); if ($ARGV[2]) { open(F,">$ARGV[2]"); } else { open(F,">$ARGV[1]"); } for ($n=0; $n<$#d; $n++) { $s="$n "; # for ($i=0; $i<$#d; $i++) { $s.=$d[$n][$col]." "; # } chop($s); print F $s."\n"; } close(F); ================================================ FILE: scripts/gnuplot/plotaudspec.sh ================================================ #!/bin/sh if [ "$1" = "" ]; then echo "Usage: plotaudspec.sh "; exit; fi perl transpose_lin.pl $1 .tmp.plot.dat echo "Starting gnuplot, type 'quit' to exit the gnuplot prompt!" gnuplot -persist plotmatrix_spec.gp rm .tmp.plot.dat ================================================ FILE: scripts/gnuplot/plotchroma.sh ================================================ #!/bin/sh if [ "$1" = "" ]; then echo "Usage: plotchroma.sh "; exit; fi perl transpose.pl $1 .tmp.plot.dat echo "Starting gnuplot, type 'quit' to exit the gnuplot prompt!" gnuplot -persist plotmatrix_chroma.gp rm .tmp.plot.dat ================================================ FILE: scripts/gnuplot/plotcontour.gp ================================================ set title 'Feature contour plot' set ylabel 'Amplitude/Value' set xlabel 'Time/frames' plot '.tmp.plot.dat' using 1:2 with lines ================================================ FILE: scripts/gnuplot/plotcontour.sh ================================================ #!/bin/sh if [ "$1" = "" ]; then echo "Usage: plotcontour.sh "; exit; fi perl gpconvert.pl $1 $2 .tmp.plot.dat echo "Starting gnuplot, type 'quit' to exit the gnuplot prompt!" gnuplot -persist plotcontour.gp ## to run gnuplot an remain in interactive mode: ## gnuplot plotcontour.gp - rm .tmp.plot.dat ================================================ FILE: scripts/gnuplot/plotframe.gp ================================================ set title 'Plot of a single frame' set ylabel 'Amplitude/Value' set xlabel 'Feature index' plot '.tmp.plot.dat' using 1:2 with lines ================================================ FILE: scripts/gnuplot/plotframe.sh ================================================ #!/bin/sh if [ "$1" = "" ]; then echo "Usage: plotframe.sh [index of frame to extract, default: the first (0)]"; exit; fi if [ "$2" = "" ]; then perl gpframeconvert.pl 0 $1 .tmp.plot.dat else perl gpframeconvert.pl $2 $1 .tmp.plot.dat fi echo "Starting gnuplot, type 'quit' to exit the gnuplot prompt!" gnuplot -persist plotframe.gp ## to run gnuplot an remain in interactive mode: ## gnuplot plotframe.gp - rm .tmp.plot.dat ================================================ FILE: scripts/gnuplot/plotmatrix.gp ================================================ set pm3d map set palette gray set view map set xlabel 'Time/frames' set ylabel 'Feature Index' set zlabel 'Power' ## change the name '.tmp.plot.dat' to your filename... splot '.tmp.plot.dat' matrix title 'Matrix plot' ================================================ FILE: scripts/gnuplot/plotmatrix.sh ================================================ #!/bin/sh if [ "$1" = "" ]; then echo "Usage: plotmatrix.sh "; exit; fi perl transpose.pl $1 .tmp.plot.dat echo "Starting gnuplot, type 'quit' to exit the gnuplot prompt!" gnuplot -persist plotmatrix.gp ## to run gnuplot an remain in interactive mode: ## gnuplot plotmatrix.gp - rm .tmp.plot.dat ================================================ FILE: scripts/gnuplot/plotmatrix_chroma.gp ================================================ set pm3d map set palette gray set view map set xlabel 'Time/frames' set ylabel 'Semitone bin (0-11)' set zlabel 'Intensity' ## change the name to your filename... splot '.tmp.plot.dat' matrix title 'Chromagram' ================================================ FILE: scripts/gnuplot/plotmatrix_spec.gp ================================================ set pm3d map set palette gray set view map set xlabel 'Time/frames' set ylabel 'Spectral bin/band' set zlabel 'Magnitude/Intensity' ## change the name to your filename... splot '.tmp.plot.dat' matrix title 'Spectrogram' ================================================ FILE: scripts/gnuplot/transpose.pl ================================================ #!/usr/bin/perl # Usage: transpose.pl [output file , default: same as input] # # this script transposes a CSV file (; delimiter) # and saves it as a space separated file for gnuplot # the values in the CSV file are squared, which usually # leads to a better display behaviour for spectrograms, etc. # Please see the comments in the code below, how to change this. # unless ($ARGV[0]) { print "Usage: transpose.pl [output file, default: overwrite input file]\n"; exit -1; } $j=0; open(F,"<$ARGV[0]"); while() { $_=~s/\r?\n//; if ($_ !~ /;/) { print "no column delimiter ; found !"; exit -1; } if ($_ !~ /[a-df-zA-DF-Z]/) { # skip a header line with alphanumeric characters @_=split(/;/); # <<- the delimiter ; for ($i=0;$i<=$#_;$i++) { $d[$i][$j] = $_[$i]; } $j++; } } close(F); if ($ARGV[1]) { open(F,">$ARGV[1]"); } else { open(F,">$ARGV[0]"); } for ($n=$#d; $n>=0; $n--) { $s=""; for ($i=0; $i<$j; $i++) { $s.=$d[$n][$i]*$d[$n][$i]." "; ## comment out this line with a "##" when using the line below ## $s.=$d[$n][$i]." "; ## uncomment this line, to use the magnitude instead of power } chop($s); print F $s."\n"; } close(F); ================================================ FILE: scripts/gnuplot/transpose_lin.pl ================================================ #!/usr/bin/perl # Usage: transpose.pl [output file , default: same as input] # # this script transposes a CSV file (; delimiter) # and saves it as a space separated file for gnuplot # the values in the CSV file are squared, which usually # leads to a better display behaviour for spectrograms, etc. # Please see the comments in the code below, how to change this. # unless ($ARGV[0]) { print "Usage: transpose.pl [output file, default: overwrite input file]\n"; exit -1; } $j=0; open(F,"<$ARGV[0]"); while() { $_=~s/\r?\n//; if ($_ !~ /;/) { print "no column delimiter ; found !"; exit -1; } if ($_ !~ /[a-df-zA-DF-Z]/) { # skip a header line with alphanumeric characters @_=split(/;/); # <<- the delimiter ; for ($i=0;$i<=$#_;$i++) { $d[$i][$j] = $_[$i]; } $j++; } } close(F); if ($ARGV[1]) { open(F,">$ARGV[1]"); } else { open(F,">$ARGV[0]"); } for ($n=$#d; $n>=0; $n--) { $s=""; for ($i=0; $i<$j; $i++) { $s.=$d[$n][$i]." "; } chop($s); print F $s."\n"; } close(F); ================================================ FILE: scripts/modeltrain/README.txt ================================================ Use the perl script "makemodel.pl" to build an emotion/affect recognition LibSVM model (both SVM and SVR supported, see buildmodel.pl if you want to change parameters). The script takes either an Arff-file as single argument OR a corpus directory according to Florian's emotion class directory standard. In the latter case the script takes a second parameter, which is the openSMILE configuration file to use. ================================================ FILE: scripts/modeltrain/arff-functions.pl ================================================ ### Functions to handle .arff files (WEKA) # returns reference to arff hash sub load_arff { my $file = $_[0]; my %hash = (); my $data = 0; my $featnr = 0; my $instnr = 0; open(FILE,"<$file"); while () { my $line = $_; $line =~ s/\n$//; $line =~ s/\r$//; if ($line !~ /^\s*$/) { if ($data) { #my @els = split(/,/,$line); # TODO: quoting "" '' $line =~ s/,,/, ,/g; my @els = ($line =~ /(\'.*?\'|".*?"|[^,]+)/g); my $i; for ($i=0; $i <= $#els; $i++) { $hash{"instances"}[$instnr][$i] = "$els[$i]"; } #$hash{"instances"}[$instnr][$i] = \@els; $instnr++; } else { if ($line =~ /^\@data/i) { $data = 1; $instnr = 0; } else { if ($line =~ /^\@relation\s+(.+)$/i) { $hash{"relation"} = $1; } if ($line =~ /^\@attribute\s+(.+?)\s+(.+?)$/i) { $hash{"attributes"}[$featnr]{"name"} = $1; $hash{"attributes"}[$featnr]{"type"} = $2; $hash{"attribute_names"}{$1} = $featnr+1; # reverse lookup hash ## +1 !! $hash{"attributes"}[$featnr]{"selected"} = 1; #print $hash{"attributes"}[$featnr]{"name"}."\n"; $featnr++; } } } } } close(FILE); return \%hash; } # USAGE: &save_arff( $file, \%hash ) sub save_arff { my $file = $_[0]; my $hashref = $_[1]; my $tmp; my $name; my $type; my $i = 0; open(FILE,">$file"); $tmp = $hashref->{"relation"}; print FILE "\@relation $tmp\n\n"; for ($i=0; $i <= $#{$hashref->{"attributes"}}; $i++) { #if ($hashref->{"attributes"}[$i]{"selected"}) { $name = $hashref->{"attributes"}[$i]{"name"}; $type = $hashref->{"attributes"}[$i]{"type"}; print FILE "\@attribute $name $type\n"; #} } print FILE "\n\@data\n\n"; for ($i=0; $i <= $#{$hashref->{"instances"}}; $i++) { my $line = ""; for ($j= 0; $j <= $#{$hashref->{"instances"}[$i]}; $j++) { $line .= $hashref->{"instances"}[$i][$j].","; } chop($line); print FILE $line."\n"; } close(FILE); } # Perform attribute selection while saving. Saves memory and is faster sub save_arff_AttrSelected { my $file = $_[0]; my $hashref = $_[1]; my $tmp; my $name; my $type; my $i = 0; my $j; open(FILE,">$file"); $tmp = $hashref->{"relation"}; print FILE "\@relation $tmp\n\n"; for ($i=0; $i <= $#{$hashref->{"attributes"}}; $i++) { if ($hashref->{"attributes"}[$i]{"selected"}) { $name = $hashref->{"attributes"}[$i]{"name"}; $type = $hashref->{"attributes"}[$i]{"type"}; print FILE "\@attribute $name $type\n"; } } print FILE "\n\@data\n\n"; for ($i=0; $i <= $#{$hashref->{"instances"}}; $i++) { my $line = ""; for ($j= 0; $j <= $#{$hashref->{"instances"}[$i]}; $j++) { #print $j."\n"; if ($hashref->{"attributes"}[$j]{"selected"}) { $line .= $hashref->{"instances"}[$i][$j].","; } } chop($line); # remove last comma print FILE $line."\n"; } close(FILE); } ## convert arff to csv, first line contains header with feature names and types in [] sub arff_to_csv { my $arff = $_[0]; my $csv = $_[1]; my $csvDelim = ","; my $hr = &load_arff($arff); open(FILE,">$csv"); #header line my $line = ""; my $i; for ($i = 0; $i <= $#{$hr->{"attributes"}}; $i++) { $line .= $hr->{"attributes"}[$i]{"name"}."[".$hr->{"attributes"}[$i]{"type"}."]$csvDelim"; } chop($line); print FILE $line."\n"; # print data for ($i = 0; $i <= $#{$hr->{"instances"}}; $i++) { $line = ""; my $j; for ($j = 0; $j <= $#{$hr->{"instances"}[$i]}; $j++) { if ($hr->{"instances"}[$i][$j] eq "nan") { print $hr->{"attributes"}[$j]{"name"}."\n"; } $line .= $hr->{"instances"}[$i][$j].$csvDelim; } chop($line); print FILE $line."\n"; } close(FILE); } ## convert csv to arff, # first line in csv file contains header with feature names (and types in [] -> optional!) sub csv_to_arff { # return value: arff hash reference my $csv = $_[0]; # filename my $arff = $_[1]; # arff filename my $csvdelim = ","; if ($_[2]) { $csvdelim = $_[2]; } #my $hr = &load_arff($arff); my %hr=(); $hr{"relation"}="from_csv"; open(FILE,"<$csv"); #header line my $line = ""; my $i; $line=; chop($line); my @els=split(/$csvdelim/,$line); my $i=0; for ($i=0; $i <= $#els; $i++) { if ($els[$i] =~ /^(.+?)\[(.+?)\]$/) { $hr{"attributes"}[$i]{"name"} = $1; $hr{"attributes"}[$i]{"type"} = $2; } else { $hr{"attributes"}[$i]{"name"} = $els[$i]; $hr{"attributes"}[$i]{"type"} = "numeric"; } } print "attributes: $i \n"; my $i=0; while () { $line = $_; chop($line); my @els=split(/$csvdelim/,$line); my $j; for ($j=0; $j<=$#els; $j++) { $hr{"instances"}[$i][$j] = $els[$j]; } print "attr[$i]: $j\n"; $i++; } close(FILE); &save_arff($arff,\%hr); return \%hr; } ## convert arff to csvs, first line contains header with feature names and types in [] ## special function that creates multiple csvs by parsing first attribute (filename) sub arff_to_csvs { my $arff = $_[0]; my $csv = $_[1]; my $hr = &load_arff($arff); #load session names: open(FILE,"all.txt"); my @sessnames = (); while() { chop; push(@sessnames,$_); } close(FILE); my $sess; foreach $sess (@sessnames) { my $ccsv = $csv.".$sess.csv"; $ccsv =~ s/csv\.$sess\.csv$/$sess.csv/; open(FILE,">$ccsv"); #header line my $line = ""; my $i; for ($i = 0; $i <= $#{$hr->{"attributes"}}; $i++) { $line .= $hr->{"attributes"}[$i]{"name"}."[".$hr->{"attributes"}[$i]{"type"}."],"; } chop($line); print FILE $line."\n"; # print data for ($i = 0; $i <= $#{$hr->{"instances"}}; $i++) { if ($hr->{"instances"}[$i][0] =~ /$sess/) { $line = ""; my $j; for ($j = 0; $j <= $#{$hr->{"instances"}[$i]}; $j++) { $line .= $hr->{"instances"}[$i][$j].","; } chop($line); print FILE $line."\n"; } } close(FILE); } } ## load both files, check if attributes are the same, and save, SLOW!! ## (this funtions concats INSTANCES) sub concat_arffs_save { my $file1 = $_[0]; my $file2 = $_[1]; my $outfile = $_[2]; my $hr1 = &load_arff($file1); my $hr2 = &load_arff($file2); my $error = 0; my $i; #check attributes: for($i=0; $i <= $#{$hr1->{"attributes"}}; $i++) { if ($hr1->{"attributes"}[$i]{"name"} ne $hr2->{"attributes"}[$i]{"name"}) { print "Attribute name mismatch: (1) ".$hr1->{"attributes"}[$i]{"name"}." <-> (2) ".$hr2->{"attributes"}[$i]{"name"}."\n"; $error = 1; last; } if ($hr1->{"attributes"}[$i]{"type"} ne $hr2->{"attributes"}[$i]{"type"}) { print "Attribute type mismatch: ".$hr2->{"attributes"}[$i]{"type"}." :: (1) ".$hr1->{"attributes"}[$i]{"type"}." <-> (2) ".$hr2->{"attributes"}[$i]{"type"}."\n"; $error = 2; last; } } unless ($error) { # concat push(@{$hr1->{"instances"}},@{$hr2->{"instances"}}); # save &save_arff($outfile,$hr1); } return $error; } ## copy and append only, fast! sub concat_arffs_simple { my $file1 = $_[0]; my $file2 = $_[1]; my $outfile = $_[2]; open(FILE,"<$file1"); open(OF,">$outfile"); while() { print OF $_; } close(FILE); open(FILE,"<$file2"); while() { my $line = $_; if ($line =~ /^\@data/i) { last; } } while() { print OF $_; } close(FILE); close(OF); } # concat attributes! (only works when the number of instances is the same for both files!) # USAGE: join_arff(input1, input2, $output, [# features to skip at end of first file]) # optional: return value is hash ref. to joined arff hash sub join_arff() { my $in1 = $_[0]; my $in2 = $_[1]; my $out = $_[2]; my $skip = 1; # attributes of in1 to skip/overwrite (from end) if ($_[3]) { $skip = $_[3]; } my $hr1=&load_arff($in2); my $hr2=&load_arff($in1); my @attr1 = @{$hr1->{"attributes"}}; my @inst1 = @{$hr1->{"instances"}}; my @attr2 = @{$hr2->{"attributes"}}; my @inst2 = @{$hr2->{"instances"}}; my $na2 = $#attr2; if ($#inst2 != $#inst1) { print "Number of instances does not match! cannot merge!\n"; return -1; } my $i; # append hr1 attributes to hr2 for ($i=0; $i<=$#attr1; $i++) { $hr2->{"attributes"}[$na2+$i+1-$skip] = $attr1[$i]; } #append hr1 instances to hr2 instances for ($i=0; $i<=$#inst2; $i++) { for ($j=0; $j<=$#attr1; $j++) { $hr2->{"instances"}[$i][$na2+$j+1-$skip] = $inst1[$i][$j]; } } # save result (hr2): &save_arff($out , $hr2); return \%hr2; } # synchronize two arff files, so that they have the same attributes # this one only works if, the attributes are in the same order in both files sub sync_arffs { my $file1 = $_[0]; # arff file to be modified my $file2 = $_[1]; # arff file to sync to... my $outfile = $_[2]; # file to save result to my $addnames = $_[3]; # reference to hash w. attribute names that will be added as keys # (attr. must exist in file1, and not in file2) my %addnames_local = (); if ($addnames) { # check if it is a reference ???!!! %addnames_local = %{$addnames}; } print "Loading $file1...\n"; my $hr1 = &load_arff($file1); print "Loading $file2...\n"; my $hr2 = &load_arff($file2); print "Syncing attributes...\n"; my $i; # in hr1 select only those that are present in hr2: for($i=0; $i <= $#{$hr1->{"attributes"}}; $i++) { #print "$i\n"; if ( ($hr2->{"attribute_names"}{$hr1->{"attributes"}[$i]{"name"}}) || ($addnames_local{$hr1->{"attributes"}[$i]{"name"}}) ) { $hr1->{"attributes"}[$i]{"selected"} = 1; } else { $hr1->{"attributes"}[$i]{"selected"} = 0; } } print "Saving $outfile...\n"; &save_arff_AttrSelected($outfile,$hr1); } # synchronize two arff files, so that they have the same attributes # can handle attributes in arbitrary order, will produce output in the same attr. order as reference sub sync_arffs_order { my $file1 = $_[0]; # arff file to be modified my $file2 = $_[1]; # arff file to sync to... my $outfile = $_[2]; # file to save result to my $addnames = $_[3]; # reference to hash w. attribute names that will be added as keys # (attr. must exist in file1, and not in file2) my %addnames_local = (); if ($addnames) { # check if it is a reference ???!!! %addnames_local = %{$addnames}; } print "Loading $file1...\n"; my $hr1 = &load_arff($file1); print "Loading $file2...\n"; my $hr2 = &load_arff($file2); my %hrOut={}; print "Syncing attributes...\n"; $hrOut{"relation"} = $hr1->{"relation"}; my $i; # copy attributes from hr1 in hrOut, if present in hr2 for($i=0; $i <= $#{$hr2->{"attributes"}}; $i++) { $hrOut{"attributes"}[$i]{"name"} = $hr2->{"attributes"}[$i]{"name"}; $hrOut{"attributes"}[$i]{"type"} = $hr2->{"attributes"}[$i]{"type"}; $hrOut{"attributes"}[$i]{"selected"} = 1; $hrOut{"attribute_names"}{$hr2->{"attributes"}[$i]{"name"}} = $i+1; my $attrNr1 = $hr1->{"attribute_names"}{$hr2->{"attributes"}[$i]{"name"}}-1; for ($j=0; $j <= $#{$hr1->{"instances"}}; $j++) { $hrOut{"instances"}[$j][$i] = $hr1->{"instances"}[$j][$attrNr1]; } } #TODO: add addnames_local names at the end... #if ( ($hr2->{"attribute_names"}{$hr1->{"attributes"}[$i]{"name"}}) || # ($addnames_local{$hr1->{"attributes"}[$i]{"name"}}) ) { # $hr1->{"attributes"}[$i]{"selected"} = 1; #} else { # $hr1->{"attributes"}[$i]{"selected"} = 0; #} print "Saving $outfile...\n"; &save_arff($outfile,\%hrOut); } # synchronize two arff files, so that they have the same attributes # can handle attributes in arbitrary order, will produce output in the same attr. order as reference sub sync_arff_to_attrlist_order { my $file1 = $_[0]; # arff file to be modified my $attrlist = $_[1]; # attr. list my $outfile = $_[2]; # file to save result to print "Loading input $file1...\n"; my $hr1 = &load_arff($file1); print "Loading attribute list $file2...\n"; open(FFFILE,"<$attrlist"); my @ftlist; while () { my $line=$_; $line=~s/\n$//; $line=~s/\r$//; $line=~s/^\s*//; $line=~s/\s*$//; if ($line !~ /^$/) { push(@ftlist,$line); print "ATTR:$line\n"; } } close(FFFILE); my %hrOut={}; print "Syncing attributes...\n"; $hrOut{"relation"} = $hr1->{"relation"}; my $i; # copy attributes from hr1 in hrOut, if present in hr2 for($i=0; $i <= $#ftlist; $i++) { my $anum = $hr1->{"attribute_names"}{$ftlist[$i]}-1; $hrOut{"attributes"}[$i]{"name"} = $hr1->{"attributes"}[$anum]{"name"}; $hrOut{"attributes"}[$i]{"type"} = $hr1->{"attributes"}[$anum]{"type"}; $hrOut{"attributes"}[$i]{"selected"} = 1; $hrOut{"attribute_names"}{$hr1->{"attributes"}[$anum]{"name"}} = $i+1; #my $attrNr1 = $hr1->{"attribute_names"}{$hr2->{"attributes"}[$i]{"name"}}-1; for ($j=0; $j <= $#{$hr1->{"instances"}}; $j++) { $hrOut{"instances"}[$j][$i] = $hr1->{"instances"}[$j][$anum]; } } #TODO: add addnames_local names at the end... #if ( ($hr2->{"attribute_names"}{$hr1->{"attributes"}[$i]{"name"}}) || # ($addnames_local{$hr1->{"attributes"}[$i]{"name"}}) ) { # $hr1->{"attributes"}[$i]{"selected"} = 1; #} else { # $hr1->{"attributes"}[$i]{"selected"} = 0; #} print "Saving $outfile...\n"; &save_arff($outfile,\%hrOut); } # add a new attribute at the beginning with a unique instance id # USAGE: &add_instance_id($inputarff, $outputarff); sub add_instance_id { my $input = $_[0]; my $output = $_[1]; my $hr = &load_arff($input); my @attr = @{$hr->{"attributes"}}; my $i; my %id; $id{"name"} = "id"; $id{"type"} = "numeric"; unshift(@{$hr->{"attributes"}},\%id); for ($i=0; $i<=$#{$hr->{"instances"}}; $i++) { unshift(@{$hr->{"instances"}[$i]},$i+1); } &save_arff($output,$hr); } # remove first attribute (instance id) and return array with its values # USAGE: @instance_ids = &remove_instance_id($inputarff, [$outputarff]); sub remove_instance_id { my $input = $_[0]; my $output = $_[1]; my $hr = &load_arff($input); my @attr = @{$hr->{"attributes"}}; my $id = shift(@{$hr->{"attributes"}}); my $i; my @ids=(); for ($i=0; $i<=$#{$hr->{"instances"}}; $i++) { $ids[$i] = shift(@{$hr->{"instances"}[$i]}); } if ($output) { &save_arff($output,$hr); } return @ids; } # USAGE : arff_concat_orderd( $output, $unique_hashref, @inputs ) # unique_hash: hash{"filename"}[linenr] = uniqueid # @inputs: array of input filenames as in hash index # $output : output filename sub arff_concat_ordered { my $output = shift; my $unique_hashref = shift; my @inputs = @_; my %h=(); # concat all input files with instances in correct order: foreach $f (@inputs) { my $in = &load_arff($f); if ($in->{"atrributes"}[0]{"name"} =~ /^id$/i) { print "ERROR: first attribute is not an id! in file $f\n"; return; } unless ($h{"attributes"}) { $h{"attributes"} = $in->{"attributes"}; } my $i; for ($i=0; $i<=$#{$in->{"instances"}}; $i++) { $h{"instances"}[$in->{"$instances"}[$i][0]] = $in->{"instances"}[$i]; } } # now remove the id field: my $id = shift(@{$h{"attributes"}}); my $i; my @ids=(); for ($i=0; $i<=$#{$h{"instances"}}; $i++) { $ids[$i] = shift(@{$h{"instances"}[$i]}); } # and save to output file: &save_arff($output,\%h); } # remove specific attributes from an arff file (by name) sub arff_remove_attr { my $input = shift; # input arff my $output = shift; # output arff my @names = @_; # names of attributes to remove my $in=&load_arff($input); # get indicies of attributes to remove: # $hash{"attribute_names"}{$1} foreach $f (@names) { splice(@{$in->{"attributes"}}, $in->{"attribute_names"}{$f}); } &save_arff($output,$in); } ####################### weka calls: ###################### sub chop_newline { my $i; #for ($i=0; $i<=$#_; $i++) { $_ =~ s/\n$//; $_ =~ s/\n$//; #} return $_; } $wekacmd = "java -Xmx1024m -classpath /home/don/eyb/inst/weka-3-5-6/weka.jar "; # run a weka function: sub run_weka { #my @cmdline = @_; #unshift(@cmdline,split(/ /,$wekacmd)); #print "running command: ".join(" ",@cmdline)."\n"; #my $cmd = "\"".join("\" \"",@cmdline)."\""; #system(@cmdline); my $cmdline = $_[0]; print "running command: ".$wekacmd." ".$cmdline."\n"; system($wekacmd." ".$cmdline); if ($?) { print "ERROR running Weka\n"; return $retval; } return $retval; } #weka.filters.unsupervised.attribute.Remove -R 5 -i $input_arff -o $input_arff.arff # &scv_split($input_arff, $nfolds, [$output base]) # split arff file into N folds , create train and test arff file for each fold # append _fNN_train to each filename base # return value: hash reference to hash with arrays of train/test files sub scv_split { my $input = $_[0]; my $nfolds = $_[1]; my $outbase = $_[2]; my $class = "-c last"; # classification (nominal class) #$class = ""; # regression (numerical class) unless ($outbase) { $outbase = $input; $outbase =~ s/\.arff$//i; } my %files=(); $files{"nfolds"} = $nfolds; my $i; for ($i=1; $i<=$nfolds; $i++) { my $fnr = sprintf("%3i",$i); $fnr =~ s/\s/0/g; my $train = $outbase."_f$fnr"."_train.arff"; my $test = $outbase."_f$fnr"."_test.arff"; $files{"train"}[$i-1] = $train; $files{"test"}[$i-1] = $test; #print "FOLD: $fnr -> $train\n"; print "Generating train/test files for FOLD $fnr ... "; unless (-f $train) { if (&run_weka("weka.filters.supervised.instance.StratifiedRemoveFolds -i $input -o $train $class -V -S 0 -N $nfolds -F $i ")) { return 1; } } else { print "(trainfile exists) "; } unless (-f $test) { if (&run_weka("weka.filters.supervised.instance.StratifiedRemoveFolds -i $input -o $test $class -S 0 -N $nfolds -F $i ")) { return 1; } } else { print "(testfile exists) "; } print "done\n"; } return \%files; } sub weka_cfs { my $input = shift; my $output = shift; return &run_weka("weka.filters.supervised.attribute.AttributeSelection -E \"weka.attributeSelection.CfsSubsetEval \" -S \"weka.attributeSelection.BestFirst -D 1 -N 5\" -i $input -o $output "); } $default_classifier = "weka.classifiers.functions.SVMreg -C 1.0 -N 0 -I \"weka.classifiers.functions.supportVector.RegSMOImproved -L 0.0010 -W 1 -P 1.0E-12 -T 0.0010 -V\" -K \"weka.classifiers.functions.supportVector.PolyKernel -C 250007 -E 1.0\""; # train on train_arff, test with test_arff, save predicitons in file # this function does not save a model sub classify_predict { my $trainarff = shift; my $testarff = shift; my $predictions = shift; my $classifier = shift; unless ($classifier) { $classifier = $default_classifier; } return &run_weka("$classifier -T $testarff -t $trainarff -no-cv -p 0 > $predictions"); } # train on train_arff, test with test_arff, save results in file # this function does not save a model sub classify_eval { my $trainarff = shift; my $testarff = shift; my $results = shift; my $classifier = shift; unless ($classifier) { $classifier = $default_classifier; } #TODO: how to get confusion matrix??? return &run_weka("$classifier -T $testarff -t $trainarff -no-cv > $results"); } # parse weka results and return as perl hash ref sub parse_weka_results { my $results = shift; # results filename my %res; open(FFILE,"<$results"); my $flag=0; while() { chop; my $line=$_; if ($line=~/^=== .+ test .+ ===\s*$/) { $flag=1; } else { if ($flag) { if ($line=~/^===/) { $flag=0; } if ($line=~/Correctly Classified Instances\s+([0-9]+)\s/) { $res{"correct"}=$1; } if ($line=~/Incorrectly Classified Instances\s+([0-9]+)\s/) { $res{"incorrect"}=$1; } if ($line=~/Total Number of Instances\s+([0-9]+)\s/) { $res{"total"}=$1; } } } } close(FFILE); return \%res; } # get confusion matrix from weka results file sub parse_weka_confmat { my $results = shift; # results filename my $clsref = shift; open(FFILE,"<$results"); my $flag=0; my %cfmat, %cfmat0; my @clses; while() { chop; my $line=$_; if ($line=~/^=== Confusion Matrix ===\s*$/) { $flag=1; } else { if ($flag==1) { # read header if ($line=~/<-- classified as/) { $flag = 2; } } elsif ($flag==2) { # read elements if ($line =~ /^ +(.+?) +\| +[a-z]+ = (.+)$/) { my $els = $1; my $cls = $2; $cfmat0{$cls} = $els; my $fl=0; my $tmp; foreach $tmp (@{$clsref}) { if ($cls eq $tmp) { $fl=1; } } unless ($fl) { push(@{$clsref},$cls); } } } } } my $ttt=0; my $c; foreach $c (@{$clsref}) { my $l = $cfmat0{$c}; my @el = split(/ +/,$l); if ($#el != $#{$clsref}) { print "CONF MAT PARSE ERROR $#el != ".$#{$clsref}."!\n"; } my $i; for ($i=0; $i<=$#el; $i++) { $cfmat{$c}{$clsref->[$i]} = $el[$i]; $ttt+=$el[$i]; } } #print "total:::: $ttt\n"; close(FFILE); return \%cfmat; } # build a model from a given arff file sub build_model { my $trainarff = $_[0]; my $model = $_[1]; my $classifier = $_[2]; my $trainlog = $_[3]; unless ($trainlog) { $trainlog = "/dev/null"; } unless ($classifier) { $classifier = $default_classifier; } &run_weka("$classifier -t $trainarff -d $model -no-cv > $trainlog"); } # test a model with a given test data set (arff) sub test_model { my $testarff = $_[0]; my $model = $_[1]; my $results = $_[2]; my $classifier = $_[3]; &run_weka("$classifier -T $testarff -l $model > $results"); } # compute predictions for a given arff file using a given model # USAGE: [ @pred = ] &compute_predictions( $testarff, $model, $predicitions, [$classifier] ); sub compute_predictions { my $testarff = shift; my $model = shift; my $predictions = shift; # my @classifier = @_; # unless (@classifier) { @classifier = @default_classifier; } my $classifier = shift; unless ($classifier) { $classifier = $default_classifier; } # &run_weka(@classifier,"-T", "$testarff", "-l", "$model", "-p", "0", "-no-cv"); &run_weka($classifier." -T $testarff -l $model -p 0 -no-cv"); my @pred = &load_predictions($predicitons); return @pred; } # load weka predicitons: # USAGE: @pred = &load_predictions($filename); sub load_predictions { my $fname = $_[0]; my $i; my @predictions=(); open(FFILE,"<$fname"); my $header=; $header=&chop_newline($header); $header =~ s/^\s+//; $header =~ s/\s+$//; my @attrs = split(/\s+/,$header); my $predNr = 2; for ($i=0;$i<=$#attrs;$i++) { if ($attrs[$i] =~ /^predicted$/i) {$predNr = $i; last;} } #$i=0; while() { my $line=&chop_newline($_); $line =~ s/^\s+//; $line =~ s/\s+$//; print "l: $line\n"; my @els = split(/\s+/,$line); if ($#els > 0) { $predictions[$els[0]] = $els[$predNr]; } print $els[$predNr]."\n"; print $predNr."\n"; } close(FFILE); return @predictions; } 1; ================================================ FILE: scripts/modeltrain/arff-standardize.c ================================================ /*F*************************************************************************** * * openSMILE - the Munich open source Multimedia Interpretation by * Large-scale Extraction toolkit * * This file is part of openSMILE. * * openSMILE is copyright (c) by audEERING GmbH. All rights reserved. * * See file "COPYING" for details on usage rights and licensing terms. * By using, copying, editing, compiling, modifying, reading, etc. this * file, you agree to the licensing terms in the file COPYING. * If you do not agree to the licensing terms, * you must immediately destroy all copies of this file. * * THIS SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, * IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ANY WARRANTY AGAINST * INTERFERENCE WITH YOUR ENJOYMENT OF THE SOFTWARE OR ANY WARRANTY OF TITLE * OR NON-INFRINGEMENT. THERE IS NO WARRANTY THAT THIS SOFTWARE WILL FULFILL * ANY OF YOUR PARTICULAR PURPOSES OR NEEDS. ALSO, YOU MUST PASS THIS * DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS. * NEITHER TUM NOR ANY CONTRIBUTOR TO THE SOFTWARE WILL BE LIABLE FOR ANY * DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE AGREEMENT, INCLUDING * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE * MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. * ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE * THE SOFTWARE OR DERIVATIVE WORKS. * * Main authors: Florian Eyben, Felix Weninger, * Martin Woellmer, Bjoern Schuller * * Copyright (c) 2008-2013, * Institute for Human-Machine Communication, * Technische Universitaet Muenchen, Germany * * Copyright (c) 2013-2015, * audEERING UG (haftungsbeschraenkt), * Gilching, Germany * * Copyright (c) 2016, * audEERING GmbH, * Gilching Germany ***************************************************************************E*/ /* read in one ARFF file, compute mean and variance and standardize + save normadta compute mean and variance */ #include #include #include #include #include #include #include typedef struct { long dim; float *x; } sVectorFloat; typedef sVectorFloat * vectorFloat; typedef struct { long dim; double *x; } sVectorDouble; typedef sVectorDouble * vectorDouble; typedef struct { long dim; void *x; } sVector; typedef sVector * vector; typedef struct { int nDim; long *dim; long long els; float *x; } sMatrixFloat; typedef sMatrixFloat * matrixFloat; typedef struct { long rows, cols; long long els; float *x; } sMatrix2DFloat; typedef sMatrix2DFloat * matrix2DFloat; inline vector vectorCreate(long dim, int elSize) // elSize : size of vector element in bytes { vector ret = (vector)malloc(sizeof(sVector)); if (ret == NULL) return NULL; ret->x = calloc(1,elSize*dim); ret->dim = dim; return ret; } inline vectorFloat vectorFloatCreate(long dim) { vectorFloat ret = (vectorFloat)malloc(sizeof(sVectorFloat)); if (ret == NULL) return NULL; ret->x = (float *)calloc(1,sizeof(float)*dim); ret->dim = dim; return ret; } inline vectorDouble vectorDoubleCreate(long dim) { vectorDouble ret = (vectorDouble)malloc(sizeof(sVectorDouble)); if (ret == NULL) return NULL; ret->x = (double *)calloc(1,sizeof(double)*dim); ret->dim = dim; return ret; } inline vectorFloat vectorFloatDestroy(vectorFloat vec) { if (vec != NULL) { if (vec->x != NULL) free(vec->x); free(vec); } return NULL; } inline vectorDouble vectorDoubleDestroy(vectorDouble vec) { if (vec != NULL) { if (vec->x != NULL) free(vec->x); free(vec); } return NULL; } matrixFloat matrixFloatCreate(int nDim, long *dim) { int i; matrixFloat ret = (matrixFloat)malloc(sizeof(sMatrixFloat)); if (ret == NULL) return NULL; ret->els = 1; for (i=0; iels *= dim[i]; } ret->x = (float *)calloc(1,sizeof(float)*ret->els); ret->dim = dim; return ret; } matrix2DFloat matrix2DFloatCreate(long rows, long cols) { matrix2DFloat ret = (matrix2DFloat)malloc(sizeof(sMatrix2DFloat)); if (ret == NULL) return NULL; ret->els = rows*cols; ret->rows = rows; ret->cols = cols; ret->x = (float *)calloc(1,sizeof(float)*ret->els); return ret; } matrix2DFloat matrix2DFloatDestroy(matrix2DFloat mat) { if (mat == NULL) return NULL; if (mat->x != NULL) free(mat->x); free(mat); return NULL; } inline float minFloat(float a, float b) { if (a < b) return a; else return b; } inline long minLong(long a, long b) { if (a < b) return a; else return b; } vectorFloat getMatrix2DFloatRow(matrix2DFloat mat, long row) { if ((mat != NULL)&&(mat->x != NULL)) { vectorFloat r = vectorFloatCreate(mat->cols); if (r == NULL) return NULL; memcpy(r->x, mat->x + (row * (mat->cols)), (mat->cols) * sizeof(float)); return r; } return NULL; } void setMatrix2DFloatRow(matrix2DFloat mat, long row, vectorFloat r) { if ((mat != NULL)&&(mat->x != NULL)) { if (r == NULL) return; memcpy(mat->x + (row * (mat->cols)), r->x , (mat->cols) * sizeof(float)); } } // add vector b onto vector a void vectorFloatAdd(vectorFloat a, vectorFloat b) { if ((a!= NULL)&&(a->x != NULL)&&(b!= NULL)&&(b->x != NULL)) { long i; long lng = minLong(a->dim, b->dim); for (i=0; ix[i] += b->x[i]; } } } // subtract vector b from vector a void vectorFloatSub(vectorFloat a, vectorFloat b) { if ((a!= NULL)&&(a->x != NULL)&&(b!= NULL)&&(b->x != NULL)) { long i; long lng = minLong(a->dim, b->dim); for (i=0; ix[i] -= b->x[i]; } } } // add vector b onto vector a void vectorDoubleAdd(vectorDouble a, vectorDouble b) { if ((a!= NULL)&&(a->x != NULL)&&(b!= NULL)&&(b->x != NULL)) { long i; long lng = minLong(a->dim, b->dim); for (i=0; ix[i] += b->x[i]; } } } // subtract vector b from vector a void vectorDoubleSub(vectorDouble a, vectorDouble b) { if ((a!= NULL)&&(a->x != NULL)&&(b!= NULL)&&(b->x != NULL)) { long i; long lng = minLong(a->dim, b->dim); for (i=0; ix[i] -= b->x[i]; } } } // divide elements in vector a by corresponding elements in vector b, save in a void vectorFloatElemDiv(vectorFloat a, vectorFloat b) { if ((a!= NULL)&&(a->x != NULL)&&(b!= NULL)&&(b->x != NULL)) { long i; long lng = minLong(a->dim, b->dim); for (i=0; ix[i] /= b->x[i]; } } } // divide elements in vector a by corresponding elements in vector b, save in a void vectorDoubleElemDiv(vectorDouble a, vectorDouble b) { if ((a!= NULL)&&(a->x != NULL)&&(b!= NULL)&&(b->x != NULL)) { long i; long lng = minLong(a->dim, b->dim); for (i=0; ix[i] /= b->x[i]; } } } // divide elements in vector a by corresponding elements in vector b, save in a // SAFE: do not dived by 0, result will then be 0 void vectorDoubleElemSafeDiv(vectorDouble a, vectorDouble b) { if ((a!= NULL)&&(a->x != NULL)&&(b!= NULL)&&(b->x != NULL)) { long i; long lng = minLong(a->dim, b->dim); for (i=0; ix[i] != 0.0) a->x[i] /= b->x[i]; else a->x[i] = 0.0; } } } vectorDouble vectorFloatToVectorDouble(vectorFloat a) { if ((a!= NULL)&&(a->x != NULL)) { long i; vectorDouble d = vectorDoubleCreate(a->dim); if (d==NULL) return NULL; for (i=0; idim; i++) { d->x[i] = (double)(a->x[i]); } return d; } return NULL; } vectorFloat vectorDoubleToVectorFloat(vectorDouble a) { if ((a!= NULL)&&(a->x != NULL)) { long i; vectorFloat d = vectorFloatCreate(a->dim); if (d==NULL) return NULL; for (i=0; idim; i++) { d->x[i] = (float)(a->x[i]); } return d; } return NULL; } void vectorDoubleScalarDiv(vectorDouble vec, long long n) { if ((vec != NULL)&&(vec->x != NULL)) { long i; double nD = (double)n; for (i=0; idim; i++) { vec->x[i] /= nD; } } } void vectorDoubleElemSqrt(vectorDouble vec) { if ((vec != NULL)&&(vec->x != NULL)) { long i; for (i=0; idim; i++) { vec->x[i] = sqrt(vec->x[i]); } } } void vectorDoubleElemSqr(vectorDouble vec) { if ((vec != NULL)&&(vec->x != NULL)) { long i; for (i=0; idim; i++) { vec->x[i] = vec->x[i] * vec->x[i]; } } } vectorFloat columnSum (matrix2DFloat mat) { long i,j; if ((mat != NULL)&&(mat->x != NULL)) { vectorFloat v = getMatrix2DFloatRow(mat,0); for(i=1; irows; i++) { vectorFloat r = getMatrix2DFloatRow(mat,i); vectorFloatAdd(v,r); vectorFloatDestroy(r); } return v; } return NULL; } vectorDouble columnVarianceSum (matrix2DFloat mat, vectorDouble means) { long i,j; if ((mat != NULL)&&(mat->x != NULL)) { vectorFloat vf = getMatrix2DFloatRow(mat,0); vectorDouble v = vectorFloatToVectorDouble(vf); vf = vectorFloatDestroy(vf); for(i=1; irows; i++) { vectorFloat r = getMatrix2DFloatRow(mat,i); vectorDouble rD = vectorFloatToVectorDouble(r); vectorFloatDestroy(r); vectorDoubleSub(rD,means); vectorDoubleElemSqr(rD); vectorDoubleAdd(v,rD); vectorDoubleDestroy(rD); } return v; } return NULL; } void matRowsNormaliseMean (matrix2DFloat mat, vectorFloat mean) { long i,j; if ((mat != NULL)&&(mat->x != NULL)) { for(i=0; irows; i++) { vectorFloat r = getMatrix2DFloatRow(mat,i); vectorFloatSub(r,mean); setMatrix2DFloatRow(mat,i,r); vectorFloatDestroy(r); } } } void matRowsStandardiseVariance (matrix2DFloat mat, vectorFloat stddev) { long i,j; if ((mat != NULL)&&(mat->x != NULL)) { for(i=0; irows; i++) { vectorFloat r = getMatrix2DFloatRow(mat,i); vectorFloatElemDiv(r,stddev); setMatrix2DFloatRow(mat,i,r); vectorFloatDestroy(r); } } } #include #define MIN_LOG_STRLEN 255 /* allocate a string and expand vararg format string expression into it */ // WARNING: memory allocated by myvprint must freed by the code calling myvprint!! char *myvprint(const char *fmt, ...) { char *s= (char *)malloc(sizeof(char)*(MIN_LOG_STRLEN+1)); if (s==NULL) return NULL; va_list ap; va_start(ap, fmt); int len = vsnprintf(s,MIN_LOG_STRLEN+1, fmt, ap); if (len > MIN_LOG_STRLEN) { free(s); s = (char *)malloc(sizeof(char)*len+2); va_start(ap, fmt); len = vsnprintf(s,len+1, fmt, ap); } va_end(ap); return s; } // matRowsNormaliseMean(data,mean); // matRowsStandardiseVariance(data,stddev); int main(int argc, char *argv[]) { if (argc < 5) { fprintf(stderr, "USAGE: %s [normdata.dat_file_to_load OR -normdata_file_to_saveTo]\n",argv[0]); return -1; } vectorDouble sum = NULL; vectorDouble var = NULL; vectorDouble mean = NULL; vectorDouble stddev = NULL; vectorFloat meanF = NULL; vectorFloat stddevF = NULL; long long n = 0; FILE *iarff; int startft = atoi(argv[3]); int endft = atoi(argv[4]); if ((argc == 5)||(argv[5][0]=='-')) { // no normdata file given, create normadata from input arff /*** mean ****/ iarff = fopen(argv[1],"r"); int read; char *line=NULL; char *nline=NULL; size_t len=0; int data = 0; int Natt = 0; while ((read = getline(&line, &len, iarff)) != -1) { int llen = strlen(line); if (llen <= 0) continue; //printf("llen=%i\n",llen); if (line[llen-1] == '\n') { line[llen-1] = 0; // strip \n character llen--; } if (llen <= 0) continue; if (line[llen-1] == '\r') { line[llen-1] = 0; // strip \r character llen--; } if (llen <= 0) continue; // ignore non-data lines... if (data == 0) { if (llen >= 5) { data = 1; if (line[0] != '@') data = 0; else if (line[1] != 'd') data = 0; else if (line[2] != 'a') data = 0; else if (line[3] != 't') data = 0; else if (line[4] != 'a') data = 0; //printf("data=%i line='%s'\n",data,line); } if (llen >= 10) { int att = 1; if (line[0] != '@') att = 0; else if (line[1] != 'a') att = 0; else if (line[2] != 't') att = 0; else if (line[3] != 't') att = 0; else if (line[4] != 'r') att = 0; else if (line[5] != 'i') att = 0; else if (line[6] != 'b') att = 0; else if (line[7] != 'u') att = 0; else if (line[8] != 't') att = 0; else if (line[9] != 'e') att = 0; if (att) Natt++; } nline = NULL; } else { nline = line; // remove spaces while ((llen>0)&&(nline[0]==' ')) { nline++; llen--; } while ((llen>0)&&(nline[llen-1]==' ')) { nline[llen-1]=0; llen--; } // convert line to vecotr char *el=NULL; int vlen = (Natt-endft)-startft+1; vectorDouble d = vectorDoubleCreate(vlen); if (sum == NULL) { sum = vectorDoubleCreate(vlen); printf("create sum vlen=%i\n",vlen); fflush(stdout); } int fti=1; if (llen > 0) { do { el=strchr(nline,','); if (el!=NULL) el[0] = 0; if (fti>=startft) if (ftix[fti-startft] = atof(nline); fti++; if (el!=NULL) { nline = el+1; } } while (el!=NULL); } if (fti-startft < vlen) { printf("warning: less elements on line than expected!!\n"); } // add vector to sum... vectorDoubleAdd(sum,d); vectorDoubleDestroy(d); n++; } free(line); line=NULL; } fclose(iarff); // compute means: if (n>0) vectorDoubleScalarDiv(sum,n); mean = sum; /**** variance ****/ vectorDouble var = NULL; iarff = fopen(argv[1],"r"); read = 0; line=NULL; nline=NULL; len=0; data = 0; Natt = 0; while ((read = getline(&line, &len, iarff)) != -1) { int llen = strlen(line); if (llen <= 0) continue; if (line[llen-1] == '\n') { line[llen-1] = 0; // strip \n character llen--; } if (llen <= 0) continue; if (line[llen-1] == '\r') { line[llen-1] = 0; // strip \r character llen--; } if (llen <= 0) continue; // ignore non-data lines... if (data == 0) { if (llen >= 5) { data = 1; if (line[0] != '@') data = 0; else if (line[1] != 'd') data = 0; else if (line[2] != 'a') data = 0; else if (line[3] != 't') data = 0; else if (line[4] != 'a') data = 0; } if (llen >= 10) { int att = 1; if (line[0] != '@') att = 0; else if (line[1] != 'a') att = 0; else if (line[2] != 't') att = 0; else if (line[3] != 't') att = 0; else if (line[4] != 'r') att = 0; else if (line[5] != 'i') att = 0; else if (line[6] != 'b') att = 0; else if (line[7] != 'u') att = 0; else if (line[8] != 't') att = 0; else if (line[9] != 'e') att = 0; if (att) Natt++; } nline = NULL; } else { nline = line; // remove spaces while ((llen>0)&&(nline[0]==' ')) { nline++; llen--; } while ((llen>0)&&(nline[llen-1]==' ')) { nline[llen-1]=0; llen--; } // convert line to vecotr char *el=NULL; int vlen = (Natt-endft)-startft+1; vectorDouble d = vectorDoubleCreate(vlen); if (var == NULL) { var = vectorDoubleCreate(vlen); } int fti=1; if (llen > 0) { do { el=strchr(nline,','); if (el != NULL) el[0] = 0; if (fti>=startft) if (ftix[fti-startft] = atof(nline); fti++; if (el!=NULL) { nline = el+1; } } while (el!=NULL); } if (fti-startft < vlen) { printf("warning: less elements on line than expected!!\n"); } // add vector var to variance sum... //... vectorDoubleSub(d,mean); vectorDoubleElemSqr(d); vectorDoubleAdd(var,d); vectorDoubleDestroy(d); d=NULL; //n++; } free(line); line=NULL; } fclose(iarff); if (n>0) vectorDoubleScalarDiv(var,n); stddev = var; vectorDoubleElemSqrt(stddev); //printf("var0: %f (dim=%i)\n",var->x[0],var->dim); // save normdata file in current path FILE *nd ; if ((argc>5)&&(argv[5][0]=='-')) { nd = fopen((argv[5]+1),"wb"); } else { nd = fopen("normdata.dat","wb"); } if (nd != NULL) { fwrite(mean->x, sizeof(double)*mean->dim, 1, nd); fwrite(stddev->x, sizeof(double)*stddev->dim, 1, nd); fclose(nd); } else { fprintf(stderr,"ERROR saving normdata\n"); } //meanF = vectorDoubleToVectorFloat(mean); //stddevF = vectorDoubleToVectorFloat(stddev); } /* do actual standardisation::: */ /***************************************************************************/ FILE * oarff=NULL; iarff = fopen(argv[1],"r"); if (!(argv[2][0] == '-')) { oarff = fopen(argv[2],"w"); } else { char *tmp = myvprint("%s.norm.arff",argv[1]); oarff = fopen(tmp,"w"); free(tmp); } int read = 0; char *line=NULL; char *nline=NULL; size_t len=0; int data = 0; int Natt = 0; while ((read = getline(&line, &len, iarff)) != -1) { int llen = strlen(line); if (line[llen-1] == '\n') { line[llen-1] = 0; // strip \n character llen--; } if (line[llen-1] == '\r') { line[llen-1] = 0; // strip \r character llen--; } // ignore non-data lines... if (data == 0) { if (llen >= 5) { data = 1; if (line[0] != '@') data = 0; else if (line[1] != 'd') data = 0; else if (line[2] != 'a') data = 0; else if (line[3] != 't') data = 0; else if (line[4] != 'a') data = 0; } if (llen >= 10) { int att = 1; if (line[0] != '@') att = 0; else if (line[1] != 'a') att = 0; else if (line[2] != 't') att = 0; else if (line[3] != 't') att = 0; else if (line[4] != 'r') att = 0; else if (line[5] != 'i') att = 0; else if (line[6] != 'b') att = 0; else if (line[7] != 'u') att = 0; else if (line[8] != 't') att = 0; else if (line[9] != 'e') att = 0; if (att) Natt++; } nline = NULL; fprintf(oarff,"%s\n",line); } else { int vlen = (Natt-endft)-startft+1; if ((mean == NULL)&&(argc > 5)) { mean = vectorDoubleCreate(vlen); stddev = vectorDoubleCreate(vlen); // FILE *nd = fopen("normdata.dat","rb"); FILE *nd = fopen(argv[5],"rb"); if (nd != NULL) { fread(mean->x, sizeof(double)*mean->dim, 1, nd); fread(stddev->x, sizeof(double)*stddev->dim, 1, nd); fclose(nd); } else { fprintf(stderr,"ERROR loading normdata\n"); } } nline = line; // remove spaces while ((llen>0)&&(nline[0]==' ')) { nline++; llen--; } while ((llen>0)&&(nline[llen-1]==' ')) { nline[llen-1]=0; llen--; } // convert line to vecotr char *el=NULL; vectorDouble d = vectorDoubleCreate(vlen); if (var == NULL) { var = vectorDoubleCreate(vlen); } int fti=1; char *oline0=NULL; char *oline1=NULL; char *oline0e=NULL; char *oline1e=NULL; if (llen > 0) { do { el=strchr(nline,','); if (el!=NULL) el[0] = 0; if (fti>=startft) if (ftix[fti-startft] = atof(nline); else { if (oline0e != NULL) { oline1e = myvprint("%s,%s",oline0e,nline); free(oline0e); oline0e=oline1e; } else { oline0e = strdup(nline); } } else { if (oline0 != NULL) { oline1 = myvprint("%s,%s",oline0,nline); free(oline0); oline0=oline1; } else { oline0 = strdup(nline); } } fti++; if (el!=NULL) { nline = el+1; } } while (el!=NULL); if (fti-startft < vlen) { printf("warning: less elements on line than expected!!\n"); } // add vector var to variance sum... //... vectorDoubleSub(d,mean); vectorDoubleElemSafeDiv(d,stddev); // rebuild line and write to file... int prev = 0; if (oline0 != NULL) { fprintf(oarff,"%s",oline0); free(oline0); prev = 1; } long i; for (i=0; ix[i]); else fprintf(oarff,"%f",d->x[i]); prev = 1; } if (oline0e != NULL) { if (prev) fprintf(oarff,","); fprintf(oarff,"%s",oline0e); free(oline0e); } fprintf(oarff,"\n"); /* char *oline=strdup(oline0); int i; for (i=0; ix[i]); free(oline); oline=tmp; } char *tmp = myvprint("%s,%s",oline,oline0e); free(oline); oline=tmp; fprintf(oarff,"%s\n",oline);*/ //n++; } } free(line); line=NULL; } fclose(oarff); fclose(iarff); vectorDoubleDestroy(mean); // at the end... vectorDoubleDestroy(stddev); vectorFloatDestroy(meanF); // at the end... vectorFloatDestroy(stddevF); //printf("Hello World!\n"); } ================================================ FILE: scripts/modeltrain/arffToLsvm.pl ================================================ #!/usr/bin/perl # convert an arff file to lSVM feature file format $input_arff = $ARGV[0]; $output = $input_arff; $output =~ s/\.arff$/.lsvm/; if ($ARGV[1]) { $output = $ARGV[1]; } $clsfile = $output; $clsfile =~ s/\.lsvm$/.classes/; $discfile = $output; $discfile =~ s/\.lsvm$/.disc/; $indata = 0; my %cla=(); my $discrete = 0; open(OUT,">$output"); open(FILE,"<$input_arff"); while () { my $line = $_; $line=~s/\r?\n$//; if ($line =~ /^\@data/) { $indata = 1; #print "LL: '$lastline'\n"; if ($lastline =~ /^\@attribute\s+([^\s]+)\s+(.+)$/) { $at = $2; if ($at =~ /numeric/i) { # no conversion necessary $discrete = 0; } else { $discrete = 1; $at =~ s/^\s*[\{\"]\s*//; $at =~ s/\s*[\}\"]\s*$//; @cls = split(/\s*,\s*/,$at); for ($i=0; $i<=$#cls; $i++) { $cla{$cls[$i]} = "$i"; } #print "here $at\n"; } } } else { if (($indata)&&($line =~ /,/)) { @els = split(/,/,$line); $class = $els[$#els]; #print "class: $class\n"; if ($discrete == 1) { print OUT $cla{$class}." "; # print " $cla{$class}\n"; } else { print OUT "$class "; } for ($i=0; $i<$#els; $i++) { $i1 = $i + 1; #for ($i=2; $i<$#els; $i++) { # $i1 = $i - 1; print OUT $i1.":".$els[$i]." "; } print OUT "\n"; } unless ($indata) { if ($line!~/^\s*$/) { if ($line=~/^\@attribute /) { $lastline = $line; } } } } } close(FILE); close(OUT); if ($discrete) { open(FILE,">$clsfile"); for ($i=0; $i<=$#cls; $i++) { print FILE $i.":".$cls[$i]."\n"; } close(FILE); open(FILE,">$discfile"); print FILE "1\n"; close(FILE); } else { open(FILE,">$discfile"); print FILE "0\n"; close(FILE); } ================================================ FILE: scripts/modeltrain/buildmodel.pl ================================================ #!/usr/bin/perl # USAGE: buildmodel.pl [svm config file] $input_lsvm = $ARGV[0]; $conf = $input_lsvm; $conf =~ s/\.lsvm$/.config/; $scale = $input_lsvm; $scale=~s/\.lsvm$/.scale/; $scaled_lsvm = $input_lsvm; $scaled_lsvm =~ s/\.lsvm/.scaled.lsvm/; $model = $input_lsvm; $model=~s/\.lsvm$/.model/; if ($^O =~ /win/i) { $ext = ".exe"; } else { $ext = ""; } # scale features, build model unless (-e $scaled_lsvm) { system("libsvm-small/svm-scale$ext -s $scale $input_lsvm > $scaled_lsvm"); } $discfile = $input_lsvm; $discfile=~s/\.lsvm$/.disc/; open(FILE,"<$discfile"); $disc=; $disc=~s/\r?\n$//; close(FILE); if ($disc) { # classification if disc==1 print " building an SVM CLASSFICATION model...\n"; #classification: ## change LibSVM parameters here, if you want to use a different configuration: ## See the LibSVM documentation for more information: if (-e $ARGV[1]) { $svm_config = `cat $ARGV[1]`; $svm_config =~ s/\n//g; $svm_config =~ s/\r//g; } else { $svm_config = "-b 1 -s 0 -t 1 -d 1 -c 0.3"; } #system("libsvm-small/svm-train$ext -n 0.5 -b 1 -s 1 -t 1 -d 2 -c 0.7 $scaled_lsvm $model"); # Original: system("libsvm-small/svm-train$ext $svm_config $scaled_lsvm $model"); } else { # regression otherwise: print " building an SVR REGRESSION model...\n"; if (-e $ARGV[1]) { $svm_config = `cat $ARGV[1]`; $svm_config =~ s/\n//g; $svm_config =~ s/\r//g; } else { $svm_config = "-s 3 -t 1 -d 1 -c 0.4"; } ##### regression: ## change LibSVM parameters here, if you want to use a different configuration: ## See the LibSVM documentation for more information: system("svm-train$ext $svm_config $scaled_lsvm $model"); } open(FILE,">$conf"); print FILE "$svm_config\n"; close(FILE); ================================================ FILE: scripts/modeltrain/fsel.pl ================================================ #!/usr/bin/perl # load train.arff in weka and so CFS # convert resulting arff to openEAR feature selection file $input_arff = $ARGV[0]; ##### CHANGE THIS TO YOUR WEKA PATH $wekapath = "\$CLASSPATH:/home/don/eyb/inst/weka-3-5-6/weka.jar"; $wekacmd = "java -Xmx2048m -classpath $wekapath "; ############################################################## # run weka... sub run_weka { my $cmdline = $_[0]; my $retval = system($wekacmd." ".$cmdline); if ($retval) { print "ERROR running Weka\n"; exit 1; } return $retval; } require "arff-functions.pl"; print "removing filename and timestamp fields from $input_arff ...\n"; $stripped_arff = $input_arff.".stripped.arff"; $fsel_tmp_arff = $input_arff.".fsel.arff"; my $hr = &load_arff($input_arff); my $numattr = $#{$hr->{"attributes"}}; $hr->{"attributes"}[0]{"selected"} = 0; # filename $hr->{"attributes"}[1]{"selected"} = 0; # timestamp &save_arff_AttrSelected($stripped_arff,$hr); print "Running WEKA CFS feature selection ...\n"; &run_weka("weka.filters.supervised.attribute.AttributeSelection -E \"weka.attributeSelection.CfsSubsetEval\" -S \"weka.attributeSelection.BestFirst -D 1 -N 5\" -i \"$stripped_arff\" -o \"$fsel_tmp_arff\" "); system("./arffToLsvm.pl $fsel_tmp_arff"); # convert arff: $outpArff=$fsel_tmp_arff; $feaTUMfselfile=$input_arff; $feaTUMfselfile=~ s/\.arff/.fselection/; # count number of features first $nStr = 0; open(FILE,"<$outpArff"); while () { my $line = $_; chop($line); if ($line =~ /^\@attribute (.+?) numeric/) { $nStr++; } if ($line =~ /^\@data/) { last; } } close(FILE); open(OUT,">$feaTUMfselfile"); print OUT "str\n"; print OUT "$nStr\n"; open(FILE,"<$outpArff"); while () { my $line = $_; chop($line); if ($line =~ /^\@attribute (.+?) numeric/) { $attr = $1; print "selecting: $attr \n"; print OUT "$attr\n"; } if ($line =~ /^\@data/) { last; } } close(FILE); close(OUT); ================================================ FILE: scripts/modeltrain/libsvm-small/COPYRIGHT ================================================ Copyright (c) 2000-2009 Chih-Chung Chang and Chih-Jen Lin All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither name of copyright holders nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ================================================ FILE: scripts/modeltrain/libsvm-small/Makefile ================================================ CXX = g++ CFLAGS = -Wall -static -Wconversion -O3 -fPIC SHVER = 1 all: svm-train svm-predict svm-scale lib: svm.o $(CXX) -shared svm.o -o libsvm.so.$(SHVER) svm-predict: svm-predict.c svm.o $(CXX) $(CFLAGS) svm-predict.c svm.o -o svm-predict -lm svm-train: svm-train.c svm.o $(CXX) $(CFLAGS) svm-train.c svm.o -o svm-train -lm svm-scale: svm-scale.c $(CXX) $(CFLAGS) svm-scale.c -o svm-scale svm.o: svm.cpp svm.h $(CXX) $(CFLAGS) -c svm.cpp clean: rm -f *~ svm.o svm-train svm-predict svm-scale ================================================ FILE: scripts/modeltrain/libsvm-small/Makefile.win ================================================ #You must ensure nmake.exe, cl.exe, link.exe are in system path. #VCVARS32.bat #Under dosbox prompt #nmake -f Makefile.win PYTHON_INC = c:\python26\include PYTHON_LIB = c:\python26\libs\python26.lib ########################################## CXX = cl.exe CFLAGS = -nologo -O2 -EHsc -I. -D __WIN32__ -D _CRT_SECURE_NO_DEPRECATE TARGET = windows all: $(TARGET)\svm-train.exe $(TARGET)\svm-predict.exe $(TARGET)\svm-scale.exe $(TARGET)\svm-toy.exe python: $(TARGET)\python\svmc.pyd $(TARGET)\svm-predict.exe: svm.h svm-predict.c svm.obj $(CXX) $(CFLAGS) svm-predict.c svm.obj -Fe$(TARGET)\svm-predict.exe $(TARGET)\svm-train.exe: svm.h svm-train.c svm.obj $(CXX) $(CFLAGS) svm-train.c svm.obj -Fe$(TARGET)\svm-train.exe $(TARGET)\svm-scale.exe: svm.h svm-scale.c $(CXX) $(CFLAGS) svm-scale.c -Fe$(TARGET)\svm-scale.exe $(TARGET)\svm-toy.exe: svm.h svm.obj svm-toy\windows\svm-toy.cpp $(CXX) $(CFLAGS) svm-toy\windows\svm-toy.cpp svm.obj user32.lib gdi32.lib comdlg32.lib -Fe$(TARGET)\svm-toy.exe svm.obj: svm.cpp svm.h $(CXX) $(CFLAGS) -c svm.cpp $(TARGET)\python\svmc.pyd: python\svmc_wrap.c svm.obj $(PYTHON_LIB) $(CXX) $(CFLAGS) -I$(PYTHON_INC) -LD $** -Fe$(TARGET)\python\svmc.pyd # $** means all dependencies clean: -erase /Q *.obj $(TARGET)\. $(TARGET)\python\. ================================================ FILE: scripts/modeltrain/libsvm-small/README ================================================ Libsvm is a simple, easy-to-use, and efficient software for SVM classification and regression. It solves C-SVM classification, nu-SVM classification, one-class-SVM, epsilon-SVM regression, and nu-SVM regression. It also provides an automatic model selection tool for C-SVM classification. This document explains the use of libsvm. Libsvm is available at http://www.csie.ntu.edu.tw/~cjlin/libsvm Please read the COPYRIGHT file before using libsvm. Table of Contents ================= - Quick Start - Installation and Data Format - `svm-train' Usage - `svm-predict' Usage - `svm-scale' Usage - Tips on Practical Use - Examples - Precomputed Kernels - Library Usage - Java Version - Building Windows Binaries - Additional Tools: Sub-sampling, Parameter Selection, Format checking, etc. - Python Interface - Additional Information Quick Start =========== If you are new to SVM and if the data is not large, please go to `tools' directory and use easy.py after installation. It does everything automatic -- from data scaling to parameter selection. Usage: easy.py training_file [testing_file] More information about parameter selection can be found in `tools/README.' Installation and Data Format ============================ On Unix systems, type `make' to build the `svm-train' and `svm-predict' programs. Run them without arguments to show the usages of them. On other systems, consult `Makefile' to build them (e.g., see 'Building Windows binaries' in this file) or use the pre-built binaries (Windows binaries are in the directory `windows'). The format of training and testing data file is: