audeering / opensmile-python

Python package for openSMILE
https://audeering.github.io/opensmile-python/
Other
240 stars 32 forks source link

change frame size for LLD extraction #80

Open naufalrif opened 1 year ago

naufalrif commented 1 year ago

hello i want to ask on how to change the framesize for LLD extraction. the default frame size here is 0.01 s and i want to change it to either 0.025 or 0.03. i've tried the instruction in https://audeering.github.io/opensmile-python/usage.html#custom-config but it's returning this error

NameError Traceback (most recent call last) Cell In[25], line 2 1 with open('myconfig.conf', 'w') as fp: ----> 2 fp.write(config_str) 4 smile = opensmile.Smile( 5 feature_set='my.conf', 6 feature_level='func', 7 ) 8 smile.process_signal( 9 signal, 10 sampling_rate 11 )

NameError: name 'config_str' is not defined

please help

bagustris commented 1 year ago

@naufalrif I cannot reproduce this error. The minimum example below works for me, if you want to use your config again, you need to use read instead of write for with open.

import audiofile
import opensmile

signal, sampling_rate = audiofile.read("/home/bagus/train_001.wav")

config_str = '''
[componentInstances:cComponentManager]
instance[dataMemory].type=cDataMemory

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

;;; source

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

;;; main section

[componentInstances:cComponentManager]
instance[framer].type = cFramer
instance[lld].type = cEnergy
instance[func].type=cFunctionals

[framer:cFramer]
reader.dmLevel = wave
writer.dmLevel = frames
copyInputName = 1
frameMode = fixed
frameSize = 0.025000
frameStep = 0.010000
frameCenterSpecial = left
noPostEOIprocessing = 1

[lld:cEnergy]
reader.dmLevel = frames
writer.dmLevel = lld
\{\cm[bufferModeRbConf{?}:path to included config to set the buffer mode for the standard ringbuffer levels]}
nameAppend = energy
copyInputName = 1
rms = 1
log = 1

[func:cFunctionals]
reader.dmLevel=lld
writer.dmLevel=func
copyInputName = 1
\{\cm[bufferModeRbConf]}
\{\cm[frameModeFunctionalsConf{?}:path to included config to set frame mode for all functionals]}
functionalsEnabled=Moments
Moments.variance = 0
Moments.stddev = 1
Moments.skewness = 0
Moments.kurtosis = 0
Moments.amean = 1
Moments.doRatioLimit = 0

;;; sink

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

'''

with open('my.conf', 'w') as fp:
    fp.write(config_str)

smile = opensmile.Smile(
    feature_set='my.conf',
    feature_level='func',
)
smile.process_signal(
    signal,
    sampling_rate
)

Output:

                               pcm_RMSenergy_stddev  ...  pcm_LOGenergy_amean
start  end                                           ...                     
0 days 0 days 00:00:13.600000              0.000495  ...            -12.41271

[1 rows x 4 columns]