DALI is a large-scale dataset of synchronized audio, lyrics, and notes, whose full name is "a large Dataset of synchronised Audio, LyrIcs and vocal notes". It was proposed by Gabriel Meseguer-Brocal, Alice Cohen-Hadria, and Geoffroy Peeters in their 2018 ISMIR conference paper, and was automatically created through a teacher-student machine learning paradigm.
DALI contains two main elements:
- dali_data: the dataset itself, provided as a collection of gz files, each gz file containing the annotations for one song. Different versions of DALI_data are available in the repository.
- dali_code: a Python package for reading and processing dali_data, stored in this repository. It has its own version control, and release and stable versions can be found on PyPI.
Usage:
-
Install dali_code:
- Release and stable versions: run
pip install dali-dataset. - Non-release and unstable versions: enter the DALI/code folder and install manually.
- Upgrade:
pip install dali-dataset --upgrade. - Uninstall:
pip uninstall dali-dataset. - Dependencies: numpy and youtube_dl.
- Release and stable versions: run
-
Load DALI_data:
- DALI is presented as a collection of gz files, each gz containing the annotations for a specific song, identified by a unique id.
- You can download a specific version of dali_data, or load a subset (by providing the ids to skip or keep).
- Loading may take several minutes, depending on the computer and Python version; Python3 is faster than Python2.
- Each DALI version contains a DALI_DATA_INFO.gz file, matching unique DALI ids with artist_name-song_title, YouTube links, and a boolean indicating whether the link is available.
- dali_data is a dictionary whose keys are unique ids and whose values are instances of the Annotations class. Each annotation instance has two attributes: info and annotations.
-
Annotation format:
- Annotations are stored in
entry.annotations['annot'], in two formats: 'horizontal' (default) and 'vertical', which can be converted using a function. - Horizontal format: each granularity level is stored separately. Each level contains a list of annotations, and each element has corresponding information.
- Vertical format: different granularity levels are hierarchically connected. Each element is a paragraph, a paragraph contains lines, a line contains words, and a word contains notes. Only the deepest level directly contains text information. You can use
dali_code.get_text()to get the text at a specific point.
- Annotations are stored in
-
Export and visualization:
- Annotations at each level can be exported as xml or text files for visualization with Audacity or AudioSculpt. Pitch information is provided only in xml files for AudioSculpt.
- Annotations can be exported and imported as JSON files.
-
Ground-truth:
- Each dali_data has its own ground-truth file. The annotations in the ground-truth are the entries in dali_data whose offset and fr parameters were manually annotated.
- You can load the ground-truth file, or load the entire dali_data and update the offset and fr parameters of the songs in the ground-truth.
-
Get audio:
- You can use the
dali_code.get_audio()function to retrieve the audio for each annotation (if available). A subset can also be downloaded.
- You can use the
-
Processing examples:
- Use
dali_code.annot2vector()to convert annotations into vectors; the type can be 'voice' (1 or 0 per frame indicating voiced/unvoiced) or 'melody' (each frame contains the main melody frequency value). - Use
dali_code.annot2frames()to convert time (seconds) to frames. - Use
dali_code.unroll()to expand hierarchical information.
- Use
-
Correct annotations:
- At present, the main issue is global alignment. Alignment can be changed by modifying the offset and frame rate parameters. The original parameters are stored in a specific location.
- If a better set of parameters is found, you can use
dali_code.change_time()Function modification annotation, and encourage sending parameters to the project team to improve DALI.
Current work:
- Second-generation singing voice detection system.
- Resolve single-note errors.
- Resolve global note errors (songs where all notes are shifted by the same interval).
- Resolve local note alignment errors.
Contact and license:
- For suggestions or improvements, contact: dali [dot] dataset [at] gmail [dot] com.
- For package-related issues, please open an issue in the repository.
- This research was funded by the French National Research Agency WASABI project (contract ANR-16-CE23-0017-01).
- Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.