【opensmile翻译】2.3提取特征demo-编写opensmile配置文件

本文介绍如何使用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]
### 配置和使用 OpenSMILE 进行音频特征提取 #### MATLAB 中配置 OpenSMILE 的环境设置 为了在MATLAB环境中成功配置并运行OpenSMILE工具包,需先确认已安装好必要的依赖项以及下载了最新版本的OpenSMILE软件。完成这些前置条件之后,可以通过命令提示符或系统终端来执行特定指令实现自动化流程。 对于Windows操作系统而言,应当把`SMILExtract_Release.exe`所在的路径添加到系统的PATH变量里去;而对于Linux/MacOS,则应确保编译后的二进制文件具有可执行权限,并将其放置于$PATH环境变量所指向的位置之一[^1]。 #### 使用 MATLAB 调用 OpenSMILE 提取音频特征 当准备就绪后,可以在MATLAB脚本内通过`system()`函数向外部发送调用请求给OpenSMILE的核心组件——即`SMILExtract`程序。下面给出了一段简单的示例代码展示如何构建这样的接口: ```matlab % 定义输入参数 configFile = &#39;demo1.conf&#39;; % 用户自定义配置文件名 inputAudioPath = &#39;path/to/audio/file.wav&#39;; % 输入音频文件路径 outputFeaturePath = &#39;path/to/output/features.txt&#39;; % 输出特征文件路径 % 构建完整的shell命令字符串 cmdStr = sprintf(&#39;SMILExtract -C "%s" -I "%s" -O "%s"&#39;, ... configFile, inputAudioPath, outputFeaturePath); % 执行命令并通过status获取返回状态码 [status, result] = system(cmdStr); if status ~= 0 error([&#39;Error occurred while running SMILExtract: &#39;, char(result)]); end disp(&#39;Feature extraction completed successfully.&#39;); ``` 上述代码片段展示了怎样创建一个包含必要选项(如指定配置文件、输入音频位置及输出目标)在内的完整Shell命令,并借助MATLAB内置的`system()`功能触发实际的数据处理过程。如果一切正常的话,将会看到一条成功的消息被打印出来;反之则会抛出异常提醒用户注意潜在的问题所在[^3]。 #### 处理由 OpenSMILE 产生的数据文件 默认情况下,经由OpenSMILE抽取出来的声学特性会被序列化成兼容HTK格式的二进制流存放在磁盘上。然而,在某些应用场景下可能更倾向于采用纯文本形式作为中间媒介以便后续分析工作能够更加便捷高效地开展下去。此时便可以考虑修改相应的配置设定使得最终产物符合预期需求[^2]。 值得注意的是,尽管Python社区缺乏直接支持读取此类专有编码方式的标准库模块,但在MATLAB内部却提供了专门针对此目的而设计好的实用工具箱——Voice Toolbox。其中包含了名为`readhtk()`的方法可以帮助研究人员轻松加载那些经过压缩封装过的样本集供进一步探索研究之用[^4]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值