1. 程式人生 > >【opensmile翻譯】2.3提取特徵demo-編寫opensmile配置檔案

【opensmile翻譯】2.3提取特徵demo-編寫opensmile配置檔案

  • 文件機翻

openSMILE可以生成配置用於簡單場景的模板。 我們將使用此功能生成我們的第一個配置,能夠讀取波形,計算幀能量,並儲存輸出到CSV檔案。首先,建立一個目錄myconfig,它將儲存你的配置檔案。現在鍵入以下內容(不帶換行符)以生成第一個配置檔案:

SMILExtract -cfgFileTemplate -configDflt cWaveSource,cFramer,cEnergy,cCsvSink -l 1 2> myconfig/demo1.conf

-cfgFileTemplate選項指示openSMILE生成配置檔案模板,而-configDflt選項用於指定逗號分隔的元件列表,它們是配置的一部分。 -l 1選項將日誌級別設定為1 禁止任何訊息,這些訊息不應該在配置檔案中,但當錯誤級別為日誌級別1上的訊息,仍然會提示錯誤,例如通知指定的元件的訊息不存在等。模板文字列印到標準錯誤,我們使用2> 將它轉儲到myconfig / demo1.conf。如果要在生成的配置檔案中新增描述單個選項的註釋行,新增-cfgFileDescriptions命令。 生成的demo1.conf檔案包含兩個部分,第一個部分如下所示,是元件管理器的配置

 ;===== 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

第二部分是元件配置部分,每個元件配置以如下形式作為開始

[waveSource:cWaveSource]
...
[framer:cFramer]
...
[energy:cEnergy]
...
[csvSink:cCsvSink]

節標題遵循以下格式:[instanceName:componentType]。模板元件生成配置部分,並將所有可用值設定為其預設值。此功能目前仍處於試驗階段,因為某些值可能會覆蓋其他值,或者如果明確指定,則具有不同的含義。因此,你應該仔細檢查所有可用選項,並僅列出您需要的配置檔案中的選項。即使在在某些情況下,您可以使用預設值(頻譜數量等)。 接下來,配置元件連線。通過修改dataReader和dataWriter元件的資料儲存的等級reader.dmLevel和writer.dmLevel去連線每個源、接收器或處理器元件。writer.dmLevel的名稱可以任意,dataWriter根據該名稱在資料儲存器中註冊並建立writer.dmLevel的級別。然後對所需元件的reader.dmLevel配置與之相應的讀取級別連線元件。注意,一個數據儲存等級只有一個writer存在,即一個數據等級僅對應一個元件;但一個數據儲存等級可被多個元件讀取,而且一個元件也可以讀取多個數據等級,如reader.dmLevel=energy;loudness

,因此,資料以列方式連線。 舉例說明,如果cFramer元件讀取cWaveSource元件的PCM流,且cFrame建立長度為25ms、步進為10ms的幀 10 ms,然後將這些幀寫入我們稱之為cEnergy元件的新級別energy中,則將配置檔案做如下更改:

[waveSource:cWaveSource]
writer.dmLevel = <<XXXX>>
to
[waveSource:cWaveSource]
writer.dmLevel = wave
===================
[framer:cFramer]
reader.dmLevel = <<XXXX>>
writer.dmLevel = <<XXXX>>
to
[framer:cFramer]
reader.dmLevel = wave
writer.dmLevel = waveframes
====================
[energy:cEnergy]
reader.dmLevel = <<XXXX>>
writer.dmLevel = <<XXXX>>
to
[energy:cEnergy]
reader.dmLevel = waveframes
writer.dmLevel = energy
====================
[csvSink:cCsvSink]
reader.dmLevel = <<XXXX>>
to
[csvSink:cCsvSink]
reader.dmLevel = energy

在[waveSource:cWaveSource]和[csvSink:cCsvSink]可設定輸入和輸出檔案。如

[waveSource:cWaveSource]
filename = input.wav
[csvSink:cCsvSink]
filename = smileoutput.csv

若需要在命令列中制定輸入和輸出檔案,則將上述設定改為

[waveSource:cWaveSource]
filename = \cm[inputfile(I){input.wav}:file name of the input wave file]
[csvSink:cCsvSink]
filename = \cm[outputfile(O){output.csv}:file name of the output CSV file]