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 上找到。
使用方式:
-
安装 dali_code:
- 发布版和稳定版:运行
pip install dali-dataset。 - 非发布版和不稳定版:进入 DALI/code 文件夹手动安装。
- 升级:
pip install dali-dataset --upgrade。 - 卸载:
pip uninstall dali-dataset。 - 依赖:numpy 和 youtube_dl。
- 发布版和稳定版:运行
-
加载 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。
-
标注格式:
- 标注存储在
entry.annotations['annot']中,有两种格式:'horizontal'(默认)和 'vertical',可使用函数转换。 - 水平格式:每个粒度级别单独存储。每个级别包含一个标注列表,每个元素有相应信息。
- 垂直格式:不同粒度级别层次连接。每个元素是一个段落,段落包含行,行包含单词,单词包含音符。只有最深层直接包含文本信息。可以使用
dali_code.get_text()获取特定点的文本。
- 标注存储在
-
导出与可视化:
- 可以将每个级别的标注导出为 xml 或文本文件,以便用 Audacity 或 AudioSculpt 可视化。音高信息仅在 xml 文件中为 AudioSculpt 提供。
- 可以将标注导出和导入为 JSON 文件。
-
Ground-truth:
- 每个 dali_data 有自己的 ground-truth 文件。ground-truth 中的标注是 dali_data 中手动标注了 offset 和 fr 参数的条目。
- 可以加载 ground-truth 文件,或加载整个 dali_data 并更新 ground-truth 中歌曲的 offset 和 fr 参数。
-
获取音频:
- 可以使用
dali_code.get_audio()函数检索每个标注的音频(如果可用)。也可以下载子集。
- 可以使用
-
处理示例:
- 使用
dali_code.annot2vector()将标注转换为向量,类型可以是 'voice'(每帧 1 或 0 表示有声/无声)或 'melody'(每帧包含主旋律频率值)。 - 使用
dali_code.annot2frames()将时间(秒)转换为帧。 - 使用
dali_code.unroll()展开层次信息。
- 使用
-
修正标注:
- 目前主要面临全局对齐问题。可以通过修改 offset 和帧率参数来改变对齐。原始参数存储在特定位置。
- 如果找到更好的参数集,可以使用
dali_code.change_time()函数修改标注,并鼓励将参数发送给项目组以改进 DALI。
当前工作:
- 第二代歌唱声音检测系统。
- 解决单个音符错误。
- 解决全局音符错误(所有音符偏移相同间隔的歌曲)。
- 解决局部音符对齐错误。
联系与许可:
- 建议或改进请联系:dali [dot] dataset [at] gmail [dot] com。
- 包相关问题请在仓库中开 issue。
- 本研究受法国国家研究署 WASABI 项目(合同 ANR-16-CE23-0017-01)资助。
- 采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议。