个性化阅读
专注于IT技术分析

如何在Ubuntu 18.04中使用Python从音频文件中提取旋律并将其导出到MIDI(生成量化的MIDI)

本文概述

旋律提取是自动估计与一段和弦(或同音)音乐的主要旋律线的音高相对应的基频的任务。此任务的其他名称包括音频旋律提取, 主要旋律提取, 主要旋律估计和主要基频(F0)估计。

在本文中, 我们将向你说明在Ubuntu 18.04中从WAV(原始音频格式)文件生成MIDI版本的过程是多么容易。

1.安装Melodia旋律提取Vamp插件

MELODIA插件会自动估算歌曲主要旋律的音高。更具体地, 其实现了一种算法, 该算法自动估计与一段复音(或同音或单音)音乐的主要旋律线的音高相对应的基频。给定一首歌, 该算法估算:

  1. 什么时候出现旋律, 什么时候不出现(也称为发声检测)
  2. 存在时旋律的音高

可以在以下网址找到对旋律提取以及算法(包括图形和声音示例)的非科学家友好介绍:www.justinsalamon.com/melody-extraction。第一步, 你需要下载Melodia并从终端上使它可用。在此页面中, 你将找到Melodia的下载表格。你当然可以在其中填充虚假信息以继续进行操作:

下载Melodia表格

提交表单后, 将开始下载并获得tar文件。然后, 提取zip的所有内容:

Melodia邮编数据

在/ usr / local / lib / vamp目录中(创建vamp目录并在其中存储zip的内容)。请注意, 你将需要root用户访问权限才能将zip的内容提取到上述目录中。

2.克隆audio_to_midi_melodia项目

安装Melodia之后, 你现在需要获取Github上可用的Audio to Midi项目的源代码。你可以运行以下命令在计算机的某些目录中快速克隆代码:

git clone https://github.com/justinsalamon/audio_to_midi_melodia.git

audio_to_midi_melodia python脚本允许你提取歌曲的旋律并将其保存到MIDI文件。该脚本利用Melodia算法执行旋律提取, 并利用了新的vamp模块, 该模块允许直接在python中运行vamp插件(如Melodia)。提取旋律的音高轮廓后, 下一步(非常简单!)是将其分割为音符, 并对每个音符的音高进行量化, 生成一系列离散的音符, 然后可以将其导出为任何符号格式, 例如作为MIDI或JAMS。

将连续音高序列量化为一系列音符是一个活跃的研究领域, 并且仍然是未解决的问题。不过, 我们可以使用一系列试探法获得相当不错的结果:

  1. 将音高序列从赫兹转换为(分数)MIDI音符编号
  2. 将每个值四舍五入到最接近的MIDI音符整数
  3. (可选)应用中值滤波器, 以消除音调中的短跳(例如, 由于颤音引起的)
  4. 遍历音序, 每当音高变化开始新音符时

克隆项目后, 切换到audio_to_midi_melodia目录:

cd audio_to_midi_melodia

然后, 你将能够安装依赖项以运行项目。有关此项目的更多信息, 请访问Github上的官方资源库。

3.安装依赖项

该项目需要多个库才能正常工作。你可以通过单个命令在终端中读取requirements.txt文件来轻松安装它们:

pip install -r requirements.txt

将安装的软件包是:

  • 声音文件:声音文件是基于libsndfile, CFFI和NumPy的音频库。
  • 重新采样:Python中有效的采样率转换。该软件包实现了带限正弦插值方法以进行采样率转换。
  • vamp:此模块允许Python代码加载和使用本机代码Vamp插件(http://vamp-plugins.org)进行音频功能分析。
  • midiutil:用于编写多轨道MIDI文件的Python接口。
  • jams:可重复MIR研究的JSON注释音乐规范。
  • numpy:NumPy是使用Python进行科学计算的基本软件包。它包含其他内容。
  • scipy:SciPy是用于数学, 科学和工程的基于Python的开源软件生态系统。

4.从WAV生成MIDI文件

安装依赖项后, 你现在可以继续生成Audio的MIDI版本, 只需将要转换为MIDI的WAV文件的路径作为位置参数提供, 并将输出MIDI文件作为第二位置参数提供:

python audio_to_midi_melodia.py ./input_audio.wav ./output_file.mid 120

请注意, 导出到MIDI需要提供BPM(每分钟的拍数)值, 你可以任意定义一个值, 手动对其进行估计, 或者使用Essentia, Librosa中包含的速度估计算法之一自动对其进行估计, 或者d喜欢坚持使用vamp插件QMVP。如果导出到JAMS(直接使用从音轨估计的音符开始时间), 则不需要BPM。但是, 你也可以在Google上搜索歌曲的节奏并提供此值。在此示例中, 我们将BPM设置为120(第三个位置参数)。

你还可以更改每个合成器的最短持续时间, 并以JAMS格式导出:

python audio_to_midi_melodia.py infile outfile bpm [--smooth SMOOTH] [--minduration MINDURATION] [--jams]

更多信息

  • http://www.justinsalamon.com/melody-extraction.html
  • https://www.upf.edu/web/mtg/melodia

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何在Ubuntu 18.04中使用Python从音频文件中提取旋律并将其导出到MIDI(生成量化的MIDI)

评论 抢沙发

评论前必须登录!