【问题标题】:Opensmile: unreadable csv file while extracting prosody features from wav fileOpensmile:从 wav 文件中提取韵律特征时无法读取的 csv 文件
【发布时间】:2021-04-21 06:50:27
【问题描述】:

我在使用 Windows 版本的 Opensmile 使用 Opensmile 时从音频文件中提取韵律特征。它运行成功并生成输出 csv。但是当我打开 csv 时,它会显示一些不可读的行。我用这个命令来提取韵律特征:

SMILEXtract  -C \opensmile-3.0-win-x64\config\prosody\prosodyShs.conf -I audio_sample_01.wav -O prosody_sample1.csv

而 csv 的输出是这样的:

[

即使我尝试使用在 opensmile 目录中给出的示例音频文件夹中给出的示例波形文件,输出也是相同的(不可读)。有人可以帮助我确定问题的实际出处吗?我该如何解决?

【问题讨论】:

    标签: csv audio feature-extraction audeering-opensmile


    【解决方案1】:

    您需要在配置文件中启用 csvSink 组件才能使其工作。您正在使用的文件config\prosody\prosodyShs.conf 没有定义此组件,并且始终写入二进制输出。

    您可以通过以下方式验证它是否为标准二进制输出:在您的命令中省略-O 参数,使其变为SMILEXtract -C \opensmile-3.0-win-x64\config\prosody\prosodyShs.conf -I audio_sample_01.wav 并执行它。您将获得一个与prosody_sample1.csv 完全相同的output.htk 文件。

    如何输出csv?您可以查看opensmile-3.0-win-x64\config\demo\demo1_energy.conf 中的示例配置,其中定义了csvSink 组件。

    您可以在官方文档中找到更多信息:

    【讨论】:

      【解决方案2】:

      这就是我解决问题的方法。首先,我将 csvSink 组件添加到组件实例列表中。 instance[csvSink].type = cCsvSink

      接下来我为这个实例添加了配置参数。

      [csvSink:cCsvSink]
      reader.dmLevel = energy
      filename = \cm[outputfile(O){output.csv}:file name of the output CSV 
      file]
      delimChar = ;
      append = 0
      timestamp = 1
      number = 1
      printHeader = 1
      \{../shared/standard_data_output_lldonly.conf.inc}`
      

      现在如果你运行这个文件,它会抛出错误,因为reader.dmLevel = energy 依赖于波帧。所以最终的变化是:

      [energy:cEnergy]
      reader.dmLevel = waveframes
      writer.dmLevel = energy
      
      [int:cIntensity]
      reader.dmLevel = waveframes
      
      [framer:cFramer]
      reader.dmLevel=wave
      writer.dmLevel=waveframes
      

      Further reference关于如何配置opensmile的配置文件可以在这里找到

      【讨论】:

      • 你好 @Moody 我想使用 opensmile 工具提取特征,例如我使用这个命令:SMILExtract -C config/demo/demo1_energy.conf -I example-audio/opensmile.wav -O opensmile.energy.csv 这里的问题是,在输入中你可以输入一个音频文件,但在我的情况下,我有一个文件夹包含 1000 个音频文件,是否有可能提取文件夹中所有音频文件的特征并为所有音频文件生成一个(.csv)文件?
      • 我会在 python 中这样做:import osfor each in allFiles: name = each.replace('Desktop/all_files','').replace('.wav','') os.system("SMILExtract -C config/demo/demo1_energy.conf -I " + each + " -O folder_to_save/file_"+name+".csv")
      猜你喜欢
      • 2017-09-06
      • 2014-02-02
      • 2022-01-23
      • 2021-01-30
      • 2021-03-08
      • 2011-07-25
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多