요청과 맞지 않는 연습곡 30개를 철회함
CI / Frontend - type-check & test (push) Canceled after 0s

부르크뮐러와 슈만 연습곡 30개의 공개 등록과 MIDI 및 원본·생성 자료를 제거했다. 정확한 파일명만 제외 목록에 넣어 재시작 후 재등록을 막았다. 회원 업로드와 기존 기본 샘플은 유지했다.

운영 백업: /home/syskiller/piano/backups/bach-to-basics/20261009-withdraw-practice-30. 격리 테스트 5개 통과. 운영 재시작 뒤 HTTPS 목록과 DB 및 파일에서 철회곡 0개를 확인했다. 회원 업로드 2건과 기존 기본 샘플 7개 보존.
This commit is contained in:
이창현
2026-10-09 23:51:57 +09:00
parent 8298f5af26
commit 75ea54699d
101 changed files with 22 additions and 2165 deletions
+6
View File
@@ -34,6 +34,12 @@
- 운영 DB와 수정 대상 소스 및 기존 MIDI 파일의 백업은 `/home/syskiller/piano/backups/bach-to-basics/20261009-practice-30-intro-ending`에 있다. 백엔드만 다시 빌드했고 프런트엔드는 재시작하지 않았다. 공개 HTTPS 첫 화면과 비회원 목록의 새 곡 30개 및 각 파일의 MIDI 다운로드를 확인했다. 기존 회원 업로드 2건은 유지됐다.
- 30곡은 공개 도메인 또는 CC BY-SA로 표시된 고전 연습곡의 편곡이다. 특정 한국 쇼츠의 곡을 전사한 자료는 아니다. 실제 피아노 건반으로 각 곡의 연주감과 MIDI 입력을 확인하는 작업은 남아 있다.
## 2026-10-09 연습곡 30개 철회
- 위 30곡은 사용자 요청과 맞지 않아 운영 공개 목록과 MIDI 파일 및 생성 자료에서 모두 제거했다. 회원 업로드와 기존 기본 샘플 7개는 변경하지 않았다.
- 재시작 후에도 다시 등록되지 않도록 해당 30개 파일명을 제외 목록에 넣었다. Git 기록은 다시 쓰지 않고 삭제를 새 커밋으로 남긴다.
- 철회 직전 DB와 30개 MIDI 및 원본·생성 자료의 백업은 `/home/syskiller/piano/backups/bach-to-basics/20261009-withdraw-practice-30`에 있다. 백엔드만 다시 빌드했다. 재시작 후 HTTPS 공개 목록 0건과 DB 0건 및 MIDI 파일 0개를 확인했다. 회원 업로드 2건과 기존 기본 샘플 7개는 보존됐다.
## 2026-10-03 현재 상태
- Docker의 `piano-bach-frontend`와 `piano-bach-backend`로 운영한다.
+1 -1
View File
@@ -20,7 +20,7 @@ A browser-based piano practice tool. Drop in a **MIDI file**, a **MusicXML score
이 저장소는 원본 Bach to Basics를 바탕으로 `learn.itosm.co.kr`에서 운영하는 한국어판이다. 독립 회원과 곡·악보 보관함을 제공한다. 비회원은 공개 곡을 연주할 수 있으며 회원은 MIDI와 MusicXML과 MXL 및 PDF 악보를 올려 공개 범위와 회원 등급을 지정할 수 있다.
기본 공개 자료는 Mutopia Project의 MIDI와 그 원곡에서 만든 단계별 연습 편곡 및 도입부와 마무리를 갖춘 양손 연습곡 30개다. `엘리제를 위하여 WoO 59`는 난이도가 다른 버전을 같은 제목 아래에서 선택한다. 출처와 편곡 범위 및 권리 표시는 [기본 공개 샘플 출처](docs/THIRD_PARTY_SAMPLES.md)에 기록했다. 회원과 운영 구성은 [회원과 곡 보관함 운영 문서](docs/LIBRARY-AUTH-KO.md)를 따른다.
기본 공개 자료는 Mutopia Project의 MIDI와 그 원곡에서 만든 단계별 연습 편곡이다. `엘리제를 위하여 WoO 59`는 난이도가 다른 버전을 같은 제목 아래에서 선택한다. 출처와 편곡 범위 및 권리 표시는 [기본 공개 샘플 출처](docs/THIRD_PARTY_SAMPLES.md)에 기록했다. 회원과 운영 구성은 [회원과 곡 보관함 운영 문서](docs/LIBRARY-AUTH-KO.md)를 따른다.
[![Bach to Basics demo](docs/demo.gif)](https://raw.githubusercontent.com/gigliof/bach-to-basics/main/docs/demo.gif)
+4 -13
View File
@@ -180,17 +180,6 @@ SAMPLES = (
},
)
# 별도 목록은 원본 MIDI와 권리 표시를 함께 보관한다. 화면에 쓰는 필드만 기본 샘플에 합친다.
PRACTICE_COLLECTION = json.loads(
(Path(__file__).with_name("sample_midi") / "practice_collection.json").read_text(encoding="utf-8")
)
SAMPLES += tuple(
{key: item[key] for key in (
"storage_name", "title", "artist", "description", "difficulty", "genre", "arrangement", "tags"
)}
for item in PRACTICE_COLLECTION
)
LEGACY_SAMPLE_KEYS = (
"first-snow-melody.mid",
"first-snow-accompaniment.mid",
@@ -201,14 +190,16 @@ LEGACY_SAMPLE_KEYS = (
"evening-waltz-beginner.mid",
"sunrise-arpeggio-easy.mid",
"black-key-pentatonic-beginner.mid",
) + tuple(f"practice-burgmuller-{number:02}.mid" for number in range(1, 19)) + tuple(
f"practice-schumann-{number:02}.mid" for number in range(1, 13)
)
def _seed_samples() -> None:
source_root = Path(__file__).with_name("sample_midi")
with connect() as connection:
# 초기 시험용으로 만든 짧은 음형은 실제 공개 도메인 연습곡으로 교체한다.
# seed_key가 정확히 일치하는 기본 자료만 지우므로 회원 업로드에는 영향을 주지 않는다.
# 사용자 요청으로 철회한 기본 연습곡만 제거한다. 회원 업로드에는 영향을 주지 않는다.
# 재시작 후에도 다시 등록되지 않도록 철회한 파일 이름을 정확히 지정한다.
placeholders = ",".join("?" for _ in LEGACY_SAMPLE_KEYS)
connection.execute(
f"DELETE FROM midi_items WHERE owner_id IS NULL AND seed_key IN ({placeholders})",
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,722 +0,0 @@
[
{
"storage_name": "practice-burgmuller-01.mid",
"title": "부르크뮐러 25곡 1번 순진",
"artist": "요한 프리드리히 부르크뮐러",
"description": "La Candeur 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2013/01/12-202. 조판: Bas Wassink. Public Domain.",
"difficulty": "easy",
"genre": "낭만주의 연습곡",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"부르크뮐러",
"쉬움",
"공개 도메인"
],
"source_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-01/25EF-01.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-01/25EF-01.rdf",
"source_title": "La Candeur",
"source_id": "Mutopia-2013/01/12-202",
"maintainer": "Bas Wassink",
"license": "Public Domain",
"duration_seconds": 69
},
{
"storage_name": "practice-burgmuller-02.mid",
"title": "부르크뮐러 25곡 2번 아라베스크",
"artist": "요한 프리드리히 부르크뮐러",
"description": "l'Arabesque 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2013/01/12-203. 조판: Bas Wassink. Public Domain.",
"difficulty": "beginner",
"genre": "낭만주의 연습곡",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"부르크뮐러",
"입문",
"공개 도메인"
],
"source_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-02/25EF-02.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-02/25EF-02.rdf",
"source_title": "l'Arabesque",
"source_id": "Mutopia-2013/01/12-203",
"maintainer": "Bas Wassink",
"license": "Public Domain",
"duration_seconds": 69
},
{
"storage_name": "practice-burgmuller-03.mid",
"title": "부르크뮐러 25곡 3번 목가",
"artist": "요한 프리드리히 부르크뮐러",
"description": "La Pastorale 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2013/01/12-218. 조판: Bas Wassink. Public Domain.",
"difficulty": "beginner",
"genre": "낭만주의 연습곡",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"부르크뮐러",
"입문",
"공개 도메인"
],
"source_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-03/25EF-03.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-03/25EF-03.rdf",
"source_title": "La Pastorale",
"source_id": "Mutopia-2013/01/12-218",
"maintainer": "Bas Wassink",
"license": "Public Domain",
"duration_seconds": 69
},
{
"storage_name": "practice-burgmuller-04.mid",
"title": "부르크뮐러 25곡 4번 작은 모임",
"artist": "요한 프리드리히 부르크뮐러",
"description": "La Petite Réunion 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2013/01/12-219. 조판: Bas Wassink. Public Domain.",
"difficulty": "easy",
"genre": "낭만주의 연습곡",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"부르크뮐러",
"쉬움",
"공개 도메인"
],
"source_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-04/25EF-04.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-04/25EF-04.rdf",
"source_title": "La Petite Réunion",
"source_id": "Mutopia-2013/01/12-219",
"maintainer": "Bas Wassink",
"license": "Public Domain",
"duration_seconds": 69
},
{
"storage_name": "practice-burgmuller-05.mid",
"title": "부르크뮐러 25곡 5번 순수",
"artist": "요한 프리드리히 부르크뮐러",
"description": "Innocence 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2013/01/12-214. 조판: Bas Wassink. Public Domain.",
"difficulty": "beginner",
"genre": "낭만주의 연습곡",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"부르크뮐러",
"입문",
"공개 도메인"
],
"source_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-05/25EF-05.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-05/25EF-05.rdf",
"source_title": "Innocence",
"source_id": "Mutopia-2013/01/12-214",
"maintainer": "Bas Wassink",
"license": "Public Domain",
"duration_seconds": 69
},
{
"storage_name": "practice-burgmuller-06.mid",
"title": "부르크뮐러 25곡 6번 진보",
"artist": "요한 프리드리히 부르크뮐러",
"description": "Progrès 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2013/01/12-215. 조판: Bas Wassink. Public Domain.",
"difficulty": "beginner",
"genre": "낭만주의 연습곡",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"부르크뮐러",
"입문",
"공개 도메인"
],
"source_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-06/25EF-06.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-06/25EF-06.rdf",
"source_title": "Progrès",
"source_id": "Mutopia-2013/01/12-215",
"maintainer": "Bas Wassink",
"license": "Public Domain",
"duration_seconds": 69
},
{
"storage_name": "practice-burgmuller-07.mid",
"title": "부르크뮐러 25곡 7번 맑은 시냇물",
"artist": "요한 프리드리히 부르크뮐러",
"description": "Le Courant Limpide 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2013/01/12-216. 조판: Bas Wassink. Public Domain.",
"difficulty": "easy",
"genre": "낭만주의 연습곡",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"부르크뮐러",
"쉬움",
"공개 도메인"
],
"source_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-07/25EF-07.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-07/25EF-07.rdf",
"source_title": "Le Courant Limpide",
"source_id": "Mutopia-2013/01/12-216",
"maintainer": "Bas Wassink",
"license": "Public Domain",
"duration_seconds": 69
},
{
"storage_name": "practice-burgmuller-08.mid",
"title": "부르크뮐러 25곡 8번 우아함",
"artist": "요한 프리드리히 부르크뮐러",
"description": "La Gracieuse 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2013/01/12-217. 조판: Bas Wassink. Public Domain.",
"difficulty": "beginner",
"genre": "낭만주의 연습곡",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"부르크뮐러",
"입문",
"공개 도메인"
],
"source_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-08/25EF-08.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-08/25EF-08.rdf",
"source_title": "La Gracieuse",
"source_id": "Mutopia-2013/01/12-217",
"maintainer": "Bas Wassink",
"license": "Public Domain",
"duration_seconds": 69
},
{
"storage_name": "practice-burgmuller-09.mid",
"title": "부르크뮐러 25곡 9번 사냥",
"artist": "요한 프리드리히 부르크뮐러",
"description": "La Chasse 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2013/01/12-220. 조판: Bas Wassink. Public Domain.",
"difficulty": "easy",
"genre": "낭만주의 연습곡",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"부르크뮐러",
"쉬움",
"공개 도메인"
],
"source_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-09/25EF-09.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-09/25EF-09.rdf",
"source_title": "La Chasse",
"source_id": "Mutopia-2013/01/12-220",
"maintainer": "Bas Wassink",
"license": "Public Domain",
"duration_seconds": 69
},
{
"storage_name": "practice-burgmuller-10.mid",
"title": "부르크뮐러 25곡 10번 여린 꽃",
"artist": "요한 프리드리히 부르크뮐러",
"description": "Tendre Fleur 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2013/01/12-221. 조판: Bas Wassink. Public Domain.",
"difficulty": "easy",
"genre": "낭만주의 연습곡",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"부르크뮐러",
"쉬움",
"공개 도메인"
],
"source_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-10/25EF-10.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-10/25EF-10.rdf",
"source_title": "Tendre Fleur",
"source_id": "Mutopia-2013/01/12-221",
"maintainer": "Bas Wassink",
"license": "Public Domain",
"duration_seconds": 69
},
{
"storage_name": "practice-burgmuller-11.mid",
"title": "부르크뮐러 25곡 11번 할미새",
"artist": "요한 프리드리히 부르크뮐러",
"description": "La Bergeronnette 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2013/01/12-222. 조판: Bas Wassink. Public Domain.",
"difficulty": "beginner",
"genre": "낭만주의 연습곡",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"부르크뮐러",
"입문",
"공개 도메인"
],
"source_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-11/25EF-11.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-11/25EF-11.rdf",
"source_title": "La Bergeronnette",
"source_id": "Mutopia-2013/01/12-222",
"maintainer": "Bas Wassink",
"license": "Public Domain",
"duration_seconds": 69
},
{
"storage_name": "practice-burgmuller-12.mid",
"title": "부르크뮐러 25곡 12번 이별",
"artist": "요한 프리드리히 부르크뮐러",
"description": "L'Adieu 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2013/01/12-223. 조판: Bas Wassink. Public Domain.",
"difficulty": "intermediate",
"genre": "낭만주의 연습곡",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"부르크뮐러",
"중급",
"공개 도메인"
],
"source_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-12/25EF-12.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-12/25EF-12.rdf",
"source_title": "L'Adieu",
"source_id": "Mutopia-2013/01/12-223",
"maintainer": "Bas Wassink",
"license": "Public Domain",
"duration_seconds": 69
},
{
"storage_name": "practice-burgmuller-13.mid",
"title": "부르크뮐러 25곡 13번 위안",
"artist": "요한 프리드리히 부르크뮐러",
"description": "Consolation 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2013/01/12-224. 조판: Bas Wassink. Public Domain.",
"difficulty": "easy",
"genre": "낭만주의 연습곡",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"부르크뮐러",
"쉬움",
"공개 도메인"
],
"source_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-13/25EF-13.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-13/25EF-13.rdf",
"source_title": "Consolation",
"source_id": "Mutopia-2013/01/12-224",
"maintainer": "Bas Wassink",
"license": "Public Domain",
"duration_seconds": 69
},
{
"storage_name": "practice-burgmuller-14.mid",
"title": "부르크뮐러 25곡 14번 슈타이어 춤",
"artist": "요한 프리드리히 부르크뮐러",
"description": "La Styrienne 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2013/01/12-225. 조판: Bas Wassink. Public Domain.",
"difficulty": "easy",
"genre": "낭만주의 연습곡",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"부르크뮐러",
"쉬움",
"공개 도메인"
],
"source_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-14/25EF-14.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-14/25EF-14.rdf",
"source_title": "La Styrienne",
"source_id": "Mutopia-2013/01/12-225",
"maintainer": "Bas Wassink",
"license": "Public Domain",
"duration_seconds": 69
},
{
"storage_name": "practice-burgmuller-15.mid",
"title": "부르크뮐러 25곡 15번 발라드",
"artist": "요한 프리드리히 부르크뮐러",
"description": "Ballade 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2013/01/12-227. 조판: Bas Wassink. Public Domain.",
"difficulty": "easy",
"genre": "낭만주의 연습곡",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"부르크뮐러",
"쉬움",
"공개 도메인"
],
"source_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-15/25EF-15.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-15/25EF-15.rdf",
"source_title": "Ballade",
"source_id": "Mutopia-2013/01/12-227",
"maintainer": "Bas Wassink",
"license": "Public Domain",
"duration_seconds": 93.8
},
{
"storage_name": "practice-burgmuller-16.mid",
"title": "부르크뮐러 25곡 16번 작은 탄식",
"artist": "요한 프리드리히 부르크뮐러",
"description": "Douce Plainte 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2013/01/12-228. 조판: Bas Wassink. Public Domain.",
"difficulty": "beginner",
"genre": "낭만주의 연습곡",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"부르크뮐러",
"입문",
"공개 도메인"
],
"source_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-16/25EF-16.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-16/25EF-16.rdf",
"source_title": "Douce Plainte",
"source_id": "Mutopia-2013/01/12-228",
"maintainer": "Bas Wassink",
"license": "Public Domain",
"duration_seconds": 69
},
{
"storage_name": "practice-burgmuller-17.mid",
"title": "부르크뮐러 25곡 17번 수다쟁이",
"artist": "요한 프리드리히 부르크뮐러",
"description": "La Babillarde 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2013/01/12-229. 조판: Bas Wassink. Public Domain.",
"difficulty": "beginner",
"genre": "낭만주의 연습곡",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"부르크뮐러",
"입문",
"공개 도메인"
],
"source_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-17/25EF-17.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-17/25EF-17.rdf",
"source_title": "La Babillarde",
"source_id": "Mutopia-2013/01/12-229",
"maintainer": "Bas Wassink",
"license": "Public Domain",
"duration_seconds": 69
},
{
"storage_name": "practice-burgmuller-18.mid",
"title": "부르크뮐러 25곡 18번 불안",
"artist": "요한 프리드리히 부르크뮐러",
"description": "Inquiétude 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2013/01/12-230. 조판: Bas Wassink. Public Domain.",
"difficulty": "easy",
"genre": "낭만주의 연습곡",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"부르크뮐러",
"쉬움",
"공개 도메인"
],
"source_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-18/25EF-18.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-18/25EF-18.rdf",
"source_title": "Inquiétude",
"source_id": "Mutopia-2013/01/12-230",
"maintainer": "Bas Wassink",
"license": "Public Domain",
"duration_seconds": 69
},
{
"storage_name": "practice-schumann-01.mid",
"title": "슈만 어린이를 위한 앨범 1번 멜로디",
"artist": "로베르트 슈만",
"description": "Album pour la jeunesse - 1.Mélodie 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2007/02/11-647. 조판: Philippe Hézaine. Creative Commons Attribution-ShareAlike 2.5 동일 조건 편곡.",
"difficulty": "beginner",
"genre": "낭만주의 소품",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"슈만",
"입문",
"CC BY-SA"
],
"source_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-01-melodie/schumann-op68-01-melodie.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-01-melodie/schumann-op68-01-melodie.rdf",
"source_title": "Album pour la jeunesse - 1.Mélodie",
"source_id": "Mutopia-2007/02/11-647",
"maintainer": "Philippe Hézaine",
"license": "Creative Commons Attribution-ShareAlike 2.5",
"duration_seconds": 107
},
{
"storage_name": "practice-schumann-02.mid",
"title": "슈만 어린이를 위한 앨범 2번 군대 행진곡",
"artist": "로베르트 슈만",
"description": "Album pour la jeunesse - 2.Marche militaire 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2007/02/11-650. 조판: Philippe Hézaine. Creative Commons Attribution-ShareAlike 2.5 동일 조건 편곡.",
"difficulty": "beginner",
"genre": "낭만주의 소품",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"슈만",
"입문",
"CC BY-SA"
],
"source_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-02-marche-militaire/schumann-op68-02-marche-militaire.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-02-marche-militaire/schumann-op68-02-marche-militaire.rdf",
"source_title": "Album pour la jeunesse - 2.Marche militaire",
"source_id": "Mutopia-2007/02/11-650",
"maintainer": "Philippe Hézaine",
"license": "Creative Commons Attribution-ShareAlike 2.5",
"duration_seconds": 69
},
{
"storage_name": "practice-schumann-03.mid",
"title": "슈만 어린이를 위한 앨범 3번 흥얼거리는 노래",
"artist": "로베르트 슈만",
"description": "Album pour la jeunesse - 3.Chanson fredonnée 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2011/09/18-651. 조판: Philippe Hézaine. Creative Commons Attribution-ShareAlike 3.0 동일 조건 편곡.",
"difficulty": "beginner",
"genre": "낭만주의 소품",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"슈만",
"입문",
"CC BY-SA"
],
"source_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-03-chanson-fredonnee/schumann-op68-03-chanson-fredonnee.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-03-chanson-fredonnee/schumann-op68-03-chanson-fredonnee.rdf",
"source_title": "Album pour la jeunesse - 3.Chanson fredonnée",
"source_id": "Mutopia-2011/09/18-651",
"maintainer": "Philippe Hézaine",
"license": "Creative Commons Attribution-ShareAlike 3.0",
"duration_seconds": 106
},
{
"storage_name": "practice-schumann-04.mid",
"title": "슈만 어린이를 위한 앨범 4번 코랄",
"artist": "로베르트 슈만",
"description": "Album pour la jeunesse - 4.Un choral 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2007/02/11-782. 조판: Philippe Hézaine. Creative Commons Attribution-ShareAlike 2.5 동일 조건 편곡.",
"difficulty": "beginner",
"genre": "낭만주의 소품",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"슈만",
"입문",
"CC BY-SA"
],
"source_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-04-choral/schumann-op68-04-choral.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-04-choral/schumann-op68-04-choral.rdf",
"source_title": "Album pour la jeunesse - 4.Un choral",
"source_id": "Mutopia-2007/02/11-782",
"maintainer": "Philippe Hézaine",
"license": "Creative Commons Attribution-ShareAlike 2.5",
"duration_seconds": 104.7
},
{
"storage_name": "practice-schumann-05.mid",
"title": "슈만 어린이를 위한 앨범 5번 작은 소품",
"artist": "로베르트 슈만",
"description": "Album pour la jeunesse - 5.Petite pièce 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2007/02/11-653. 조판: Philippe Hézaine. Creative Commons Attribution-ShareAlike 2.5 동일 조건 편곡.",
"difficulty": "beginner",
"genre": "낭만주의 소품",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"슈만",
"입문",
"CC BY-SA"
],
"source_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-05-petite-piece/schumann-op68-05-petite-piece.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-05-petite-piece/schumann-op68-05-petite-piece.rdf",
"source_title": "Album pour la jeunesse - 5.Petite pièce",
"source_id": "Mutopia-2007/02/11-653",
"maintainer": "Philippe Hézaine",
"license": "Creative Commons Attribution-ShareAlike 2.5",
"duration_seconds": 96.6
},
{
"storage_name": "practice-schumann-06.mid",
"title": "슈만 어린이를 위한 앨범 6번 가엾은 고아",
"artist": "로베르트 슈만",
"description": "Album pour la jeunesse - 6.Pauvre orpheline 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2007/02/11-687. 조판: Philippe Hézaine. Creative Commons Attribution-ShareAlike 2.5 동일 조건 편곡.",
"difficulty": "beginner",
"genre": "낭만주의 소품",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"슈만",
"입문",
"CC BY-SA"
],
"source_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-06-pauvre-orpheline/schumann-op68-06-pauvre-orpheline.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-06-pauvre-orpheline/schumann-op68-06-pauvre-orpheline.rdf",
"source_title": "Album pour la jeunesse - 6.Pauvre orpheline",
"source_id": "Mutopia-2007/02/11-687",
"maintainer": "Philippe Hézaine",
"license": "Creative Commons Attribution-ShareAlike 2.5",
"duration_seconds": 109.8
},
{
"storage_name": "practice-schumann-07.mid",
"title": "슈만 어린이를 위한 앨범 7번 사냥꾼의 노래",
"artist": "로베르트 슈만",
"description": "Album pour la jeunesse - 7.Chanson du chasseur 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2007/05/20-691. 조판: Philippe Hézaine. Creative Commons Attribution-ShareAlike 3.0 동일 조건 편곡.",
"difficulty": "easy",
"genre": "낭만주의 소품",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"슈만",
"쉬움",
"CC BY-SA"
],
"source_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-07-chanson-du-chasseur/schumann-op68-07-chanson-du-chasseur.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-07-chanson-du-chasseur/schumann-op68-07-chanson-du-chasseur.rdf",
"source_title": "Album pour la jeunesse - 7.Chanson du chasseur",
"source_id": "Mutopia-2007/05/20-691",
"maintainer": "Philippe Hézaine",
"license": "Creative Commons Attribution-ShareAlike 3.0",
"duration_seconds": 82.8
},
{
"storage_name": "practice-schumann-08.mid",
"title": "슈만 어린이를 위한 앨범 8번 거친 기수",
"artist": "로베르트 슈만",
"description": "Album pour la jeunesse - 8.Le cavalier sauvage 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2007/02/11-655. 조판: Philippe Hézaine. Creative Commons Attribution-ShareAlike 2.5 동일 조건 편곡.",
"difficulty": "easy",
"genre": "낭만주의 소품",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"슈만",
"쉬움",
"CC BY-SA"
],
"source_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-08-cavalier-sauvage/schumann-op68-08-cavalier-sauvage.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-08-cavalier-sauvage/schumann-op68-08-cavalier-sauvage.rdf",
"source_title": "Album pour la jeunesse - 8.Le cavalier sauvage",
"source_id": "Mutopia-2007/02/11-655",
"maintainer": "Philippe Hézaine",
"license": "Creative Commons Attribution-ShareAlike 2.5",
"duration_seconds": 69
},
{
"storage_name": "practice-schumann-09.mid",
"title": "슈만 어린이를 위한 앨범 9번 민요",
"artist": "로베르트 슈만",
"description": "Album pour la jeunesse - 9.Chanson populaire 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2007/02/11-675. 조판: Philippe Hézaine. Creative Commons Attribution-ShareAlike 2.5 동일 조건 편곡.",
"difficulty": "beginner",
"genre": "낭만주의 소품",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"슈만",
"입문",
"CC BY-SA"
],
"source_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-09-chanson-populaire/schumann-op68-09-chanson-populaire.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-09-chanson-populaire/schumann-op68-09-chanson-populaire.rdf",
"source_title": "Album pour la jeunesse - 9.Chanson populaire",
"source_id": "Mutopia-2007/02/11-675",
"maintainer": "Philippe Hézaine",
"license": "Creative Commons Attribution-ShareAlike 2.5",
"duration_seconds": 93.1
},
{
"storage_name": "practice-schumann-10.mid",
"title": "슈만 어린이를 위한 앨범 10번 즐거운 농부",
"artist": "로베르트 슈만",
"description": "Album pour la jeunesse - 10.Le gai laboureur 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2007/02/11-659. 조판: Philippe Hézaine. Creative Commons Attribution-ShareAlike 2.5 동일 조건 편곡.",
"difficulty": "beginner",
"genre": "낭만주의 소품",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"슈만",
"입문",
"CC BY-SA"
],
"source_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-10-gai-laboureur/schumann-op68-10-gai-laboureur.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-10-gai-laboureur/schumann-op68-10-gai-laboureur.rdf",
"source_title": "Album pour la jeunesse - 10.Le gai laboureur",
"source_id": "Mutopia-2007/02/11-659",
"maintainer": "Philippe Hézaine",
"license": "Creative Commons Attribution-ShareAlike 2.5",
"duration_seconds": 69
},
{
"storage_name": "practice-schumann-11.mid",
"title": "슈만 어린이를 위한 앨범 11번 시칠리아 춤곡",
"artist": "로베르트 슈만",
"description": "Album pour la jeunesse - 11.Sicilienne 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2007/02/11-783. 조판: Philippe Hézaine. Creative Commons Attribution-ShareAlike 2.5 동일 조건 편곡.",
"difficulty": "easy",
"genre": "낭만주의 소품",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"슈만",
"쉬움",
"CC BY-SA"
],
"source_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-11-sicilienne/schumann-op68-11-sicilienne.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-11-sicilienne/schumann-op68-11-sicilienne.rdf",
"source_title": "Album pour la jeunesse - 11.Sicilienne",
"source_id": "Mutopia-2007/02/11-783",
"maintainer": "Philippe Hézaine",
"license": "Creative Commons Attribution-ShareAlike 2.5",
"duration_seconds": 133.6
},
{
"storage_name": "practice-schumann-12.mid",
"title": "슈만 어린이를 위한 앨범 12번 무서운 아저씨",
"artist": "로베르트 슈만",
"description": "Album pour la jeunesse - 12.Le Père Fouettard 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project Mutopia-2007/02/11-784. 조판: Philippe Hézaine. Creative Commons Attribution-ShareAlike 2.5 동일 조건 편곡.",
"difficulty": "intermediate",
"genre": "낭만주의 소품",
"arrangement": "piano_solo",
"tags": [
"양손",
"도입부",
"마무리",
"슈만",
"중급",
"CC BY-SA"
],
"source_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-12-Pere-Fouettard/schumann-op68-12-Pere-Fouettard.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-12-Pere-Fouettard/schumann-op68-12-Pere-Fouettard.rdf",
"source_title": "Album pour la jeunesse - 12.Le Père Fouettard",
"source_id": "Mutopia-2007/02/11-784",
"maintainer": "Philippe Hézaine",
"license": "Creative Commons Attribution-ShareAlike 2.5",
"duration_seconds": 117.7
}
]
+3 -7
View File
@@ -57,7 +57,7 @@ class LibraryDatabaseTest(unittest.TestCase):
self.assertNotIn("오른손", sample["tags"])
self.assertNotIn("쉬운 반주", sample["tags"])
def test_practice_collection_is_seeded_as_public(self) -> None:
def test_withdrawn_practice_collection_is_not_seeded(self) -> None:
names = {f"practice-burgmuller-{number:02}.mid" for number in range(1, 19)}
names.update(f"practice-schumann-{number:02}.mid" for number in range(1, 13))
with self.db.connect() as connection:
@@ -65,12 +65,8 @@ class LibraryDatabaseTest(unittest.TestCase):
"SELECT seed_key, visibility, min_tier, owner_id FROM midi_items WHERE seed_key IS NOT NULL"
).fetchall()
matching = {row["seed_key"]: row for row in rows if row["seed_key"] in names}
self.assertEqual(set(matching), names)
for name, row in matching.items():
self.assertEqual(row["visibility"], "public")
self.assertEqual(row["min_tier"], 0)
self.assertIsNone(row["owner_id"])
self.assertTrue(Path(self.temp.name, "midi", name).is_file())
self.assertFalse(matching)
self.assertFalse(any(Path(self.temp.name, "midi", name).exists() for name in names))
self.assertFalse(any(row["seed_key"] in self.db.LEGACY_SAMPLE_KEYS for row in rows))
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>La Candeur</mp:title>
<mp:composer>BurgmullerJFF</mp:composer>
<mp:opus>Opus 100.</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>19th Century</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre>Allegro moderato</mp:metre>
<mp:arranger/>
<mp:source>Collection Litolff, 19th Century</mp:source>
<mp:licence>Public Domain</mp:licence>
<mp:lyFile>25EF-01.ly</mp:lyFile>
<mp:midFile>25EF-01.mid</mp:midFile>
<mp:psFileA4>25EF-01-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>25EF-01-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>25EF-01-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>25EF-01-let.pdf</mp:pdfFileLet>
<mp:pngFile>25EF-01-preview.png</mp:pngFile>
<mp:pngHeight>84</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2013/01/12-202</mp:id>
<mp:maintainer>Bas Wassink</mp:maintainer>
<mp:maintainerEmail>basvanlola@zonnet.com</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.16.1</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>l'Arabesque</mp:title>
<mp:composer>BurgmullerJFF</mp:composer>
<mp:opus>Opus 100.</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>19th Century</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre>Allegro scherzando</mp:metre>
<mp:arranger/>
<mp:source>Collection Litolff, 19th Century</mp:source>
<mp:licence>Public Domain</mp:licence>
<mp:lyFile>25EF-02.ly</mp:lyFile>
<mp:midFile>25EF-02.mid</mp:midFile>
<mp:psFileA4>25EF-02-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>25EF-02-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>25EF-02-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>25EF-02-let.pdf</mp:pdfFileLet>
<mp:pngFile>25EF-02-preview.png</mp:pngFile>
<mp:pngHeight>94</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2013/01/12-203</mp:id>
<mp:maintainer>Bas Wassink</mp:maintainer>
<mp:maintainerEmail>basvanlola@zonnet.com</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.16.1</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>La Pastorale</mp:title>
<mp:composer>BurgmullerJFF</mp:composer>
<mp:opus>Opus 100.</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>19th Century</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre>Andantino</mp:metre>
<mp:arranger/>
<mp:source>Collection Litolff, 19th Century</mp:source>
<mp:licence>Public Domain</mp:licence>
<mp:lyFile>25EF-03.ly</mp:lyFile>
<mp:midFile>25EF-03.mid</mp:midFile>
<mp:psFileA4>25EF-03-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>25EF-03-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>25EF-03-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>25EF-03-let.pdf</mp:pdfFileLet>
<mp:pngFile>25EF-03-preview.png</mp:pngFile>
<mp:pngHeight>101</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2013/01/12-218</mp:id>
<mp:maintainer>Bas Wassink</mp:maintainer>
<mp:maintainerEmail>basvanlola@zonnet.com</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.16.1</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>La Petite Réunion</mp:title>
<mp:composer>BurgmullerJFF</mp:composer>
<mp:opus>Opus 100.</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>19th Century</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre>Allegro non troppo</mp:metre>
<mp:arranger/>
<mp:source>Collection Litolff, 19th Century</mp:source>
<mp:licence>Public Domain</mp:licence>
<mp:lyFile>25EF-04.ly</mp:lyFile>
<mp:midFile>25EF-04.mid</mp:midFile>
<mp:psFileA4>25EF-04-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>25EF-04-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>25EF-04-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>25EF-04-let.pdf</mp:pdfFileLet>
<mp:pngFile>25EF-04-preview.png</mp:pngFile>
<mp:pngHeight>88</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2013/01/12-219</mp:id>
<mp:maintainer>Bas Wassink</mp:maintainer>
<mp:maintainerEmail>basvanlola@zonnet.com</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.16.1</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Innocence</mp:title>
<mp:composer>BurgmullerJFF</mp:composer>
<mp:opus>Opus 100.</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>19th Century</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre>Moderato</mp:metre>
<mp:arranger/>
<mp:source>Collection Litolff, 19th Century</mp:source>
<mp:licence>Public Domain</mp:licence>
<mp:lyFile>25EF-05.ly</mp:lyFile>
<mp:midFile>25EF-05.mid</mp:midFile>
<mp:psFileA4>25EF-05-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>25EF-05-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>25EF-05-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>25EF-05-let.pdf</mp:pdfFileLet>
<mp:pngFile>25EF-05-preview.png</mp:pngFile>
<mp:pngHeight>93</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2013/01/12-214</mp:id>
<mp:maintainer>Bas Wassink</mp:maintainer>
<mp:maintainerEmail>basvanlola@zonnet.com</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.16.1</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Progrès</mp:title>
<mp:composer>BurgmullerJFF</mp:composer>
<mp:opus>Opus 100.</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>19th Century</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre>Allegro</mp:metre>
<mp:arranger/>
<mp:source>Collection Litolff, 19th Century</mp:source>
<mp:licence>Public Domain</mp:licence>
<mp:lyFile>25EF-06.ly</mp:lyFile>
<mp:midFile>25EF-06.mid</mp:midFile>
<mp:psFileA4>25EF-06-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>25EF-06-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>25EF-06-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>25EF-06-let.pdf</mp:pdfFileLet>
<mp:pngFile>25EF-06-preview.png</mp:pngFile>
<mp:pngHeight>90</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2013/01/12-215</mp:id>
<mp:maintainer>Bas Wassink</mp:maintainer>
<mp:maintainerEmail>basvanlola@zonnet.com</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.16.1</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Le Courant Limpide</mp:title>
<mp:composer>BurgmullerJFF</mp:composer>
<mp:opus>Opus 100.</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>19th Century</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre>Allegro vivace</mp:metre>
<mp:arranger/>
<mp:source>Collection Litolff, 19th Century</mp:source>
<mp:licence>Public Domain</mp:licence>
<mp:lyFile>25EF-07.ly</mp:lyFile>
<mp:midFile>25EF-07.mid</mp:midFile>
<mp:psFileA4>25EF-07-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>25EF-07-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>25EF-07-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>25EF-07-let.pdf</mp:pdfFileLet>
<mp:pngFile>25EF-07-preview.png</mp:pngFile>
<mp:pngHeight>93</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2013/01/12-216</mp:id>
<mp:maintainer>Bas Wassink</mp:maintainer>
<mp:maintainerEmail>basvanlola@zonnet.com</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.16.1</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>La Gracieuse</mp:title>
<mp:composer>BurgmullerJFF</mp:composer>
<mp:opus>Opus 100.</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>19th Century</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre>Moderato</mp:metre>
<mp:arranger/>
<mp:source>Collection Litolff, 19th Century</mp:source>
<mp:licence>Public Domain</mp:licence>
<mp:lyFile>25EF-08.ly</mp:lyFile>
<mp:midFile>25EF-08.mid</mp:midFile>
<mp:psFileA4>25EF-08-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>25EF-08-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>25EF-08-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>25EF-08-let.pdf</mp:pdfFileLet>
<mp:pngFile>25EF-08-preview.png</mp:pngFile>
<mp:pngHeight>101</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2013/01/12-217</mp:id>
<mp:maintainer>Bas Wassink</mp:maintainer>
<mp:maintainerEmail>basvanlola@zonnet.com</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.16.1</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>La Chasse</mp:title>
<mp:composer>BurgmullerJFF</mp:composer>
<mp:opus>Opus 100.</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>19th Century</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre>Allegro vivace</mp:metre>
<mp:arranger/>
<mp:source>Collection Litolff, 19th Century</mp:source>
<mp:licence>Public Domain</mp:licence>
<mp:lyFile>25EF-09.ly</mp:lyFile>
<mp:midFile>25EF-09.mid</mp:midFile>
<mp:psFileA4>25EF-09-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>25EF-09-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>25EF-09-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>25EF-09-let.pdf</mp:pdfFileLet>
<mp:pngFile>25EF-09-preview.png</mp:pngFile>
<mp:pngHeight>104</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2013/01/12-220</mp:id>
<mp:maintainer>Bas Wassink</mp:maintainer>
<mp:maintainerEmail>basvanlola@zonnet.com</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.16.1</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Tendre Fleur</mp:title>
<mp:composer>BurgmullerJFF</mp:composer>
<mp:opus>Opus 100.</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>19th Century</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre>Moderato</mp:metre>
<mp:arranger/>
<mp:source>Collection Litolff, 19th Century</mp:source>
<mp:licence>Public Domain</mp:licence>
<mp:lyFile>25EF-10.ly</mp:lyFile>
<mp:midFile>25EF-10.mid</mp:midFile>
<mp:psFileA4>25EF-10-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>25EF-10-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>25EF-10-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>25EF-10-let.pdf</mp:pdfFileLet>
<mp:pngFile>25EF-10-preview.png</mp:pngFile>
<mp:pngHeight>101</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2013/01/12-221</mp:id>
<mp:maintainer>Bas Wassink</mp:maintainer>
<mp:maintainerEmail>basvanlola@zonnet.com</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.16.1</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>La Bergeronnette</mp:title>
<mp:composer>BurgmullerJFF</mp:composer>
<mp:opus>Opus 100.</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>19th Century</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre>Allegretto</mp:metre>
<mp:arranger/>
<mp:source>Collection Litolff, 19th Century</mp:source>
<mp:licence>Public Domain</mp:licence>
<mp:lyFile>25EF-11.ly</mp:lyFile>
<mp:midFile>25EF-11.mid</mp:midFile>
<mp:psFileA4>25EF-11-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>25EF-11-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>25EF-11-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>25EF-11-let.pdf</mp:pdfFileLet>
<mp:pngFile>25EF-11-preview.png</mp:pngFile>
<mp:pngHeight>106</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2013/01/12-222</mp:id>
<mp:maintainer>Bas Wassink</mp:maintainer>
<mp:maintainerEmail>basvanlola@zonnet.com</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.16.1</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>L'Adieu</mp:title>
<mp:composer>BurgmullerJFF</mp:composer>
<mp:opus>Opus 100.</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>19th Century</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre>Allegro molto agitato</mp:metre>
<mp:arranger/>
<mp:source>Collection Litolff, 19th Century</mp:source>
<mp:licence>Public Domain</mp:licence>
<mp:lyFile>25EF-12.ly</mp:lyFile>
<mp:midFile>25EF-12.mid</mp:midFile>
<mp:psFileA4>25EF-12-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>25EF-12-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>25EF-12-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>25EF-12-let.pdf</mp:pdfFileLet>
<mp:pngFile>25EF-12-preview.png</mp:pngFile>
<mp:pngHeight>90</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2013/01/12-223</mp:id>
<mp:maintainer>Bas Wassink</mp:maintainer>
<mp:maintainerEmail>basvanlola@zonnet.com</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.16.1</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Consolation</mp:title>
<mp:composer>BurgmullerJFF</mp:composer>
<mp:opus>Opus 100.</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>19th Century</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre>Allegro moderato</mp:metre>
<mp:arranger/>
<mp:source>Collection Litolff, 19th Century</mp:source>
<mp:licence>Public Domain</mp:licence>
<mp:lyFile>25EF-13.ly</mp:lyFile>
<mp:midFile>25EF-13.mid</mp:midFile>
<mp:psFileA4>25EF-13-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>25EF-13-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>25EF-13-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>25EF-13-let.pdf</mp:pdfFileLet>
<mp:pngFile>25EF-13-preview.png</mp:pngFile>
<mp:pngHeight>103</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2013/01/12-224</mp:id>
<mp:maintainer>Bas Wassink</mp:maintainer>
<mp:maintainerEmail>basvanlola@zonnet.com</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.16.1</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>La Styrienne</mp:title>
<mp:composer>BurgmullerJFF</mp:composer>
<mp:opus>Opus 100.</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>19th Century</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre>Tempo di Valse</mp:metre>
<mp:arranger/>
<mp:source>Collection Litolff, 19th Century</mp:source>
<mp:licence>Public Domain</mp:licence>
<mp:lyFile>25EF-14.ly</mp:lyFile>
<mp:midFile>25EF-14.mid</mp:midFile>
<mp:psFileA4>25EF-14-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>25EF-14-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>25EF-14-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>25EF-14-let.pdf</mp:pdfFileLet>
<mp:pngFile>25EF-14-preview.png</mp:pngFile>
<mp:pngHeight>91</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2013/01/12-225</mp:id>
<mp:maintainer>Bas Wassink</mp:maintainer>
<mp:maintainerEmail>basvanlola@zonnet.com</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.16.1</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Ballade</mp:title>
<mp:composer>BurgmullerJFF</mp:composer>
<mp:opus>Opus 100.</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>19th Century</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre>Allegro con brio</mp:metre>
<mp:arranger/>
<mp:source>Collection Litolff, 19th Century</mp:source>
<mp:licence>Public Domain</mp:licence>
<mp:lyFile>25EF-15.ly</mp:lyFile>
<mp:midFile>25EF-15.mid</mp:midFile>
<mp:psFileA4>25EF-15-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>25EF-15-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>25EF-15-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>25EF-15-let.pdf</mp:pdfFileLet>
<mp:pngFile>25EF-15-preview.png</mp:pngFile>
<mp:pngHeight>91</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2013/01/12-227</mp:id>
<mp:maintainer>Bas Wassink</mp:maintainer>
<mp:maintainerEmail>basvanlola@zonnet.com</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.16.1</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Douce Plainte</mp:title>
<mp:composer>BurgmullerJFF</mp:composer>
<mp:opus>Opus 100.</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>19th Century</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre>Allegro moderato</mp:metre>
<mp:arranger/>
<mp:source>Collection Litolff, 19th Century</mp:source>
<mp:licence>Public Domain</mp:licence>
<mp:lyFile>25EF-16.ly</mp:lyFile>
<mp:midFile>25EF-16.mid</mp:midFile>
<mp:psFileA4>25EF-16-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>25EF-16-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>25EF-16-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>25EF-16-let.pdf</mp:pdfFileLet>
<mp:pngFile>25EF-16-preview.png</mp:pngFile>
<mp:pngHeight>79</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2013/01/12-228</mp:id>
<mp:maintainer>Bas Wassink</mp:maintainer>
<mp:maintainerEmail>basvanlola@zonnet.com</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.16.1</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>La Babillarde</mp:title>
<mp:composer>BurgmullerJFF</mp:composer>
<mp:opus>Opus 100.</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>19th Century</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre>Allegro moderato</mp:metre>
<mp:arranger/>
<mp:source>Collection Litolff, 19th Century</mp:source>
<mp:licence>Public Domain</mp:licence>
<mp:lyFile>25EF-17.ly</mp:lyFile>
<mp:midFile>25EF-17.mid</mp:midFile>
<mp:psFileA4>25EF-17-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>25EF-17-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>25EF-17-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>25EF-17-let.pdf</mp:pdfFileLet>
<mp:pngFile>25EF-17-preview.png</mp:pngFile>
<mp:pngHeight>107</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2013/01/12-229</mp:id>
<mp:maintainer>Bas Wassink</mp:maintainer>
<mp:maintainerEmail>basvanlola@zonnet.com</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.16.1</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Inquiétude</mp:title>
<mp:composer>BurgmullerJFF</mp:composer>
<mp:opus>Opus 100.</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>19th Century</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre>Allegro agitato</mp:metre>
<mp:arranger/>
<mp:source>Collection Litolff, 19th Century</mp:source>
<mp:licence>Public Domain</mp:licence>
<mp:lyFile>25EF-18.ly</mp:lyFile>
<mp:midFile>25EF-18.mid</mp:midFile>
<mp:psFileA4>25EF-18-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>25EF-18-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>25EF-18-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>25EF-18-let.pdf</mp:pdfFileLet>
<mp:pngFile>25EF-18-preview.png</mp:pngFile>
<mp:pngHeight>86</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2013/01/12-230</mp:id>
<mp:maintainer>Bas Wassink</mp:maintainer>
<mp:maintainerEmail>basvanlola@zonnet.com</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.16.1</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
-182
View File
@@ -1,182 +0,0 @@
[
{
"name": "burgmuller-01",
"midi_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-01/25EF-01.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-01/25EF-01.rdf",
"rights": []
},
{
"name": "burgmuller-02",
"midi_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-02/25EF-02.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-02/25EF-02.rdf",
"rights": []
},
{
"name": "burgmuller-03",
"midi_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-03/25EF-03.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-03/25EF-03.rdf",
"rights": []
},
{
"name": "burgmuller-04",
"midi_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-04/25EF-04.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-04/25EF-04.rdf",
"rights": []
},
{
"name": "burgmuller-05",
"midi_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-05/25EF-05.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-05/25EF-05.rdf",
"rights": []
},
{
"name": "burgmuller-06",
"midi_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-06/25EF-06.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-06/25EF-06.rdf",
"rights": []
},
{
"name": "burgmuller-07",
"midi_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-07/25EF-07.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-07/25EF-07.rdf",
"rights": []
},
{
"name": "burgmuller-08",
"midi_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-08/25EF-08.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-08/25EF-08.rdf",
"rights": []
},
{
"name": "burgmuller-09",
"midi_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-09/25EF-09.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-09/25EF-09.rdf",
"rights": []
},
{
"name": "burgmuller-10",
"midi_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-10/25EF-10.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-10/25EF-10.rdf",
"rights": []
},
{
"name": "burgmuller-11",
"midi_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-11/25EF-11.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-11/25EF-11.rdf",
"rights": []
},
{
"name": "burgmuller-12",
"midi_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-12/25EF-12.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-12/25EF-12.rdf",
"rights": []
},
{
"name": "burgmuller-13",
"midi_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-13/25EF-13.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-13/25EF-13.rdf",
"rights": []
},
{
"name": "burgmuller-14",
"midi_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-14/25EF-14.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-14/25EF-14.rdf",
"rights": []
},
{
"name": "burgmuller-15",
"midi_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-15/25EF-15.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-15/25EF-15.rdf",
"rights": []
},
{
"name": "burgmuller-16",
"midi_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-16/25EF-16.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-16/25EF-16.rdf",
"rights": []
},
{
"name": "burgmuller-17",
"midi_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-17/25EF-17.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-17/25EF-17.rdf",
"rights": []
},
{
"name": "burgmuller-18",
"midi_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-18/25EF-18.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/BurgmullerJFF/O100/25EF-18/25EF-18.rdf",
"rights": []
},
{
"name": "schumann-01",
"midi_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-01-melodie/schumann-op68-01-melodie.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-01-melodie/schumann-op68-01-melodie.rdf",
"rights": []
},
{
"name": "schumann-02",
"midi_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-02-marche-militaire/schumann-op68-02-marche-militaire.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-02-marche-militaire/schumann-op68-02-marche-militaire.rdf",
"rights": []
},
{
"name": "schumann-03",
"midi_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-03-chanson-fredonnee/schumann-op68-03-chanson-fredonnee.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-03-chanson-fredonnee/schumann-op68-03-chanson-fredonnee.rdf",
"rights": []
},
{
"name": "schumann-04",
"midi_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-04-choral/schumann-op68-04-choral.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-04-choral/schumann-op68-04-choral.rdf",
"rights": []
},
{
"name": "schumann-05",
"midi_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-05-petite-piece/schumann-op68-05-petite-piece.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-05-petite-piece/schumann-op68-05-petite-piece.rdf",
"rights": []
},
{
"name": "schumann-06",
"midi_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-06-pauvre-orpheline/schumann-op68-06-pauvre-orpheline.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-06-pauvre-orpheline/schumann-op68-06-pauvre-orpheline.rdf",
"rights": []
},
{
"name": "schumann-07",
"midi_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-07-chanson-du-chasseur/schumann-op68-07-chanson-du-chasseur.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-07-chanson-du-chasseur/schumann-op68-07-chanson-du-chasseur.rdf",
"rights": []
},
{
"name": "schumann-08",
"midi_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-08-cavalier-sauvage/schumann-op68-08-cavalier-sauvage.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-08-cavalier-sauvage/schumann-op68-08-cavalier-sauvage.rdf",
"rights": []
},
{
"name": "schumann-09",
"midi_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-09-chanson-populaire/schumann-op68-09-chanson-populaire.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-09-chanson-populaire/schumann-op68-09-chanson-populaire.rdf",
"rights": []
},
{
"name": "schumann-10",
"midi_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-10-gai-laboureur/schumann-op68-10-gai-laboureur.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-10-gai-laboureur/schumann-op68-10-gai-laboureur.rdf",
"rights": []
},
{
"name": "schumann-11",
"midi_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-11-sicilienne/schumann-op68-11-sicilienne.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-11-sicilienne/schumann-op68-11-sicilienne.rdf",
"rights": []
},
{
"name": "schumann-12",
"midi_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-12-Pere-Fouettard/schumann-op68-12-Pere-Fouettard.mid",
"rdf_url": "https://www.mutopiaproject.org/ftp/SchumannR/O68/schumann-op68-12-Pere-Fouettard/schumann-op68-12-Pere-Fouettard.rdf",
"rights": []
}
]
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Album pour la jeunesse - 1.Mélodie </mp:title>
<mp:composer>SchumannR</mp:composer>
<mp:opus>O 68 n°1</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>1848</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre/>
<mp:arranger/>
<mp:source>Peters </mp:source>
<mp:licence>Creative Commons Attribution-ShareAlike 2.5</mp:licence>
<mp:lyFile>schumann-op68-01-melodie.ly</mp:lyFile>
<mp:midFile>schumann-op68-01-melodie.mid</mp:midFile>
<mp:psFileA4>schumann-op68-01-melodie-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>schumann-op68-01-melodie-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>schumann-op68-01-melodie-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>schumann-op68-01-melodie-let.pdf</mp:pdfFileLet>
<mp:pngFile>schumann-op68-01-melodie-preview.png</mp:pngFile>
<mp:pngHeight>125</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2007/02/11-647</mp:id>
<mp:maintainer>Philippe Hézaine</mp:maintainer>
<mp:maintainerEmail>philippe.hezaine@free.fr</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.10.16</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Album pour la jeunesse - 2.Marche militaire </mp:title>
<mp:composer>SchumannR</mp:composer>
<mp:opus>O 68 n°2 </mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>1848</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre/>
<mp:arranger/>
<mp:source>Peters</mp:source>
<mp:licence>Creative Commons Attribution-ShareAlike 2.5</mp:licence>
<mp:lyFile>schumann-op68-02-marche-militaire.ly</mp:lyFile>
<mp:midFile>schumann-op68-02-marche-militaire.mid</mp:midFile>
<mp:psFileA4>schumann-op68-02-marche-militaire-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>schumann-op68-02-marche-militaire-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>schumann-op68-02-marche-militaire-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>schumann-op68-02-marche-militaire-let.pdf</mp:pdfFileLet>
<mp:pngFile>schumann-op68-02-marche-militaire-preview.png</mp:pngFile>
<mp:pngHeight>107</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2007/02/11-650</mp:id>
<mp:maintainer>Philippe Hézaine</mp:maintainer>
<mp:maintainerEmail>philippe.hezaine@free.fr</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.10.16</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Album pour la jeunesse - 3.Chanson fredonnée</mp:title>
<mp:composer>SchumannR</mp:composer>
<mp:opus>O 68 n°3</mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>1848</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre/>
<mp:arranger/>
<mp:source>Peters</mp:source>
<mp:licence>Creative Commons Attribution-ShareAlike 3.0</mp:licence>
<mp:lyFile>schumann-op68-03-chanson-fredonnee.ly</mp:lyFile>
<mp:midFile>schumann-op68-03-chanson-fredonnee.mid</mp:midFile>
<mp:psFileA4>schumann-op68-03-chanson-fredonnee-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>schumann-op68-03-chanson-fredonnee-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>schumann-op68-03-chanson-fredonnee-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>schumann-op68-03-chanson-fredonnee-let.pdf</mp:pdfFileLet>
<mp:pngFile>schumann-op68-03-chanson-fredonnee-preview.png</mp:pngFile>
<mp:pngHeight>135</mp:pngHeight>
<mp:pngWidth>543</mp:pngWidth>
<mp:id>Mutopia-2011/09/18-651</mp:id>
<mp:maintainer>Philippe Hézaine</mp:maintainer>
<mp:maintainerEmail>philippe.hezaine@free.fr</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.12.3</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Album pour la jeunesse - 4.Un choral </mp:title>
<mp:composer>SchumannR</mp:composer>
<mp:opus>O 68 n°4 </mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>1848</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre/>
<mp:arranger/>
<mp:source>Peters</mp:source>
<mp:licence>Creative Commons Attribution-ShareAlike 2.5</mp:licence>
<mp:lyFile>schumann-op68-04-choral.ly</mp:lyFile>
<mp:midFile>schumann-op68-04-choral.mid</mp:midFile>
<mp:psFileA4>schumann-op68-04-choral-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>schumann-op68-04-choral-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>schumann-op68-04-choral-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>schumann-op68-04-choral-let.pdf</mp:pdfFileLet>
<mp:pngFile>schumann-op68-04-choral-preview.png</mp:pngFile>
<mp:pngHeight>124</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2007/02/11-782</mp:id>
<mp:maintainer>Philippe Hézaine</mp:maintainer>
<mp:maintainerEmail>philippe.hezaine@free.fr</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.10.16</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Album pour la jeunesse - 5.Petite pièce </mp:title>
<mp:composer>SchumannR</mp:composer>
<mp:opus>O 68 n°5 </mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>1848</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre/>
<mp:arranger/>
<mp:source>Peters</mp:source>
<mp:licence>Creative Commons Attribution-ShareAlike 2.5</mp:licence>
<mp:lyFile>schumann-op68-05-petite-piece.ly</mp:lyFile>
<mp:midFile>schumann-op68-05-petite-piece.mid</mp:midFile>
<mp:psFileA4>schumann-op68-05-petite-piece-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>schumann-op68-05-petite-piece-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>schumann-op68-05-petite-piece-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>schumann-op68-05-petite-piece-let.pdf</mp:pdfFileLet>
<mp:pngFile>schumann-op68-05-petite-piece-preview.png</mp:pngFile>
<mp:pngHeight>129</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2007/02/11-653</mp:id>
<mp:maintainer>Philippe Hézaine</mp:maintainer>
<mp:maintainerEmail>philippe.hezaine@free.fr</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.10.16</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Album pour la jeunesse - 6.Pauvre orpheline </mp:title>
<mp:composer>SchumannR</mp:composer>
<mp:opus>O 68 n°6 </mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>1848</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre/>
<mp:arranger/>
<mp:source>Peters</mp:source>
<mp:licence>Creative Commons Attribution-ShareAlike 2.5</mp:licence>
<mp:lyFile>schumann-op68-06-pauvre-orpheline.ly</mp:lyFile>
<mp:midFile>schumann-op68-06-pauvre-orpheline.mid</mp:midFile>
<mp:psFileA4>schumann-op68-06-pauvre-orpheline-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>schumann-op68-06-pauvre-orpheline-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>schumann-op68-06-pauvre-orpheline-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>schumann-op68-06-pauvre-orpheline-let.pdf</mp:pdfFileLet>
<mp:pngFile>schumann-op68-06-pauvre-orpheline-preview.png</mp:pngFile>
<mp:pngHeight>123</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2007/02/11-687</mp:id>
<mp:maintainer>Philippe Hézaine</mp:maintainer>
<mp:maintainerEmail>philippe.hezaine@free.fr</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.10.16</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Album pour la jeunesse - 7.Chanson du chasseur </mp:title>
<mp:composer>SchumannR</mp:composer>
<mp:opus>O 68 n°7 </mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>1848</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre/>
<mp:arranger/>
<mp:source>Peters</mp:source>
<mp:licence>Creative Commons Attribution-ShareAlike 3.0</mp:licence>
<mp:lyFile>schumann-op68-07-chanson-du-chasseur.ly</mp:lyFile>
<mp:midFile>schumann-op68-07-chanson-du-chasseur.mid</mp:midFile>
<mp:psFileA4>schumann-op68-07-chanson-du-chasseur-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>schumann-op68-07-chanson-du-chasseur-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>schumann-op68-07-chanson-du-chasseur-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>schumann-op68-07-chanson-du-chasseur-let.pdf</mp:pdfFileLet>
<mp:pngFile>schumann-op68-07-chanson-du-chasseur-preview.png</mp:pngFile>
<mp:pngHeight>145</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2007/05/20-691</mp:id>
<mp:maintainer>Philippe Hézaine</mp:maintainer>
<mp:maintainerEmail>philippe.hezaine@free.fr</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.10.23</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Album pour la jeunesse - 8.Le cavalier sauvage </mp:title>
<mp:composer>SchumannR</mp:composer>
<mp:opus>O 68 n°8 </mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>1848</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre/>
<mp:arranger/>
<mp:source>Peters</mp:source>
<mp:licence>Creative Commons Attribution-ShareAlike 2.5</mp:licence>
<mp:lyFile>schumann-op68-08-cavalier-sauvage.ly</mp:lyFile>
<mp:midFile>schumann-op68-08-cavalier-sauvage.mid</mp:midFile>
<mp:psFileA4>schumann-op68-08-cavalier-sauvage-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>schumann-op68-08-cavalier-sauvage-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>schumann-op68-08-cavalier-sauvage-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>schumann-op68-08-cavalier-sauvage-let.pdf</mp:pdfFileLet>
<mp:pngFile>schumann-op68-08-cavalier-sauvage-preview.png</mp:pngFile>
<mp:pngHeight>113</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2007/02/11-655</mp:id>
<mp:maintainer>Philippe Hézaine</mp:maintainer>
<mp:maintainerEmail>philippe.hezaine@free.fr</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.10.16</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Album pour la jeunesse - 9.Chanson populaire </mp:title>
<mp:composer>SchumannR</mp:composer>
<mp:opus>O 68 n°9 </mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>1848</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre/>
<mp:arranger/>
<mp:source>Peters</mp:source>
<mp:licence>Creative Commons Attribution-ShareAlike 2.5</mp:licence>
<mp:lyFile>schumann-op68-09-chanson-populaire.ly</mp:lyFile>
<mp:midFile>schumann-op68-09-chanson-populaire.mid</mp:midFile>
<mp:psFileA4>schumann-op68-09-chanson-populaire-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>schumann-op68-09-chanson-populaire-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>schumann-op68-09-chanson-populaire-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>schumann-op68-09-chanson-populaire-let.pdf</mp:pdfFileLet>
<mp:pngFile>schumann-op68-09-chanson-populaire-preview.png</mp:pngFile>
<mp:pngHeight>116</mp:pngHeight>
<mp:pngWidth>539</mp:pngWidth>
<mp:id>Mutopia-2007/02/11-675</mp:id>
<mp:maintainer>Philippe Hézaine</mp:maintainer>
<mp:maintainerEmail>philippe.hezaine@free.fr</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.10.16</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Album pour la jeunesse - 10.Le gai laboureur </mp:title>
<mp:composer>SchumannR</mp:composer>
<mp:opus>O 68 n°10 </mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>1848</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre/>
<mp:arranger/>
<mp:source>Peters</mp:source>
<mp:licence>Creative Commons Attribution-ShareAlike 2.5</mp:licence>
<mp:lyFile>schumann-op68-10-gai-laboureur.ly</mp:lyFile>
<mp:midFile>schumann-op68-10-gai-laboureur.mid</mp:midFile>
<mp:psFileA4>schumann-op68-10-gai-laboureur-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>schumann-op68-10-gai-laboureur-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>schumann-op68-10-gai-laboureur-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>schumann-op68-10-gai-laboureur-let.pdf</mp:pdfFileLet>
<mp:pngFile>schumann-op68-10-gai-laboureur-preview.png</mp:pngFile>
<mp:pngHeight>107</mp:pngHeight>
<mp:pngWidth>549</mp:pngWidth>
<mp:id>Mutopia-2007/02/11-659</mp:id>
<mp:maintainer>Philippe Hézaine</mp:maintainer>
<mp:maintainerEmail>philippe.hezaine@free.fr</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.10.16</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Album pour la jeunesse - 11.Sicilienne </mp:title>
<mp:composer>SchumannR</mp:composer>
<mp:opus>O 68 n°11 </mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>1848</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre/>
<mp:arranger/>
<mp:source>Peters</mp:source>
<mp:licence>Creative Commons Attribution-ShareAlike 2.5</mp:licence>
<mp:lyFile>schumann-op68-11-sicilienne.ly</mp:lyFile>
<mp:midFile>schumann-op68-11-sicilienne.mid</mp:midFile>
<mp:psFileA4>schumann-op68-11-sicilienne-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>schumann-op68-11-sicilienne-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>schumann-op68-11-sicilienne-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>schumann-op68-11-sicilienne-let.pdf</mp:pdfFileLet>
<mp:pngFile>schumann-op68-11-sicilienne-preview.png</mp:pngFile>
<mp:pngHeight>108</mp:pngHeight>
<mp:pngWidth>549</mp:pngWidth>
<mp:id>Mutopia-2007/02/11-783</mp:id>
<mp:maintainer>Philippe Hézaine</mp:maintainer>
<mp:maintainerEmail>philippe.hezaine@free.fr</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.10.16</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
Binary file not shown.
@@ -1,36 +0,0 @@
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mp="http://www.mutopiaproject.org/piece-data/0.1/">
<rdf:Description rdf:about=".">
<mp:title>Album pour la jeunesse - 12.Le Père Fouettard </mp:title>
<mp:composer>SchumannR</mp:composer>
<mp:opus>O 68 n°12 </mp:opus>
<mp:lyricist/>
<mp:for>Piano</mp:for>
<mp:date>1848</mp:date>
<mp:style>Romantic</mp:style>
<mp:metre/>
<mp:arranger/>
<mp:source>Peters</mp:source>
<mp:licence>Creative Commons Attribution-ShareAlike 2.5</mp:licence>
<mp:lyFile>schumann-op68-12-Pere-Fouettard.ly</mp:lyFile>
<mp:midFile>schumann-op68-12-Pere-Fouettard.mid</mp:midFile>
<mp:psFileA4>schumann-op68-12-Pere-Fouettard-a4.ps.gz</mp:psFileA4>
<mp:pdfFileA4>schumann-op68-12-Pere-Fouettard-a4.pdf</mp:pdfFileA4>
<mp:psFileLet>schumann-op68-12-Pere-Fouettard-let.ps.gz</mp:psFileLet>
<mp:pdfFileLet>schumann-op68-12-Pere-Fouettard-let.pdf</mp:pdfFileLet>
<mp:pngFile>schumann-op68-12-Pere-Fouettard-preview.png</mp:pngFile>
<mp:pngHeight>122</mp:pngHeight>
<mp:pngWidth>549</mp:pngWidth>
<mp:id>Mutopia-2007/02/11-784</mp:id>
<mp:maintainer>Philippe Hézaine</mp:maintainer>
<mp:maintainerEmail>philippe.hezaine@free.fr</mp:maintainerEmail>
<mp:maintainerWeb/>
<mp:moreInfo/>
<mp:lilypondVersion>2.10.16</mp:lilypondVersion>
</rdf:Description>
</rdf:RDF>
+1 -1
View File
@@ -74,7 +74,7 @@ Mutopia Project가 공개 도메인으로 배포하는 실제 클래식 MIDI를
- 미뉴에트 내림마장조 WoO 82: 쉬운 양손 편곡과 중급 양손 원곡
- 엘리제를 위하여 WoO 59: 입문 양손과 쉬운 양손 및 고급 원곡
같은 제목의 난이도별 버전은 한 묶음에서 선택한다. 기본 단계별 연습곡은 모두 오른손과 왼손을 포함한 피아노 독주로 제공한다. 손별 연습은 연습 화면에서 선택한다. 공개 도메인 원곡에서 만든 단계별 연습 편곡은 `scripts/build_sample_variants.mjs`로 다시 만들 수 있다. 별도로 등록한 30곡의 양손 연습 편곡은 `node scripts/build_practice_collection.mjs`로 다시 만들 수 있다.
같은 제목의 난이도별 버전은 한 묶음에서 선택한다. 기본 단계별 연습곡은 모두 오른손과 왼손을 포함한 피아노 독주로 제공한다. 손별 연습은 연습 화면에서 선택한다. 공개 도메인 원곡에서 만든 단계별 연습 편곡은 `scripts/build_sample_variants.mjs`로 다시 만들 수 있다.
## 악보 표시
-11
View File
@@ -25,14 +25,3 @@ Mutopia Project의 배포 안내는 <https://www.mutopiaproject.org/legal.html>
| 엘리제를 위하여 WoO 59 | 고급 | 전체 양손 원곡 | `fur-elise.mid` |
편곡 파일은 `node scripts/build_sample_variants.mjs`로 다시 만들 수 있다. 원본 MIDI가 바뀌면 생성 결과도 달라지므로 반영 전에 파일 크기와 음표 수와 실제 재생을 다시 검사한다.
## 도입부와 마무리가 있는 연습곡 30개
서로 다른 원곡 30개를 바탕으로 오른손의 중심 선율과 왼손의 저음을 골라 양손 연습용으로 편곡했다. 각 MIDI에는 원곡 첫 선율을 천천히 들려주는 도입부와 마지막 선율을 다시 들려주고 종지음을 유지하는 마무리가 있다. 곡 길이는 69~134초다. 난이도는 오른손 음표 밀도에 따라 입문과 쉬움과 중급으로 나눈다. 복잡한 곡을 입문이라고 표시하지 않는다.
- 부르크뮐러 Op. 100의 서로 다른 연습곡 18개: 원본 MIDI와 RDF의 표시는 모두 Public Domain이다. 원본 조판자는 Bas Wassink이다.
- 슈만 Op. 68의 서로 다른 소품 12개: 원본 MIDI의 조판자는 Philippe Hézaine이다. RDF에 표시된 각 곡의 [CC BY-SA 2.5](https://creativecommons.org/licenses/by-sa/2.5/) 또는 [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/) 조건을 편곡본에도 적용한다.
곡별 원문 제목과 원본 MIDI 주소와 RDF 주소와 조판자와 정확한 라이선스 버전은 [`practice_collection.json`](../backend/sample_midi/practice_collection.json)에 기록했다. 받은 원본 MIDI와 RDF는 [`practice_sources`](../backend/tools/practice_sources)에 함께 보관한다. MIDI는 `node scripts/build_practice_collection.mjs`로 다시 만들고 `node scripts/check_practice_collection.mjs`로 검증한다. 회원 업로드와 구분되는 기본 공개 자료만 교체한다.
유튜브 영상은 이 30곡의 음원이나 MIDI 출처가 아니다. 공개 시청이 가능한 영상이라는 이유만으로 선율을 복제하지 않았다. 특정 쇼츠에 나온 곡을 그대로 옮기는 작업은 별도의 이용 허락과 원본 확인이 필요하다.
-113
View File
@@ -1,113 +0,0 @@
import fs from 'node:fs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import midiPackage from '../frontend/node_modules/@tonejs/midi/build/Midi.js';
const { Midi } = midiPackage;
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
const sourceRoot = path.join(root, 'backend', 'tools', 'practice_sources');
const outputRoot = path.join(root, 'backend', 'sample_midi');
const catalog = JSON.parse(fs.readFileSync(path.join(sourceRoot, 'catalog.json'), 'utf8'));
const names = {
burgmuller: ['순진', '아라베스크', '목가', '작은 모임', '순수', '진보', '맑은 시냇물', '우아함', '사냥', '여린 꽃', '할미새', '이별', '위안', '슈타이어 춤', '발라드', '작은 탄식', '수다쟁이', '불안'],
schumann: ['멜로디', '군대 행진곡', '흥얼거리는 노래', '코랄', '작은 소품', '가엾은 고아', '사냥꾼의 노래', '거친 기수', '민요', '즐거운 농부', '시칠리아 춤곡', '무서운 아저씨'],
};
const field = (rdf, key) => rdf.match(new RegExp(`<mp:${key}>([^<]*)</mp:${key}>`))?.[1]?.trim() ?? '';
const clamp = (value, low, high) => Math.max(low, Math.min(high, value));
function addNote(track, note, time, duration, velocity) {
track.addNote({ midi: clamp(note, 21, 108), time, duration: Math.max(0.08, duration), velocity });
}
function onsets(notes) {
const grouped = new Map();
for (const note of notes) {
const key = Math.round(note.time * 50);
const list = grouped.get(key) ?? [];
list.push(note);
grouped.set(key, list);
}
return [...grouped.entries()].sort(([a], [b]) => a - b).map(([key, group]) => ({ time: key / 50, notes: group }));
}
const manifest = [];
for (const item of catalog) {
const name = item.name;
const [series, numberText] = name.split('-');
const number = Number(numberText);
const source = new Midi(fs.readFileSync(path.join(sourceRoot, `${name}.mid`)));
const rdf = fs.readFileSync(path.join(sourceRoot, `${name}.rdf`), 'utf8');
const license = field(rdf, 'licence');
if (license !== 'Public Domain' && !/^Creative Commons Attribution-ShareAlike (2\.5|3\.0)$/.test(license)) {
throw new Error(`${name}: 권리 표시를 확인해야 합니다: ${license}`);
}
const nonempty = source.tracks.filter((track) => track.notes.length);
if (nonempty.length < 2) throw new Error(`${name}: 양손 원본이 없습니다`);
const rightSource = onsets(nonempty[0].notes);
const leftSource = onsets(nonempty.at(-1).notes);
const speed = Math.max(1, 58 / source.duration);
const introSeconds = 5.4;
const target = new Midi();
target.header.setTempo(120);
target.header.timeSignatures.push({ ticks: 0, timeSignature: source.header.timeSignatures[0]?.timeSignature ?? [4, 4] });
const right = target.addTrack();
right.name = 'Right Hand';
const left = target.addTrack();
left.name = 'Left Hand';
// 원곡의 첫 선율 네 음을 먼저 천천히 들려준다. 본곡과 자연스럽게 이어지는 도입부다.
const introPitches = rightSource.slice(0, 4).map((group) => Math.max(...group.notes.map((note) => note.midi)));
const firstBass = Math.min(...leftSource[0].notes.map((note) => note.midi));
addNote(left, firstBass, 0, 4.5, 0.48);
introPitches.forEach((pitch, index) => addNote(right, pitch, 0.55 + index * 1.05, 0.83, 0.55 + index * 0.04));
// 오른손은 원곡의 각 시작점에서 가장 높은 성부를 택한다. 선율의 순서와 리듬을 보존한다.
for (const group of rightSource) {
const note = group.notes.reduce((highest, current) => current.midi > highest.midi ? current : highest);
addNote(right, note.midi, introSeconds + group.time * speed, Math.min(2.4, note.duration * speed * 0.92), clamp(note.velocity, 0.48, 0.87));
}
// 왼손은 저음을 따라가되 가까운 시작점을 정리해 초보자가 양손을 맞출 여유를 둔다.
let previousBassTime = -10;
for (const group of leftSource) {
const time = introSeconds + group.time * speed;
if (time - previousBassTime < 0.48) continue;
const note = group.notes.reduce((lowest, current) => current.midi < lowest.midi ? current : lowest);
addNote(left, note.midi, time, clamp(note.duration * speed * 0.9, 0.38, 2.5), 0.53);
previousBassTime = time;
}
// 원곡 마지막 선율을 늦추어 다시 들려준 뒤 종지음을 충분히 유지한다.
const endingStart = introSeconds + source.duration * speed + 0.5;
const endingPitches = rightSource.slice(-3).map((group) => Math.max(...group.notes.map((note) => note.midi)));
const lastBass = Math.min(...leftSource.at(-1).notes.map((note) => note.midi));
addNote(left, lastBass, endingStart, 5.1, 0.52);
endingPitches.forEach((pitch, index) => addNote(right, pitch, endingStart + index * 1.05, index === 2 ? 3.0 : 0.85, 0.68 - index * 0.06));
const file = `practice-${name}.mid`;
const duration = new Midi(target.toArray()).duration;
if (duration < 60 || right.notes.length < 12 || left.notes.length < 6) throw new Error(`${name}: 연습곡 검증 실패`);
const notesPerSecond = right.notes.length / duration;
const difficulty = notesPerSecond < 2.1 ? 'beginner' : notesPerSecond < 3.5 ? 'easy' : 'intermediate';
fs.writeFileSync(path.join(outputRoot, file), Buffer.from(target.toArray()));
const title = `${series === 'burgmuller' ? '부르크뮐러 25곡' : '슈만 어린이를 위한 앨범'} ${number}번 ${names[series][number - 1]}`;
manifest.push({
storage_name: file,
title,
artist: series === 'burgmuller' ? '요한 프리드리히 부르크뮐러' : '로베르트 슈만',
description: `${field(rdf, 'title')} 원곡을 양손 연습용으로 단순화했습니다. 도입부와 마무리가 포함된 전체 곡입니다. 원본: Mutopia Project ${field(rdf, 'id')}. 조판: ${field(rdf, 'maintainer')}. ${license}${license === 'Public Domain' ? '' : ' 동일 조건 편곡'}.`,
difficulty,
genre: series === 'burgmuller' ? '낭만주의 연습곡' : '낭만주의 소품',
arrangement: 'piano_solo',
tags: ['양손', '도입부', '마무리', series === 'burgmuller' ? '부르크뮐러' : '슈만', difficulty === 'beginner' ? '입문' : difficulty === 'easy' ? '쉬움' : '중급', license === 'Public Domain' ? '공개 도메인' : 'CC BY-SA'],
source_url: item.midi_url,
rdf_url: item.rdf_url,
source_title: field(rdf, 'title'),
source_id: field(rdf, 'id'),
maintainer: field(rdf, 'maintainer'),
license,
duration_seconds: Math.round(duration * 10) / 10,
});
}
fs.writeFileSync(path.join(outputRoot, 'practice_collection.json'), `${JSON.stringify(manifest, null, 2)}\n`);
console.log(`연습곡 ${manifest.length}개 생성. 재생 길이 ${Math.min(...manifest.map((item) => item.duration_seconds))}~${Math.max(...manifest.map((item) => item.duration_seconds))}초`);
-35
View File
@@ -1,35 +0,0 @@
import fs from 'node:fs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import midiPackage from '../frontend/node_modules/@tonejs/midi/build/Midi.js';
const { Midi } = midiPackage;
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', 'backend', 'sample_midi');
const collection = JSON.parse(fs.readFileSync(path.join(root, 'practice_collection.json'), 'utf8'));
if (collection.length !== 30 || new Set(collection.map((item) => item.title)).size !== 30) {
throw new Error('서로 다른 제목의 연습곡 30개가 필요합니다');
}
const motifs = new Set();
for (const item of collection) {
const midi = new Midi(fs.readFileSync(path.join(root, item.storage_name)));
const [right, left] = midi.tracks;
if (midi.tracks.length !== 2 || right.notes.length < 12 || left.notes.length < 6) {
throw new Error(`${item.storage_name}: 양손 음표가 부족합니다`);
}
if (midi.duration < 60 || midi.duration > 180) {
throw new Error(`${item.storage_name}: 곡 길이가 기준을 벗어납니다`);
}
if (right.notes[0].time < 0.4 || right.notes[4].time < 5 || left.notes[0].time !== 0) {
throw new Error(`${item.storage_name}: 도입부를 확인해야 합니다`);
}
if (midi.duration - right.notes.at(-1).time < 2.5 || midi.duration - left.notes.at(-1).time < 4) {
throw new Error(`${item.storage_name}: 마무리 지속 시간이 부족합니다`);
}
const motif = right.notes.slice(4, 20).map((note) => note.midi).join('-');
if (motifs.has(motif)) throw new Error(`${item.storage_name}: 다른 곡과 선율이 같습니다`);
motifs.add(motif);
if (![...right.notes, ...left.notes].every((note) => note.midi >= 21 && note.midi <= 108)) {
throw new Error(`${item.storage_name}: 피아노 음역을 벗어났습니다`);
}
console.log(`${item.storage_name}: ${midi.duration.toFixed(1)}초, 오른손 ${right.notes.length}음, 왼손 ${left.notes.length}음`);
}

Some files were not shown because too many files have changed in this diff Show More