rrayy
commited on
Commit
·
fe6189b
1
Parent(s):
2c8bb16
Changes to be committed: 전처리 구조 잡아보는 중
Browse filesmodified: preprocessing.ipynb
deleted: requirements.txt
deleted: utillity/midiplayer.py
- preprocessing.ipynb +35 -41
- requirements.txt +0 -76
- utillity/midiplayer.py +0 -7
preprocessing.ipynb
CHANGED
|
@@ -10,7 +10,7 @@
|
|
| 10 |
},
|
| 11 |
{
|
| 12 |
"cell_type": "code",
|
| 13 |
-
"execution_count":
|
| 14 |
"id": "19ba84e1",
|
| 15 |
"metadata": {},
|
| 16 |
"outputs": [
|
|
@@ -25,7 +25,7 @@
|
|
| 25 |
"data": {
|
| 26 |
"text/html": [
|
| 27 |
"\n",
|
| 28 |
-
" <div id=\"
|
| 29 |
" <link rel=\"stylesheet\" href=\"https://cuthbertLab.github.io/music21j/css/m21.css\">\n",
|
| 30 |
" \n",
|
| 31 |
" <script>\n",
|
|
@@ -36,8 +36,8 @@
|
|
| 36 |
" });\n",
|
| 37 |
" require(['music21'], function(music21) {\n",
|
| 38 |
" mp = new music21.miditools.MidiPlayer();\n",
|
| 39 |
-
" mp.addPlayer(\"#
|
| 40 |
-
" mp.base64Load(\"data:audio/midi;base64,TVRoZAAAAAYAAQACBABNVHJrAAAAFAD/UQMHJw4A/1gEBAIYCIgA/
|
| 41 |
" });\n",
|
| 42 |
" </script>"
|
| 43 |
],
|
|
@@ -47,24 +47,10 @@
|
|
| 47 |
},
|
| 48 |
"metadata": {},
|
| 49 |
"output_type": "display_data"
|
| 50 |
-
},
|
| 51 |
-
{
|
| 52 |
-
"ename": "KeyError",
|
| 53 |
-
"evalue": "'add4'",
|
| 54 |
-
"output_type": "error",
|
| 55 |
-
"traceback": [
|
| 56 |
-
"\u001b[31m---------------------------------------------------------------------------\u001b[39m",
|
| 57 |
-
"\u001b[31mKeyError\u001b[39m Traceback (most recent call last)",
|
| 58 |
-
"\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[2]\u001b[39m\u001b[32m, line 21\u001b[39m\n\u001b[32m 11\u001b[39m MIDI.set_midi(os.path.join(\u001b[33m\"\u001b[39m\u001b[33mdata\u001b[39m\u001b[33m\"\u001b[39m, filename))\n\u001b[32m 13\u001b[39m midiplayer.play_score(MIDI._midi) \u001b[38;5;66;03m# type: ignore\u001b[39;00m\n\u001b[32m 15\u001b[39m tokenized_data.append({\n\u001b[32m 16\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mvector\u001b[39m\u001b[33m\"\u001b[39m:{ \u001b[38;5;66;03m# Max is 100\u001b[39;00m\n\u001b[32m 17\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mBPM\u001b[39m\u001b[33m\"\u001b[39m:\u001b[32m128\u001b[39m,\n\u001b[32m 18\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mAggressive\u001b[39m\u001b[33m\"\u001b[39m:\u001b[32m13\u001b[39m,\n\u001b[32m 19\u001b[39m \n\u001b[32m 20\u001b[39m },\n\u001b[32m---> \u001b[39m\u001b[32m21\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mtoken\u001b[39m\u001b[33m\"\u001b[39m:\u001b[43mMIDI\u001b[49m\u001b[43m.\u001b[49m\u001b[43mtoken_id\u001b[49m\n\u001b[32m 22\u001b[39m })\n",
|
| 59 |
-
"\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\rrayy\\anaconda3\\envs\\diva\\Lib\\site-packages\\HarmonyMIDIToken\\tokenizer.py:169\u001b[39m, in \u001b[36mHarmonyMIDIToken.token_id\u001b[39m\u001b[34m(self)\u001b[39m\n\u001b[32m 167\u001b[39m \u001b[38;5;250m\u001b[39m\u001b[33;03m\"\"\"HarmonyMIDIToken에 대한 토큰 ID를 반환한다.\"\"\"\u001b[39;00m\n\u001b[32m 168\u001b[39m melody_tokens = \u001b[38;5;28mself\u001b[39m._tokenize(\u001b[38;5;28mself\u001b[39m.melody)\n\u001b[32m--> \u001b[39m\u001b[32m169\u001b[39m chords_tokens = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_tokenize\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mchords\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 170\u001b[39m bass_tokens = \u001b[38;5;28mself\u001b[39m._tokenize(\u001b[38;5;28mself\u001b[39m.bass)\n\u001b[32m 172\u001b[39m token = [\u001b[38;5;28mself\u001b[39m.bpm, \u001b[32m100\u001b[39m] + melody_tokens +[\u001b[32m200\u001b[39m]+ chords_tokens +[\u001b[32m300\u001b[39m]+ bass_tokens\n",
|
| 60 |
-
"\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\rrayy\\anaconda3\\envs\\diva\\Lib\\site-packages\\HarmonyMIDIToken\\tokenizer.py:113\u001b[39m, in \u001b[36mHarmonyMIDIToken._tokenize\u001b[39m\u001b[34m(self, data)\u001b[39m\n\u001b[32m 110\u001b[39m chord = pychord_chord(value)\n\u001b[32m 112\u001b[39m tokens.append(\u001b[38;5;28mself\u001b[39m._note_name_to_intpitch(chord._root+\u001b[33m\"\u001b[39m\u001b[33m4\u001b[39m\u001b[33m\"\u001b[39m))\n\u001b[32m--> \u001b[39m\u001b[32m113\u001b[39m tokens.append(\u001b[43mquality_map\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;28;43mstr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mchord\u001b[49m\u001b[43m.\u001b[49m\u001b[43m_quality\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m)\n\u001b[32m 115\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m j \u001b[38;5;129;01min\u001b[39;00m chord._appended:\n\u001b[32m 116\u001b[39m tokens.append(\u001b[38;5;28mself\u001b[39m._note_name_to_intpitch(j+\u001b[33m\"\u001b[39m\u001b[33m4\u001b[39m\u001b[33m\"\u001b[39m))\n",
|
| 61 |
-
"\u001b[31mKeyError\u001b[39m: 'add4'"
|
| 62 |
-
]
|
| 63 |
}
|
| 64 |
],
|
| 65 |
"source": [
|
| 66 |
"from HarmonyMIDIToken import HarmonyMIDIToken as Tokenizer\n",
|
| 67 |
-
"from utillity import midiplayer\n",
|
| 68 |
"import os\n",
|
| 69 |
"\n",
|
| 70 |
"tokenized_data = []\n",
|
|
@@ -75,22 +61,28 @@
|
|
| 75 |
" print(f\"file name: {filename}\")\n",
|
| 76 |
" MIDI.set_midi(os.path.join(\"data\", filename))\n",
|
| 77 |
" \n",
|
| 78 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 79 |
"\n",
|
| 80 |
-
"
|
| 81 |
-
"
|
| 82 |
-
"
|
| 83 |
-
"
|
| 84 |
-
"
|
| 85 |
-
"
|
| 86 |
-
"
|
| 87 |
-
"
|
|
|
|
|
|
|
| 88 |
" "
|
| 89 |
]
|
| 90 |
},
|
| 91 |
{
|
| 92 |
"cell_type": "code",
|
| 93 |
-
"execution_count":
|
| 94 |
"id": "f79a6edf",
|
| 95 |
"metadata": {},
|
| 96 |
"outputs": [
|
|
@@ -98,7 +90,7 @@
|
|
| 98 |
"name": "stdout",
|
| 99 |
"output_type": "stream",
|
| 100 |
"text": [
|
| 101 |
-
"Tokenized MIDI data:
|
| 102 |
]
|
| 103 |
}
|
| 104 |
],
|
|
@@ -108,7 +100,7 @@
|
|
| 108 |
},
|
| 109 |
{
|
| 110 |
"cell_type": "code",
|
| 111 |
-
"execution_count":
|
| 112 |
"id": "21a9ba89",
|
| 113 |
"metadata": {},
|
| 114 |
"outputs": [],
|
|
@@ -129,24 +121,26 @@
|
|
| 129 |
"import json # JSON으로 저장한 토크나이저 미디 데이터 불러오기\n",
|
| 130 |
"\n",
|
| 131 |
"with open('tokenized_midi_data.json', 'r') as f:\n",
|
| 132 |
-
" tokenized_data = json.load(f)
|
| 133 |
-
|
| 134 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 135 |
]
|
| 136 |
},
|
| 137 |
{
|
| 138 |
"cell_type": "code",
|
| 139 |
-
"execution_count":
|
| 140 |
-
"id": "
|
| 141 |
"metadata": {},
|
| 142 |
"outputs": [],
|
| 143 |
"source": [
|
| 144 |
-
"
|
| 145 |
-
"
|
| 146 |
-
" for k, v in D.items():\n",
|
| 147 |
-
" if v == value:\n",
|
| 148 |
-
" return k\n",
|
| 149 |
-
" return None"
|
| 150 |
]
|
| 151 |
}
|
| 152 |
],
|
|
|
|
| 10 |
},
|
| 11 |
{
|
| 12 |
"cell_type": "code",
|
| 13 |
+
"execution_count": null,
|
| 14 |
"id": "19ba84e1",
|
| 15 |
"metadata": {},
|
| 16 |
"outputs": [
|
|
|
|
| 25 |
"data": {
|
| 26 |
"text/html": [
|
| 27 |
"\n",
|
| 28 |
+
" <div id=\"midiPlayerDiv2140\"></div>\n",
|
| 29 |
" <link rel=\"stylesheet\" href=\"https://cuthbertLab.github.io/music21j/css/m21.css\">\n",
|
| 30 |
" \n",
|
| 31 |
" <script>\n",
|
|
|
|
| 36 |
" });\n",
|
| 37 |
" require(['music21'], function(music21) {\n",
|
| 38 |
" mp = new music21.miditools.MidiPlayer();\n",
|
| 39 |
+
" mp.addPlayer(\"#midiPlayerDiv2140\");\n",
|
| 40 |
+
" mp.base64Load(\"data:audio/midi;base64,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\");\n",
|
| 41 |
" });\n",
|
| 42 |
" </script>"
|
| 43 |
],
|
|
|
|
| 47 |
},
|
| 48 |
"metadata": {},
|
| 49 |
"output_type": "display_data"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 50 |
}
|
| 51 |
],
|
| 52 |
"source": [
|
| 53 |
"from HarmonyMIDIToken import HarmonyMIDIToken as Tokenizer\n",
|
|
|
|
| 54 |
"import os\n",
|
| 55 |
"\n",
|
| 56 |
"tokenized_data = []\n",
|
|
|
|
| 61 |
" print(f\"file name: {filename}\")\n",
|
| 62 |
" MIDI.set_midi(os.path.join(\"data\", filename))\n",
|
| 63 |
" \n",
|
| 64 |
+
" analyze = MIDI._midi.analyze(\"key\") # type: ignore\n",
|
| 65 |
+
"\n",
|
| 66 |
+
" MIDI._midi.show('midi') # type: ignore\n",
|
| 67 |
+
" mood = input(\"분위기 입력(에: Happy, Chill, Emotional, Aggressive, Dreamy): \")\n",
|
| 68 |
+
" print(f\"설정된 분위기: {mood}\")\n",
|
| 69 |
"\n",
|
| 70 |
+
" tokenized_data.append({\n",
|
| 71 |
+
" \"vector\":{ # Max is 100\n",
|
| 72 |
+
" \"BPM\":128,\n",
|
| 73 |
+
" \"Key\":analyze.tonic.name,\n",
|
| 74 |
+
" \"Mood\":mood,\n",
|
| 75 |
+
" },\n",
|
| 76 |
+
" \"token\":MIDI.token_id\n",
|
| 77 |
+
" })\n",
|
| 78 |
+
" else:\n",
|
| 79 |
+
" print(f\"Skipping non-MIDI file: {filename}\")\n",
|
| 80 |
" "
|
| 81 |
]
|
| 82 |
},
|
| 83 |
{
|
| 84 |
"cell_type": "code",
|
| 85 |
+
"execution_count": 2,
|
| 86 |
"id": "f79a6edf",
|
| 87 |
"metadata": {},
|
| 88 |
"outputs": [
|
|
|
|
| 90 |
"name": "stdout",
|
| 91 |
"output_type": "stream",
|
| 92 |
"text": [
|
| 93 |
+
"Tokenized MIDI data: 34\n"
|
| 94 |
]
|
| 95 |
}
|
| 96 |
],
|
|
|
|
| 100 |
},
|
| 101 |
{
|
| 102 |
"cell_type": "code",
|
| 103 |
+
"execution_count": 5,
|
| 104 |
"id": "21a9ba89",
|
| 105 |
"metadata": {},
|
| 106 |
"outputs": [],
|
|
|
|
| 121 |
"import json # JSON으로 저장한 토크나이저 미디 데이터 불러오기\n",
|
| 122 |
"\n",
|
| 123 |
"with open('tokenized_midi_data.json', 'r') as f:\n",
|
| 124 |
+
" tokenized_data = json.load(f)"
|
| 125 |
+
]
|
| 126 |
+
},
|
| 127 |
+
{
|
| 128 |
+
"cell_type": "markdown",
|
| 129 |
+
"id": "df4c74b3",
|
| 130 |
+
"metadata": {},
|
| 131 |
+
"source": [
|
| 132 |
+
"## 데이터 전처리"
|
| 133 |
]
|
| 134 |
},
|
| 135 |
{
|
| 136 |
"cell_type": "code",
|
| 137 |
+
"execution_count": 1,
|
| 138 |
+
"id": "f7b77c0c",
|
| 139 |
"metadata": {},
|
| 140 |
"outputs": [],
|
| 141 |
"source": [
|
| 142 |
+
"import torch\n",
|
| 143 |
+
"from sklearn.preprocessing import OneHotEncoder, MinMaxScaler"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 144 |
]
|
| 145 |
}
|
| 146 |
],
|
requirements.txt
DELETED
|
@@ -1,76 +0,0 @@
|
|
| 1 |
-
asttokens==3.0.0
|
| 2 |
-
backcall==0.2.0
|
| 3 |
-
blinker==1.8.2
|
| 4 |
-
certifi==2025.8.3
|
| 5 |
-
chardet==5.2.0
|
| 6 |
-
charset-normalizer==3.4.2
|
| 7 |
-
click==8.1.8
|
| 8 |
-
colorama==0.4.6
|
| 9 |
-
comm==0.2.3
|
| 10 |
-
contourpy==1.1.1
|
| 11 |
-
cycler==0.12.1
|
| 12 |
-
debugpy==1.8.15
|
| 13 |
-
decorator==5.2.1
|
| 14 |
-
executing==2.2.0
|
| 15 |
-
filelock==3.16.1
|
| 16 |
-
Flask==3.0.3
|
| 17 |
-
Flask-Cors==5.0.0
|
| 18 |
-
fonttools==4.57.0
|
| 19 |
-
fsspec==2025.3.0
|
| 20 |
-
-e git+https://github.com/ISLAND-IDs/HarmonyMIDIToken.git@8cdb44aeee4c5f5d6915cde7e7acab75f3f3d7fb#egg=harmony_midi_token
|
| 21 |
-
huggingface-hub==0.32.4
|
| 22 |
-
idna==3.10
|
| 23 |
-
importlib_metadata==8.5.0
|
| 24 |
-
importlib_resources==6.4.5
|
| 25 |
-
ipykernel==6.29.5
|
| 26 |
-
ipython==8.12.3
|
| 27 |
-
ipython_pygments_lexers==1.1.1
|
| 28 |
-
itsdangerous==2.2.0
|
| 29 |
-
jedi==0.19.2
|
| 30 |
-
Jinja2==3.1.6
|
| 31 |
-
joblib==1.4.2
|
| 32 |
-
jsonpickle==4.1.1
|
| 33 |
-
jupyter_client==8.6.3
|
| 34 |
-
jupyter_core==5.8.1
|
| 35 |
-
kiwisolver==1.4.7
|
| 36 |
-
MarkupSafe==2.1.5
|
| 37 |
-
matplotlib==3.7.5
|
| 38 |
-
matplotlib-inline==0.1.7
|
| 39 |
-
more-itertools==10.5.0
|
| 40 |
-
mpmath==1.3.0
|
| 41 |
-
music21==8.3.0
|
| 42 |
-
mypy-extensions==1.0.0
|
| 43 |
-
nest-asyncio==1.6.0
|
| 44 |
-
networkx==3.3
|
| 45 |
-
numpy==2.3.2
|
| 46 |
-
packaging==25.0
|
| 47 |
-
parso==0.8.4
|
| 48 |
-
pickleshare==0.7.5
|
| 49 |
-
pillow==10.4.0
|
| 50 |
-
platformdirs==4.3.6
|
| 51 |
-
prompt_toolkit==3.0.51
|
| 52 |
-
psutil==7.0.0
|
| 53 |
-
pure_eval==0.2.3
|
| 54 |
-
pychord==1.2.2
|
| 55 |
-
Pygments==2.19.2
|
| 56 |
-
pyparsing==3.1.4
|
| 57 |
-
python-dateutil==2.9.0.post0
|
| 58 |
-
pywin32==311
|
| 59 |
-
PyYAML==6.0.2
|
| 60 |
-
pyzmq==27.0.1
|
| 61 |
-
requests==2.32.3
|
| 62 |
-
six==1.17.0
|
| 63 |
-
stack-data==0.6.3
|
| 64 |
-
sympy==1.13.3
|
| 65 |
-
torch==2.7.1+cu128
|
| 66 |
-
torchaudio==2.7.1+cu128
|
| 67 |
-
torchvision==0.22.1+cu128
|
| 68 |
-
tornado==6.4.2
|
| 69 |
-
tqdm==4.67.1
|
| 70 |
-
traitlets==5.14.3
|
| 71 |
-
typing_extensions==4.13.2
|
| 72 |
-
urllib3==2.2.3
|
| 73 |
-
wcwidth==0.2.13
|
| 74 |
-
webcolors==24.8.0
|
| 75 |
-
Werkzeug==3.0.6
|
| 76 |
-
zipp==3.20.2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
utillity/midiplayer.py
DELETED
|
@@ -1,7 +0,0 @@
|
|
| 1 |
-
from music21.stream import Score # type: ignore
|
| 2 |
-
|
| 3 |
-
def play_score(score:Score):
|
| 4 |
-
"""
|
| 5 |
-
music21.stream.Score 객체를 주피터 노트북에서 재생합니다.
|
| 6 |
-
"""
|
| 7 |
-
score.show('midi')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|