PianoCoRe: Combined and Refined Piano MIDI Dataset
Description
PianoCoRe is a large-scale piano MIDI dataset that unifies and refines major open-source piano corpora. It contains 250,046 performances of 5,625 pieces written by 483 composers totaling 21,763 hours of performed music.
PianoCoRe provides the most diverse composer- and composition-annotated piano MIDI data. The metadata includes deduplication flags, MIDI quality labels and precise note-level score-performance alignments.
The alignments are refined using a Refined Alignment for Scores and Performances (RAScoP) pipeline, which ensures perfect note-by-note synchronization for expressive performance modeling.
Related Resources:
- Publication: https://doi.org/10.5334/tismir.333
- Project repository: https://github.com/ilya16/PianoCoRe
- Hugging Face: https://huggingface.co/datasets/SyMuPe/PianoCoRe
Abstract (English)
Symbolic music datasets with matched scores and performances are essential for many music information retrieval (MIR) tasks. Yet, existing resources often cover a narrow range of composers, lack performance variety, omit note-level alignments, or use inconsistent naming formats. This work presents PianoCoRe, a large-scale piano MIDI dataset that unifies and refines major open-source piano corpora. The dataset contains 250,046 performances of 5,625 pieces written by 483 composers, totaling 21,763 h of performed music. PianoCoRe is released in tiered subsets to support different applications: from large-scale analysis and pre-training (PianoCoRe-C and deduplicated PianoCoRe-B) to expressive performance modeling with note-level score alignment (PianoCoRe-A/A*). The note-aligned subset, PianoCoRe-A, provides the largest open-source collection of 157,207 performances aligned to 1,591 scores to date. In addition to the dataset, the contributions are: (1) a MIDI quality classifier for detecting corrupted and score-like transcriptions and (2) RAScoP, an alignment refinement pipeline that cleans temporal alignment errors and interpolates missing notes. The analysis shows that the refinement reduces temporal noise and eliminates tempo outliers. Moreover, an expressive performance rendering model trained on PianoCoRe demonstrates improved robustness to unseen pieces compared to models trained on raw or smaller datasets. PianoCoRe provides a ready-to-use foundation for the next generation of expressive piano performance research.
Technical info (English)
Dataset Tiers
To support different research applications, the dataset is organized into tiered subsets:
-
PianoCoRe-C (Combined): a complete mixed-source piano performance collection.
-
PianoCoRe-B (Base): a deduplicated and quality-filtered subset.
-
PianoCoRe-A (Aligned): a subset containing performances aligned to score.
-
PianoCoRe-A*: a high quality subset of the best-quality performances and note-level alignments.
The statistics of each subset are as follows:
| Dataset | Composers | Pieces | Performances | Hours | Scores | Alignments |
|---|---|---|---|---|---|---|
| PianoCoRe-C | 483 | 5,625 | 250,046 | 21,763 | 75.3% | no |
| PianoCoRe-B | 478 | 5,591 | 214,092 | 18,757 | 75.0% | no |
| PianoCoRe-A | 151 | 1,591 | 157,207 | 12,509 | 100% | note |
| PianoCoRe-A* | 137 | 1,517 | 130,275 | 10,330 | 100% | note |
Data Files
The entry point for the dataset is the metadata.csv file, which contains paths, statistics, and metrics for all samples. The rows are organized using a natural sort based on the performance MIDI paths. A detailed description of the metadata fields is provided below.
Additionally, composers.csv provides a reference list of the 483 composers included in the final dataset. This file includes birth and death years to complement the best-effort attempt to filter PianoCoRe according to European Union public-domain regulations (authors deceased for more than 70 years; i.e., 1955 or earlier as of 2026).
The dataset is distributed in three distinct archives:
- PianoCoRe-1.0-raw-midi.zip:
- Contains musical score and performance files (MusicXML/MXL and MIDI) from the source datasets.
- Suitable for any MIDI-only applications.
- PianoCoRe-1.0-raw-alignments.zip:
- Raw score-performance alignments computed using parangonar and saved as compressed
.npzfiles. - Available for all performances matched with a score.
- Raw Alignment (.npz): contains indices, pitches, and onset times for matched, inserted, and deleted score and performance notes.
- Can be used to align performances with scores on time/beat level or develop custom refinement pipelines.
- Raw score-performance alignments computed using parangonar and saved as compressed
- PianoCoRe-1.0-refined.zip:
- Refined score and performance MIDI files and note-level alignments saved as
.npzfiles. - Available for all performances with alignment recall $R_{RAScoP} \ge 0.7$ (see paper for details).
- Refined Score MIDI: single-track, deduplicated scores matching the alignment indices. Might contain fewer notes than the original score.
- Refined Performance MIDI: cleaned original notes supplemented with interpolated notes to ensure a complete note-by-note alignment with the refined score.
- Refined Alignment (.npz): contains a mapping of performance note indices to sorted score notes and a boolean mask for interpolated notes.
- Ready-to-use for training generative score-to-performance rendering or performance-to-score transcription models that require parallel datasets.
- Refined score and performance MIDI files and note-level alignments saved as
After downloading, the complete dataset can be constructed using the following commands:
unzip PianoCoRe-1.0-raw-midi.zip
unzip PianoCoRe-1.0-raw-alignments.zip
unzip PianoCoRe-1.0-refined.zip
mv metadata.csv PianoCoRe/
mv composers.csv PianoCoRe/
The complete dataset takes around 16.43 GB of disk space:
- 5.14 GB: score MusicXML/MIDI and performance MIDI files (
PianoCoRe/raw/) - 5.76 GB: raw alignment files (
PianoCoRe/raw/) - 5.53 GB: all refined score MIDI, performance MIDI and alignment files (
PianoCoRe/refined/)
Directory Structure
The dataset has the following directory structure:
PianoCoRe/
├── raw/
│ ├── Bach,_Johann_Sebastian/
│ │ └── French_Suite_No.5_in_G_major,_BWV_816/
│ │ ├── 1._Allemande/
│ │ │ ├── score.mxl // score MusicXML/MXL
│ │ │ ├── score_MS.mid // score MIDI
│ │ │ ├── ATEPP_01881.mid // performance MIDI
│ │ │ ├── ATEPP_01881_align.npz // raw alignment with the score MIDI
│ │ │ ├── Aria_016026_0.mid
│ │ │ ├── Aria_016026_0_align.npz
│ │ │ └── ...
│ │ └── ...
│ ├── Beethoven,_Ludwig_van/
│ └── ...
├── refined/
│ ├── Bach,_Johann_Sebastian/
│ │ └── French_Suite_No.5_in_G_major,_BWV_816/
│ │ └── 1._Allemande/
│ │ ├── score_MS_refined.mid // refined (single-track) score MIDI
│ │ ├── ATEPP_01881_refined.mid // refined (note-by-note aligned) performance MIDI
│ │ ├── ATEPP_01881_refined_align.npz // refined alignment and interpolation mask
│ │ ├── Aria_016026_0_refined.mid
│ │ ├── Aria_016026_0_refined_align.npz
│ │ └── ...
│ ├── Beethoven,_Ludwig_van/
│ └── ...
└── metadata.csv // complete metadata
Metadata
The PianoCoRe metadata defines the following fields for each entry:
Core:
- id (string): unique sample ID (format:
PianoCoRe_XXXXXX) - composer (string): name of the composer (format:
[last_name],_[first_name]) - composition (string): title of the musical work/composition
- movement (string, optional): name of the specific movement/part of the composition
- performance_id (string): ID of the performance MIDI file, derived from the source dataset name and its internal ID
Subsets:
- split (string): dataset split (
trainortest) - tier_b (bool): whether the performance is in the PianoCoRe-B subset (deduplicated and quality-filtered)
- tier_a (bool):whether the performance is in the PianoCoRe-A subset (note-aligned to scores)
- tier_a_star (bool): whether the performance is in the PianoCoRe-A* subset (highest-confidence alignments)
Score:
- score_dataset (string, optional): source dataset for the score MusicXML/MXL files (ASAP/ATEPP/PDMX/MuseScore)
- score_id (string, optional): ID of the score MIDI file, either as in the source dataset or built using the source dataset name and ID
- score_xml_path (string, optional): path to the score MusicXML/MXL file within the
raw/directory - score_midi_path (string, optional): path to the score MIDI file within the
raw/directory - score_note_count (integer, optional): number of notes in the score MIDI
- score_duration (float, optional): duration of the score MIDI in seconds
Performance:
- performance_dataset (string): source dataset of the performance MIDI
- performance_midi_path (string): path to the performance MIDI file within the
raw/directory - performance_note_count (integer): number of notes in the performance MIDI
- performance_duration (float): duration of the performance MIDI in seconds
- performer (string, optional) name of the pianist (if available)
- is_transcription (bool): whether the performance MIDI was transcribed from audio
- capture_model (string): hardware (e.g., Yamaha Disklavier) or ML model used to transcribe the MIDI
Raw alignment:
- raw_alignment_path (string, optional): path to the raw
_align.npzscore-performance alignment file within theraw/directory, contains indices, pitches and onset for score and performance notes - raw_recall (float, optional): $R_a$, raw alignment recall
- raw_precision (float, optional): $P_a$, raw alignment precision
- raw_adjusted_alignment_ratio (float, optional): $R'_a$, raw alignment adjusted alignment ratio, defined as $R'_a = \max(P_a, R_a)$
Deduplication (PianoCoRe-B):
- is_duplicate (bool): whether the performance is a near-duplicate of the other performance (
lead_performance) - lead_performance (string, optional): path to the main (higher priority) version for the duplicate performance MIDI
Quality labels (PianoCoRe-B):
- quality_label (string): MIDI quality label predicted by the classifier ('score', 'high quality', 'low quality' or 'corrupted')
- prob_score (float): classifier confidence for Score (S) MIDI quality class
- prob_high_quality (float): classifier confidence for High Quality (HQ) MIDI quality class
- prob_low_quality (float): classifier confidence for Low Quality (LQ) MIDI quality class
- prob_corrupted (float): classifier confidence for Corrupted (C) MIDI quality class
Refined score, performance and alignment (PianoCoRe-A/A*):
- is_refined (bool): whether the performance MIDI was cleaned and refined
- refined_score_midi_path (string, optional): path to the refined (single-track) score MIDI file within the
refined/directory - refined_score_note_count (integer, optional): number of notes in the refined score MIDI
- refined_score_duration (float, optional): duration of the refined score MIDI in seconds
- refined_performance_midi_path (string, optional): path to the refined (note-by-note aligned) performance MIDI file within the
refined/directory - refined_performance_note_count (integer, optional): number of notes in the refined performance MIDI
- refined_performance_interpolated_note_count (integer, optional): number of synthetic notes added during the interpolation stage
- refined_performance_duration (float, optional): duration of the refined performance MIDI in seconds
- refined_alignment_path (string, optional): path to the
_refined_align.npzscore-performance alignment file within therefined/directory, contains performance indices and boolean interpolation mask - refined_recall (float, optional): $R_{RAScoP}$, refined alignment recall
Other (English)
Ethical Statement
The curation of large-scale symbolic datasets presents challenges regarding copyright and intellectual property. A best-effort attempt was made to filter PianoCoRe according to European Union public-domain regulations (works whose authors have been deceased for more than 70 years). However, achieving 100% accuracy across thousands of files from diverse sources is inherently difficult. For transparency, the annotated composer metadata is released alongside the dataset.
Licensing & Terms of Use
The dataset, original and processed files, metadata, and alignment annotations are published under a CC BY-NC-SA 4.0 license. The license respects the licenses used for the source datasets. The underlying MIDI transcriptions are provided strictly for non-commercial research and educational purposes. No formal institutional ethics approval or human participant consent was required for this study, as it involved the processing of publicly available MIDI data and does not involve human subjects.
Acknowledgments
PianoCoRe is built upon the invaluable contributions of the open music information retrieval community and existing open-source datasets. Acknowledgements and credits are given to the creators of the following source corpora:
| Dataset | Reference | Links | License |
|---|---|---|---|
| MAESTRO | Hawthorne et al. (2019) | Paper / Dataset | CC BY-NC-SA 4.0 |
| ASAP | Foscarin et al. (2020) | Paper / Dataset | CC BY-NC-SA 4.0 |
| (n)ASAP | Peter et al. (2023) | Paper / Dataset | CC BY-NC-SA 4.0 |
| ATEPP | Zhang et al. (2022) | Paper / Dataset | CC BY 4.0 |
| GiantMIDI-Piano | Kong et al. (2022) | Paper / Dataset | CC BY 4.0 |
| Aria-MIDI | Bradshaw and Colton (2025) | Paper / Dataset | CC BY-NC-SA 4.0 |
| PERiScoPe | Borovik et al. (2025) | Paper / Dataset | CC BY-NC-SA 4.0 |
| PDMX | Long et al. (2025) | Paper / Dataset | CC BY 4.0 |
Citation
If you use this dataset in your research, please cite:
Borovik, I. (2026). PianoCoRe: Combined and Refined Piano MIDI Dataset. Transactions of the International Society for Music Information Retrieval, 9(1), 144-163. DOI: 10.5334/tismir.333
@article{borovik2026pianocore,
title = {{PianoCoRe: Combined and Refined Piano MIDI Dataset}},
author = {Borovik, Ilya},
year = {2026},
journal = {Transactions of the International Society for Music Information Retrieval},
volume = {9},
number = {1},
pages = {144--163},
doi = {10.5334/tismir.333}
}
Files
metadata.csv
Files
(11.9 GB)
| Name | Size | |
|---|---|---|
|
md5:1399b8af8ffa633a4f476ed1decb6626
|
14.7 kB | Preview Download |
|
md5:873f55178fc7343bcadcc1ef97305b93
|
205.8 MB | Preview Download |
|
md5:b0dad3587110147eed1af1610bcd420f
|
5.2 GB | Preview Download |
|
md5:9d90bbd6d7af132ca1e71f0f1672040a
|
2.9 GB | Preview Download |
|
md5:76af62ba1e4570e0893a70574caba7c1
|
3.6 GB | Preview Download |
Additional details
Software
- Repository URL
- https://github.com/ilya16/PianoCoRe
- Programming language
- Python
- Development Status
- Active