感谢您对 openSMILE 的兴趣以及您渴望构建自己的配置文件。
科学界的大多数用户实际上使用 openSMILE 作为基线功能集的预定义配置文件,在 2.3 版本中使用起来更加灵活(更多命令行选项可以输出到不同的文件格式等)。
我承认所提供的文档并不那么好。然而,openSMILE 是一个非常复杂的软件,具有很多功能,目前只有最重要的部分有详细的文档记录。
最好的起点是阅读 openSMILE 书籍和 SIG'MM 教程,所有参考文献均位于http://opensmile.audeering.com/ http://opensmile.audeering.com/。它包含有关如何编写配置文件的部分。下一个重要元素是二进制文件的在线帮助:
-
微笑提取物-L列出可用的组件
-
SMILExtract -H cComponentName列出给定组件支持的所有选项(以及它可以提取的功能)以及每个选项的简短描述
-
SMILExtract -configDflt cComponentName为您提供组件的模板配置部分,其中列出了所有选项并设置了默认值
由于 openSMILE 的架构以所有音频功能的增量处理为中心,因此(至少目前还没有)没有简单的语法来定义您想要的功能。相反,您可以通过添加组件来定义处理链:
- 数据源将读取数据(例如,从音频文件、csv 文件或麦克风),
- 数据处理器将在各个步骤中进行信号处理和特征提取(加窗、窗函数、FFT、幅度、梅尔谱、倒谱系数 (MFCC),例如用于提取 MFCC);每个步骤都有一个数据处理器。
- 数据接收器将数据写入输出文件或将结果发送到服务器等。
您可以通过“reader.dmLevel”和“writer.dmLevel”选项连接组件。它们定义了组件用来交换数据的数据存储级别的名称。只有一个组件可以写入一个级别,即 writer.dmLevel=levelName 定义该级别并且只能出现一次。通过设置 reader.dmLevel=levelName,多个组件可以从此级别读取。
然后,在每个组件中设置选项以启用功能计算并为此设置参数。回答有关 lspFreq 的问题:这可能在 cLsp 组件中默认启用,因此您看不到它的显式选项。对于 openSMILE 的未来版本,将并且应该更严格地遵循明确设置所有选项的做法。
输出中的功能名称将由组件自动定义。通常每个组件都会添加名称的一部分,因此您可以从名称推断出完整的处理链。选项 nameAppend 和 copyInputName(可用于大多数数据处理器)控制此行为,尽管某些组件可能会在内部覆盖它们或稍微更改行为。
查看每个数据内存级别的名称(和其他信息),包括例如如果要在配置中生成某个组件,您可以在 componentInstances:cComponentManager 部分中设置选项“printLevelStats=5”。
由于 openSMILE 中的 everyhting 都是为实时增量处理而构建的,因此每个数据内存级别都有一个缓冲区,默认情况下是一个环形缓冲区,以便在应用程序运行较长时间时保持内存占用恒定。
有时您可能想要总结给定长度的窗口上的特征(例如使用 cFunctionals 组件)。在这种情况下,您必须确保该组件的输入级别的缓冲区大小足以容纳整个窗口。您可以通过以下选项执行此操作:
writer.levelconf.isRb = 1/0 : 将缓冲区类型设置为ringbuffer (1) 或固定大小缓冲区
writer.levelconf.growDyn = 1/0 :将缓冲区设置为在写入更多数据时动态增长 (1)
writer.levelconf.nT = 设置缓冲区的大小(以帧为单位)。或者,您可以使用 bufferSizeSec=x 设置大小(以秒为单位)并自动转换为帧。
在大多数情况下,尺寸将自动正确设置。后续级别也继承先前级别的配置。例外情况是,当您将 cFunctionals 组件设置为读取完整输入(例如,仅在文件末尾生成一个特征)时,您必须在函数组件读取的级别上使用 GrowthDyn=1,或者如果您使用变量成帧模式(见下文)。
cFunctionals 组件提供帧模式、帧大小、 and 帧步长选项。其中frameMode可以是完整*(在输入/文件末尾生成一个向量),**列表(指定框架列表),var(接收消息,例如从 cTurnDetector 组件接收动态定义帧的消息),或者fix(固定长度窗口)。仅在以下情况下fix选项frameSize设置该窗口的大小,并且帧步长窗口向前移动的速率。的情况下fix输入级别的缓冲区大小会自动正确设置,在其他情况下您必须手动设置。
我希望这可以帮助您入门!对于每一个新的 openSMILE 版本,我们 audEERING 都在尝试更好地记录事物并通过各种组件统一事物。
我们也欢迎来自社区的贡献(例如,任何愿意编写图形配置文件编辑器的人,您可以在其中拖放组件并以图形方式连接它们?;)) - 尽管我们知道更多的文档将使这变得更容易。在那之前,您始终必须阅读源代码;)
干杯,
弗洛里安