绉纱音高跟踪器

crepe的Python项目详细描述


crepe pitch tracker构建状态

crepe是一种基于深卷积神经网络的单声道基音跟踪系统,直接对时域波形进行输入。绉纱是最先进的(截至2018年),比Pyin和Swipe等流行的音高跟踪器更出色:

以下文件提供了更多详细信息:

< Buff行情>

crepe:基音估计的卷积表示法 金钟郁、贾斯汀·萨拉蒙、李彼得、贝洛。
ieee声学、语音和信号处理国际会议记录,2018年。

我们恳请使用绉纱的学术出版物引用上述论文。

安装绉纱

绉纱是在皮皮上托管的。要安装,请在python环境中运行以下命令:

$ pip install --upgrade tensorflow  # if you don't already have tensorflow >= 1.6.0
$ pip install crepe

要从源代码安装最新版本,请克隆存储库并从顶级的crepe文件夹调用:

$ python setup.py install

使用绉纱

从命令行使用crepe

此软件包包括一个命令行实用程序crepe和一个预先训练过的crepe模型版本,以便于使用。要估计audio_file.wav的音调,请运行:

$ crepe audio_file.wav

$ python -m crepe audio_file.wav

生成的音频文件.f0.csv包含3列:第一列带有时间戳(默认情况下使用10毫秒的跃点大小),第二列包含以赫兹为单位的预测基频,第三列包含语音置信度,即存在音调的置信度:

time,frequency,confidence
0.00,185.616,0.907112
0.01,186.764,0.844488
0.02,188.356,0.798015
0.03,190.610,0.746729
0.04,192.952,0.771268
0.05,195.191,0.859440
0.06,196.541,0.864447
0.07,197.809,0.827441
0.08,199.678,0.775208
...

时间戳

crepe默认使用10毫秒的时间步长,可以使用 --step size选项,以毫秒为单位获取时间步长的大小。 例如,--step size 50将每50毫秒计算一次音高。

遵循流行的音频处理库(如 essentialibrosa, 从v0.0.5开始,crepe将填充输入信号,以便第一帧 是以零为中心(帧的中心对应于时间0)并且通常 所有帧都围绕其对应的时间戳居中,即帧 d[:,t]位于音频[t*跳长]的中心。这种行为可以改变 通过指定可选的--no centering标志,在这种情况下,第一帧 将在时间零点开始并且通常帧d[:,t]音频[t*跳长]。坚持默认行为(居中帧)是 强烈建议避免与生成的功能和注释不一致 通过其他常见的音频处理工具。

型号容量

crepe使用默认情况下报告的模型大小,但可以选择 使用较小的模型计算速度,以稍低的精度为代价。 您可以指定--model capacity{tiny small medium large full}作为命令 用于选择具有所需容量的型号的行选项。

时间平滑

默认情况下,crepe不会对音调曲线应用时间平滑,但是 通过可选的--viterbic支持viterbi平滑命令行参数。

保存激活矩阵

脚本还可以选择性地保存模型的输出激活矩阵 到npy文件(--save activation),其中矩阵维度是 (n_帧,360)使用10 ms的跳跃大小(有360个俯仰箱,覆盖20个 每美分)。

脚本还可以输出激活矩阵的图(--save plot), 保存到audio_file.activation.png包括可选的可视表示 模型的语音检测(--plot voice)。下面是 男性节选的激活矩阵(没有声音覆盖) 歌声:

显著性

批处理

对于文件的批处理,可以提供文件夹路径而不是文件路径:

$ python crepe.py audio_folder

脚本将处理文件夹中找到的所有wav文件。

其他使用信息

有关用法的详细信息,请参阅帮助消息:

$ python crepe.py --help

在python中使用crepe

crepe可以作为模块导入,直接在python中使用。下面是一个简单的例子:

importcrepefromscipy.ioimportwavfilesr,audio=wavfile.read('/path/to/audiofile.wav')time,frequency,confidence,activation=crepe.predict(audio,sr,viterbi=True)

argmax局部加权平均值

本次发行的绉纱采用以下加权平均公式,与纸张略有不同。这只关注最大激活附近的邻域,这将进一步提高俯仰精度:

请注意

  • 当前版本仅支持将WAV文件作为输入。
  • 该模型使用16 kHz音频进行训练,因此,如果输入音频具有不同的采样率,则首先使用重采样将其重采样到16 kHz。
  • 由于框架之间细微的数值差异,keras应该配置为使用tensorflow后端以获得最佳性能。该模型使用keras 2.1.5和tensorflow 1.6.0进行训练,而tensorflow的新版本似乎也能工作。
  • 如果Keras(和相应的后端)配置为在GPU上运行,则预测速度会大大加快。
  • 所提供的模型是使用以下数据集进行训练的,这些数据集由声音和乐器音频组成,因此预计对此类音频信号最有效。
    • mir-1k[1]
    • 巴赫10[2]
    • rwc合成器[3]
    • Medleydb[4]
    • MDB茎合成[5]
    • nsynth[6]

参考文献

[1]C.-L.Hsu等人利用mir-1k数据集改进单声道录音的歌唱语音分离,ieee音频、语音和语言处理事务。2009。

[2]Z.Duan等人通过对谱峰和非谱峰区域建模进行多基频估计",ieee音频、语音和语言处理事务。2010。

[3]M.Mauch等人Pyin:使用概率阈值分布的基频估计器",美国电气与电子工程师协会声学、语音和信号处理国际会议论文集(ICASSP)。2014。

[4]R.M.Bittner等人。"Medleydb:用于注释密集型MIR研究的多通道数据集",国际音乐信息检索学会(ISMIR)会议记录。2014。

[5]J.Salamon等人。"分析/合成国际音乐信息检索学会(ISMIR)会议论文集",。2017、

[6]J.Engel等人。"用wavenet自动编码器进行音乐音符的神经音频合成,arxiv预印本:1704.01279。2017、

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用SerializationUtils时java ClassNotFoundException。克隆()   java Cucumber+spring:如何通过测试触发SmartLifecycle事件?   java如何使ProGuard以简单的方式工作?   java JSP页面显示来自集合的日期   谷歌地图检查坐标是否位于JAVA中谷歌地图API的多边形中   java如何在终端中使用“tokens”打印令牌?   java获取编译错误:包com。威里奥。sdk不存在   java会使用JAXB或类似工具自动填充HATEAOS链接吗?   Javascript(GraalJS)与Java中未签名的右移>>>>   如何在Java代码中创建jdbc请求的Jmeter测试   java如何在CellList中添加或删除单个元素?   java Progressbar:如何创建原始对象的深度副本