Published April 27, 2026 | Version 1.0

PianoCoRe: Combined and Refined Piano MIDI Dataset

Authors/Creators

  • 1. ROR icon Skolkovo Institute of Science and Technology

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:

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:

  1. 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.
  2. PianoCoRe-1.0-raw-alignments.zip:
    • Raw score-performance alignments computed using parangonar and saved as compressed .npz files.
    • 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.
  3. PianoCoRe-1.0-refined.zip:
    • Refined score and performance MIDI files and note-level alignments saved as .npz files.
    • 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.

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 (train or test)
  • 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.npz score-performance alignment file within the raw/ 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.npz score-performance alignment file within the refined/ 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