如何在 OpenSMILE 中创建自定义配置文件

2024-01-02

我正在尝试使用 OpenSMILE 从音频样本中提取一些功能,但我意识到设置配置文件是多么困难。

该文档不是很有帮助。我能做的最好的事情就是运行一些提供的示例配置文件,查看结果,然后进入配置文件并尝试确定指定功能的位置。这是我所做的:

我使用了 INTERSPEECH 2010 Paralinguistic Challenge (IS10_paraling.conf) 中使用的默认功能集。

我在一个示例音频文件上运行了它。

我看了看结果。然后我深入阅读配置文件,试图找出指定该功能的位置。

这是一个小降价表,显示了我的探索结果:

| Feature generated | instruction in the conf file                            |
|-------------------|---------------------------------------------------------|
| pcm_loudness      | I see: 'loudness=1'                                     |
| mfcc              | I see a section: [mfcc:cMfcc]                           |
| lspFreq           | no matches for the text 'lspFreq' anywhere              |
| F0finEnv          | I seeF0finalEnv = 1 under [pitchSmooth:cPitchSmoother]  |

我看到的是 4 个不同的功能,全部由配置文件中的不同指令生成。好吧,对于其中之一,我在配置文件中没有找到任何令人不安的指令。由于没有模式或直观的语法或明显的系统,我不知道如何最终弄清楚如何指定我想要生成的自己的功能。

没有教程,没有 YouTube 视频,没有 StackOverflow 问题,也没有博客文章谈论如何做到这一点。这确实令人惊讶,因为这显然是使用 OpenSMILE 的重要部分。

如果有人发现这个,请告诉我如何创建 OpenSMILE 的自定义配置文件?谢谢!


感谢您对 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 都在尝试更好地记录事物并通过各种组件统一事物。

我们也欢迎来自社区的贡献(例如,任何愿意编写图形配置文件编辑器的人,您可以在其中拖放组件并以图形方式连接它们?;)) - 尽管我们知道更多的文档将使这变得更容易。在那之前,您始终必须阅读源代码;)

干杯, 弗洛里安

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 OpenSMILE 中创建自定义配置文件 的相关文章

  • 如何在 iPad 上使用 HTML5/Javascript 合成音频

    有没有人有工作示例代码 可以在 iPad 上的 Mobile Safari 上使用 HTML5 Javascript 合成 并播放 音频 我在网上找到了一些基于 javascript 的声音合成示例 但它们似乎都只能在 Firefox 中使
  • 使用 C 创建立体声正弦波

    我正在尝试用 C 创建立体声正弦 WAV 并且可能有不同的 可能是空白的 左声道和右声道 使用此函数为每个通道生成一个音调 int16 t create tone float frequency float amplitude float
  • Android 从 C++ 端播放原始音频

    我需要能够在 Android 系统的 C 端以自定义文件格式传输音频 我正在致力于移植自定义媒体播放器 并且需要能够打开自定义文件并从中传输音频 这很重要 因为我认为从性能角度来看将整个播放器移植到 JAVA 是不可行的 并且通过 JNI
  • 在 Qt 中播放通知(频率 x)声音 - 最简单的方法?

    Qt 5 1 或更高版本 我需要播放频率为 x 的通知声音 n 毫秒 如果我能像这样组合音调那就太好了 1000Hz 持续 2 秒 然后 3000Hz 持续 1 秒 最简单的方法是使用文件 WAV MP3 例如如此处所述 如何用Qt播放声音
  • 使用 Android 播放任意音调

    有没有办法让Android发出任意频率的声音 意思是 我不想预先录制声音文件 我环顾四周 音调发生器 http developer android com reference android media ToneGenerator html
  • HTML5

    我想在随机位置开始和停止 HTML5 播放 并具有淡入和淡出周期 以平滑聆听体验 为此存在什么样的机制 使用 setTimeout 手动增加音量 jQuery 的方式 audio animate volume newVolume 1000
  • Clip 在 Java 中播放 WAV 文件时出现严重延迟

    我编写了一段代码来读取 WAV 文件 大小约为 80 mb 并播放该文件 问题是声音播放效果很差 极度滞后 你能告诉我有什么问题吗 这是我的代码 我称之为doPlayJframe 构造函数内的函数 private void doPlay f
  • 使用 VBScript 切换当前活动声音设备?

    我想在连接到我的计算机 Windows 7 32 位 的两个音频设备之间切换 我看了一下question https stackoverflow com questions 35709 change active sound card on
  • 如何将 MP3 音频文件读入 numpy 数组/将 numpy 数组保存到 MP3?

    有没有办法从 MP3 音频文件中读取 写入 MP3 音频文件numpy具有类似 API 的数组scipy io wavfile read https docs scipy org doc scipy 0 14 0 reference gen
  • 在音频文件中查找音频样本(频谱图已存在)

    我正在努力实现以下目标 使用 Skype 拨打我的邮箱 有效 输入密码并告诉邮箱我要录制新的欢迎信息 有效 现在 我的邮箱告诉我在嘟嘟声后录制新的欢迎消息 我想等待蜂鸣声然后播放新消息 不起作用 我如何尝试实现最后一点 使用 FFT 和滑动
  • iPhone 应用程序需要 AAC 许可证吗?

    AAC 是一种音频编解码器 AAC 旨在成为 MP3 格式的后继者 在相似的比特率下 AAC 通常可以实现比 MP3 更好的音质 维基百科上的 AAC http en wikipedia org wiki Advanced Audio Co
  • 使用 C# 将多个音频样本混合到单个文件中

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个能够创建音频文件 mp3 或 wav 的库 NAudio http www codeple
  • c# AudioFingerprinting 和局部敏感哈希

    我之前发现过类似的帖子 但没有真正回答这个问题 在我的指纹识别中 我生成了一个包含 5 个整数的记录集 例如 33 42 88 121 194 这些对应于特定音乐样本的最高幅度的频率 例如 对于 30ms 的音频样本 我有以下频率的桶 0
  • Java Sound可以用来控制系统音量吗?

    Java 声音优惠FloatControl各种声音线路功能的实例 以及MASTER GAIN http docs oracle com javase 7 docs api javax sound sampled FloatControl T
  • 播放没有音频标签的音频

    是否可以在没有音频标签的情况下仅使用 javascript 播放音频 我通过 tinyMce 编辑器注入脚本 因为我无权访问网站的后端 并且它不支持客户端的音频标签 她只想要当您将鼠标悬停在图像上时发出简单的声音 我已经完成了所有设置 但是
  • Java 原始音频输出

    只是想知道Java中是否有像模块这样的库皮奥迪埃 http pyaudiere org 在 Python 中 这仅允许您创建音调并播放它们 如以下示例 Python 代码 device audiere open device tone de
  • Javascript 制作音频 blob

    我正在测试 html 音频标签 我想制作音频 blob url 就像 youtube 或 vimeo 那样 并将其添加到 src 开始播放音频 我一直在测试new Blob and URL createObjectURL 但我不知道如何使用
  • 如何在C#中剪切、编辑和合并OGG文件?

    我有一个 ogg vorbis 文件 我必须用它执行两个操作 将文件的一部分从一个位置剪切到另一个位置 将另一个文件与现有文件合并 如何在 C 中执行这两个操作 你可以使用 libzplay 来做到这一点http libzplay sour
  • 声音在模拟器中工作,而不是在真实 iPhone 中工作

    有几短音效播放的样本在模拟器中很好 但在真正的 iPhone 中根本不行3GS 以下是 Apple SysSound 示例中的代码 CFBundleRef mb CFBundleGetMainBundle CFURLRef soundFil
  • 用 Java 捕获扬声器输出

    使用Java可以捕获扬声器输出吗 此输出不是由我的程序生成的 而是由其他正在运行的应用程序生成的 这可以用 Java 完成还是我需要求助于 C C 我有一个基于 Java 的应用程序 使用过的爪哇声音 https stackoverflow

随机推荐