def test_download_partial(httpserver):
    data_home = "tests/resources/mir_datasets/maestro_download"
    if os.path.exists(data_home):
        shutil.rmtree(data_home)

    httpserver.serve_content(
        open("tests/resources/download/maestro-v2.0.0.json", "r").read())
    remotes = {
        "all":
        download_utils.RemoteFileMetadata(
            filename="1-maestro-v2.0.0.json",
            url=httpserver.url,
            checksum=("d41d8cd98f00b204e9800998ecf8427e"),
            unpack_directories=["maestro-v2.0.0"],
        ),
        "midi":
        download_utils.RemoteFileMetadata(
            filename="2-maestro-v2.0.0.json",
            url=httpserver.url,
            checksum=("d41d8cd98f00b204e9800998ecf8427e"),
            unpack_directories=["maestro-v2.0.0"],
        ),
        "metadata":
        download_utils.RemoteFileMetadata(
            filename="3-maestro-v2.0.0.json",
            url=httpserver.url,
            checksum=("d41d8cd98f00b204e9800998ecf8427e"),
        ),
    }
    dataset = maestro.Dataset(data_home)
    dataset.remotes = remotes
    dataset.download(None, False, False)
    assert os.path.exists(os.path.join(data_home, "1-maestro-v2.0.0.json"))
    assert not os.path.exists(os.path.join(data_home, "2-maestro-v2.0.0.json"))
    assert not os.path.exists(os.path.join(data_home, "3-maestro-v2.0.0.json"))

    if os.path.exists(data_home):
        shutil.rmtree(data_home)
    dataset.download(["all", "midi"], False, False)
    assert os.path.exists(os.path.join(data_home, "1-maestro-v2.0.0.json"))
    assert not os.path.exists(os.path.join(data_home, "2-maestro-v2.0.0.json"))
    assert not os.path.exists(os.path.join(data_home, "3-maestro-v2.0.0.json"))

    if os.path.exists(data_home):
        shutil.rmtree(data_home)
    dataset.download(["metadata", "midi"], False, False)
    assert not os.path.exists(os.path.join(data_home, "1-maestro-v2.0.0.json"))
    assert os.path.exists(os.path.join(data_home, "2-maestro-v2.0.0.json"))
    assert not os.path.exists(os.path.join(data_home, "3-maestro-v2.0.0.json"))

    if os.path.exists(data_home):
        shutil.rmtree(data_home)
    dataset.download(["metadata"], False, False)
    assert not os.path.exists(os.path.join(data_home, "1-maestro-v2.0.0.json"))
    assert not os.path.exists(os.path.join(data_home, "2-maestro-v2.0.0.json"))
    assert os.path.exists(os.path.join(data_home, "3-maestro-v2.0.0.json"))
def test_track():
    default_trackid = "2018/MIDI-Unprocessed_Chamber3_MID--AUDIO_10_R3_2018_wav--1"
    data_home = "tests/resources/mir_datasets/maestro"
    dataset = maestro.Dataset(data_home)
    track = dataset.track(default_trackid)

    expected_attributes = {
        "track_id":
        "2018/MIDI-Unprocessed_Chamber3_MID--AUDIO_10_R3_2018_wav--1",
        "midi_path":
        os.path.join(
            data_home,
            "2018/MIDI-Unprocessed_Chamber3_MID--AUDIO_10_R3_2018_wav--1.midi",
        ),
        "audio_path":
        os.path.join(
            data_home,
            "2018/MIDI-Unprocessed_Chamber3_MID--AUDIO_10_R3_2018_wav--1.wav"),
        "canonical_composer":
        "Alban Berg",
        "canonical_title":
        "Sonata Op. 1",
        "year":
        2018,
        "duration":
        698.661160312,
        "split":
        "train",
    }

    expected_property_types = {
        "notes": annotations.NoteData,
        "midi": pretty_midi.PrettyMIDI,
        "audio": tuple,
    }

    assert track._track_paths == {
        "audio": [
            "2018/MIDI-Unprocessed_Chamber3_MID--AUDIO_10_R3_2018_wav--1.wav",
            "1694d8431f01eeb2a18444196550b99d",
        ],
        "midi": [
            "2018/MIDI-Unprocessed_Chamber3_MID--AUDIO_10_R3_2018_wav--1.midi",
            "4901b1578ee4fe8c1696e02f60924949",
        ],
    }

    run_track_tests(track, expected_attributes, expected_property_types)

    # test audio loading functions
    audio, sr = track.audio
    assert sr == 48000
    assert audio.shape == (48000 * 2, )
Beispiel #3
0
def test_load_metadata():
    data_home = "tests/resources/mir_datasets/maestro"
    dataset = maestro.Dataset(data_home)
    metadata = dataset._metadata
    default_trackid = "2018/MIDI-Unprocessed_Chamber3_MID--AUDIO_10_R3_2018_wav--1"

    assert metadata[default_trackid] == {
        "canonical_composer": "Alban Berg",
        "canonical_title": "Sonata Op. 1",
        "split": "train",
        "year": 2018,
        "midi_filename": "2018/MIDI-Unprocessed_Chamber3_MID--AUDIO_10_R3_2018_wav--1.midi",
        "audio_filename": "2018/MIDI-Unprocessed_Chamber3_MID--AUDIO_10_R3_2018_wav--1.wav",
        "duration": 698.661160312,
    }
Beispiel #4
0
def test_download(httpserver):
    data_home = "tests/resources/mir_datasets/maestro_download"
    if os.path.exists(data_home):
        shutil.rmtree(data_home)

    # download the full dataset
    httpserver.serve_content(
        open("tests/resources/download/maestro-v2.0.0.zip", "rb").read()
    )

    remotes = {
        "all": download_utils.RemoteFileMetadata(
            filename="maestro-v2.0.0.zip",
            url=httpserver.url,
            checksum=("625180ffa41cd9f2ab7252dd954b9e8a"),
            destination_dir=None,
        )
    }
    dataset = maestro.Dataset(data_home)
    dataset.remotes = remotes
    dataset.download(None, False, False)

    assert os.path.exists(data_home)
    assert not os.path.exists(os.path.join(data_home, "maestro-v2.0.0"))

    assert os.path.exists(os.path.join(data_home, "maestro-v2.0.0.json"))
    assert os.path.exists(
        os.path.join(
            data_home,
            "2004/MIDI-Unprocessed_XP_22_R2_2004_01_ORIG_MID--AUDIO_22_R2_2004_04_Track04_wav.wav",
        )
    )
    assert os.path.exists(
        os.path.join(
            data_home,
            "2004/MIDI-Unprocessed_XP_22_R2_2004_01_ORIG_MID--AUDIO_22_R2_2004_04_Track04_wav.midi",
        )
    )

    # test downloading again
    dataset.download(None, False, False)

    if os.path.exists(data_home):
        shutil.rmtree(data_home)

    # test downloading twice with cleanup
    dataset.download(None, False, True)
    dataset.download(None, False, False)

    if os.path.exists(data_home):
        shutil.rmtree(data_home)

    # test downloading twice with force overwrite
    dataset.download(None, False, False)
    dataset.download(None, True, False)

    if os.path.exists(data_home):
        shutil.rmtree(data_home)

    # test downloading twice with force overwrite and cleanup
    dataset.download(None, False, True)
    dataset.download(None, True, False)

    if os.path.exists(data_home):
        shutil.rmtree(data_home)

    # download the midi-only zip
    httpserver.serve_content(
        open("tests/resources/download/maestro-v2.0.0-midi.zip", "rb").read()
    )

    remotes = {
        "midi": download_utils.RemoteFileMetadata(
            filename="maestro-v2.0.0-midi.zip",
            url=httpserver.url,
            checksum=("c82283fff347ed2bd833693c09a9f01d"),
            destination_dir=None,
        )
    }
    dataset.remotes = remotes
    dataset.download(["midi"], False, False)

    assert os.path.exists(data_home)
    assert not os.path.exists(os.path.join(data_home, "maestro-v2.0.0"))

    assert os.path.exists(os.path.join(data_home, "maestro-v2.0.0.json"))
    assert not os.path.exists(
        os.path.join(
            data_home,
            "2004/MIDI-Unprocessed_XP_22_R2_2004_01_ORIG_MID--AUDIO_22_R2_2004_04_Track04_wav.wav",
        )
    )
    assert os.path.exists(
        os.path.join(
            data_home,
            "2004/MIDI-Unprocessed_XP_22_R2_2004_01_ORIG_MID--AUDIO_22_R2_2004_04_Track04_wav.midi",
        )
    )

    # test downloading again
    dataset.download(["midi"], False, False)

    if os.path.exists(data_home):
        shutil.rmtree(data_home)

    # download only the metadata
    httpserver.serve_content(
        open("tests/resources/download/maestro-v2.0.0.json", "rb").read()
    )

    remotes = {
        "metadata": download_utils.RemoteFileMetadata(
            filename="maestro-v2.0.0.json",
            url=httpserver.url,
            checksum=("d41d8cd98f00b204e9800998ecf8427e"),
            destination_dir=None,
        )
    }
    dataset.remotes = remotes
    dataset.download(["metadata"], False, False)

    assert os.path.exists(data_home)
    assert not os.path.exists(os.path.join(data_home, "maestro-v2.0.0"))

    assert os.path.exists(os.path.join(data_home, "maestro-v2.0.0.json"))
    assert not os.path.exists(
        os.path.join(
            data_home,
            "2004/MIDI-Unprocessed_XP_22_R2_2004_01_ORIG_MID--AUDIO_22_R2_2004_04_Track04_wav.wav",
        )
    )
    assert not os.path.exists(
        os.path.join(
            data_home,
            "2004/MIDI-Unprocessed_XP_22_R2_2004_01_ORIG_MID--AUDIO_22_R2_2004_04_Track04_wav.midi",
        )
    )

    # test downloading again
    dataset.download(["metadata"], False, False)

    if os.path.exists(data_home):
        shutil.rmtree(data_home)