From 75ea54699d907aba1d1d6df232c012b8f236a0bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=B0=BD=ED=98=84?= Date: Fri, 9 Oct 2026 23:51:57 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9A=94=EC=B2=AD=EA=B3=BC=20=EB=A7=9E?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EC=97=B0=EC=8A=B5=EA=B3=A1=20?= =?UTF-8?q?30=EA=B0=9C=EB=A5=BC=20=EC=B2=A0=ED=9A=8C=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 부르크뮐러와 슈만 연습곡 30개의 공개 등록과 MIDI 및 원본·생성 자료를 제거했다. 정확한 파일명만 제외 목록에 넣어 재시작 후 재등록을 막았다. 회원 업로드와 기존 기본 샘플은 유지했다. 운영 백업: /home/syskiller/piano/backups/bach-to-basics/20261009-withdraw-practice-30. 격리 테스트 5개 통과. 운영 재시작 뒤 HTTPS 목록과 DB 및 파일에서 철회곡 0개를 확인했다. 회원 업로드 2건과 기존 기본 샘플 7개 보존. --- PROJECT_MEMORY.md | 6 + README.md | 2 +- backend/library_db.py | 17 +- .../sample_midi/practice-burgmuller-01.mid | Bin 1884 -> 0 bytes .../sample_midi/practice-burgmuller-02.mid | Bin 1752 -> 0 bytes .../sample_midi/practice-burgmuller-03.mid | Bin 1873 -> 0 bytes .../sample_midi/practice-burgmuller-04.mid | Bin 2120 -> 0 bytes .../sample_midi/practice-burgmuller-05.mid | Bin 1808 -> 0 bytes .../sample_midi/practice-burgmuller-06.mid | Bin 1692 -> 0 bytes .../sample_midi/practice-burgmuller-07.mid | Bin 2196 -> 0 bytes .../sample_midi/practice-burgmuller-08.mid | Bin 1897 -> 0 bytes .../sample_midi/practice-burgmuller-09.mid | Bin 2935 -> 0 bytes .../sample_midi/practice-burgmuller-10.mid | Bin 2193 -> 0 bytes .../sample_midi/practice-burgmuller-11.mid | Bin 1746 -> 0 bytes .../sample_midi/practice-burgmuller-12.mid | Bin 3732 -> 0 bytes .../sample_midi/practice-burgmuller-13.mid | Bin 2337 -> 0 bytes .../sample_midi/practice-burgmuller-14.mid | Bin 2601 -> 0 bytes .../sample_midi/practice-burgmuller-15.mid | Bin 3015 -> 0 bytes .../sample_midi/practice-burgmuller-16.mid | Bin 1740 -> 0 bytes .../sample_midi/practice-burgmuller-17.mid | Bin 1935 -> 0 bytes .../sample_midi/practice-burgmuller-18.mid | Bin 2386 -> 0 bytes backend/sample_midi/practice-schumann-01.mid | Bin 2837 -> 0 bytes backend/sample_midi/practice-schumann-02.mid | Bin 2127 -> 0 bytes backend/sample_midi/practice-schumann-03.mid | Bin 2651 -> 0 bytes backend/sample_midi/practice-schumann-04.mid | Bin 1353 -> 0 bytes backend/sample_midi/practice-schumann-05.mid | Bin 1963 -> 0 bytes backend/sample_midi/practice-schumann-06.mid | Bin 2185 -> 0 bytes backend/sample_midi/practice-schumann-07.mid | Bin 3334 -> 0 bytes backend/sample_midi/practice-schumann-08.mid | Bin 2365 -> 0 bytes backend/sample_midi/practice-schumann-09.mid | Bin 1979 -> 0 bytes backend/sample_midi/practice-schumann-10.mid | Bin 1821 -> 0 bytes backend/sample_midi/practice-schumann-11.mid | Bin 4657 -> 0 bytes backend/sample_midi/practice-schumann-12.mid | Bin 7346 -> 0 bytes backend/sample_midi/practice_collection.json | 722 ------------------ backend/tests/test_library_db.py | 10 +- .../tools/practice_sources/burgmuller-01.mid | Bin 2564 -> 0 bytes .../tools/practice_sources/burgmuller-01.rdf | 36 - .../tools/practice_sources/burgmuller-02.mid | Bin 2643 -> 0 bytes .../tools/practice_sources/burgmuller-02.rdf | 36 - .../tools/practice_sources/burgmuller-03.mid | Bin 3416 -> 0 bytes .../tools/practice_sources/burgmuller-03.rdf | 36 - .../tools/practice_sources/burgmuller-04.mid | Bin 3860 -> 0 bytes .../tools/practice_sources/burgmuller-04.rdf | 36 - .../tools/practice_sources/burgmuller-05.mid | Bin 2139 -> 0 bytes .../tools/practice_sources/burgmuller-05.rdf | 36 - .../tools/practice_sources/burgmuller-06.mid | Bin 2148 -> 0 bytes .../tools/practice_sources/burgmuller-06.rdf | 36 - .../tools/practice_sources/burgmuller-07.mid | Bin 2293 -> 0 bytes .../tools/practice_sources/burgmuller-07.rdf | 36 - .../tools/practice_sources/burgmuller-08.mid | Bin 2958 -> 0 bytes .../tools/practice_sources/burgmuller-08.rdf | 36 - .../tools/practice_sources/burgmuller-09.mid | Bin 5072 -> 0 bytes .../tools/practice_sources/burgmuller-09.rdf | 36 - .../tools/practice_sources/burgmuller-10.mid | Bin 2773 -> 0 bytes .../tools/practice_sources/burgmuller-10.rdf | 36 - .../tools/practice_sources/burgmuller-11.mid | Bin 2432 -> 0 bytes .../tools/practice_sources/burgmuller-11.rdf | 36 - .../tools/practice_sources/burgmuller-12.mid | Bin 5949 -> 0 bytes .../tools/practice_sources/burgmuller-12.rdf | 36 - .../tools/practice_sources/burgmuller-13.mid | Bin 2810 -> 0 bytes .../tools/practice_sources/burgmuller-13.rdf | 36 - .../tools/practice_sources/burgmuller-14.mid | Bin 3272 -> 0 bytes .../tools/practice_sources/burgmuller-14.rdf | 36 - .../tools/practice_sources/burgmuller-15.mid | Bin 6911 -> 0 bytes .../tools/practice_sources/burgmuller-15.rdf | 36 - .../tools/practice_sources/burgmuller-16.mid | Bin 2599 -> 0 bytes .../tools/practice_sources/burgmuller-16.rdf | 36 - .../tools/practice_sources/burgmuller-17.mid | Bin 2710 -> 0 bytes .../tools/practice_sources/burgmuller-17.rdf | 36 - .../tools/practice_sources/burgmuller-18.mid | Bin 2946 -> 0 bytes .../tools/practice_sources/burgmuller-18.rdf | 36 - backend/tools/practice_sources/catalog.json | 182 ----- .../tools/practice_sources/schumann-01.mid | Bin 2883 -> 0 bytes .../tools/practice_sources/schumann-01.rdf | 36 - .../tools/practice_sources/schumann-02.mid | Bin 3061 -> 0 bytes .../tools/practice_sources/schumann-02.rdf | 36 - .../tools/practice_sources/schumann-03.mid | Bin 2673 -> 0 bytes .../tools/practice_sources/schumann-03.rdf | 36 - .../tools/practice_sources/schumann-04.mid | Bin 2237 -> 0 bytes .../tools/practice_sources/schumann-04.rdf | 36 - .../tools/practice_sources/schumann-05.mid | Bin 2677 -> 0 bytes .../tools/practice_sources/schumann-05.rdf | 36 - .../tools/practice_sources/schumann-06.mid | Bin 3763 -> 0 bytes .../tools/practice_sources/schumann-06.rdf | 36 - .../tools/practice_sources/schumann-07.mid | Bin 5633 -> 0 bytes .../tools/practice_sources/schumann-07.rdf | 36 - .../tools/practice_sources/schumann-08.mid | Bin 3954 -> 0 bytes .../tools/practice_sources/schumann-08.rdf | 36 - .../tools/practice_sources/schumann-09.mid | Bin 3003 -> 0 bytes .../tools/practice_sources/schumann-09.rdf | 36 - .../tools/practice_sources/schumann-10.mid | Bin 3299 -> 0 bytes .../tools/practice_sources/schumann-10.rdf | 36 - .../tools/practice_sources/schumann-11.mid | Bin 7081 -> 0 bytes .../tools/practice_sources/schumann-11.rdf | 36 - .../tools/practice_sources/schumann-12.mid | Bin 11654 -> 0 bytes .../tools/practice_sources/schumann-12.rdf | 36 - docs/LIBRARY-AUTH-KO.md | 2 +- docs/THIRD_PARTY_SAMPLES.md | 11 - scripts/build_practice_collection.mjs | 113 --- scripts/check_practice_collection.mjs | 35 - 수정기록.txt | 7 + 101 files changed, 22 insertions(+), 2165 deletions(-) delete mode 100644 backend/sample_midi/practice-burgmuller-01.mid delete mode 100644 backend/sample_midi/practice-burgmuller-02.mid delete mode 100644 backend/sample_midi/practice-burgmuller-03.mid delete mode 100644 backend/sample_midi/practice-burgmuller-04.mid delete mode 100644 backend/sample_midi/practice-burgmuller-05.mid delete mode 100644 backend/sample_midi/practice-burgmuller-06.mid delete mode 100644 backend/sample_midi/practice-burgmuller-07.mid delete mode 100644 backend/sample_midi/practice-burgmuller-08.mid delete mode 100644 backend/sample_midi/practice-burgmuller-09.mid delete mode 100644 backend/sample_midi/practice-burgmuller-10.mid delete mode 100644 backend/sample_midi/practice-burgmuller-11.mid delete mode 100644 backend/sample_midi/practice-burgmuller-12.mid delete mode 100644 backend/sample_midi/practice-burgmuller-13.mid delete mode 100644 backend/sample_midi/practice-burgmuller-14.mid delete mode 100644 backend/sample_midi/practice-burgmuller-15.mid delete mode 100644 backend/sample_midi/practice-burgmuller-16.mid delete mode 100644 backend/sample_midi/practice-burgmuller-17.mid delete mode 100644 backend/sample_midi/practice-burgmuller-18.mid delete mode 100644 backend/sample_midi/practice-schumann-01.mid delete mode 100644 backend/sample_midi/practice-schumann-02.mid delete mode 100644 backend/sample_midi/practice-schumann-03.mid delete mode 100644 backend/sample_midi/practice-schumann-04.mid delete mode 100644 backend/sample_midi/practice-schumann-05.mid delete mode 100644 backend/sample_midi/practice-schumann-06.mid delete mode 100644 backend/sample_midi/practice-schumann-07.mid delete mode 100644 backend/sample_midi/practice-schumann-08.mid delete mode 100644 backend/sample_midi/practice-schumann-09.mid delete mode 100644 backend/sample_midi/practice-schumann-10.mid delete mode 100644 backend/sample_midi/practice-schumann-11.mid delete mode 100644 backend/sample_midi/practice-schumann-12.mid delete mode 100644 backend/sample_midi/practice_collection.json delete mode 100644 backend/tools/practice_sources/burgmuller-01.mid delete mode 100644 backend/tools/practice_sources/burgmuller-01.rdf delete mode 100644 backend/tools/practice_sources/burgmuller-02.mid delete mode 100644 backend/tools/practice_sources/burgmuller-02.rdf delete mode 100644 backend/tools/practice_sources/burgmuller-03.mid delete mode 100644 backend/tools/practice_sources/burgmuller-03.rdf delete mode 100644 backend/tools/practice_sources/burgmuller-04.mid delete mode 100644 backend/tools/practice_sources/burgmuller-04.rdf delete mode 100644 backend/tools/practice_sources/burgmuller-05.mid delete mode 100644 backend/tools/practice_sources/burgmuller-05.rdf delete mode 100644 backend/tools/practice_sources/burgmuller-06.mid delete mode 100644 backend/tools/practice_sources/burgmuller-06.rdf delete mode 100644 backend/tools/practice_sources/burgmuller-07.mid delete mode 100644 backend/tools/practice_sources/burgmuller-07.rdf delete mode 100644 backend/tools/practice_sources/burgmuller-08.mid delete mode 100644 backend/tools/practice_sources/burgmuller-08.rdf delete mode 100644 backend/tools/practice_sources/burgmuller-09.mid delete mode 100644 backend/tools/practice_sources/burgmuller-09.rdf delete mode 100644 backend/tools/practice_sources/burgmuller-10.mid delete mode 100644 backend/tools/practice_sources/burgmuller-10.rdf delete mode 100644 backend/tools/practice_sources/burgmuller-11.mid delete mode 100644 backend/tools/practice_sources/burgmuller-11.rdf delete mode 100644 backend/tools/practice_sources/burgmuller-12.mid delete mode 100644 backend/tools/practice_sources/burgmuller-12.rdf delete mode 100644 backend/tools/practice_sources/burgmuller-13.mid delete mode 100644 backend/tools/practice_sources/burgmuller-13.rdf delete mode 100644 backend/tools/practice_sources/burgmuller-14.mid delete mode 100644 backend/tools/practice_sources/burgmuller-14.rdf delete mode 100644 backend/tools/practice_sources/burgmuller-15.mid delete mode 100644 backend/tools/practice_sources/burgmuller-15.rdf delete mode 100644 backend/tools/practice_sources/burgmuller-16.mid delete mode 100644 backend/tools/practice_sources/burgmuller-16.rdf delete mode 100644 backend/tools/practice_sources/burgmuller-17.mid delete mode 100644 backend/tools/practice_sources/burgmuller-17.rdf delete mode 100644 backend/tools/practice_sources/burgmuller-18.mid delete mode 100644 backend/tools/practice_sources/burgmuller-18.rdf delete mode 100644 backend/tools/practice_sources/catalog.json delete mode 100644 backend/tools/practice_sources/schumann-01.mid delete mode 100644 backend/tools/practice_sources/schumann-01.rdf delete mode 100644 backend/tools/practice_sources/schumann-02.mid delete mode 100644 backend/tools/practice_sources/schumann-02.rdf delete mode 100644 backend/tools/practice_sources/schumann-03.mid delete mode 100644 backend/tools/practice_sources/schumann-03.rdf delete mode 100644 backend/tools/practice_sources/schumann-04.mid delete mode 100644 backend/tools/practice_sources/schumann-04.rdf delete mode 100644 backend/tools/practice_sources/schumann-05.mid delete mode 100644 backend/tools/practice_sources/schumann-05.rdf delete mode 100644 backend/tools/practice_sources/schumann-06.mid delete mode 100644 backend/tools/practice_sources/schumann-06.rdf delete mode 100644 backend/tools/practice_sources/schumann-07.mid delete mode 100644 backend/tools/practice_sources/schumann-07.rdf delete mode 100644 backend/tools/practice_sources/schumann-08.mid delete mode 100644 backend/tools/practice_sources/schumann-08.rdf delete mode 100644 backend/tools/practice_sources/schumann-09.mid delete mode 100644 backend/tools/practice_sources/schumann-09.rdf delete mode 100644 backend/tools/practice_sources/schumann-10.mid delete mode 100644 backend/tools/practice_sources/schumann-10.rdf delete mode 100644 backend/tools/practice_sources/schumann-11.mid delete mode 100644 backend/tools/practice_sources/schumann-11.rdf delete mode 100644 backend/tools/practice_sources/schumann-12.mid delete mode 100644 backend/tools/practice_sources/schumann-12.rdf delete mode 100644 scripts/build_practice_collection.mjs delete mode 100644 scripts/check_practice_collection.mjs diff --git a/PROJECT_MEMORY.md b/PROJECT_MEMORY.md index f22ef35..8de2b50 100644 --- a/PROJECT_MEMORY.md +++ b/PROJECT_MEMORY.md @@ -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`로 운영한다. diff --git a/README.md b/README.md index 065255c..9f9750a 100644 --- a/README.md +++ b/README.md @@ -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) diff --git a/backend/library_db.py b/backend/library_db.py index e977be0..eab93d2 100644 --- a/backend/library_db.py +++ b/backend/library_db.py @@ -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})", diff --git a/backend/sample_midi/practice-burgmuller-01.mid b/backend/sample_midi/practice-burgmuller-01.mid deleted file mode 100644 index 09b4f783dda4605c41004e92f02ac209c39ea0da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1884 zcmah}K~EE55FJ`X!I*fc)kACW;L)%`kPtScu-SC8Y^l|1bT49qifJT9Ih0$sp$#Ew zJ~Z*p#oyuY@Z>+K?|t3&!(qyx30)=K}O+AF2Zw<-oDv8nD<`p@5)a(x~}T(pxmuX^jHNxP(b8A1oDZz zCqSMI9PoNY@X9J62&ANZ0v}&Iw^u+s2V$>qF{g-lNi~_(L{`HFXaLj+>Il_r=rrwI zw?>@{IYq=x7V2TTu7~L!(tW0T;8Yo^0(b;`Jtmj=7IjL=>qe)n{ESZNFCEQc?(dJ~@jPsGPnY0J zbeD>wfoIvNKK`v(fLacfpWdgU-sB~<6+(6k{rLpC&@kFW6HV>Iw%c1wIPfXtW`*3W z=tXy1mNlobkIV*Fh=8ZzwE<|O-_oL3X#%cmK)^veEoix|*iSl~HD7yPgx_TqPeGrU zaWUx!#@necfkL_s0=6;smDi$88Xb~ZulQ)W z<>QGb$Cf?6RF+v&99vvH*R+;g%fw|GvN>9lWkPsslwReUGCj+gIAiRqCtrMcb{xX9 z6HH+p8|O(MUOydJKv6{n+d$Zvit?)8EBH44GoAW{KhxRZ)ob%#D$26YcDj}fc9i9u z=7FM*1|0x>W%S!MwZQ1YWOR|=7Wr+(`PAyJ$lwN0?;TJSDx1ibsAIl$&iNLqHS*TT zTPIqV=ulONDiS?6xrgWEj`c#r>-caPqS|(a%{}y#EX#-?~on$=y NnzA;3%!9@W{{fqnJxc%p diff --git a/backend/sample_midi/practice-burgmuller-02.mid b/backend/sample_midi/practice-burgmuller-02.mid deleted file mode 100644 index 202a424a22457a6ddf98fccfaa6bb40799ebe441..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1752 zcmcJPPfyfP6vgi_1kspCf(dLeEKCM*0SgeC8HR?TX;WLr+Bz8|q?n+B#xYSM8#I){ zsL{n+xt5Ke!;j)O8P9n$?T`>AY~1~N?z!*&c`x;&-5n7bk%ANpfBoqF8+=Vjrzp}1 zir3DjrPCZ98k!uH&YX0^!*>wA@nrAS?*6p%ytN~LK$GsKv_EH6N`wN=EwW?*XO~bGCb!$bx0|2?l!H|7 z#tKL&GG0JR3F9K<(CxL_qmb&#AvkhZMJ>c49gA_2Cm)p^L$YN?IaC~Zs4OZL6z>Y2 zfSv&7c+6sbpNcPDUvU|7bqRn2PhPZFtEARrw78BIJp!AyEbK^MB*DhA9D;*|+L>Zm zx>a7}gvPKExW*O=U9QM1H0A^#dgQ z?3QcT__7>hKO{p=&5V*gRi##?c2(aBGgf$Bmb;o!@>!%AccsV|ix|5c{Lpd{#|AP6(_J{X-hYRlOkGt|yded6j{kv@?orZQikVA5xgItpL z0^~_w!LR!Oep&4h9GTND!G+=xJSfJL)io+LD8`i4bt-iz#&p>!6OgA)(g;|O0#fPh zL7CUSZ6U-|+m~(*85kz?^`i`z1-9+JYTL4{ZF?3m^C&%o?^(3boeEp9S)QG2K{2ip zf2i?n)c95EO!y8@E1r$doId)lwZi#jwNLOlwn*_>rr)5|YqkUFe%4z7q%D-{2Jq&M z)Cl4H2_A2aJ`O^AXUd%3AZ&1gkz(T1qd3S)Q#j?wXE@HV&qnZN8j(Bm=b@`SUq!NN zJ%l-3b&cXx0Nft83}E#RA>6P?@d)(s2|j#k1a_D>WjeHJ;$50k=rB4y`eG$6EWVz2 znd3cAEY=Jb>%Lj687@}ls*82uMVU*EGsU?RPb>7nZE<&9^lN5<$Hsp7*bF2lU}no9 zV|^Sc>UdoE6DVx_HX5<;Ql{8M4uj0<3Nus?&mve*624F2o1yRGKYejX;q>3lpgzW{ zBVL2hfKNaOpfuM|UsHOwbR+0Lf~`~0fe#8uP3Kz$*7Kj+wI}$wP1fGNi~nt+OXbs7 z?UHE4Ser!8t0t%gpP^olyZsn=*&ljDQ- zigcc#sta0)+DLxAj9zD`b>=uHMNP@qv{tHr2x{pvp)7BZ8o7+a(K?Da+8=Q$qfd01 z`IlLfA@p6OR-|SKT7g9sP*j1&0*z%-nUuUzxRv0Rl;Bnp#3-qr4?0T6G^z8{^3q$> LdF#glh->r*Sv*I8 diff --git a/backend/sample_midi/practice-burgmuller-04.mid b/backend/sample_midi/practice-burgmuller-04.mid deleted file mode 100644 index 596652a80babee8fc9674c45f232eaa31efdaead..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2120 zcmbVMOHUJF6um7E1rl|^!;J}vVF%g}n?e{%VQ4x`W~j8CfskmCpdv_33<+*bTH2I| zA^BpWiAy&A4u6XO1kd@H8HT6m?)08}&vzfE<5o7-MWkC2(vkS>Rz7Uu*N_}{h#W6= z+&UVT?135(YGa#GD z@_;P)*00>@#uD-dm16)n05*XQU>OZh6^tYj8(zJDNS;()hLlNQA~HiT1CTSCkLo%3 z@=&=9omcdrmgL(W)CQr7oS5R^)r!scD228qt!|Yi$_ip8k;&L{4QN>gl)nX0AL^Ag zfC@n#R7FNrIgdygkwt<8OlRN5)ubJpc)-#I3HXB92R?(V(^$-!|jSlhK7G~Xf~t|O`s1= zpbt$z0|%DYhxTCSB%-)W1!Mf(()!To9@oUb-owk$p~pgV#(et^mX4~1V*a0p2i%4D zTQ{@xnMwce&kLJ`f6PlQ9ejqO9Qw|sIp`?|%RKKpZRrzB73ggX-Y!UUG;Zm^3zlwm zshrr+{#X9bg<-`XWvdn*_Q`34plO7w;=e%@7cl%2!kO#)NU@&wTY uLV^5`PvI2TtSXvx>zY*=HxP>LJXl#7ja;#^?QmtSJ1RB%a~S8O&M diff --git a/backend/sample_midi/practice-burgmuller-05.mid b/backend/sample_midi/practice-burgmuller-05.mid deleted file mode 100644 index 65f71534f8b13ef38e18017949e45391051a3378..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1808 zcma)6O>YuW6un48tt)pLV@(r`v@5$PA+=*tJ_e?f8OOnqFd-Cbs#Z-*G@2AvUscgWZ3uU;N~ShEh^9?CZvU01$2ULE){e4;!X$Rlze1Gz-b zQy@piWz>BV)Mb@t4tvTqms#3FRaQBa9Jvb?k^>3e9+<4MDcJxPffX^Ru~1{PhD?=G z6?T($N~WAps;a6nqI4VJa|+TEhV<;ajJ&}xvX(9V!miR#XcS;-@-|Mc0b%g9s9+L?&0dPxKP*w*aO-F z*aPl`*V`ay05mBzk-15x2_|Hp7W#xT=?_}4hpY*4oP>lCEflvYwPA15-UhQzun*AX z^sXGJZU<5KI~n}Iktwx1adE4ISz%`xz0fd()TG214FV<%Xs^Q_(9U!Dl%nsEb{F>f z_t@wlPXl=pb`(c1no=E0sF%P*eF&mHB}g7z9+~Jtm(bZMB|m2ljh-Fz*vPZEK}vk$ zE&)FSkHLH$Ec(JIMVCT*Lmwx)0!q>5nJ|>mwkme8yP}L-)ohG6Ar5y{_y{N@D%Q?- zp)UU3Qa|zcw&Fa0G5>cHl{YTBgS?EpDqlV$n%n`Jyaqbfpr^sH+G5dGq9~!oHV@Tb z0{DmTw6CWMqzW>u0ik(8NJZdSgE`|VqkQslV2H0lPVJD{SupGB0htGqgB_r-kj_`M zHuop0=dEM^x}M>yZ8q9Q$GB!)GxI*VOU(at&ix@zJnM4jf8_D8PJKmjdYpBW+@?${ ZsK}p}QAKTVwHq=zR2!wQYe0MhzW^{6K6U^A diff --git a/backend/sample_midi/practice-burgmuller-06.mid b/backend/sample_midi/practice-burgmuller-06.mid deleted file mode 100644 index eebf30cdbd320913a1481754074c3dba14705ece..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1692 zcmZvc!EO>!6oyYr)6y=qo1!K{ShzDr($Ew#qznub#>os6p`@!8CbiNSyD&ZgFodXS z%uQolnsnoH_$a;!{{L`i+NSP4{{NhF&pG!Fes6RpBI~jusg=Ke@6!kTdLoOI$fA?l zxXH`ncx`Rct84_cZQc|@<(Rd%CzU%u_=?Ts=1&V$vOmCB>M-%AxkZE}NEjFH34(HL3o z#l%k19K&3W!I?cAulHiad)bNiV#Ir)673}_Xd*C;Hc>|}+R+8E4j-p`Jl)6XZ63ib zv8GX7>@L}}{eFVD%7fP29?S;Ub)9KhI6>d`p-?>yb;Kc{Lcyy@m$w6=y zYlYQ;)uz>f(&b%t(Q5B>o*(z*+c^lOdnkQOI0keG9Wl6g8DbQy5&2i!t;HzCVM8=F4)mt`6Az!TsjrWsKA=o7$CMCmfRXFvi2t zM)7Dr-k=^DIFKO{02M%qP?8D`1(fev1{DLAjv2-=!EL(97`}WBK@7tfW(8%|f9Daz GSMd*QeFu{O diff --git a/backend/sample_midi/practice-burgmuller-07.mid b/backend/sample_midi/practice-burgmuller-07.mid deleted file mode 100644 index 74cabfbc8d259defc0ff032dadb9dcf5923f76b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2196 zcmcJQK~EE55QaY}L6jzVFwp}foVraoXyDXryKTB|cG)Z~NK2&jfP#uKDT(pkZbNFk z&B=J>;_vXM_)qYCclZ0+LLnOB#fdF4xu7>xG5+XG`kpxk~Zk3h<*>A3vOZSr6XyPSr1U@mOqcv^KC+yf1DD%cbS) z!g6TY?Szh8u{*;}aXWEeoKBu$Cs3^-s(3rHq}&;9iKkVbir)^(in%Q*F=1V!Iun+r z6AqVA$3nfhj9O^H$wN7`#O-R-jcuTp;&c;K5TD3LQ!bGMBSdfq?L_)udgf0^L zNa!$*hOn=x zgh<~T@2kpvkvrA=V0vFfNt;9yx4|}W0N4do$sTY3c6IyBz@yB3wGx-_C2svu6zYzs?IA;^dOmW+TKO5n9QHGFL&ebznoO3zx(RMwoNR z2`1k<5x?_*$Oj6Dcy>nR64fy)d|Q2ddqt^n_cg@eD_X{PV@ZYcEF-4En6kRaiE}V| z0T$P!(trg}ld}K420H#(m=Ex?@GyG!-ux;k*(hHg4>r{3ST@|z3aqwl(%4k38=kiI zv~-N|{F5qP(us`BB)Vs6lgDJf=QF;R#Nj*~%%eo3q|knaRt2-lSX*lJ)DUD)7Tp$` z$eu)Zs0?zca-pizsH0X^!W1+|FjL zS3oT>Zc1}ES%7XuTDzk;$QCe(Wox&HVGKzLzd@KF97-KXT~1sz0dSzP;c?)x;c-BC zlzJjLy)s|rm2gN5x`;z!mG9EzBHv@ahnV!Bl59ijLfVFu2m6%z%(sbbm>imTwoPE; zQd=ms&`m|h2<2X(j;%l@D^4B_sB z*c(8)hpY4*C^!i%fDqE&%UE`sMc87Mk)~eCuc!F|K>$;y9^?4pume+oG>=#DkndCB zs|kPy={BSuq}!0PIEzw?_xFi>n9^8umuh{bE#+x0rK*4CtNtNvBUblAg8k?DHchI3 za;kp<)j!-e+`9iO@>L$5FQhJ{+4Id?XBb=mV=Ez3L$*$-YTW=(tsAinjq}z+WJCs} z5u}Gy9I6RGgaY>=jUe4eDG`WcN{`ha%=r2Y>x}M7n=`Iz5m*3v;!xyJ@GqlPrw8nwPRFv~xLv&;Ap-m#Bg z>+hhDYsOhLTodC+t~KQopwS6XG7q$og9^C{xeB=oI1Q@gs^qHVs^B!ZF0)KunZ7c8 zW%x9>E_0RYRgrv@SE2mGCF+)_Gl&f2*P5T+4{KtygBxa-u92*PY>;eRCiNo!1dQgl s2 diff --git a/backend/sample_midi/practice-burgmuller-09.mid b/backend/sample_midi/practice-burgmuller-09.mid deleted file mode 100644 index 6dece0ffdc85a608d717bc9722b0b2f9c69ab349..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2935 zcmb7FK}#D^5FWEd+k)b)Nvj~Vn3GgYP{d7G5|@OSHKwMeg@P7ss}u{h1wHiO#*ot6 zJN4kri@&3Pp#P!&#D0^!nO$}@*xQ$H=9~9s=6joTadpRS+NFg$UD@WU5}9}m9G)!%*Ir{C0@HZ8wDd)A_G+f*As)dAWP z)OtCHUVSmGoiK~MjHxoHQdU4F70RVTnykPPl`^r)$+JcjR8>w2W=!w~Hwg___J(St&G8O#Sp3$_JD`^2O7~8WZTcA#i`9*WIVA35< z${kqCZSFv2o_!Ub(zPga>z;M1s*2UIDz!k&6gH$zjMYi2tUGezj*Plv1J1#EoA83q zz=s#=4C?SgjW=JTCF3*j!K^b_M~)3aH4GI@lR*o)I}7uc&N6JdyV9cfRg-PAY=MtDk9T2NIQ zN}Dux!{m30orpDe=weLPlb(z2;DRJ6J#yV)cTbYimF|?J$AwGA;}v-@s<#6ddGth> zj4+Rd$pPS#=~3^Q@m}>gJM@gVsi^kL0~h`2I)Ct|`=I&$gZ}4|S#&RV&lah_YZj~B zBcM|O;iRG|Q{-R~!4(E8gkX~DKLvGOM%FyC09Gh($_&a>GA;v`T*=7`Q$lk8JCgUJ zkd?b4k0qy%uuMsA+s&H_U$R2sl%P`qxVH^PlxCf1cT;AKORS;cWd_T1A^=4#6`>n~ zDm<@9U)TfGM6t? z?<*PxD&imu;s-5oY+(??Fp987(k$)`ZK-{%S@vb9BfK^*IeJ71Om7>9hHu3!CjxLs teF1Xq$(SLMcJCcaex!^SOXlD3Vo<_9C(KOHsIoutI4f6kc%}TP{{hoed{Y1b diff --git a/backend/sample_midi/practice-burgmuller-10.mid b/backend/sample_midi/practice-burgmuller-10.mid deleted file mode 100644 index 4bb2cfdd5a8196c7f86978eefe7f38e877ab594e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2193 zcmb_d&1w@-7`<&;wH>JhAyhNfYh$uMR}lNs9%+Km<3rc#U`g1AdU8bcRy zSAxrKd;p)oNAW#e#B=87&P}Vd7B}hX_kHL4yZ6l9*gD)3LR=FwqA>GwW9!`!{ws<} zL5N9MxPDp@ljn1Dv&%QcWJM(I`Co7^K6~9cd|!F`s=FtCh~aHnb4TS~P4qXVFGk(|$MOTJ&g>dZ<>?FXD5n^^&D}p7Wi$Db{plT_g7fpI@WIc!O_|bIHHZ!-8 z8FWK7QMAQi_UyaEQqLEUVMPorszlDJl2z4NRRnV_4FZnbBp^K`;H29G+W-*(=h|eR z5P3FPoiS~?;>HNL)$cUMFtn>uLdZ&@HBHlZS_qdE^0?7D7DiQ`BuQh_1_3xvc5Xxv0e zB?P)F_TBIud5m(Hc#E%FGFuUu`74DB zLuS3z<>lK&nLUt1UOj<)WB<+TlaGe|;{CDwmhpy)nv=W3NaC*Qb%1(A!5&bcxo4W2 zSSsqrA?gg(>&Gn>^fysDDx=CI6XMGN8@H9$FM%ByLk|*|5MO1mkQ_)JB?l6i5MKsZ z1lkC67-&PBIjX~v_`lQpm!n5+q*8(=upV3X}7Lj|k}WF4#qn1#ih#ea@ucfZ6Y40H$SiIxnt z*FcVIZVvaDqa`zyJd+zRa~p6trh|S`fSs_$)irS&c0+Yo)8V?zG})85^{?d9<-z3( zTpl{K>Eb3+u$}>o%$yE7bePk@5lt31bun_<$g!EzMvg_v(h~M-bJLCqiv5Qh^xPmAwmu_X5=ZSqEDD-z?w9 z|IKyh<*WJMjUeLU2t|`4Wm{+OfX0@xh%6a5RGp|!u0~WNYFeXvc%9>-Y7jMKTz~@z zj-uKj+DSOvktOFFs%imM<@_d6pw{Huqss^>sj3kiHF_V@@tDaOVqK=@9XdIeQdAXs zE9_;9-EXn`Iyp>Kypr2y-8SnMDD!d~iMN1>P*=_GCBLg|f2H|e=+HYjoDZ3AZ!u6B z9Iv7Q9EMg38T#=lJ2s~lGj-a^T83Jsw<>2`xW2ZtrWA+Eeej^zZ1O(*J~h^Jc$Y+mO@F&dh!@J2U&e*X;C;MdWiS$V}nCX6Nl2?C#3d zjL20s^To$`x$4f&e)jDxxmpr4&(&eR^V8`sz2E2SFZ;*xubhA7(&Xa1K`O(xYc?P? zRZ3gbr9bD=Ma890hw697HC1Rr2%7ZiXdR{n*HED$!yh5Nhj0(hMfk13{{$ZQp~v9{ z4tv+4tLvG%3^!c*B#&_4?Q|gQXoS;TGw1gEXZwSFobMb#(}Ah2LK~V)g$$aO3M~jt z74igC(3Bf0Xw9LOnp8DYr+PS4bjeX~kVpY2wr^llw)34}i@T+N^^7Cm78`ItBFMSqKj`s8`>JnxJ8Lf=5%%#(Y=r~P_-;!WbCzd2qh+}HeAr;^))eGm6x zy?MVT^iA}G@tIEseTMvYvF?UC6dm=}3iJA&J)QLJJGTe5SKCi_x^ExbF$+w?l5XY&C@KvOd z^d}KHXhe$0yf6ofjbK3yae9Da2J|zW*s!dR%VjcphgLz_!!=VClzDGb`MfyoH#y3 zJ|&wN&aQZhj1*@6adJ6nHldNKIJuMfd>hfvC?Qf9C*ATOb@7eGyh#nD6y|Mv`WO70 zB>tx;EWRY3C)IGzmo&MLpMvT5H`lY^DKdUCtUj1ha6}UvVfef^sZcyc#=05B5r_RD zN5xMY>qJU5iX?8qQ=+~brAWC(k=vw5lrT`_7T!+{?gr(%yrHj&aK{U^l zah}QORruZ#n>kucHjB;E?-fphmf!oBYy;cEFC6tH5TC}B5c3^k0wYms&$LfKJH{vM z{5R;%@400EVp%_CWtZ(j%2Y~ff0v<)|I;&H;(z*fdh$B_PK(>z`1oS5DSv+LHY=lF zAq{U+I(y^Fsw>Oz7Nt?*Rw|cw2P^W|tXo&>x{Rv9T6G($+mO-n4Z5YEOM+Ad-uVge zRs&o#E(N$4A_=-B_gI5HwgdoDmJg?ZgKkBJHTpqXQ{9>j4-o@?>tn&HRIM@ohi}}X z`Y$T3zYZ`es;ek23l$?Aj#+(96Y=BOM~d=DQC3x2)tsXBI`Vj2HsfF{tE!?@6_3`M zi!r?QY?0P@qZ=C(t32L5-=LHQy76f2Z73RMg$+{cbb}7ZuE7S?*o_!$>6+^DC2=A7 g%U-?+x<9BxBRQeVXer_^%K7(haqFLXNct@P2Yeo_v;Y7A diff --git a/backend/sample_midi/practice-burgmuller-13.mid b/backend/sample_midi/practice-burgmuller-13.mid deleted file mode 100644 index f7e221524b8136cc1ac433b06e0cd9eff8357f09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2337 zcmZ`)K~EDw6dou+1x-*AXb&d9&65>FIJA($X4!4KrB(_d0tszUF~m)1FnVmE)({h& zlXouu4u6VQe}jkmeX}#uDd6qxd*A!sH}Acft<;Z?gb?FmM5IQ3SL&@3e9ek}N{D_f zb?0hM^moU`M$>mi|EWmA<9`sIc=_(_@!4G1h>yfC(Vdc>-+SElL}yEuO0Y__q8G3t z<=a-io(J6d16g|2IRhjuBN~y&(9^=#C=*-8a|6?0g=t_i` z99zQ0uxJKZ4a%LyvD4CTLXV3%#a9YA9EXi6Q%_lC!C;1FPI&x;haWnuI$JcIEh1BQ zKO?t@*#bq4Mhzj$WhZ1??D0qec+k2Q&aHaQ&T@*->@_=kRERiBpd0Y)V+3h<&L=T2 z)bM}~OGHP*Fe7R-Q67xs7)6~~*3eZkc*R__9vstQ9_Ub_9i9+80Vk)l z21;v2`j*Gn%z^a;sxrH9KH;8_%tlXgF3u8iL1A=fjqq z9^N*KsnNr|sm8c=n{kTw=Cr*D4-_Uh+ol7P+#8!7#TUnr+s$H@uu9^YEYc{#&>oD3 zo&cVZMhHWD7L8{HjYP;7izeiNH6hmp7?#jHivv%Yp)w91(TKoPiZKHSPWG4AU+oq= zdr(I*J`vb}A&ly{!m#62?mB0nJlqNL1eTfI4ilcqVGQ<9SNE|2DvQf8bmwk9nD&LS z_uFR{cMD@?I`zQd2yvT}ZNoc(4S)>1(=BWXF=#?4y5$>a^l`VD6;s1-xO`NTJ>se**iSHEogOqB=)`559Mv4I!{;^T_K~LUX~{> z$m%96Y;QrzX}#wVF)EYDbuR?g+kIZ=b#u{dU2K4HeJT=&l3PMgfNQEXY-QR^5>HtQhb-N&}M@E4P3(;esKwB~~B_SvfFk!{NEE$4S4g#}=J8 zdRB~{JoKQ4tAieXMCfZ8Qa?Y3g;;(NV}F%r-|e{aTu#X>#b!l!QfAkG&cWge`~#@~ B{ks4F diff --git a/backend/sample_midi/practice-burgmuller-14.mid b/backend/sample_midi/practice-burgmuller-14.mid deleted file mode 100644 index 54cfc26e4296fb4814f1839517dea81abc607812..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2601 zcmb7FO>f*(6n$Ybg(894P7sw!r>SR=K^1D^e2hvQWz)#_ygma#spWVzPQWsT^@45HfbMJd^vO9QsB80dm=0s)gzum!a zKjG_Bab6MPykB|$&7wFzoUgoh`vY_T7boIhF}WeP!n3=l zTVl8`-2})b3ip6Qg}zqkERb7Aj&zT1B6a*ihDYN=Bs2j=k5Th0=uZ$>DpIzYvW=AO za>{l&C16T`2*7oy^zhM?KBK-EZOG(k`15HZ=4DEdiiYeGbVXJ63Hrj4J%S!05kZ8U zm>>qVL$Cu%>sYzYXaP;Yp-GKsgXkmK!GtL$?1kzFg6RD^}d;B?wCY(X8!}+t8 z4NN<>Fzx+!tAR=c6)lIoQZB_}bOa}wMQ}5+PSt!kD<7^Z2c!n&Db3vGG>lOQu0wSW zZSKw*ZYl3=TJk8(aQAf04b4cEx!aLJuN0#tSKNTaw1G0!~4#v^Py#=i*1 z9%17#Hy-gF@|5}h04#v}08Fdn|C{)(BMYf~vid^c)nzwhspw;FAR1-@);q=tdEyHIa2^D7`g{>_Nx3ZR5ux9L zbSdEScg}}EfFllkZ~?A%NDx9vN2;>T2prVpfM}o`_{u?3db}eZ1vs7($mWDV7P0c5 z3JjG+_-s&~qJKh=0K^0_cM&_U9s*6il*z%_GRUDP<1SFFQ1q7vRQwI8{DZ$C*VFHR zFn>aXw4FEKp4#HiJJJruyFjZsn5^VzM#!GxUa!bjF#6@RC5E@;CefxCE*o?U1&G;V zSd$Ks!@L4r%}y)VO3GKWxpKK%-nV94&1PG{co!4B?#VTJUdv`fY*W}UV8BF3pI<)0 zelU6l{zQFj2A5J(imQd<6lc1rq?d1XdyZ~T(CrG!mLBbSqMuimPuC&mz`6l??vf)j ztiC3;bXn!1s|GgCfBZ84Vi6)v=GvKFd%3#mrA}r=K4AR= z_%K2SER$M>w2qW=*6FnrhSzm?rH{1|#nRDp9Q+edtMU=4(g>g)fpW6$7paz__GUOV Y+tga422@|&fzYHY9sln|AimrG0Uu2^T>t<8 diff --git a/backend/sample_midi/practice-burgmuller-15.mid b/backend/sample_midi/practice-burgmuller-15.mid deleted file mode 100644 index 83948e4dbe6a4ad0aa1a0493118069e97d12abfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3015 zcmb7`UvJY^7{*_eiDr|ixM14WZd!W-7br9;R3@rPN}SeSYuD{Ch;`DMA;#E%NJG1t zCTN_tQW2AmG->zT>~rj+?3;AYW1n;E#c6;m|NOk~`<(au@kyfO@k0?gFXyCo?%ybR z{seEI$Z1XFbhkG1Wq7AT;Gz5@hZmK%e*DFO zC&N3++qAS}>25~H9`c4SkvD5#(LhzXU_#ZLYVs6iici(Ks+63&Y`!ZOl!iqErJV5z z&YGN3vMtxiQ#zdDTy1rVPc^xu=zglLPBk2_DwU5fLfTLP*DjDn6+FlwomW1|hom9B zrXoraj)w*mZc*BTqybs+KBO3hTLi`eLcn81@DS<{I@l|h;L0B#BQ|=0Sh}qok|U{W zHPX@Vh~9!1Adp?<6MSi7JV1<)&S{r&23gK6wL5_2t}Ll|fbn9q5;MfAh@l9fkf9LG z#Z+P_5f#oi{259JWs~i0qHo(q$Yw+N+=Q@%%;9V`Ut6xZk<;q} zdKti{hao%{3fHLTX3Bh_=n$Nl!|n13KFT);nKL1CCS=aJ&$YrwJKM3)23Mnp#k@_p zEjz0H0MLfw5j;X0h8||20Y@}fu&+71i&9N~FT-kiRheYiWrtlXlm>k7Mme*2+$4EU zDcLG-pZmKtcIN2S@~SeW!)kI#v2)i@@)@5OKInj}kX;UY8Sru-WtT$^xCtUsb~)sL z!YxvEIpi?ma^RPgnd0ma_~WB5hgo|$T(TEIJmGR!MIP^vx?06^Rp#uwgLg+}R141* zo_V~k<8x#0Gw^19eJp=o=cB$${~6`t$?+UK9gNq)v&Hf8EXV)rP$?Y!Y=RIUA7%e+~sdD$$Xc;t?qK_Pw2EfOLM-@I<48N!A0*6 e&Pu?Y3b?lkDalXa$#+=Y!(UXh`}YEfpWJ_BJnT*Y diff --git a/backend/sample_midi/practice-burgmuller-16.mid b/backend/sample_midi/practice-burgmuller-16.mid deleted file mode 100644 index a7c593e0c49dc4b3de79d8278e985ec875dce41d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1740 zcmb7^Ur!TJ5XFZ=RD2-ni<)3ULZ6HZA*QvZlxA;syS?qQwiKd-2pZ5D0*QZLrGQls zotBr{rIFWE0`bjh8Q4ZztTRI~(#_4z3t&cW&)!X)hXAgItpH5af{T zC6Fy0W%SCooAli^?#kX4d@17)9GNsW!3HRrl(g@`4oO4u2|mChcu1?#RAr?qr7B{v zJFHD5Xm^xB@pcBquc9x&1tb;CknZ;+mGF>L@0C;^IuB0v)~Mq?9b4i!w43bSIxqGI(c z|JRu`p(owT3M&sqO4?LdhbN3HS8XW4a}fA==TK7Eq%bQ6zX&CG`vSmYK|;`iz!o}! zI8>v;8Ty32^i)DgdSWGQJf^d03=Jv`D0M=;*CI8*)1;>f&oW_|u=d#kv`l?1Om9$W zNZI&Qc+>?d3;iCSiVsC|C3t0z5d0Ge!8EuV47sf1O4>LaCjVQC5G+76UW>p5P1zEx^0C_-;kOPFCAEU-%o+YSt z7LB3P*H^g1(TAv0uP1WD?tL_E9A-Fj^u%P?Bg0ALNI5xppPa-2j~7JY3#SNQ;sp?$ xrEgX`Ou^#H2B_MB89Xl_|qan~||r2Vz-(HYhcQE{xH{xM*br zKNh}??%DV|{2y-oC-oe7?{$Pq;-)!0=e+ywyZ5wV)Y%b{2^o{r*zYiU`2ye4GDwLG znyHINvod%zo=RmVWssK>dHfgTOAns!c3#capLBQRr^J_)>m6L}xzc~A+`u6JK9En& zTL<#wz=iMY4f<{?cXNLaXj1tEzT}j*3C*MCk@6(30)hZqomyS`>7iX0i0`Vp*MAK$ zZ9rxSnv|N7Q4J538Yl_#EhZ5JO2bA#pv>V!0hFneS?c+P@=QjomVA>+WjOt1`K z8Ev+A#W!^y?PMQq9AiUGg5##!x@nh;i_0{~48aur7LS@YslzRTgvC{KIhxU zDG#SSGOX+pxWiXu)C${JVH*S-f=9ru_yj(HU60Svlc^EZ08Z~IF6hyZjKJx0R|Y%Ns?^@s$5i6;Zy*rJ5@x#a(!VzqqNjr_by^oT$0V(c|8ne150q-2FCCNi7g8NLf|f!_{6z zK8+i#Y_yWqt{d%&(d@YoGpfi^MTyr9Dyssig2Z`)N=Az}3@WKb_sg~3qV(qt1-~v< zhKLf2tg6vSszO&qJ_cy){T?3F&!cOgN)qM%Tb)c)F_m)(Zg@w5w-uzHQ%gikyw`Ai z4!B}col08teiSlp13f#w|^2YeQVU zm3ubEpW#pOpVV{Syf<&4B_{07+MISGHJ(WK)dZe1W@aIR`ZHH4}JRgg>s=YS$mJ>&-w z=q?vu@r&Ul)&-h3`x(uu)tvH6YC(As+&z{U(OsWoZp9i48>O-9VMY$;b|4kDO%EXi zf;P_Sxzvc*d)Vg8K;n3lT!XoWql+>T)Uro<1N1%8NkSy%7yPVdl|c7LcBCs9KJQ2J z{QzIcML2gzaEJ<;1i0oNQBp839R+0zHYJGl!;SJ>15ArjdbZ%KUjzpao)EWwbk;-Q zJW~M-_O^a?R>ggRafBv4Gz&kN_LRxV)DU=)JjV+$bHR<8xnLcV+{~G!IYUpI$!eM$ zUI>+N)B3WmEC-gDx$JUi`t{|wF6GW)`4fe7{42I&>sQsQfN@mOsHr^3B@3Po$mY)N z6wHQQu3heJZJbBXRKuxhcZza^a?=*;wFM4K0`i2I|Mr*rIDaJ zd;xJhHiROa@jyiHWv~qi;w7Fd;oLUCHgYC{BU=n@AygzNf@C6CDiccSVk6Kr>SF73 ze&<#_^%EO`=FNURtFHYbe0eAu&9ErHJ8q)2Z%20e_;u&i){#r!MbNg>h<4FhylY-$ zEH9Ogv~&c&Pc0ceR`HwhT0fS7uc8nLkJneN+D{)@_kT6_8UI)JgZCfOzbjFN(&b6N zAmbBNs0^P0jTS5#zO`tSOHrD2u?){;7t}iS)&)F+X7X}sgS-v;ZdAr4pjWEMP?4cL zQJx~3M4OBm1i7i$e|T9HV+$2mfYrpLD#5CBa1tPo!50V$NEuGYa?YkW7Z2@D{ODPm O(V|)||5}0}m+l`%BM-R% diff --git a/backend/sample_midi/practice-schumann-01.mid b/backend/sample_midi/practice-schumann-01.mid deleted file mode 100644 index 2a9fdfa7bc9ab089df6c185632a299f3a13588fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2837 zcmeH|Jx|+E6oyZlhyqe2wz5>p#7Z_Ka3Yf{%U70N6TZZlN|X;(WN7&TNrS9PUGBur zg4BP}pVEI~-UHE#k!zG>V#xO7eBI;soO_cTUYv@^lGLPL`5C9jL*z54sR zrsOA$#=G@p$v5T6-PnYCb^r4G;<{2gl48MmTR&)-)rJkDC!hLP{0&mi1=-`Vii$JKp) zHkSV2*;t9cp7GTX=XrPip(k12d1l-KwVY8ffL(>%qQzH>U$iibE@pK!xKj+Ks~k)V zvuI&IbkV}oX_+aD1$VU79kfczmdX0VEm_D?Aqz)2lk#2Fxm#Qb3eGy^nQ}UeDc6~= zpJ~owOk108KQ0M&ql4Wrx+Lc9ED2ks8diI@=$ZF|mT8n{oj~gZ#lg|V%A5|{po_tb zp^KJsKjkTxV|W(pEVcz>qTtlIY@u{?aW|Mn%QVWf&WziFOXSIo@4W7P6QqAw4?~8I Aq5uE@ diff --git a/backend/sample_midi/practice-schumann-02.mid b/backend/sample_midi/practice-schumann-02.mid deleted file mode 100644 index 78deecec9585b510217d52503817337535d0b777..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2127 zcmb`HL2uJQ5QV2rlNOKwaVbIq<=7rjtf)#04sdDr{)%{OD8o?l)NQHi#wu=V@&{L3eK+NWuOX!^3S zdtIjK+nw$0$9pub&}@6>Ot$a7`uO4UYdP!>F6b9c9&*r1o(=;_N)R12yF=>_TwI@M=fD!^41hf#y z7Op@*r6?SW>YVhqdxqtDWgC|E@R-PU*)7D&W0`G`Bf~7T{yF`I<>u3Gd>4bsT?=28 z<~hql!?I{tI_VHCv#exUj;~n1NgQcL>~Xg%steT%zI*ZwroWcLPx-an>AZXY_s>FH zSJ%<7PD#Xde|%q5>~g~&eI7O_j#xn{iu=~uG1iW;TZfVp5m%wA_F8|XUu5~6;Oq(R z&`?rD#OWRBn#t!`XH7oaFFkAW^>gyAU$4m*t;~lzgr6{Qx#mwE4QtfkBZwmrRfwtx z6W9h?L)kSO9)K>HsT{NXgR@S6zo?t;7;^usvkt;Js5D!kgG!yWWMxsCCrX~LSDs;I zH`kPGmzQCc1+Szhd5~wU(n(%_YR!}_23hutIKxV%!?4V%k!3Z0!u95lvh)$3@gEN} Bx2XUC diff --git a/backend/sample_midi/practice-schumann-03.mid b/backend/sample_midi/practice-schumann-03.mid deleted file mode 100644 index 36016467fd7f7b613ad66c38b19f3f843951bbb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2651 zcmd^9O>5Lp6uosutAZeOp%eQiexoHtrfwA_6KB~A=E|T zZFJv_zr&y6KN-(`iPzv`Lh8aI?(RGHaIQWs7Jz zX|11kX!)YuzH;|EEgw+fZhwON=94$Ck54+`%Xf$LjTX0c9OPSBOtYstieN=-g^yu{ z276|(T#3pgO>3ky_(RMbVdpZy#C=n%yS{Y;NAh4*TP$%RpgM`RpBq|Zd zoQCP#$%cSc`tc!XofvdQ7D#O%W;+Xz(Bv+=3sc#2%6z!f#(n)|eTq(5u~;;WOAS}( z12Ky%7POf@n1z660V)&^f;0zHU|!C_2ABtPpgQxwaR0+wQm*EN+n8WSD+^S!wZCo4 z;=WFv=UsdNGhauKU}2Yh9ge>EQ0v!+boDbnq#N<8Bl(X=d*1mp^C+KcPtCiqx>~WJ zV7P3!Riw{Izlzu~cAWud4XRl_BYr(%XEnL22}8SblPtS0o6n!svH4uCKGN4dKhr** z$x}H`$!SOT*y_<#@3FB5W0#HHDk3p`cJ<+M)tQe;n)!9nb|J~PU2?|-d4P}$LS;i! zEmyeAm0eOLVj94DBxDDJ90{+@w<( T61lV-yM?d4;nxl}ia+NcZ_ZCH diff --git a/backend/sample_midi/practice-schumann-04.mid b/backend/sample_midi/practice-schumann-04.mid deleted file mode 100644 index 6e77758ed1b3162f193f1b7debf6a4449c337fe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1353 zcmaKqPjAye5XGlWp@33}8>kXeF2JEgL}}HPTPw1>aveo!1+@G*8mXi~NIo>Vgp-Zj z2*PFQfqNyy=isC8O~RY4ciq}4x98cJ-@NDD{iESA5#6RGsxAH9KRW${uLm@*5zSxL zRxcVff48!-{O}IVpVQ^>@-H0Ud-d^TIBs;`$H(-CvinK~(?^M<^iTyosDM@Y0xHzC z*Sa>9O2*#^eUS=S1P~#MkVZwt_V|3{qsL?6p{Em{Q_`W-yBRcAUGDA{XkM00lpANO z*ytoKJ;gXclD^k(23e2eqNnUAvW^amrgF5%I2xI-+R=a=t;5k1INGs})`}(@q{oSR zNMtKl{#rIrz5)3Fg&ZxU*=LoHjf{v?pFw?q%EW8dFdy)I7-t?x4%R|+!7h*4>x(M! znW&BE%hG=vDo5@Zr1L*y{v)qF4GlVbtb#Yw7F+@u92h0TpB^st%3B@ct={c_7}%#u zO1KwMB4`>ZA-|qLP1H7vZHT;*){D{>pKal+&7uv_WYHuvwdIckl+sgG?J}sf1!oqu zA6^Da5NW9Bp7s6Idy1H^@ zwu$$7E*bL!-UM1Nv%g$|TBz}wF s8*1?nYOxZG5K!!ic`D&ALuG=x$#%S}M8gCUpB(rVv60ylyhSuLZ}C-%{;hRs>wE;bu(5@{FPDN zxrCjUb9v5xW)N%J9<;U!i~L5Z1x&aMrb_xk>C-ioBV?}d3SR9o=*~N9N!#Y z#Blw>#{1vCBAOL;kI){>j7rJi8%@6S-M5(PR`HkVhJh*E~DidFNJ z9{nsP*pIKRR@7O;vC^ZPuCOw8m-^nN8MuAWnSFk`OUdliYfrL1CiNbodZ#V*Li$Kv znVIG(nmIHLsI0TNe!`P?R;i&UKV0P@qV3?dQVZk15|I` Mx5?mV4-sAZUw9dqi~s-t diff --git a/backend/sample_midi/practice-schumann-06.mid b/backend/sample_midi/practice-schumann-06.mid deleted file mode 100644 index f5f7fdfa343c5d3a412a3194ed12282cbaaf23fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2185 zcmc&!ZEMp|7=5-5oqp&lq7G4LoemVmh=sN`#9$JWWsP&$6bCJ+Y`QTP=JW?N%^GzG zyZB+>_r>4gPtjje&&_g^(w9-j)NiNHbMoBtoO64f<@Hq}IzwZW8T;id?`-1N73yS& zI*XaJhk5F}niwCSo}|uwI%-e+M*FCjcS;O*UOF3?9*02~0*+t;|Znd3(P6CI!5LdPPOhYJ>5NOsnFMUN_pQ;{!{a7t(K z@)8z9%jtF@c2gH_N(=+HF)&(r8@A4%70Nh$9s>a^Dq$diO*RGsIB1#PcLFE4*ymI> z)e$?zgMtntiY^fiU{V)35gjMSqXVagRUHl-kcTH$`tLfT#MVS&*>vaL#InMBT{tC) z#B`Auzpl}}?cyZ&t~aqKl(oxaMfXFzzPRA!h5D(-Ol&}BC9(4DKTy-VIXVio!Db+ba> z9%^ z0IF2SuE8bj8tgDt+uvxas6YACfflX^3zOs(VWBH5OjLJqVhdf7MKIfEVSOYE%di9v%G6ppou!N1$~w35 Y0=M$<-Ky<^pIMh!qvn zOvUOms2JTr!x-p!#SA)gE(r}nM^y@jTxFEcD>j@)rr6XFVye7$RxDPd>{&6xFt3HmjDbsdSg^b=Q;SLmQyT?Mc>=T+j!R#DFa-?EvV2&P9)gwF{2PLT@ z#vtMkT1)aN49xQcNm!QckQ@2zBerthzU>6+>`FqFPOy%NCN z7M!axy$R|JpymK|iJ&$!C}S*$+rln!h8S~3x1vFr2JYlDl^{y8b#Nb@r_l#N>K1Vs zLEY`gwlzL|u+B|Ee1MWu*)shVRgFNxXFR3~sEdL+jpqVt?Di=IU1(3)>N=uk)atYj znbq}ks+KS&G2dr&rtgM67#|sj^AnmaV5=Jy^H!&Y#e~hlb;zu~CZ<)ZN5S*F1;*iQ zb+ZM<&DGt>TRpQVEv$Y?)NPT^`>!niGk4UrZ1pjCp^A6EO#a)jRyTs_e&n~xG|qqO z%>OZlBCFp3)FeTz0?K^g*kbzX)c7Q;69Su`UzD6NX!RMj`f4y8rdS}WKMyA<6WS{wSIi`?t_m@4o?XvZfM zf%=ZWN6|g%T;S3>FS!Ax!evLfbQMGA2(^aGy16G@xX}UM<_Nz2+ z2QKN2na)8!%+{ePw`od_z@S6k_)Ha9w2dwYQ|Qu`b|?^{Ics#t8r$?RS@apv;dSIb zQfbbw`r-qx!Fpqg|56^c1?5lFQOFNhnNJ701id9vz401h6GZu@N|ouz+s4ZOnJuTh Y)w`g4P1~vRXd>@!Q@r~})NhhE(RP3IbfA_GRB~Log=6d4hxg}S8{TMgrhcjLhPK`4?$lPZ=h}S)%O%TxBEA=~ zFB)ijGC#zRXyXev^OciJGZ7@`i@7J$>WpZBT760c>;LMQH_o)q%R==d0a#d z>CO;$95NhuBz*k{6(->}hnt#HpeAZAeCo`nMtpMd1}t?);5YM0+TrKgv4KyWsn&?9 zg<49Wi!Ky*T-srVk>iuZ$J0o~OY_$G7jL6gTiO^N~h}KFcf|i$%Wh2t?ZKlI6lJ zkIp=GXQg=4r1%WmklM4F?vZE)D6>c19;omm=iCUGF3_kjWE0eTO_LqfY^ zlX7nbYR|3qj+;b}#y`Cb*-c7@DDMDx>&S62eW6stqWNKo5ozIHYrXLeE;>?^``1WjfF48|P^t}D2sEx4xAxKpUFqgLIEXS`h}GDUDS b{VCLm%%UgPwy4hZ?%PA%>Hln?Hj?~bUpV62 diff --git a/backend/sample_midi/practice-schumann-09.mid b/backend/sample_midi/practice-schumann-09.mid deleted file mode 100644 index f7ccf48bb9b51cbda6ecd27422c4038ffd32a3ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1979 zcmchX%T5$g5Qb}Hyn`Wu1iU2}1Flq}3+RqaS~?9*+syzYWN={yMZg$m;br4&<^tm_ z=vldU;|ur#?tKa01izYT&NND5G|}CEs{Z=_sye4TzO%U|B1a@6J(=(Eou`jE4ashg z$nHYV(N80?Tgqk+4Ih);tI|nlzmPt$_-JGE`N*x+%9?zYt$q^(t@E`&>O~WVpiogX z4~i7UOQ2XvIB*cos8~8=Wv)|kY+X*W5vvI4mrD7Svc1F_y(V9&zo_MmlM`Ev*kho`-DP5+th*S}&f*KSg zi&hoe6|@~lgXq)XG7T0<6r}{yrKbVN_4`O^=T(~3E+VQjI?{8>hGAA=1+Zg?VrJE2 zwp{@TG3(6Ro0y*DOhPr2d50Obd5u}G{Io!Ii*XX%>r-gWAGE-;2p)sgIJ_s=EFwRO zm`kez2yfD9r}c2J_21k^dx5u;1(sNg%b)|ShIJHVD48WdKSo<1GE;Yf0qhu}>+>KA=T29`Nn4I4n2fdp&Q;Meax0b{} zuEt!=I*J_4-t=4L+D$1NPk{$;6gU7^feV;WFp-Wp{*DLd4c`CO(KeIwcLtekJHoN? zMA3}SSk@W6eKE3AQol@W>xh~5n=a(B+O)Wg2;Tz`EfaB=3@|}tQo*E*G5sr@Y`f2D zUbjBQeX*3!X;r+0kCXNp+w*aM@p15ZJBm;JRCnKY)?~YNuX{W83c9&KZzbSXd<8zh z-epcBx%7n{P@l4ctrzb2AKDkHr>3+84yd!fR>0cX22y2-HuvYDxXl}#{yYNGC;bB% CJDIis diff --git a/backend/sample_midi/practice-schumann-10.mid b/backend/sample_midi/practice-schumann-10.mid deleted file mode 100644 index 395741ed7029b6a7d72dd738c96b16098ed0b6e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1821 zcmeHHyG{a85FH*-w6ZYK0uy3m>4t>x2qC+Yg$;`FfyROY6BLY*f>>y@faRfy&8_Td z{0=|GKUvSf?%joeq481JojY^x%$YNHw^*uIiD-d*6!3i%OU-MX*2oGFS%-neL4>Tc zV9>uFB5RvQ>EJ!m%STtW`fbEGZ&c}>x+_B0`x`Bt+Q&jKILJ5vGB{?O4AIMj&>N-- zUf2P>k}x=AAY=oC3LGjRWP|A}m02oSYNJO0omHnQmq$qFP?lL)GVes5QJ#^fC1}RP zO|W#D-f})+UzeX#7*wz+X%?LZ$TiF|CdFwqvKeaSC^0-pQ!#7Vy@9JCOr98C_tsHy zQ*I#aI20BdSJ#l5rw+)Iy)?U*)B_{R-km^?0S@n9_QG5vJ<{7EM~dLc$jmz9Tbi{? zIV)E0J_p+o#H1Dpyl(xw?tHM$_P)pU&Z9`5_7%L=wkouJAZ>{9uly+8ACSL>AJEd? z#ijiJkWkWtN=u=BMJQSG2Ix5;l8lm!VvJ&B?urbfj0d?qWaFHTb2h~&#mK#D*XwPG zXtvvIMJb17019ZPsXG*xS=1`fD6 zG=$iSTSa-N-gD{S(LbgCiTlm&o7sogI7mJ8(36Lmc{AU9GxOfM|KRaMrPQjrqL!}w z-GA`p2mJa#oh>PK_VLm?Z*uDF%jMOj>j`yMQla_1BbeX)cv&v z^G-f|)>D&Db*l@h6-f6*`Ye!6T-_T?euiIGw+7R1;g*L0O)Jm@LQ;FA@l;0pB>0Ln zaQ0M{O^HZj0wy?Ml>;VO$ndEo2h2iqT1LPF?NSOC*&RyZr~(9N9Aq~_QnyLdhR6CAM00ZD^g)OVo;0e3L~tI!lN z4cG8DjX5Yn_wp%(gNRC(@VUSzb&4Q^Wd;Fhf{M2Ba_MA8oYMt`pPe`ITzn72;`v`vQ)C1=kGpQMOsckYy~%+ z!D_WTSj8hoFRNJL4U{WJRxuH~stP>B#0wDm7&bv@c(JZLAzE&_^Q(x_@&+R`Vj0zr zFtaHTHpbPSf^Ll8Yr2oWef;hYhOn(*LWi)g8GFju*I*yRW}hEHw~QF0K<~ru!!CF| z1neN7hk%r5eqs(B0__=~5iqjb=Z8qVf|$cVe?j6glBPgm7|=HXJs>1~2qdb|2T&IQ zeFSu85`_$L0vG39oOck{Mdc3S(r;-4C!l~-IR&K3SszavQsyFH4*^{Sj9NnlkbMow zIB^KnF+gL9!=6%wi&NP*RQ8c*w#N}etS3f20QJ@65LD7;5v7r1&s5$smCx@XQA@)W z4pASK&kk2eeUx~JT*T<)M^dGD<)7lg9Pg3#=}^^{BB#rgc+%M%=bG35b}yH`G$ z@{p zlXC6Li;~2A!?~*}_7e;ZeE{%_QdwZK{?8x3FYasq^OG&w#HOx&1gS<+)BmH1H$VCZ zWaTOT0ZH}_9?Ab7O4sUdzJ~kDLtS&HUqC8Bczy`sIH&8Rsw)=)RCRTHgT34tuhR_} ze`VG5rrst0U3Gki{Uz$OC~ievA-9Ucff7k2^?UpPVi*`DfgxU794zpf3nLDDn&y)L z#4w5i!`FLM`X1QWBV>D2N`q7ls2Zed5JASv6|WqOfYAUO#tZSAQovgENvZ?pUZ6BF#liO|es>zwQB+~_W?yy&cTJTKL0w^5^RN~}l#Ug-!yX?Nc z{;aH~UvZ0Pdw~M#D1Zm&f{xvQG3XeenUOybWVe#urjy%hvLVtf1_GVw=)!KM@fNmCNlGIyJ0AhuU{a9Elz?G~t?FVsLJJ)- z{ytZLJz&P;EqV*%GH$cuj|v*f;c1JOWOj7_?UHQpk~q91D1~S8r#M6Z!DaU9sxCW! K<}h`11^)wIW)749 diff --git a/backend/sample_midi/practice-schumann-12.mid b/backend/sample_midi/practice-schumann-12.mid deleted file mode 100644 index 150201f2a5fd4d96d89a78230f42eb91ad498381..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7346 zcmd5=&2k$>5FRBEu=YYxQUOI#IF-2KO6*9soG7vtdu9DOibd=sP@JNrDuDzFABb-` zVA+n(bK;&0ufUDsQFs&c^=^01?5^YxNKu@&XQsQS|Gu7`89sda*cfxc6wLX;pTmbg z{eaO&=JdQVr@QChdo^oLzkcW3xsTsBrxlYdmw(4{@&2>#p6<_XeY5x2{9%qiu#4T3 z&kh#N_<^kqKvjrZ+|ju&banjElC8`MR#lIAH!F_~HF3f>$S^jxaFcMX^UqJ;b9; zL>oLxXcU?7;@Tn;TVQU&geFW_!*>lPrpIEstjjoH{-VS~vsrd&y-5b$#2#BjP|CVQ zbm0#ZCAn^>c8{1D*jHJwWPPh-V9N4e<>T*Yvn(*GXa>5}KqI%}`1>IAtiq%m6cNLctDc zW{7a@60wV=9U^udK}#@UH&=aBO@1}ztIbto1l}2hY8|x0Z>$}FtGs>x%#w)c!5#NvX!N&*Xq*>ElBm1r242}CRSf@TJ?EJ;_6e3QYpjm z0bs+`SC;B4<*Kjj%22DXi&S>uzZ8Blc0h3J5jxfkDnCN^62KIJ0+M(9J&b!;Z{tgR zTlj9_D||Aa08Zxr&i)Bd)A9l9b@DyrmF(=Xo!R{dux9{!`uO(o-Ntv@voje7YIk-$ zEg$6MhtM~KKH0%-Dd51-TrC+Tpdf?v-wZPlj0dN|y6FGN~IQa;+&mb64>Y&Oxn%!UQPWB7XkSUPKAtFVX9@E}+0CSlGn*<(* zS3FMSM|60^iP+{upn1pZ!?+Mh{|pX*0`KSex0qk_bup$yh#ex32pxlor!)|6bafUp*8T(D`+iFKr5j=K^q}{6G_AoGUzRCIf zvKln?b;i4sayIquTL%6R&NE+U^7mtc5+T;LOX&_F(7Yc16X5CN4PR$UazD<$&gAdM zM=$KoS0`1x+>ArJ^Mz2m{a-@7-MClW3%}tNcV_#^xB7@{?8WA*=-{F`iR{Jp;g6sq zdzpyK=CEfk5p~HN*6boti!`@F)C$;`z+zTXb&W(F7Ab}es5E6wmvnCXN7isUV8P9n-*nhBTB<4tRj&#Uk&n}bbvKfEq zJYkoxDO)u1{M8UJ*YToofnOv;p|DkhHf^L0=eY>GV-dTn%Z`dvvSwSv)-ogU7@KlD zz|YFYp{)~JowPZM`63nAuuWpaGni;|`~VrPt&<9&LgB|8hyJJ`+ML=@?RX$11Oata z4BBv0Y=%=i!5}!rdxDJxju!xh<7a?X-Eu}FyFhj?P?UM?uB;u_u!tNlpfs0AZpqvg z_K~fTT#brpiKrz+MG1zN+gVcrvv_gjg_?a-u1ME3IC#J%6IRVYA_$8)(y)O Wn3 zu9~Bt#h3t+mWbvIqOu2BQ@cI zORNKw)NUwUF%kl?=0>SaDh>wB$n-gGluiH^Wkn+ohTI{KKaqZ@9TFS3b|5W6yT)N( zTg05G8wr6uxkb2^s9h3zxgQ|2uD3~#&~Bk!&UHn`6XHr8w^g;xyOGx0Z Qc>J#IZvHxpIXb@n0>FF}i~s-t diff --git a/backend/sample_midi/practice_collection.json b/backend/sample_midi/practice_collection.json deleted file mode 100644 index 2a21d9e..0000000 --- a/backend/sample_midi/practice_collection.json +++ /dev/null @@ -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 - } -] diff --git a/backend/tests/test_library_db.py b/backend/tests/test_library_db.py index 5f10bc6..0ef4c50 100644 --- a/backend/tests/test_library_db.py +++ b/backend/tests/test_library_db.py @@ -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)) diff --git a/backend/tools/practice_sources/burgmuller-01.mid b/backend/tools/practice_sources/burgmuller-01.mid deleted file mode 100644 index 4dbd99014c1739ecc3355fec58397aed368e22f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2564 zcmbtV!A=uV6n#)cG3dgDOYPPTEsa15O*2iIv?+7cy@j;STal{QUCNLWmF zeukf*f8-yG=e#%XQZodGKzPl$@11+@efQqi2Axj>rPQ)oP`QO4L1%Of>$Qq=kNV+o zJPJ?p<591Ftm1{0{^+nb4oBO07|$99Z}R@p$+uVGaF8#pt#7Wa=P&2a?go_-l0_46M`z2QLpx<63y`$gmu zwcLplwE%nqAHXB<0Gb5NY#b^^9XfQBmXF#M812Mpm0%!>rUfrx1kmjefFHF9z>Qi2 z%tkn}FgWo{c4fl8-3Mk&v@+u5p)JWZ>w6+WTw6WvShy z)J--4B{DR&hh<84xM7c60(eJtf;x+9k7OLgz2#2PGBr)wN+R1T=i(t6K?Y9KS7J+UmflVYxj!kSDlJ7jNK?AYP9dG9oHCLx7vUyx*e2=j7%b_bOnwvg_S7H6|Mahd`9+u&yK43lYpZ*qW<>=9YYU498(3v~ zuz}4o4-=1K_ordfgPw)NLrWE~K@Tf+WsDL$HnA#ojnmAf) zhk)A^0+Oo)RT6K*DU;0mTq7tU9FkG(%b>T4bxjD-xnn-%?wM&%S=Tc$SRO}jusSHR zz5`3eg@YR1XwBwyPuXghmpDr=-@fb}gNf zBp40KBUz&Z<0g+QrRq8zN+LH(n7hL$GIu@e1RUQD0zIw-W@eExIX97u%v5{el@-)K D5h>%? diff --git a/backend/tools/practice_sources/burgmuller-01.rdf b/backend/tools/practice_sources/burgmuller-01.rdf deleted file mode 100644 index fcc5153..0000000 --- a/backend/tools/practice_sources/burgmuller-01.rdf +++ /dev/null @@ -1,36 +0,0 @@ - - - - - La Candeur - BurgmullerJFF - Opus 100. - - Piano - 19th Century - Romantic - Allegro moderato - - Collection Litolff, 19th Century - Public Domain - - 25EF-01.ly - 25EF-01.mid - 25EF-01-a4.ps.gz - 25EF-01-a4.pdf - 25EF-01-let.ps.gz - 25EF-01-let.pdf - 25EF-01-preview.png - 84 - 539 - - Mutopia-2013/01/12-202 - Bas Wassink - basvanlola@zonnet.com - - - 2.16.1 - - - diff --git a/backend/tools/practice_sources/burgmuller-02.mid b/backend/tools/practice_sources/burgmuller-02.mid deleted file mode 100644 index 19450b1e36d81c793ff29677bf8d3070e17897ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2643 zcmcIl+int36y22CYK%Vk0frywHI0RG>5z89NWeM)NiS&_0!?k&Fa~LiPuS4($%o-j z^bhnK{1N|PTx$rI?^_}=Coze~zLcw-Q>-fD$DcLbcDLi6 zCAytP^HluUlV<0r(RDi;2`pX~-n>hcPR>5Rb=$4P>f*|)#g)YMNBrH{nVA=l#kb>g zkA924B!TPrFSw4Mf7p;8!mmI3ywP;eKXy-=iQ`VA-4cIqMq*#ZGxr_O6!8kc0?-0l zBWrX2!hivPCRi517qO#6%MvZG83%-TWmuGfJHQ>FO-q}WHW(XB1y})AfmL7)SOf0T za##A1_Yt8?9o-fw6obH*lo$yVLk)E!+bpUqSbv*uf$sJ314D}f3$ON|uSWVhJW^k% zgVqL-p`l5Jtt;KZ#->GS_VS|qeBGh5P>>Gpbn9iI>Z7c zCKw488SSRoN0}_lykrI=Hsg%10^_?EeqG>w%c-ComS;0%ExZ;L=%7CF_ORXq9sm!3 zhqOElkCIV$JOgYFm;+{j8DJWi2BtXdRA_DW5UF>C!vGb!8(rX*`-035-*-nqI*==t^U-4!Y7LKpN(S zG0X;n=BFc5)#ZpPX*z=>Hl~1VLK;X%;W|l2NgTC^2`w_PWW6~cTc{xoTK*58SwzYH z70uB@7)H-B&n%;djDa1jIS*uewt!nezTpOVeSm;KCQpGT!xC5%9f8@TusK$hp^6Pi zQwVw{-%B4 s4o{r>^fA_Ode_kYRp2Uc8Mq8w0xkg;cnBAQd& - - - - l'Arabesque - BurgmullerJFF - Opus 100. - - Piano - 19th Century - Romantic - Allegro scherzando - - Collection Litolff, 19th Century - Public Domain - - 25EF-02.ly - 25EF-02.mid - 25EF-02-a4.ps.gz - 25EF-02-a4.pdf - 25EF-02-let.ps.gz - 25EF-02-let.pdf - 25EF-02-preview.png - 94 - 539 - - Mutopia-2013/01/12-203 - Bas Wassink - basvanlola@zonnet.com - - - 2.16.1 - - - diff --git a/backend/tools/practice_sources/burgmuller-03.mid b/backend/tools/practice_sources/burgmuller-03.mid deleted file mode 100644 index bb2e30918802856a0641addd279414176eb0d53b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3416 zcmdT`%}!cD7#)h%n%FKH-85-K*fcGPjYPav$%R0!AR^RgNsB85(;5vl6w`E9gBy33 zK1urqcH5Vt=gghCcL1rN>7s_g@BjPGnIGNW`&bu3+!rAc4t?9+Yn?#b6}|AoTC>q^ zHBTe$)*3m(`*;XG>3(#qmeB=`}%cT@Mnj~|HM zPI&hDmFT?^Ug_xtl%75Nv{q>z*N!&DmEfm0_2{71Jp0@}u0=ky4jOgwW2P>8@9%|# zaI?;N+RZ}9QOH5aQ^-RoP$-zLA}vMJRi>p3%dl&xAiJXI#XwQCnU`%!PRuQdkXcH_ z`dx-ca-55K*TDdevw+_r;8*~RPyoZ>h>Y+D%5nx`{ww%f%sD)so?K!tVG;=H3s~hw zxWz-oYKa1@fu(S$rl=ftgj*3ZRk%A9n0FAEuONeaRiq$yhJxHQ#&ACi+OkPu)3n^K z&Ty~I%BAS5Ea7gk-5AzVkqljt;sG=vO=41~#Ik<|A*`FBiTEq9lN zcTu=Pp`xJd+a2NVzT*g ztjQg=DrHqK(y|0gvE<~X#>hYqb6hr0Vp+t&`IAO-I(&e1Xn;33R1Y)bTCM`*s`&)S z2XKsmd|;!-XnyA&Bc}?QqX${l$XB@!t1vhea6JMcOAAi=HI@urxH*B#x7gJV_YM9P zxz!Nlma?fKV2l-5`nPO!ta*g~P2KbKPy9E~-AG}G4Iw<`wW%x_it`c**pgw{C=?Qv ziC*FhLN*F~w4|fJNCoeW2Ue1*6O7CbSz|V8S;$()vKePWpWI=qQWl3WH-7R`V`QL* zIWC(gu`J?XbN{j{hY!#{2RA!Z4>RLht^(w$xjym}0DXhr= diff --git a/backend/tools/practice_sources/burgmuller-03.rdf b/backend/tools/practice_sources/burgmuller-03.rdf deleted file mode 100644 index 2043cdc..0000000 --- a/backend/tools/practice_sources/burgmuller-03.rdf +++ /dev/null @@ -1,36 +0,0 @@ - - - - - La Pastorale - BurgmullerJFF - Opus 100. - - Piano - 19th Century - Romantic - Andantino - - Collection Litolff, 19th Century - Public Domain - - 25EF-03.ly - 25EF-03.mid - 25EF-03-a4.ps.gz - 25EF-03-a4.pdf - 25EF-03-let.ps.gz - 25EF-03-let.pdf - 25EF-03-preview.png - 101 - 539 - - Mutopia-2013/01/12-218 - Bas Wassink - basvanlola@zonnet.com - - - 2.16.1 - - - diff --git a/backend/tools/practice_sources/burgmuller-04.mid b/backend/tools/practice_sources/burgmuller-04.mid deleted file mode 100644 index 553f736bc801e5420b3235b102634f6415903184..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3860 zcmcgv(P|r45WSAvv?*=_4Fm$A5q`--Aa)$98(BhGp)9*zcC9K>g`0;6M+#|hu!`zX zij$~DU4$%O4J( zck|B%dj~x=`SyZR@6>M}_f+KHS5bKX*p7S!L&acFQju2z7y$G%=vrV~09}A!i@S3d zgu4KpDQ0a=MeZ8F8bGjP<}DRfZ)s*#gZ51o)ouc`!30~Fl~piT0agHl8I=Lpt0NeA zu+`g`76SE2gX%<&cSA+N4S-Nh^|GOR9fa!uXOv%q@@oL6mAh9VhVt0jUuw0jU9zh^?WD zc85S)KzFr__P&am`^R?F2H4bK;|WMl05$-EE$$5mwgYz!Ms)y92dsMR8j%qaAcIK_ z0MzNiHXzFb5Rjp>8~MgXcTd_Sli_g>-CKH7L@}GX*wiOOm+P#sa4}&QMv41iZeszx zZJcQv(WX1b-$4d;08ZbE`a>`u0%R&oZ-s4Sv<;96L*iu5`Xi+Fk!G5zv>t=-7$ECs zm`#+b%~FBI8j5>nrJJa9o0Xnn!o5NF={*-$Iz%EG%&-=nE*ncfQ>Dxd&ooDhG2bn6 zwy=Xc)EUJM#;aEY5Oko0!-73g1>h6lbz}Zx04@fw!SKl7tzy|K09*pRckCJufZc%$ zSIM#sy<%u(E|=9Wu>zM*dR#%D-d~Rf?5!o4j`SrUT&T|klv9`{CL?65q(ucdiCsc< z5|^5%pN<{3_jr5i zlG2e18)6Ut2rhakr=_P{Vx{L0cIqNon?JFD^;gKtE2LrO&b~(bzXmvSX8|?|>TxLU zjW-yYZvg6{DPVgD<`CfY%>D2?n>n3ZawA8GhT1V$YC12zv-9^2!yLsh*PLZf4fKU~ z_5-H#8KVMcNjeQWD=OUp00G}blyezTf>pOgOj&w=5)@ibZR;`k)1lL#KF$yJ4dBcb!7Vl z4n*p{Prs=%Yrx4Daujmv@OGr8Gv`{>%ry?=b4=%Wej|#R-)Bze)34gxU-+uM)a(Cv zu+{EvZ>v8Qf79Q#zvH7;zHimo!uiLRQsW}BJ1)W~(ZEO5xXdMdZ;dyJY{DqeD8R6s zcd^%d-9eslPj*gXCHt&1);hl8C~aIscA*7-3bYEeELs+=_09>o$zsBXS}rkW!YLBr zu{LOIPJoqo0j}aTtpT_gz&0-E3UR3bsM3XWv>N;gKw}J0ERg>zE~FYEWrVek{Fuq6Yp0Ht9>Q_{R8Ihjh8f#RfA&KXb^o-#Y sX-Ln|ke)I9{-5?K&^^8`Fr;S~RC>law&R|mAw7e1ZJK3VHvFslFEFStUjP6A diff --git a/backend/tools/practice_sources/burgmuller-04.rdf b/backend/tools/practice_sources/burgmuller-04.rdf deleted file mode 100644 index 0742d9d..0000000 --- a/backend/tools/practice_sources/burgmuller-04.rdf +++ /dev/null @@ -1,36 +0,0 @@ - - - - - La Petite Réunion - BurgmullerJFF - Opus 100. - - Piano - 19th Century - Romantic - Allegro non troppo - - Collection Litolff, 19th Century - Public Domain - - 25EF-04.ly - 25EF-04.mid - 25EF-04-a4.ps.gz - 25EF-04-a4.pdf - 25EF-04-let.ps.gz - 25EF-04-let.pdf - 25EF-04-preview.png - 88 - 539 - - Mutopia-2013/01/12-219 - Bas Wassink - basvanlola@zonnet.com - - - 2.16.1 - - - diff --git a/backend/tools/practice_sources/burgmuller-05.mid b/backend/tools/practice_sources/burgmuller-05.mid deleted file mode 100644 index 61bc68e77fa9de4b288e9273d3c1139f525face1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2139 zcma)6+int36x}UNZ6EZ(4=|)}B(}DuNSIPCZGl2S97F;%lp$cWX#)mnjBhq1HNFkM z;1}qF@A_rqT6^Y{UbTe7+GnqQKZjGUz3+?2qRdHX?n}8gI>zp`c%g^A;b1%(o`lDv zZtqyUx#iyIZFf8zSz&CR0v){!0CgBZ&Z6Ey6?C}f=-+FS=KfZ9f=ED(v;&f%Do|)hAVR8V2{P`0%0;Bo za|G(a2Ky3FUjraZF{PPOP3fi;Q=w_K$?BSNmewrsj<}i5MBF$+W$-|m$1Ajo$7{Ji z{50V6Rggcz@6Gqif4ip9mQ3SViPkrnMg<$J1Qv-HR({5&hHr1^R$vO8@`> diff --git a/backend/tools/practice_sources/burgmuller-05.rdf b/backend/tools/practice_sources/burgmuller-05.rdf deleted file mode 100644 index 869195b..0000000 --- a/backend/tools/practice_sources/burgmuller-05.rdf +++ /dev/null @@ -1,36 +0,0 @@ - - - - - Innocence - BurgmullerJFF - Opus 100. - - Piano - 19th Century - Romantic - Moderato - - Collection Litolff, 19th Century - Public Domain - - 25EF-05.ly - 25EF-05.mid - 25EF-05-a4.ps.gz - 25EF-05-a4.pdf - 25EF-05-let.ps.gz - 25EF-05-let.pdf - 25EF-05-preview.png - 93 - 539 - - Mutopia-2013/01/12-214 - Bas Wassink - basvanlola@zonnet.com - - - 2.16.1 - - - diff --git a/backend/tools/practice_sources/burgmuller-06.mid b/backend/tools/practice_sources/burgmuller-06.mid deleted file mode 100644 index 2f4faf7fafa628d5ac38caa2b8b434ee68273748..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2148 zcmdT_+int36g@4Z+6R5`0}NkKDFJ~(=s-Jxk{K$2lFAELqfHwyNMnpIHW(94ADBPU zKhQ7o6UMdnaCR|GlfL+1({!z~_T`+j_dZj<{bp>8*)kg@w(-et&(5)GnK1TfG@Z<6 z(~HD>HW;0oaASKkdo`F(XL|`Oo>m(t3GeLU!;9%;oJj5LKHu3*-29mEG#=l4^3a6M z*w*jBgwITrIzB+^t;@H2ozao`Y4{t)9}h;;%Xjm$QR4M%Fd3Wg55^{Zxru`;9rwyv zIv{1Yzbpd}fCoSq=mM+2DzFBu0qejz&|{z{4j_>S2why75X)_l4+|ueg*#j&1xg4| zk^&_ukU4#z4?G?s_!y)?(pXnKDv>V;ojX)IAaxR^Ymu}-swCV{6Z%vbrOve>E;YQy zO`#&O9Qa?BM@w^$TCd82+DlnjQz;9Hl*KCA7N3fgg+$6iB4r_wvXDqwNSIKg>MLid zLX8WQMHcltd)1c|P1u`A)dFG@iD~y1X4y8Mon^a+RBf0~NlrnUBn(iKM}@6bQ;muY zN)Ko3p-H@lZ=kkl;$=D{yyr0qFQcY96-KD3N<}6R2|Xr^x(?N$NnQjApM)wEDwTER zkjmk@;!@$mu~AY0yPqtak8t4*H4<*Dic3YJt`eLvx+=E(dq{Js6HiM}&IvU}wONn?Ukw;!Z{ zX2AM=79xZ0a#>U5hO>F6Auu&WT-GUO>)0veaTfq@)80a2BH(eKFR*N zqWfmMCMb2UaYC3Gq!x|NGnyw-QrF{mqe6EP34e9Xw$ZlLw%NAb zj)5JEB(o&V!u-HLk09Se1@Stg;^MgnB}}h$p-h6;2_Fy^UriY*oC`IjsBr4CNLXM( z_NKsuMVdHYe6KPKSrX};HKj>7UusHH!8pq))9x3{AkG|=T>gP$kwm7JM5dNRX2hBb SBrI0$ZXbsx4(QzkFY*r - - - - Progrès - BurgmullerJFF - Opus 100. - - Piano - 19th Century - Romantic - Allegro - - Collection Litolff, 19th Century - Public Domain - - 25EF-06.ly - 25EF-06.mid - 25EF-06-a4.ps.gz - 25EF-06-a4.pdf - 25EF-06-let.ps.gz - 25EF-06-let.pdf - 25EF-06-preview.png - 90 - 539 - - Mutopia-2013/01/12-215 - Bas Wassink - basvanlola@zonnet.com - - - 2.16.1 - - - diff --git a/backend/tools/practice_sources/burgmuller-07.mid b/backend/tools/practice_sources/burgmuller-07.mid deleted file mode 100644 index 9ea7e8f9691fbdaa00a7f7a0c553c5c0a0d9b195..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2293 zcmeHI+iuf95S?5I7YQEt0OU6wDit+INU4($IkFN*ZbFncg3_1BMo_hiE0YR%Yn6V0 z{UJ#32k>QP&e*$-nhPirJP}2!v**mr&d%(54-P;0L{y;yl?qn}hv6B|MwFBudckxS z2Is~soOoxH6z+TByU8pF_YIyr>GY2b_w@YBt6=II)!n@pyL(3dqvUnDTzq_wl40r2 z^RJXVqcn8oDTl6HUhI!Ohkg+LN%_&l3obv-PCes&IGOtN?XFMBn___|GLNq*YRka0 zCV&aBS*pX%mO**dGp`z0O9my?GHLx;_THCFbx`;J|@lbhnGcOx#Uj`-FzYQq+LtX-0c)OHN7E=^nA6nsh0@2p_g(}V1wf_kkuE#2+W9?F~FF?+mksDbi+|W z^_j8(Y{G0?O0S&9auJJLeU<*eT zUd}+aYMNuD@9Fy8Adf#P*6lK^cHB_EG{3Y(S$==Hez(JOV^CytM-?q+x{%~E0D$AT zP)oj7VEJ;%E-dWAVv`m?i-FuSd>|TN8Vu?He7p5?Q9R=3;(;H0n&QE59QsN4FFzUS za}n - - - - Le Courant Limpide - BurgmullerJFF - Opus 100. - - Piano - 19th Century - Romantic - Allegro vivace - - Collection Litolff, 19th Century - Public Domain - - 25EF-07.ly - 25EF-07.mid - 25EF-07-a4.ps.gz - 25EF-07-a4.pdf - 25EF-07-let.ps.gz - 25EF-07-let.pdf - 25EF-07-preview.png - 93 - 539 - - Mutopia-2013/01/12-216 - Bas Wassink - basvanlola@zonnet.com - - - 2.16.1 - - - diff --git a/backend/tools/practice_sources/burgmuller-08.mid b/backend/tools/practice_sources/burgmuller-08.mid deleted file mode 100644 index 613864d02c924bc9f4b27d4491ec3784442a2701..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2958 zcmcgtO-~w86n%=Zbdx5Gba z*WK7(M$dWk-pmt2#YIbaxpUsR_uO~yosUB8T}KEpFJ?q!=5wLezW}O=QRGRx*B$hG zm(fAL)xHp;nT2-$tTpKMlTm=@x#H`nbAI`0zt`k~jyPGjM^91#FZ+lwb?6#15=u;4&S{g0jXy6JRE7W#) zWv11~*h9!3LNuOQyGF$tw0}J62(Pv!k&wVGS)MEW>w4Al>gu}j#_}5K`mkwvhwA#M ziQpqm6hfk5hXM6hp^%#m6R6Bgug>7PTaw0xg%b*|3R{KMxJ*a(tpcI~TZSdxhut@@ zO-GyktMH1hT4Ov^;}RX^Y?NjRmbeHjXQOba?Jz{n29&%-V2Sr&afXryx#YPhg3UVUG=bM#nR@E*ryRgXP4&0>Fij56cS) zdW{h|MA+0I!3T>Eo1>(%Bq%{CI#7xc1)YNtY-LCoQd1F*nVh+poH>Hz%z@%~nvjJmBCBr=mCMUciXf4vH)Z4t3e%J?C|KegELHLfKlHAn zw9LUe#wQsN#sOHMt&S_};AzY{@*snj1UH3>DCiuFkOK>d@kvf197RlQVvw9UaNJwN z8lQ5m@HHgSrWGjofMH(gl$SOl0;r_vMu@M7k{M21+st&K4EhQ_=GKV zdLO&|i0z8sg8#c;v7dNX`(Lu*>W&z$W2JV!iQ%dMz)E3-#C2vmA_bWw)(WL4k;Gcz zQbcM8QrsXxhlzxiN|;g!L?lcpZfL2A1f^Kus+MAbEcD?8#v!wYC3_Wz#2Oas2niHu z5=_pBI4h?oBk15C7k$z-_#5z=xWU%a%c2&`rl*BhD|UP)Nybu4^6yO064egg62rwb z1Qrn}QOX74q0_E4Ov9#Ni8o+344iOPA!$a?GXswdtd86S-ZXF!vF+mMjM@gvf)d!+ z<_3Y>ym#Y%jTAI8?svZ$o=c`=hW}CHKPl;ss9&R+7;6kl+d%aa$eDpj>J9zytm_T^ N@Kare$R5cz%pWD7C(!@^ diff --git a/backend/tools/practice_sources/burgmuller-08.rdf b/backend/tools/practice_sources/burgmuller-08.rdf deleted file mode 100644 index d2c5ed9..0000000 --- a/backend/tools/practice_sources/burgmuller-08.rdf +++ /dev/null @@ -1,36 +0,0 @@ - - - - - La Gracieuse - BurgmullerJFF - Opus 100. - - Piano - 19th Century - Romantic - Moderato - - Collection Litolff, 19th Century - Public Domain - - 25EF-08.ly - 25EF-08.mid - 25EF-08-a4.ps.gz - 25EF-08-a4.pdf - 25EF-08-let.ps.gz - 25EF-08-let.pdf - 25EF-08-preview.png - 101 - 539 - - Mutopia-2013/01/12-217 - Bas Wassink - basvanlola@zonnet.com - - - 2.16.1 - - - diff --git a/backend/tools/practice_sources/burgmuller-09.mid b/backend/tools/practice_sources/burgmuller-09.mid deleted file mode 100644 index 5a6fb0eaefb28bbe73cc0f8370176cccf44cb7e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5072 zcmeHJOKTHR6h1Y@7wEztAlZgujS?E$ro*IhNSY?bVijG5HW3v|Be5dxERjlgGq`sl zxYvby{U`pD_g?`y zJ3HyU?pEuu^k>ery7#yCI^Cr-kc;ITx6`#pJ1=f_cH8Nz^H&z;ucQZm(!V=MHH#t0#da|`38`(MS=>Dz#^qpAjr;G3xH_O1T<#{ zH2yMHjq%jbl?s6hfX$$XAK5qUs|FI5gI8JtW)4KcDhWhfT_{zD0c3A~$ck&Yo`L-g zbk;$n4-y)Vz(Q3(SSLZbAe2FKmZ2QIXp?fL&XN5M**A`bjNH0NQBrLJZ9_y05!k=9F?M0|F2ZuM@Zq zAi+|F+UUT-kCHd&Yh&!dP)^-P4c+lmTLR*AsyQHT87lKY22lYqQ2}67b-1OKkp4A0 zZjMuzW!1jzC1t6$Ob(_AcF!EH3kf544WD-ruAVWlBmF_Ttvv0 zf!lD&gr9MyzYPYy{5CXE;|N+NAItE!p~VErpg>NgsWs}$nxOzRoEh~8jb(fuHE3!X zpJ$`XH-Y2xnuo@ZWkzUYlxx27)s&i1DG+D^>QIrWNC_fEd{ptBipB~;fduMn0*(-; z3PS9fc5+U_sW3o~HYU2oj2bV_=+QP35?RbRh5$dS82@M$k?@Tim2lYpZc?6(v@Zm- z{sdT!Wk<0xATN-#0Nx)XNi@e8=2)#nAvqLzHx$}35RN$|i8(SxF`%pojV9b4JtYaF zM-O%AM(ttfY~-8`JqVo_=hmbSFWSwi+)^b^qg2s}*1!%} z284}tb;OQ;6;0F_Fi_8Ft~(82(zR-Cwn - - - - La Chasse - BurgmullerJFF - Opus 100. - - Piano - 19th Century - Romantic - Allegro vivace - - Collection Litolff, 19th Century - Public Domain - - 25EF-09.ly - 25EF-09.mid - 25EF-09-a4.ps.gz - 25EF-09-a4.pdf - 25EF-09-let.ps.gz - 25EF-09-let.pdf - 25EF-09-preview.png - 104 - 539 - - Mutopia-2013/01/12-220 - Bas Wassink - basvanlola@zonnet.com - - - 2.16.1 - - - diff --git a/backend/tools/practice_sources/burgmuller-10.mid b/backend/tools/practice_sources/burgmuller-10.mid deleted file mode 100644 index bdcf6944c7182e295ca626d0c603db9b3047e46a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2773 zcmeH|&uSA<6vj`QHtIqb(k?66c2j8yLRu4sq(hi6O**s*I=hgFmX=J3DdNr&sR%A6 zkKh~l2>L*RZ!mt}oyJ10-<<3Bo=PN5Ban-$Y z;wr!)IDi_V25<@PA~dOKLZi^4rUi|HPmK?aNAMQI1NU0u0Gfa%LP!V~p-W8{8U=M$ z&{_(=RkY0#ZIrOWITy1w0DQ1gqsg)xAqz4>mMXP8MGR(<#_U4C7>v-|O0&ftfiv+5 zoKisGC_01=piAHcjtR$$K5c4D=LC-3)@Wue+Msg-&Mtu)S|`*2wJof7YXX4Klu6pI z*Zp9+G`)LW_@d=>RTQ#S1r*S_u^d4FSby;mGPla`WV=3r%We{QlDzU_Eo!ya%-5t3 zC}=GRH`m&Pr>R9SwFssb!AyViYJFzffF&3En;VdGano{bP{ZNDv_8wSfh6=zW4$b^ zy1LYG&OU)HsE?WsXgYw&A((qd;6A9ycD75@8D+LI3)d*yq_u3*5>aL&^m(C=35Ea9 zi`iZHXPy`H*G~RBUOQ`p=*@6Xz6rnfTgSX{KFPEk%CsI{0|dZdc;y&y2)GN=3ZVih z6X;h(P%WGQAk^d|qi9ANrZB1KOJVsm$k$*LF8I_X;MUIDsZoO)IZvn>ZTWycxW@>8 ze^a=M-}}ov$;BNJtVr_f7cn~rT+;qPBHud diff --git a/backend/tools/practice_sources/burgmuller-10.rdf b/backend/tools/practice_sources/burgmuller-10.rdf deleted file mode 100644 index 1ed3323..0000000 --- a/backend/tools/practice_sources/burgmuller-10.rdf +++ /dev/null @@ -1,36 +0,0 @@ - - - - - Tendre Fleur - BurgmullerJFF - Opus 100. - - Piano - 19th Century - Romantic - Moderato - - Collection Litolff, 19th Century - Public Domain - - 25EF-10.ly - 25EF-10.mid - 25EF-10-a4.ps.gz - 25EF-10-a4.pdf - 25EF-10-let.ps.gz - 25EF-10-let.pdf - 25EF-10-preview.png - 101 - 539 - - Mutopia-2013/01/12-221 - Bas Wassink - basvanlola@zonnet.com - - - 2.16.1 - - - diff --git a/backend/tools/practice_sources/burgmuller-11.mid b/backend/tools/practice_sources/burgmuller-11.mid deleted file mode 100644 index 2f170517a2cdfb344a395a555fde53559c9de945..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2432 zcmbtUO-~b16n%X7L4q#)0j6Qc28#4Ra0ta>XR2lCm7Y#aOOd$ch--3 zr@4OA?wqLM)LbWe-R}3I)f@(o%X=?!?(ylz{oYwO_jGCb+0t@u{HKPE+3D#=_tmgE zbLZD9HGHD9_3Ter-#ve~TJLPD?~4D!*@x{;@BDrLxRZMmwa>b0crcA7;^tu(HxV0% z4aDH^(vE{GKqzCMgf9vMgfezXxFCF3P~akRTp>|W>g&C(iuZ~DiU9V=2uSuw#om#Y z#hywL*C4JzcA={pbQca)GCM#kM*|h_h$oUV5T8gHh_8@TjzX4;T|{Y;F6`3JBx6Y^ zihv4kMJACI1#ko_dG%$8mUQkt$22b;1lwcL{#F?88xgkxqBtmuAodYu^GL8!HrglTO)xS0CyvsxRA2!4kA4rnmZ!Z8(0RxT`iF)2{C|?>@m*PEy@Uq zOlAoHVj$W-DXQ@BIEDS{)ujNtAyAPjUszLDF)dfn8L?4kWXLH@&hciBC+v+N(V3wm<@aiWbgwMrvhto4jJi( zPOKq)jonaL*GT(WgI;Q^K`WhS5j}e}6UnBjzlm8Bwb_K!WdhB_ntj2)7-`VBN4FCWD diff --git a/backend/tools/practice_sources/burgmuller-11.rdf b/backend/tools/practice_sources/burgmuller-11.rdf deleted file mode 100644 index deb96bd..0000000 --- a/backend/tools/practice_sources/burgmuller-11.rdf +++ /dev/null @@ -1,36 +0,0 @@ - - - - - La Bergeronnette - BurgmullerJFF - Opus 100. - - Piano - 19th Century - Romantic - Allegretto - - Collection Litolff, 19th Century - Public Domain - - 25EF-11.ly - 25EF-11.mid - 25EF-11-a4.ps.gz - 25EF-11-a4.pdf - 25EF-11-let.ps.gz - 25EF-11-let.pdf - 25EF-11-preview.png - 106 - 539 - - Mutopia-2013/01/12-222 - Bas Wassink - basvanlola@zonnet.com - - - 2.16.1 - - - diff --git a/backend/tools/practice_sources/burgmuller-12.mid b/backend/tools/practice_sources/burgmuller-12.mid deleted file mode 100644 index 013aa86a7c6d17a6db258e73e8563c378c5a5958..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5949 zcmeHKO>Y}j6n$x;LKbC#SR-#Ol%iG?Br96jD`IVpkAa#mJ;Wtb&!Q z5-Z041pWbR_)o0NId^8xj6I2Ehn592@=VU0d*A(f@7*`kXnoUl&fRniZgJtKMyvk< zPkU~(c&pPpJ?r;g=Fa*@ofmGju-xfCKRWC6@8|IFX=VG%T>a$bkGs9oZtm{wJ73(s zlS}^G=wNB-#>XGJQFC$WuRq=Ba~GPvbqLcpUwwCfzw^ZX?)V!meRS06z54#_q?7x) ze{|Y)qpxlth@gHr@Pax(gP@US>W3GQgQ*eJ9OSjb!6!h}{tU_s$#6&@PLy3x<)|t~ z{rW){b~Ye~F?-l*;bAL!sGp=H`{%E{U_X+yjv;Bm<{rTwK$D;euuHHD&>*m|2`pLy zMp7lH0#pbp0FMbCrHvrfPnHm8tV-#)xVzN47;2j}Mw{+=;gmA2>^~O3)y~?IE8MH7Vj= z+9udePoP9fRL;d{+Qn$pE)8;XifNItolL-;95a^0K^wd9fDOiLU%0?yECjZB3Akc> zD*16gQDSnh3Qn=HY{h(V-Nt&UY;@%z_O$ixhlBs|p)}=u&x+V}amc&i84s>!Jk+#+ zwMw-nvm&kky9HtJMlcs3AR5E8WEd@(r!!@nDldzzUQISdO(k zoaWPIAXCCs&Ld0)Mm0`XB0x52foC?T06Uyd&fpqLnhcrW7Mvuu@UW8S4V!DM3@9lw zq2eQgNAw;Qa+(PHBuolBC|vj&HAQqiUvrIGXFS|HB?6XSc})>1__=)Dql5iVy;JAo^|DaU<*As zv4v2=n7~G-ge@GtA{6-|5I1nX9oT7TolU_(BQ`c^2Vu` - - - - L'Adieu - BurgmullerJFF - Opus 100. - - Piano - 19th Century - Romantic - Allegro molto agitato - - Collection Litolff, 19th Century - Public Domain - - 25EF-12.ly - 25EF-12.mid - 25EF-12-a4.ps.gz - 25EF-12-a4.pdf - 25EF-12-let.ps.gz - 25EF-12-let.pdf - 25EF-12-preview.png - 90 - 539 - - Mutopia-2013/01/12-223 - Bas Wassink - basvanlola@zonnet.com - - - 2.16.1 - - - diff --git a/backend/tools/practice_sources/burgmuller-13.mid b/backend/tools/practice_sources/burgmuller-13.mid deleted file mode 100644 index afcd8e422b49814682daa9f67c8486e54f8be19f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2810 zcmbtV?QRlL5WOw6RTKT;0~ns5wkEY{p%l8I3lxf^NGksjj5ckcK^kNHQB9K?6MwL8 zqHmyY-wprcrTd-k;Ns2bq?>*q^hW&lge2I4FM1 zk1K6na95>Kg)ui0knD9z3@=TG&y7$Ak*sVSq9!qF)T=qP&YQZs`DagvJYKQ%g5CO- zz2y7|JLRy7H|QKN#R18)a}}MAx^?zU40<;@@So3V5+9FAaC zjjkc#xN63sDzjlm6}2-?nuyFpqC7{2Cy4ESma?3)NJt9k?9texs6(Vt$p@b8T9Shz zqYo}8bF+skh|gK2TM+IQE4AlD*dw-fBEI&da*`AJfPEVKP*$Wwgws=`L4>l&l;@s+U(F8eA%EUcfHXu#4=FkceGL7?M7L6p3))Npe!KL^5?W=>ZY@ z+`(Yc73qf;7RAP7$D{>TM?^M35YLfm3c`BHk%B~fs|J0E||27U4^l$%h@@1;7 zCeOQx51#)TrrzUgc(*rr+n4WQ+59m4Pks>X$1vJ#o2bzKVxmn013v>y+dzfFQW0Jg}&Z^Jnxe8V{=5=?Y$nUwL#GKea8M+Od-l?5ned8TC{p=T6) z1=7W=keM1HN)4u`=x+N{UPN~R>|t9YyzL^MQ-pJhxEv9dISQnr&oFS4$D{uZA9559 zH$Na!wYU^v1|msLPC1;;?5KG-S=Hf~pd&RgQVhPbBhA1YL3~|#i6-n3TPYC^byC+f zC! - - - - Consolation - BurgmullerJFF - Opus 100. - - Piano - 19th Century - Romantic - Allegro moderato - - Collection Litolff, 19th Century - Public Domain - - 25EF-13.ly - 25EF-13.mid - 25EF-13-a4.ps.gz - 25EF-13-a4.pdf - 25EF-13-let.ps.gz - 25EF-13-let.pdf - 25EF-13-preview.png - 103 - 539 - - Mutopia-2013/01/12-224 - Bas Wassink - basvanlola@zonnet.com - - - 2.16.1 - - - diff --git a/backend/tools/practice_sources/burgmuller-14.mid b/backend/tools/practice_sources/burgmuller-14.mid deleted file mode 100644 index 40f6e092345ec77b68799e423244220802ce733f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3272 zcmd5Yxd6n!QMq0+QcE3#n`SzcrlDJ5&D#ODbK zU%jg(#{+&riU=ZrHbEPpOV9=A5Oe@Sf)Jod&;&RlI09Jo1KQ`A1Od9OQ48g_RL(|Q z)H3=FS~6c3(7OL;9c?;(h-2g|LPP<1i_oTk+(qb8K>i|hb|Ih!5yAolse?f3Ador; zq#pzkTjUezIts3if~jM!UnE6 zINpF?G_(+d#6gShS^&-_EMSjV?N`~r3vH}B=^LW6C%TE(pV-K{@wBmxw?)fIk0(9j z?PL=Ix*#XrI}qIDHm*2m{|vznIPz>WJktzZr5Rpqn&ClRnnA$+hn{W5*Vw>Vnql2V z-Un$!(z47k0r#fKq_|Qc0)&`M6W1oLp%;V1K|sKJIbbdtY~V^2ZQ?W6kj1I`6kWQJ<(jj1@SQ)P|T@O#o;Dqs}A4R0*my>ku)r#H`W@o|!rUAC6=w zK6E4#0?EWObppwxN7S>9>V7QQh@;w;$*8df9dSe;jx6I7_$<;g(H30rPOop_QAmN+ zarJ5-nj~0UlT~Qu(lYZG)7nS8nAXOV*JmaDX4?L|?2YvA`Z!i;v9HofpFjcNvp^V? zvQ;TVr3{-Q2?|AJR7zH*WV~dE1FLa>{1N^`E!_{^;R|9~4d9OwMghkFWiVAT48y^t zMM_1Yiale>a+YQ0+VowqzAMY^=b2>VW|_J6x6C_RQ?`|;raOn?J%AYMM7B$8C&Izhmvb?xnQe7nhWAWi?0CKVdZ+Lm?;|Z`$a+?_sQ6UAp#2Ml)PwyJlidALbsQMq`9xLC+ z`pMLtM@!tJ4L+=7&#G1gfDw;S6=Kh*l02Y>u#^NGIQ`5K15ocug-i;Jl*!nVvwk2A KFGU;wUVH(`!j)qH diff --git a/backend/tools/practice_sources/burgmuller-14.rdf b/backend/tools/practice_sources/burgmuller-14.rdf deleted file mode 100644 index e9dd291..0000000 --- a/backend/tools/practice_sources/burgmuller-14.rdf +++ /dev/null @@ -1,36 +0,0 @@ - - - - - La Styrienne - BurgmullerJFF - Opus 100. - - Piano - 19th Century - Romantic - Tempo di Valse - - Collection Litolff, 19th Century - Public Domain - - 25EF-14.ly - 25EF-14.mid - 25EF-14-a4.ps.gz - 25EF-14-a4.pdf - 25EF-14-let.ps.gz - 25EF-14-let.pdf - 25EF-14-preview.png - 91 - 539 - - Mutopia-2013/01/12-225 - Bas Wassink - basvanlola@zonnet.com - - - 2.16.1 - - - diff --git a/backend/tools/practice_sources/burgmuller-15.mid b/backend/tools/practice_sources/burgmuller-15.mid deleted file mode 100644 index 2505591d0096665db9875f839e3b273da5b811cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6911 zcmds6-EJF26rSKxS_u&10g$hds;G79#JG+(uH&_1xAx*j7+TtkII$6wR&ixgA(RUf z1%b+y_lgT%0^R@~fM?+ekomqdGiJT(O=8PbR;sM$ob#Q(IWs$R?0T)Qx=N|5YDFbh zzV}-FXW%|jqr^L%-r-Td_dI#j-|swAqm}EO{uld4z5Zqr%m>wvKTS5CKL74P@35Op z-@5(Lt=q}}{;AQUD~ZJW*VJe?aqX{P)hMO3>-T#HwcY<||cr~Xj<8(n#Kztem9 z&C%0N^2`4IVORb3R#%Naf8(DOHFPR!co&abIVlbu1qP3cXLi6ft{l3e3%a7q%i`*? z%;VgJDg`$~DX@aG1Cf1oZt#eOEqf$*DY)U7W_ZIzEUc?YjQO*QxQdMt3oJ1Ba=NlJ zk6n)laPHDxyzJ+eBoaI}-Gya!Qsfaltl5LNhRur;Q-tmTfCF=c))Ways#a2kY83*P z0y3^u@vMqRDO3UiP96XFgZ2%pxXpoCqca$3CWOz9PA|IWh3FJS9taI5OeQT zzk`xemRy#}6)aX@R7i05;1Y!X587Xi1S3>Qa8gYY%);vEdLbML^Fa#{SC5U=?lD5{ z()<`mM9NHpW!@oy z9EKGVh(9co7{>;4hVwF3tqq;!s8T>h-@}w zC0&F8TmloF%Hn{_5`2O4SfDFs=7lO53)u`4H@pE#!Ob9@N*u7jc`Pui*-Ns(c`T=^ z*IAOt_L+ZaBgfMG)s19jOLB2w*5GoG>%+HZ58m+=_87op9J;(ZbhiOXl@gxM(t}J2 zh(O|572dm^^&;Jg^em9nt%@`xlLC{||Im=QXh;gYx0!zdxya4q?6u`y$z#j|uzVJL z7JLq44r3S(^D+9t7((YuCJsj4XIYFA2cyIZ;TPA(%p5x_w!by|jhrhOYC3I|q1K`r zo28byr<*rGvmwwz5Kka!Q}P6AZ9E}?E#&~0_~56ay{E@NPh9^SKTo{b?R|T=ss2>_ zi~c$x&A==5JGudX&1?H>O8F^_DU6n11-}aZCdQjn@Qdr86cGR)>mEPgDocWWD}wPu z=}dB%j*n&W*9KbZ=g`t1$x{XK2`OO9o37+%CV>fLIScGIOMqJ+7*47nkb=gt@wF)`m=0{Y(`bmIMw+k;iNydg*@Cki>$rs)^3}{iutfoxEf$sg zlQBh&o0e-qGzNePbEl*63Q?VA+7FiyTGkJ5582SHUy+F3j9_3=gise200nyY7?V8E zZEJ!X$H(_0@ii3~2cVB4zH>{aRF#*7dx<_6o-Y^y$&>;D<4mU@XZVVSjqx7qBQV=g zLa~`D{|*jU{|?g5kYKgbB;?#7fm!Jcs=(8_ElRhrxZqMJq*8!QCbg-(t3pO<9-(xNC~<_{~?}`0Ek{F^hx?2=l@Fm3zRvF>Hq)$ diff --git a/backend/tools/practice_sources/burgmuller-15.rdf b/backend/tools/practice_sources/burgmuller-15.rdf deleted file mode 100644 index 8404926..0000000 --- a/backend/tools/practice_sources/burgmuller-15.rdf +++ /dev/null @@ -1,36 +0,0 @@ - - - - - Ballade - BurgmullerJFF - Opus 100. - - Piano - 19th Century - Romantic - Allegro con brio - - Collection Litolff, 19th Century - Public Domain - - 25EF-15.ly - 25EF-15.mid - 25EF-15-a4.ps.gz - 25EF-15-a4.pdf - 25EF-15-let.ps.gz - 25EF-15-let.pdf - 25EF-15-preview.png - 91 - 539 - - Mutopia-2013/01/12-227 - Bas Wassink - basvanlola@zonnet.com - - - 2.16.1 - - - diff --git a/backend/tools/practice_sources/burgmuller-16.mid b/backend/tools/practice_sources/burgmuller-16.mid deleted file mode 100644 index 13074ff8d0ac594e69044a19974d36ef370126bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2599 zcmb_cT~8B16rDl^Nz?~@^MN$_#0v@!Z78K}Shu#@E^Dz8B_y=AMhMuNQeub?Y9JxT zm)(D&|3Lqk>p6FKmS#7kU})OTId|^InVCCdxAuBUsTq}0)2Xj^Yj^6r&;k(XgFwAE_=AUo8$~5*5PhJfAz0C6BQg(4EbMaCB>vVeR{%z$q zr)QtdEB}cKQr~)v)HBB)^IP4T`mOl&)Au^v!ST^(znghK?DTuee>3$rrCe+KyzE*^ zxz+7&Ww#1YA*cYD1SWt%9|ORmh0YFv17H)_0CoD*1;9cOIY*hpT4%_*-ImN%jI0^w z7VLqjU_Q=6X=ml1vpwi5wJA?ywm?6Ocxj zzjg#t3yJvw1UnR{*aOir%5Oo+s8=K?0$2o8U=na!Ba1v>c(SlS@_9`~?dsM14b!;ov{h*uFUQWi;tI7L)ITM4mqAZRTi z^`{_^8pJGwLM#pH1YAjj0B7aa7tp2J%1))h)&}X=i5?C-B(uc-SB_vMEUQodajDcK}?IrSk(bTGUE+O5ix=rAczVejx!F$kpBbvLaOu-6TEUE15f2#Z}6$l$FipWD1MW#5bb zp+rDYktJ)Mm%Z$`CFzr+Pq57h=RQZ_Y#~_bD9fUicy=ooxtmE2)meqVN$nk81bFIPx^0u3PRywVP<0uP r+9K+vc - - - - Douce Plainte - BurgmullerJFF - Opus 100. - - Piano - 19th Century - Romantic - Allegro moderato - - Collection Litolff, 19th Century - Public Domain - - 25EF-16.ly - 25EF-16.mid - 25EF-16-a4.ps.gz - 25EF-16-a4.pdf - 25EF-16-let.ps.gz - 25EF-16-let.pdf - 25EF-16-preview.png - 79 - 539 - - Mutopia-2013/01/12-228 - Bas Wassink - basvanlola@zonnet.com - - - 2.16.1 - - - diff --git a/backend/tools/practice_sources/burgmuller-17.mid b/backend/tools/practice_sources/burgmuller-17.mid deleted file mode 100644 index fa6f723755da25ed8a5d8f43f1b83561846a0b59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2710 zcmd5+-ELAr5Z+2#>xEwU0ER?vdQ+(ZiIkK>$pVsMC8DvUiToLD+JHeCqc^po(OY;E zeFJ?QpW^s^vu6(NsclWYDPhm-%=hi=?9A-e8t;0>m_;*ZVsl?=jo}`&=f;oS?hg8+ z;b1>L8n(N8#-F>@9lmLg2E%L|%DwW_7xB&A{ZG#Z{a*ax%Ic$))%fgZ{8#g_*xe=L z*JDec?;HPtajq9qaJ_i&KKru!#QZe;`}23&-NC_!(QY^XcG&Ls%=eo;<8R;ajhT4X zOp5j^CQynrG$ETuo+u?wh?Fo2Kx`A#0u;*uLxBt`RZfUhjrgBsYpBLE6G3N>F_ZMB+6PYnWIVB-DtkLPwyXBM&;ynTO0ns(zX$ z=Li=ui<3&HZcsNEOjRu45U}KHd!cZWC8`J2)P^3X))nsiTHya?RZlPn5ivx4Gm$~*u3H9cd zWk}{UTJNwyw8K8PP3Ka{$p zM&G!dQi;Im=7$pbq!P#)ByVy35DR##)DV?*5Q#TPY{&{{P(Wn^MBuX9_Uo~kY~y{@ zw{!kC-p+;I;A1~)ei{DHKArMx9(mIQUbbn%m}!!eBqq7$7#}k>KkzP06M2V=lH5_w zPQaNaXp;32?8uWPIcuhmG19ni@CpSZZJ?wBBu6A2AY`NfWHAIt!H~tsaS5FfNvSg; zWSrycqFvNi#vZ%C=qqzIUwEY?whZG!lgU9dj5re@9ua!y0m&e+hEY&p4aNeO;Dr-J zoS_Y;L}V!d@#B1qQ8U|eC4;0fcZs}i{1oD4`84h|=sd0JQ9KQtouYV@AH|bQZqj^n zt@s~J5@|SiJ*P=8YQ=M|g6jp>@W-x6T*F_<7Z1t4TIbQ3E9P@u@7rGxX4BoO@QQN# p@QQ{vk - - - - La Babillarde - BurgmullerJFF - Opus 100. - - Piano - 19th Century - Romantic - Allegro moderato - - Collection Litolff, 19th Century - Public Domain - - 25EF-17.ly - 25EF-17.mid - 25EF-17-a4.ps.gz - 25EF-17-a4.pdf - 25EF-17-let.ps.gz - 25EF-17-let.pdf - 25EF-17-preview.png - 107 - 539 - - Mutopia-2013/01/12-229 - Bas Wassink - basvanlola@zonnet.com - - - 2.16.1 - - - diff --git a/backend/tools/practice_sources/burgmuller-18.mid b/backend/tools/practice_sources/burgmuller-18.mid deleted file mode 100644 index 3cd6b71edbb325783a8bc7cc3f99d8688f20c152..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2946 zcmcIk-A)=o82u1y>qUFf2WYtDM$tkbviwD|0%nC8sIiTyOQ30u1{#W~y{okku=@&q zg7%{K?UT`SW_H{{Sxk%?#xvi~obPA8oxRTczKEFFbx?8jHW zzmZ8wH1&gDppKt^$jfixZ?gQP+Z&#L9G~F7$O^9r_xu26+d#1JrV;*M6b?zWGf)({aLlX7oQE_K{l|b`iC29tCv+S$7S{ z`eyaJ(6bMY@%m-yXq5=yzQgQir1E}3G7^K#M=k%16#lrGSC>E z!E{7qg>&;VyKnwF;?`9~|JDIrgx+*^w%(ic)BOlL8>OGUIm17zpFVGH7E^%y9n@v| zs_O~kPTy##H+AcH(f4>q{Cbj+tC{511?LBI18j1Vft%*9lwssU8(xQaqpu(D z4j%8-{_xWvf6!|*k(ZR?%2UStLU#IFq9VBd@q~ zv@B+uAEy|^QEWx9G0v^ovS2G& zZGN1TVj?35Qi=%z*>nuiv#(=72;(py{MFPYc{(}Qrfz5B_)7c@c&~A@hE0ka#>;R+ aqMLo_c#Mcx*72nY&k_2D=+q?D+xiz - - - - Inquiétude - BurgmullerJFF - Opus 100. - - Piano - 19th Century - Romantic - Allegro agitato - - Collection Litolff, 19th Century - Public Domain - - 25EF-18.ly - 25EF-18.mid - 25EF-18-a4.ps.gz - 25EF-18-a4.pdf - 25EF-18-let.ps.gz - 25EF-18-let.pdf - 25EF-18-preview.png - 86 - 539 - - Mutopia-2013/01/12-230 - Bas Wassink - basvanlola@zonnet.com - - - 2.16.1 - - - diff --git a/backend/tools/practice_sources/catalog.json b/backend/tools/practice_sources/catalog.json deleted file mode 100644 index 3f56ef5..0000000 --- a/backend/tools/practice_sources/catalog.json +++ /dev/null @@ -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": [] - } -] \ No newline at end of file diff --git a/backend/tools/practice_sources/schumann-01.mid b/backend/tools/practice_sources/schumann-01.mid deleted file mode 100644 index 6f77000a26c4fd6a2ef1fdab4a72bafaa252507b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2883 zcmeH}(P|S>5Qa~hSn7ocK7i~KRO>|xHZ9wPk`S_u!3ug=(t^^^ElWhaS~q!u2H$u6 zXR~}8JvJml!Hec<^3VJ;bN-n)(5q*Po5zn@JLngGq8R zx^{W(=_t9nn8eB3K!09#&OQYFFXQj;;+xCh&F+S7T;_mvX%Rg;7H*;A(ba%Z}Mo&i9jINB1866p?X%=Rug-gc5CBs}j zbN$9@8>=nXz>I;6$c#uv-wdnemuRI{MsBrRlq%EAmRSF7hxaz7?)}4;(ee%Lz{Ay2 zA#jvtVX2}FQ*mI(Lg0I6B-#I*Q>m!N_%L(#Pu0F9+lDgF#?{&<`#Us)KCABH^L6dZ<=G4$_&M9tiPEaEcX0VbKpPNL44jNVq~4dfuo+%XHRjq1rKOk;iYIHi+@_{98Zk)FS4{nm;O*M7yzA zY#H{X5JQLS^aG3O!186mt(EU@`XTwyV4b|W%L3LQ - - - - Album pour la jeunesse - 1.Mélodie - SchumannR - O 68 n°1 - - Piano - 1848 - Romantic - - - Peters - Creative Commons Attribution-ShareAlike 2.5 - - schumann-op68-01-melodie.ly - schumann-op68-01-melodie.mid - schumann-op68-01-melodie-a4.ps.gz - schumann-op68-01-melodie-a4.pdf - schumann-op68-01-melodie-let.ps.gz - schumann-op68-01-melodie-let.pdf - schumann-op68-01-melodie-preview.png - 125 - 539 - - Mutopia-2007/02/11-647 - Philippe Hézaine - philippe.hezaine@free.fr - - - 2.10.16 - - - diff --git a/backend/tools/practice_sources/schumann-02.mid b/backend/tools/practice_sources/schumann-02.mid deleted file mode 100644 index 420678d3dbbc96496f661dbef29f19b63aa1f418..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3061 zcmeHI&2Cab82zBw>cWi=VD1xCdP5)xB@;*kB@{H)L^n!9n`qjUhR_&SzWIJ;&N<)A&hCeO5m}X#WKv&tb_a);y^_hw<6i%G zIOrdF!@*wfP$sEIy}`lWus?Y2Ve+)ze(kkB9({h%Ki>EJ^^NTMM&6tLWb!7HPCt1l zlb0)N-w^OjT6DDTpk^ef8)t6VuFf0LylDfYhNcOO z2DV~LE4EzrX&`x(K1dN%W1o5)Ri~v2pDkLd@Y!-cS|_Sex1;6TY9hGC;3k4=aelqE#V*6==vnPX^zr z4XFkiFrcNv0bM8tg^6NVBC0L;G;ClX7J;z974+*=0OdLrRA6z!8fooFT#5FOB>y7O zvX8JU*Fj0ddsQVArplSZoXYvKl2}@gPl)vRu7xj_UbH=3$F|BAkdzhlZbVBs$3mHO zI2R1a3o)7Y2yth>X`c{#u4q3If39@QnE|ON^q+S!O2)dXjKz29{o#G~%192cjL46* z_g}C5`_9#nf3w)kFTPMm{ZDwIeqv!v> z1;tTrbemF(PE|%?pNY}5p&upwXQxsCeT!28B RERVbJap6vgE+XD^zX2n-0p - - - - Album pour la jeunesse - 2.Marche militaire - SchumannR - O 68 n°2 - - Piano - 1848 - Romantic - - - Peters - Creative Commons Attribution-ShareAlike 2.5 - - schumann-op68-02-marche-militaire.ly - schumann-op68-02-marche-militaire.mid - schumann-op68-02-marche-militaire-a4.ps.gz - schumann-op68-02-marche-militaire-a4.pdf - schumann-op68-02-marche-militaire-let.ps.gz - schumann-op68-02-marche-militaire-let.pdf - schumann-op68-02-marche-militaire-preview.png - 107 - 539 - - Mutopia-2007/02/11-650 - Philippe Hézaine - philippe.hezaine@free.fr - - - 2.10.16 - - - diff --git a/backend/tools/practice_sources/schumann-03.mid b/backend/tools/practice_sources/schumann-03.mid deleted file mode 100644 index 8a0f12b7ca3dc7abfb9e25cb705bae7e55ac8add..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2673 zcmd^A+e!ja6y09BJw(t4#C$=KiDC{h8KTHoNd+}8A(|9PBZCmVB|`7cXY^J-IPG<` z?byL#4626&WuJBSW$k^|Io8i_+eEZX2}&iN>*wA*ug)k)t+(8VzUOw0zSnHsQ;=9| zc{k0z>+Ku7*s2^~81`NF>C}B_8=39h%=Vr!{ZMe3PA4~4DQKiNN)`n>G)|p9M(VSE zv(vfmbuN0n8;{;r$~3Ya3a*kwLpF&afoVQ<6AH}AQARYN_04us3<(*7A#1EGvj(T95xzkNQo05^KS0!m6^UO zORwQq#daV0Re9%E#WyFf%E0nXA|ERAd9Z#FMlp;OfE2=r?qkAdCJ)r;vwo+UEg)7j zqDRH46^EgoIZl+`m(J&Vd2~L1J0I!m5XW@L$HWTpEoaCEFD(B1@$*>ad6k2aV - - - - Album pour la jeunesse - 3.Chanson fredonnée - SchumannR - O 68 n°3 - - Piano - 1848 - Romantic - - - Peters - Creative Commons Attribution-ShareAlike 3.0 - - schumann-op68-03-chanson-fredonnee.ly - schumann-op68-03-chanson-fredonnee.mid - schumann-op68-03-chanson-fredonnee-a4.ps.gz - schumann-op68-03-chanson-fredonnee-a4.pdf - schumann-op68-03-chanson-fredonnee-let.ps.gz - schumann-op68-03-chanson-fredonnee-let.pdf - schumann-op68-03-chanson-fredonnee-preview.png - 135 - 543 - - Mutopia-2011/09/18-651 - Philippe Hézaine - philippe.hezaine@free.fr - - - 2.12.3 - - - diff --git a/backend/tools/practice_sources/schumann-04.mid b/backend/tools/practice_sources/schumann-04.mid deleted file mode 100644 index 398b398483fac5ace57cc8b656eb414bb2bd4fa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2237 zcmdT^&1w@-82!>ju?t=3QjqLJY8pyH%n!qal2B4nsG!S|7LTA>&@F{!%A7DJ^yZ5FhH_~jnu$%OLbH4MPbMDXn!N(&Jc_=x_=f3VAL?>9?NS1#* z9G_02@u)b74u>a_+k%1@}qsV=J#d%$~E{MpJXq^SSjRT<-zB(v*SpT?o^V_ zRI(2nIk}WsH;`E;kYrcODD2uo&lP&MfF_`T0GudgYO_F&HVUC@32jS&f+7No=-7Vk zZMxp(TJ!rL>$0T}GK@_ARtRMm#z>3*&_oN6ruJOP3?sD1xVM_u^X(-=j{nU!v(oUm zn+%U>hAvI)SF-02d;das989LmxJekg+)2iWdQ;@iqk)k=yEks&<`3+A58+8(DJbMv z?*FY0D5QqImC6I;3tD-+79yjmz@1r~XuUItE$ooT&iqvn z=dTphwR}~UfH@{Y``PP#na_nt1A~Z|P!^Pg1(JBZB_Qf>AD4ijc4HPo z?!_j9C_CS<3UxL_sM8Sd$0ma)(I$g{RZWJktQPRVr7a+I1MnW|2JqQs2>utm@Mf>k zr - - - - Album pour la jeunesse - 4.Un choral - SchumannR - O 68 n°4 - - Piano - 1848 - Romantic - - - Peters - Creative Commons Attribution-ShareAlike 2.5 - - schumann-op68-04-choral.ly - schumann-op68-04-choral.mid - schumann-op68-04-choral-a4.ps.gz - schumann-op68-04-choral-a4.pdf - schumann-op68-04-choral-let.ps.gz - schumann-op68-04-choral-let.pdf - schumann-op68-04-choral-preview.png - 124 - 539 - - Mutopia-2007/02/11-782 - Philippe Hézaine - philippe.hezaine@free.fr - - - 2.10.16 - - - diff --git a/backend/tools/practice_sources/schumann-05.mid b/backend/tools/practice_sources/schumann-05.mid deleted file mode 100644 index 70cf2325555e560c8cf97a273e7211e5fd36a8d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2677 zcmeHIO;5r=5FIFj9=P}eOn(822@>QZEu?{vRwQDgM*<`o2qjI`c&bR^9e#;=^v~59 zNX8|Ll{AtVLr<@7XW!1un{BPuO&0*-5CJ9fWVM_=zFmN?Bs=!db?kxaI_*v${K#I% z>9t+kIaTrHpn7(xnzw_;b9>lTk5lQRRQg2a2mGs8EV{o7ep5-_zk+`V3u&c{(mQvf zQO^PYItnm>sp-L6!kEC=)L?3P2rL8*0u2OB0!;*U0(Ar?fkp7kBDh9OZDkAx^LB%R z4GiX8Rbr~k%E)Xs4L+0;lk;JQW4N4EOV|x+%c>+D*yCF{R_ub%| z6#t-`G_W7OZqlsa!F$3OYtID@W)%-X1wn~GNn|u)G?CGX(M2XtOkQLP#QdNvpOvFs zIZ - - - - Album pour la jeunesse - 5.Petite pièce - SchumannR - O 68 n°5 - - Piano - 1848 - Romantic - - - Peters - Creative Commons Attribution-ShareAlike 2.5 - - schumann-op68-05-petite-piece.ly - schumann-op68-05-petite-piece.mid - schumann-op68-05-petite-piece-a4.ps.gz - schumann-op68-05-petite-piece-a4.pdf - schumann-op68-05-petite-piece-let.ps.gz - schumann-op68-05-petite-piece-let.pdf - schumann-op68-05-petite-piece-preview.png - 129 - 539 - - Mutopia-2007/02/11-653 - Philippe Hézaine - philippe.hezaine@free.fr - - - 2.10.16 - - - diff --git a/backend/tools/practice_sources/schumann-06.mid b/backend/tools/practice_sources/schumann-06.mid deleted file mode 100644 index 8a75978ca7d25f00dde547cb066af85f55728f88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3763 zcmcgtU279T6rHrSQK%q71;NTbXCLZ2Zo!66({yM+-e0==TGx2=#bLAVKSJ+kOnbJ_Ee*?;$PbVkUx@uak>b#v$ zDaW%+)hxM=SHct4X4&;j8oe?MMHosn6k*UFdKIqMY~2jEZU$S+FjN=|fxQZXWAZ>= zY&YlGVo=R3*Oygq3kJrpXPzl zFQa&@C`&A;iP%JzA{I<6U{RW3>MGMF>(UE4uov7Q-J*e^Xb|8u5V%biy0Um-%?Iv@ zMP=cbmiWT7Y&K(tFk>4AhK#|WtON>WrQ1lVx|PC}F``Ly_cVwRg_%&sFzs~$T{@%c za-1hB0lb2$i2%@95kLifVwY_^hdof&$?_KTFoZ10)eO&ID8uOK=vNHqHh5;9>>|*TD)sjEV@)$Xc%y<4_WVy12 z7t2>V${HaP9u0rhR6dSIYXOFJ8Wvz!hk+i2(4$}u+OrIo4Z192&j$8vgnKaY3nnu)iSSS>b zOE>{OIbA}bVSta*qp=&(aKHi;5gJxM4J@)Cd5j!6JHiGu+vyAo!>VI5Q=>2FiNkiZ zmhfD{bA^j5co8pp-agGqxKj1BJVC!+=X5m90!(*bA3Va9ek8_NpA z8Wt_5o4f#wNEIc8{Ne*&&qM@aD@@5;gVdYyn3F}9*DbX&13ZhwG)Rds_LR67C=s+H zN)+%=BA7vmxaCk;91Ip;ptJb8aX~jmIZR0|JGQg8_cCiFdo0{H3l(|W!dd@CJ - - - - Album pour la jeunesse - 6.Pauvre orpheline - SchumannR - O 68 n°6 - - Piano - 1848 - Romantic - - - Peters - Creative Commons Attribution-ShareAlike 2.5 - - schumann-op68-06-pauvre-orpheline.ly - schumann-op68-06-pauvre-orpheline.mid - schumann-op68-06-pauvre-orpheline-a4.ps.gz - schumann-op68-06-pauvre-orpheline-a4.pdf - schumann-op68-06-pauvre-orpheline-let.ps.gz - schumann-op68-06-pauvre-orpheline-let.pdf - schumann-op68-06-pauvre-orpheline-preview.png - 123 - 539 - - Mutopia-2007/02/11-687 - Philippe Hézaine - philippe.hezaine@free.fr - - - 2.10.16 - - - diff --git a/backend/tools/practice_sources/schumann-07.mid b/backend/tools/practice_sources/schumann-07.mid deleted file mode 100644 index f0313bd98dfa6002ad21b8f14f2548b01faed8ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5633 zcmd^C%W6|m6g{!ERl$ik6C`7$F~)|Hkc1mT`Us7+wStaHX#bUo{2`K4Z_ozD z^eWSQ$tQaZ0{9^ZdXxOCFFxFcc2#1|W9;YCOHc#kI*h zH*tj`-JoQnSE7(tfNP!V72sNj$tpoI&+!2Ecp>N{E9e1fiQrH@R&h*#S6D%9%?4q! z{zD~bF>SPhHepmTOxO{qsV1cdRncjg4Q7;O#CHU0T7+qtP|-G-c^$GfnG$H$I#V*T z21$iJ8KTGlK_1aOe#s*mcfk>;X@O=1nCL-O+^9U&+$cnnD5Wqg2SiN^Fcls^B$-Jq zlT?OP(S^{Z*!CI2^*gP2rc9Tr$SWqB^rVER0k)GJraR4k12zrs0eF*F*2B8UB z5}H&IRf{TpS5oFgoSSbnR>z`(YYNO4xppRTARB@&5i5~#?#{_ZGC>wY2>_Q2ki@l9 z0^2W}!}j;F`QJzhY+fG&ID+e>1ZO{WdasU!q8Hw=uzQBt#CpjHI4j~Te6+=~Y!$W{ zbRb(b$`X-hhEjs%H$>&6PK*+wDbOLfQL?d_=o{8N!W-6@AM-ok!;jimoXY&@o_2a( zz2EriJ*a=gtM}*pj%g+JrMf6N00H>8D^a*hzG=yq zCC>EYuPvtK~*{#dQg?XA|ySiN>@a^KwTC#UNeN< zU4x4?9G<)nupA!vwHAnTq4!3;T2(sJdQjCO-524m2UVq5w-i+BmBrY=z diff --git a/backend/tools/practice_sources/schumann-07.rdf b/backend/tools/practice_sources/schumann-07.rdf deleted file mode 100644 index 6e28c94..0000000 --- a/backend/tools/practice_sources/schumann-07.rdf +++ /dev/null @@ -1,36 +0,0 @@ - - - - - Album pour la jeunesse - 7.Chanson du chasseur - SchumannR - O 68 n°7 - - Piano - 1848 - Romantic - - - Peters - Creative Commons Attribution-ShareAlike 3.0 - - schumann-op68-07-chanson-du-chasseur.ly - schumann-op68-07-chanson-du-chasseur.mid - schumann-op68-07-chanson-du-chasseur-a4.ps.gz - schumann-op68-07-chanson-du-chasseur-a4.pdf - schumann-op68-07-chanson-du-chasseur-let.ps.gz - schumann-op68-07-chanson-du-chasseur-let.pdf - schumann-op68-07-chanson-du-chasseur-preview.png - 145 - 539 - - Mutopia-2007/05/20-691 - Philippe Hézaine - philippe.hezaine@free.fr - - - 2.10.23 - - - diff --git a/backend/tools/practice_sources/schumann-08.mid b/backend/tools/practice_sources/schumann-08.mid deleted file mode 100644 index 4dbf9cc1bffbfa61d3484f1b7d893a4e0c1f7685..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3954 zcmds2L2eU45NzYbh65KKfc%2sAcrK_vc^g*`(PswA%bJ%L;}T%qm>cjv{~&5Zq}X< zzev8p7x)7|SgL1cd)J-~wxb9+iL}wUtGlPWrh2A-@bQ?4N>re=!bShUJH@ZJ6c-;4 zMrUJhG^~uhqroY~g+~ML+8|kapn2OW_4rpMMeH7e!o^K zK6yy-n__AG55>>Oq%QqJ>h;g(=O-Rbluz-82SkAil%h%7$D)me;>DDu%a(4|M=U*t zdVs{zXGsO;V$IXBNo}zMg=OTdhwR+CCs(BMgPx!gbrKSUGGPT zzNhCC(xl{uKz8ue5ypTN$ABr&044(Y(g>;C zZr{M|knU^tTq0P~ElmV&g@}pJ{epmyi9qog>ZHUBvA0Qt&~4fV5uClw2f&0ey+ZBG zxl3txfPgxhVkOkLF*K#MQ%f~0y?}t3es4($8FBM?gnXWfzzxT_Base~lxUQo&uO`F zScZgoDhL!`4N;Z(tU@GPyx79RwPLU<=xah>DNvu80`_ZiE{uY?ZKj|kg^t{2 zzis&GQ-xg96fWe}C6=Td)J~C(L`O&rEr?IDagIg8#V4_>NPj|)El}na^v%q4&J||o l;a2YP8;CZ&>`?8TJKUMvg%vN9tR4Xi_W-%hn_7P4{{o9|1o;2} diff --git a/backend/tools/practice_sources/schumann-08.rdf b/backend/tools/practice_sources/schumann-08.rdf deleted file mode 100644 index 8404e15..0000000 --- a/backend/tools/practice_sources/schumann-08.rdf +++ /dev/null @@ -1,36 +0,0 @@ - - - - - Album pour la jeunesse - 8.Le cavalier sauvage - SchumannR - O 68 n°8 - - Piano - 1848 - Romantic - - - Peters - Creative Commons Attribution-ShareAlike 2.5 - - schumann-op68-08-cavalier-sauvage.ly - schumann-op68-08-cavalier-sauvage.mid - schumann-op68-08-cavalier-sauvage-a4.ps.gz - schumann-op68-08-cavalier-sauvage-a4.pdf - schumann-op68-08-cavalier-sauvage-let.ps.gz - schumann-op68-08-cavalier-sauvage-let.pdf - schumann-op68-08-cavalier-sauvage-preview.png - 113 - 539 - - Mutopia-2007/02/11-655 - Philippe Hézaine - philippe.hezaine@free.fr - - - 2.10.16 - - - diff --git a/backend/tools/practice_sources/schumann-09.mid b/backend/tools/practice_sources/schumann-09.mid deleted file mode 100644 index be18e766e1ef893b67fdd880a89f8aaaebf74817..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3003 zcmeHIO>0w85WVS#RG|pcwFKO0si}*$2_(EUyoQ8)_?j4W*U}c0mZrpr=;oP3yMON= z`8VA7Q{p)@_r8~yq83+zg_4_@xijaSnLBBAU!NLd?wE{O&U|Wi2j}?q)=ZbzPx_a` zLH{B<92}pVn`!3m$>8jG*dG+K`0}vYdXa6sx%lwBe|egHwzZwx+TO_~e`fk}Wo7BX znwbX6_xHW;U3{*6eDrM-pZ7K&PiSA?*pW~8&Gf0!(yL!ldiCAa)!D#AerTqzmZq7B z8Tp=x>LCtw92()Z88vWd($d7C%|lyUU%KM*!zZ|ui2`~82{BR4hK*`4R6=Hgx8iBG zG7M6q3}`*Z9u6HiI&ie%&~bo+lTsJ3 zDW!lnbS#b#nFE8I1Xk&&$_*T-$}C^URYEOa>ITl*eK&LqoHvkbQ@kO29wP@_vZ)1`_}=AdyL3&7 zg$LV%DdDv*jve9X&~O+cf`&sF0vH4V#zqn*Z~Zr*2{QqnzDX941!ghXMW&Ty?Er>U z=jx#-q_dDJS#T~w_J*pYOvshR1TXoL5jiJ9TLdC0BNJH}Noif~1n>L~vFs3?F7jh8 z@{9g^EONWVW311(jQ2Ih`W%)Uu>LB2?L825V0$DVA$0falskjWt7cv?Q%>M z*E~ZgCk%^33!Q~w@z)Hskclh2V~c?)7*Z=T%+o`y$S}`rf5317|1QMxSaM5cgUG{N<>M{yi=OL15bJf_}SH}+(9;W6+2jxaB2mP z7B(?nfkaCyF^3Y(mMTm{yGVABit#5~x=6*4JKmE*yaC6afRkG@`a*+L-~T%3oXt!M z-&%?C@%^~R;9<{+f$c~plC70dV_S9H*q515=`jXHJH-wqm!$^t7g$W+rFIijt0~g) zy%Cgd1ccgovqPRjm&M?=N&=L#?!YD~(xt*FM+$;w)nv>V;l>QV3#t(|k7$&z(%r&q a%0&j8qPZ0&k**pSm+nrmATAiNXnz2eGrWrc diff --git a/backend/tools/practice_sources/schumann-09.rdf b/backend/tools/practice_sources/schumann-09.rdf deleted file mode 100644 index 843499f..0000000 --- a/backend/tools/practice_sources/schumann-09.rdf +++ /dev/null @@ -1,36 +0,0 @@ - - - - - Album pour la jeunesse - 9.Chanson populaire - SchumannR - O 68 n°9 - - Piano - 1848 - Romantic - - - Peters - Creative Commons Attribution-ShareAlike 2.5 - - schumann-op68-09-chanson-populaire.ly - schumann-op68-09-chanson-populaire.mid - schumann-op68-09-chanson-populaire-a4.ps.gz - schumann-op68-09-chanson-populaire-a4.pdf - schumann-op68-09-chanson-populaire-let.ps.gz - schumann-op68-09-chanson-populaire-let.pdf - schumann-op68-09-chanson-populaire-preview.png - 116 - 539 - - Mutopia-2007/02/11-675 - Philippe Hézaine - philippe.hezaine@free.fr - - - 2.10.16 - - - diff --git a/backend/tools/practice_sources/schumann-10.mid b/backend/tools/practice_sources/schumann-10.mid deleted file mode 100644 index 87f6f1fe58ea631384a66faf8e50fed37533b96c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3299 zcmeHJU279T6uoJqZ6AE`StLG)Z!rytA!#TRLemh8C|1y?QqqFb(3H?3KCR362g3dl z(Ldmme``HwX6J4Y7J?WdU|^To`#JaAb0;%Cd4DbDzL7>;A5! zueSG|{E+mi_|UtL5c{d zJcLVu0xlzD7`RMu86m^KXL7<3<4`a%e-_;!atBYBfeZq5@Sqk~92F+APT&*E;=Nvm(t?^1U1JD&mB?YAmWawAw?lpRF`+i7UEr~fXn(D z!8U8z>}n{R3N4$8Rm)y;BYS!e&j4L@JTYu9fkz{A0V@bXH#{7gK7Evmfrcs| z3xd#*HRK`vF@jlkL~``~jd8xO2Z3w{A)iKa3(wA_I(pnwJH&2hu{rnc5Q=p`;ST}U z!3O5XLO2rioFHDg5a{5;;pOTe$7o6b-LTV?1&%2gJ5z6=lTQmA3#;d~ev~|?5S2Uf zoFd8mVKa=Z>zPvwIhKWo9iiuz9fE|P8)9<`JP_*;=4^L-2-7~JYny$GA@Qg)H0(0u z9ae=3?d3mbA1l>A0ng~sj;s$`cc+-$-MUqt6 fZvbJdt{RpP0cy;Mi;pHqu#C!o - - - - Album pour la jeunesse - 10.Le gai laboureur - SchumannR - O 68 n°10 - - Piano - 1848 - Romantic - - - Peters - Creative Commons Attribution-ShareAlike 2.5 - - schumann-op68-10-gai-laboureur.ly - schumann-op68-10-gai-laboureur.mid - schumann-op68-10-gai-laboureur-a4.ps.gz - schumann-op68-10-gai-laboureur-a4.pdf - schumann-op68-10-gai-laboureur-let.ps.gz - schumann-op68-10-gai-laboureur-let.pdf - schumann-op68-10-gai-laboureur-preview.png - 107 - 549 - - Mutopia-2007/02/11-659 - Philippe Hézaine - philippe.hezaine@free.fr - - - 2.10.16 - - - diff --git a/backend/tools/practice_sources/schumann-11.mid b/backend/tools/practice_sources/schumann-11.mid deleted file mode 100644 index 349b77d09c79e9b4438025c3f5ea02e98d726c78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7081 zcmeHM-A+?M5Z;0kOw~7C#DV$SjFoKEc?(F>S%r~=hLV5GUu2O19CDdTzYk9M}kKLJS4nEnb z93EFI2g&2=_RhX)CLZln_qLBK)oc=*7sd6r$(mp%FAod@10%yfEobd}8;fd=D{<%X1>AY~>F8*$s?JNk zYQ7&(iJDg{dFp)8KT)+sy#OV&Sn@$x!cmcnA{I+zCdC~&N{Ku@C_EDr1&SA-IZqRL zy#OV&SSHUhj#jx?#iB@NI_5ld6z5?;vr*_#+zX25NXdcX`S6EFyU_8VHh0&YNzU3WeY4CcW*kEX%?V&z<)v4*VT zTXVn~Zokq0mh&_3z7Oy{>)Hp@U3-Y+sYfRYKlOp9s@IqO{vo!5XXFxJnq|dN_=@q7CCM z#+A-#@X0(8@`ejZR9x=6qfuz}PBC8A>K z+a;5SjCfEO9`Vq>I9jo8q@f}CwxJ0DB4I+H`KDuT6axI{I^Xbl z)AK8zH==reB>{gEakNI{70G_J6>m&%`9su{E*_t(dV0v*SW)r5MaeB6|=Bn z&5Dk=ud{&jM8C{Tb0^@X_kx2UAUb=UZ=mAx*I6KfV+#>MRjq|gA>gt%3Du|t@pn*V Z;<6k@m^gm(TmnQ6x8}At237to><_hq_ErD@ diff --git a/backend/tools/practice_sources/schumann-11.rdf b/backend/tools/practice_sources/schumann-11.rdf deleted file mode 100644 index 8d6f747..0000000 --- a/backend/tools/practice_sources/schumann-11.rdf +++ /dev/null @@ -1,36 +0,0 @@ - - - - - Album pour la jeunesse - 11.Sicilienne - SchumannR - O 68 n°11 - - Piano - 1848 - Romantic - - - Peters - Creative Commons Attribution-ShareAlike 2.5 - - schumann-op68-11-sicilienne.ly - schumann-op68-11-sicilienne.mid - schumann-op68-11-sicilienne-a4.ps.gz - schumann-op68-11-sicilienne-a4.pdf - schumann-op68-11-sicilienne-let.ps.gz - schumann-op68-11-sicilienne-let.pdf - schumann-op68-11-sicilienne-preview.png - 108 - 549 - - Mutopia-2007/02/11-783 - Philippe Hézaine - philippe.hezaine@free.fr - - - 2.10.16 - - - diff --git a/backend/tools/practice_sources/schumann-12.mid b/backend/tools/practice_sources/schumann-12.mid deleted file mode 100644 index 0a9b244696796b951b2c01fc6b5a4eec81b02d0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11654 zcmeHNTTfd@5MH3yhpJK@`w$t0C{eiCgiA0tn>)xfpr%s$=7>aU6%-&(o~%?hYA`R@4i z?OEgWq;S@FdHlw;hrT^-yncCh+9(%*+~4`}=R)oGlfMp6-@Yo$OqGgLrTK#Xx%Mw# z3=iM?#hdOTTi&FQEfPvbj@ZyqlK zFXq}UJ{iT8OaK5i6iK1TEP+`7iv$({ED=}&uuNbXK!rfX1FpFlx#mtrh&L-P-s#t{ z3+^raD$%)%cfq}dA63~YSlmv*;-79xTbv4}(JaI2WqcR$rQs~T0Qy3%-Qs0hkqQtjPvBfRL-XA{;9j$07(y#6aUUYGB|Bt`hfRQS1meighBNVj!~pUW=45M}MhyT5_o1-{ z75P}BD*6pAyGQ+*tHgVmLAl;++@~?P-ZcF_22sU21IJ+M-q|d^N^NkC)FtVTRZ=LT zbKEC|%5-W6q#S^9MBoU(4mz*lcSr*4K?}r({ThxkiQVYjQH7VF0c{jo+(x0rKPW0w z3uEjOgk1y;z+muEl-xctsE-nKD8@0PvdSqljv19Sb=W2AnMbBk+wIaAIm23mQGqLs zO2+LPSD1l}Q0)%WC2(;5o17w|(c2S6=JrP=JvhxNm>)furI7)_>1ayha!OiDUF0@L zgRv!qG- zvHaU;Pm5y8w+oy(K=?xP!gpQ$?_)g7d^`BkZZ&+F+hv>~JS2Yreaxf6_Z;~1Tt7m; zuKullnU~nzuFt>=242AZY-iNoG`@-cSyLqHZyINDXWyvn&1d*N!*`_*juP*AxT%#= zPdRRODa+kkUS9auqq^76YD+%M)8nj6#Cz+jdwtZyF(R6M29^^C^>F;u10JrY$B~IW zE?Gdbwq4(po)k1q%R*dtI+nB~0}J(M+e7kpqGAZqBmK&J_pxvyBeZ@vN=df0PD_ZC zP8M1&gw-efC^LS6Sd7Vsvf*)*j!Z7ag&*Vg?V=as_YT0F3%4}7$LDU;pH8_GWg+IC zrp(&UjZS(t&e*wMtybcSPFRd76TT_@rlZ~VXQOox{YWMBN{JGQ1dEGqs{G zLh@Fh#Y6I;{$<=UKO3!CD)n(BJff5MMRa!BN}_ZdvBwP=<1o*EbJ1VM2>eAKBHt$p zo>+adkm&b!nRof}@8UFw0b3za3dC__4&B-1l*r2YG-D9c`-NF0JUNKg*5`Yf}36g%-kZ$1+r(mTi3>6vMPt@Y$ppWO;Ej~pv zP{B9>aw?!!e8{GUXi|y-%B+@FV1`zlffR~`w>aMavL)!mW$4mwaa}T1t-uqG>H`YQa)|T++oi?BQ$Y6tKjW>m_bNV7Cb%AM@jWTQ&2@_vBS8td)E6@; zoyH8zNVCr3%duO04)nQPyTxbNS*id4HO!Gh5gj65MiLy0E=I zj-GFezR5bF#jO)seBhJ=r@V5flsLfqkq^TVE-{ZMwgk`Hh>|p}L|*84qDydOK=7n` zamnR_IwWuPSv({k>R;ONnw@2vbX+*e`CKF8?1hW`D)^ZSEWglkTJwoP^x&kKU@P1T z$yz3nIJQzO4M8epn6JFNXkgJh^r~-UQU=c0RG#9r|6bScQD$do11PP zZ+7PRVs!5OUNzHbmpNDY^_8-}z>2Ux6 diff --git a/backend/tools/practice_sources/schumann-12.rdf b/backend/tools/practice_sources/schumann-12.rdf deleted file mode 100644 index 4e18ead..0000000 --- a/backend/tools/practice_sources/schumann-12.rdf +++ /dev/null @@ -1,36 +0,0 @@ - - - - - Album pour la jeunesse - 12.Le Père Fouettard - SchumannR - O 68 n°12 - - Piano - 1848 - Romantic - - - Peters - Creative Commons Attribution-ShareAlike 2.5 - - schumann-op68-12-Pere-Fouettard.ly - schumann-op68-12-Pere-Fouettard.mid - schumann-op68-12-Pere-Fouettard-a4.ps.gz - schumann-op68-12-Pere-Fouettard-a4.pdf - schumann-op68-12-Pere-Fouettard-let.ps.gz - schumann-op68-12-Pere-Fouettard-let.pdf - schumann-op68-12-Pere-Fouettard-preview.png - 122 - 549 - - Mutopia-2007/02/11-784 - Philippe Hézaine - philippe.hezaine@free.fr - - - 2.10.16 - - - diff --git a/docs/LIBRARY-AUTH-KO.md b/docs/LIBRARY-AUTH-KO.md index 9c477fd..e6008a0 100644 --- a/docs/LIBRARY-AUTH-KO.md +++ b/docs/LIBRARY-AUTH-KO.md @@ -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`로 다시 만들 수 있다. ## 악보 표시 diff --git a/docs/THIRD_PARTY_SAMPLES.md b/docs/THIRD_PARTY_SAMPLES.md index 33abd5e..be5fbf8 100644 --- a/docs/THIRD_PARTY_SAMPLES.md +++ b/docs/THIRD_PARTY_SAMPLES.md @@ -25,14 +25,3 @@ Mutopia Project의 배포 안내는 | 엘리제를 위하여 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 출처가 아니다. 공개 시청이 가능한 영상이라는 이유만으로 선율을 복제하지 않았다. 특정 쇼츠에 나온 곡을 그대로 옮기는 작업은 별도의 이용 허락과 원본 확인이 필요하다. diff --git a/scripts/build_practice_collection.mjs b/scripts/build_practice_collection.mjs deleted file mode 100644 index ff9566c..0000000 --- a/scripts/build_practice_collection.mjs +++ /dev/null @@ -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(`([^<]*)`))?.[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))}초`); diff --git a/scripts/check_practice_collection.mjs b/scripts/check_practice_collection.mjs deleted file mode 100644 index 8acbf66..0000000 --- a/scripts/check_practice_collection.mjs +++ /dev/null @@ -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}음`); -} diff --git a/수정기록.txt b/수정기록.txt index febfa7c..fb47c8c 100644 --- a/수정기록.txt +++ b/수정기록.txt @@ -54,3 +54,10 @@ - 운영 DB와 기존 MIDI 파일과 수정 대상 소스는 /home/syskiller/piano/backups/bach-to-basics/20261009-practice-30-intro-ending 에 백업했다. 백엔드 컨테이너만 다시 빌드했다. - HTTPS 첫 화면과 비회원 목록에서 새 공개 곡 30개 및 각 MIDI 파일의 다운로드를 확인했다. 기존 회원 업로드 2건을 보존했다. - 실제 건반을 연결해 곡별 연주감과 USB MIDI 입력을 확인하는 작업은 남아 있다. + +2026-10-09 + +- 사용자 요청과 맞지 않는 부르크뮐러와 슈만 기본 연습곡 30개를 철회했다. 생성 MIDI와 원본 자료 및 생성·검사 스크립트를 제거했다. +- 기본 자료 제외 목록에 30곡 파일명을 정확히 지정해 서버 재시작 뒤에도 다시 등록되지 않게 했다. 회원 업로드와 기존 기본 샘플 7개는 유지했다. +- 철회 직전 DB와 MIDI 파일 및 원본 자료는 /home/syskiller/piano/backups/bach-to-basics/20261009-withdraw-practice-30 에 백업했다. 격리 환경 백엔드 테스트 5개를 통과했다. 운영 백엔드만 갱신했다. +- 재시작 뒤 HTTPS 비회원 목록에서 철회곡 0건을 확인했다. DB 철회곡 0건과 해당 MIDI 파일 0개 및 회원 업로드 2건과 기존 기본 샘플 7개를 확인했다.