SuperAPI AI 工具集

DALI

DALI 是一个大规模同步音频、歌词与音符数据集,由 Gabriel Meseguer-Brocal、Alice Cohen-Hadria 和 Geoffroy Peeters 在 2018 年 ISMIR 会议上提出。该数据集通过教师-学生机器学习范式自动创建,包含音频、歌词和音符的同步标注。DALI 包含两个主要部分:dali_data(数据集本身,以 gz 文件形式提供)和 dali_code(用于读取和处理数据的 Python 包)。dali_code 可通过 pip 安装,支持加载数据集、获取音频、处理标注、导出 JSON、使用 ground-truth 等。标注支持水平和垂直两种格式,可用于旋律提取、段落分析等任务。DALI 仍在持续改进中,当前工作包括歌唱声音检测系统第二代、单个音符错误修复、全局音符错误修复和局部音符对齐错误修复。用户可通过邮箱反馈建议或问题。该工作受法国国家研究署 WASABI 项目资助,采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议。

访问官网

工具介绍

DALI 是一个大规模同步音频、歌词与音符数据集,全称为“a large Dataset of synchronised Audio, LyrIcs and vocal notes”。它由 Gabriel Meseguer-Brocal、Alice Cohen-Hadria 和 Geoffroy Peeters 在 2018 年 ISMIR 会议上发表的论文中提出,通过教师-学生机器学习范式自动创建。

DALI 包含两个主要元素:

  • dali_data:数据集本身,以 gz 文件集合的形式提供,每个 gz 文件包含一首歌曲的标注。不同版本的 DALI_data 可在仓库中获取。
  • dali_code:用于读取和处理 dali_data 的 Python 包,存储在该仓库中。它有自己的版本控制,发布版和稳定版可在 PyPI 上找到。

使用方式:

  1. 安装 dali_code:

    • 发布版和稳定版:运行 pip install dali-dataset。
    • 非发布版和不稳定版:进入 DALI/code 文件夹手动安装。
    • 升级:pip install dali-dataset --upgrade。
    • 卸载:pip uninstall dali-dataset。
    • 依赖:numpy 和 youtube_dl。
  2. 加载 DALI_data:

    • DALI 以 gz 文件集合形式呈现,每个 gz 包含特定歌曲的标注,使用唯一 id 标识。
    • 可以下载特定版本的 dali_data,也可以加载子集(通过提供要跳过或保留的 id)。
    • 加载可能需要几分钟,取决于计算机和 Python 版本,Python3 比 Python2 快。
    • 每个 DALI 版本包含一个 DALI_DATA_INFO.gz 文件,匹配唯一 DALI id 与 artist_name-song_title、YouTube 链接以及链接是否可用的布尔值。
    • dali_data 是一个字典,键为唯一 id,值为 Annotations 类的实例。每个标注实例有两个属性:info 和 annotations。
  3. 标注格式:

    • 标注存储在 entry.annotations['annot'] 中,有两种格式:'horizontal'(默认)和 'vertical',可使用函数转换。
    • 水平格式:每个粒度级别单独存储。每个级别包含一个标注列表,每个元素有相应信息。
    • 垂直格式:不同粒度级别层次连接。每个元素是一个段落,段落包含行,行包含单词,单词包含音符。只有最深层直接包含文本信息。可以使用 dali_code.get_text() 获取特定点的文本。
  4. 导出与可视化:

    • 可以将每个级别的标注导出为 xml 或文本文件,以便用 Audacity 或 AudioSculpt 可视化。音高信息仅在 xml 文件中为 AudioSculpt 提供。
    • 可以将标注导出和导入为 JSON 文件。
  5. Ground-truth:

    • 每个 dali_data 有自己的 ground-truth 文件。ground-truth 中的标注是 dali_data 中手动标注了 offset 和 fr 参数的条目。
    • 可以加载 ground-truth 文件,或加载整个 dali_data 并更新 ground-truth 中歌曲的 offset 和 fr 参数。
  6. 获取音频:

    • 可以使用 dali_code.get_audio() 函数检索每个标注的音频(如果可用)。也可以下载子集。
  7. 处理示例:

    • 使用 dali_code.annot2vector() 将标注转换为向量,类型可以是 'voice'(每帧 1 或 0 表示有声/无声)或 'melody'(每帧包含主旋律频率值)。
    • 使用 dali_code.annot2frames() 将时间(秒)转换为帧。
    • 使用 dali_code.unroll() 展开层次信息。
  8. 修正标注:

    • 目前主要面临全局对齐问题。可以通过修改 offset 和帧率参数来改变对齐。原始参数存储在特定位置。
    • 如果找到更好的参数集,可以使用 dali_code.change_time() 函数修改标注,并鼓励将参数发送给项目组以改进 DALI。

当前工作:

  • 第二代歌唱声音检测系统。
  • 解决单个音符错误。
  • 解决全局音符错误(所有音符偏移相同间隔的歌曲)。
  • 解决局部音符对齐错误。

联系与许可:

  • 建议或改进请联系:dali [dot] dataset [at] gmail [dot] com。
  • 包相关问题请在仓库中开 issue。
  • 本研究受法国国家研究署 WASABI 项目(合同 ANR-16-CE23-0017-01)资助。
  • 采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议。