opensmile-python icon indicating copy to clipboard operation
opensmile-python copied to clipboard

Convert old configuration files to the new python configuration

Open aviasd opened this issue 4 years ago • 4 comments

I tried to convert some of the old configuration files to new python configuration files. I converted some of the files:

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 (haftungsbeschränkt),                //////////////////
/////////     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]
instance[dataMemory].type=cDataMemory

;;; default source
[componentInstances:cComponentManager]
instance[dataMemory].type=cDataMemory

;;; source

\{\cm[source{?}:include external source]}

;;; main section


[componentInstances:cComponentManager]
 ;this line configures the default data memory:
instance[dataMemory].type=cDataMemory
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)
/////////////////////////////////////////////////////////////////////////////////////////////

[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 -------------------------///////

;;; sink

\{\cm[sink{?}:include external sink]}
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]
instance[dataMemory].type=cDataMemory

;;; default source
[componentInstances:cComponentManager]
instance[dataMemory].type=cDataMemory

;;; source

\{\cm[source{?}:include external source]}

;;; main section


[componentInstances:cComponentManager]
 ; this line configures the default data memory:
instance[dataMemory].type=cDataMemory
 ;;; 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)
/////////////////////////////////////////////////////////////////////////////////////////////

[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



//////---------------------- END -------------------------///////

;;; sink

\{\cm[sink{?}:include external sink]}IS10_paraling_compat.conf

I want to convert the AVEC2013 and smileF0_mean configuration files, but it is not as simple as the previous files. How can I convert them?

aviasd avatar May 10 '21 22:05 aviasd

Could you please be a little bit more specific what are the problems with those configuration files?

frankenjoe avatar May 11 '21 04:05 frankenjoe

These are the configuration files that opensmile-python is giving:

image

In order to get emobase.conf and IS10_paraling_compat.conf I had to take them from opensmile/config/emobase/emobase.conf and opensmile/config/is09-13/IS10_paraling_compat.conf and change them so they will work with the python version of opensmile.
The main changes are the removal of the next parts:

 ;;; wave file input
instance[waveIn].type=cWaveSource
[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

And the addition of the next lines:

;;; source

\{\cm[source{?}:include external source]}
;;; sink

\{\cm[sink{?}:include external sink]}IS10_paraling_compat.conf

It worked for the emobase.conf and IS10_paraling_compat.conf but it is not working for AVEC2013.conf and smileF0_mean.conf.
In opensmile/config/avec11-14/avec2013.conf, we can see that the configuration file is depending on other configuration files (not compact), so It is not as easy to change.
In opensmile/config/prosody/smileF0_mean.conf we can see the same situation, the configuration file is depending on other configuration files and it is not as easy to change.

Is there a way to get the compact configuration files? Is there a way to change some of these configuration files and make them suitable for opensmile-python?

aviasd avatar May 14 '21 08:05 aviasd

These are the configuration files that opensmile-python is giving:

image

In order to get emobase.conf and IS10_paraling_compat.conf I had to take them from opensmile/config/emobase/emobase.conf and opensmile/config/is09-13/IS10_paraling_compat.conf and change them so they will work with the python version of opensmile. The main changes are the removal of the next parts:

 ;;; wave file input
instance[waveIn].type=cWaveSource
[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

And the addition of the next lines:

;;; source

\{\cm[source{?}:include external source]}
;;; sink

\{\cm[sink{?}:include external sink]}IS10_paraling_compat.conf

It worked for the emobase.conf and IS10_paraling_compat.conf but it is not working for AVEC2013.conf and smileF0_mean.conf. In opensmile/config/avec11-14/avec2013.conf, we can see that the configuration file is depending on other configuration files (not compact), so It is not as easy to change. In opensmile/config/prosody/smileF0_mean.conf we can see the same situation, the configuration file is depending on other configuration files and it is not as easy to change.

Is there a way to get the compact configuration files? Is there a way to change some of these configuration files and make them suitable for opensmile-python?

I was wondering exactly the same thing. I am interested in the featureset IS11_speaker_state.conf, but I am unsure how to adjust this file. Any advice here @frankenjoe?

DeDataDoctor avatar Jul 09 '21 10:07 DeDataDoctor

Is there a way to get the compact configuration files?

I'm not aware of an automated way of converting multiple config files that depend on each other to a single compact file. @chausner-audeering or is there a way?

Is there a way to change some of these configuration files and make them suitable for opensmile-python?

We do not have resources at the moment to port more config files. But we are happy to include them when users of opensmile-python provide them.

frankenjoe avatar Jul 13 '21 11:07 frankenjoe