File size: 10,885 Bytes
82b12d0 54278af 2c8bb16 54278af 2c8bb16 54278af 2c8bb16 82b12d0 63591dc 9b91cd8 63591dc 82b12d0 63591dc 82b12d0 63591dc 2c8bb16 63591dc 82b12d0 63591dc 2c8bb16 63591dc 82b12d0 2c8bb16 82b12d0 2c8bb16 82b12d0 2c8bb16 82b12d0 54278af 82b12d0 2c8bb16 82b12d0 54278af 82b12d0 9b91cd8 82b12d0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
{
"cells": [
{
"cell_type": "markdown",
"id": "7a9aa1cb",
"metadata": {},
"source": [
"## 미디 파일에 맞는 스타일 벡터 생성을 위한 곳"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "19ba84e1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"file name: 0.mid\n"
]
},
{
"data": {
"text/html": [
"\n",
" <div id=\"midiPlayerDiv3735\"></div>\n",
" <link rel=\"stylesheet\" href=\"https://cuthbertLab.github.io/music21j/css/m21.css\">\n",
" \n",
" <script>\n",
" require.config({\n",
" paths: {\n",
" 'music21': 'https://cuthbertLab.github.io/music21j/releases/music21.debug',\n",
" }\n",
" });\n",
" require(['music21'], function(music21) {\n",
" mp = new music21.miditools.MidiPlayer();\n",
" mp.addPlayer(\"#midiPlayerDiv3735\");\n",
" mp.base64Load(\"data:audio/midi;base64,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\");\n",
" });\n",
" </script>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"ename": "KeyError",
"evalue": "'add4'",
"output_type": "error",
"traceback": [
"\u001b[31m---------------------------------------------------------------------------\u001b[39m",
"\u001b[31mKeyError\u001b[39m Traceback (most recent call last)",
"\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",
"\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",
"\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",
"\u001b[31mKeyError\u001b[39m: 'add4'"
]
}
],
"source": [
"from HarmonyMIDIToken import HarmonyMIDIToken as Tokenizer\n",
"from utillity import midiplayer\n",
"import os\n",
"\n",
"tokenized_data = []\n",
"\n",
"for filename in os.listdir(\"data\"):\n",
" if filename.endswith(\".mid\"):\n",
" MIDI = Tokenizer()\n",
" print(f\"file name: {filename}\")\n",
" MIDI.set_midi(os.path.join(\"data\", filename))\n",
" \n",
" midiplayer.play_score(MIDI._midi) # type: ignore\n",
"\n",
" tokenized_data.append({\n",
" \"vector\":{ # Max is 100\n",
" \"BPM\":128,\n",
" \"Aggressive\":13,\n",
" \n",
" },\n",
" \"token\":MIDI.token_id\n",
" })\n",
" "
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f79a6edf",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Tokenized MIDI data: 31\n"
]
}
],
"source": [
"print(\"Tokenized MIDI data:\", len(tokenized_data))"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "21a9ba89",
"metadata": {},
"outputs": [],
"source": [
"import json # JSON 파일로 토크나이저 미디 데이터 저장\n",
"\n",
"with open('tokenized_midi_data.json', 'w') as f:\n",
" json.dump(tokenized_data, f, indent=4)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "dea532d4",
"metadata": {},
"outputs": [],
"source": [
"import json # JSON으로 저장한 토크나이저 미디 데이터 불러오기\n",
"\n",
"with open('tokenized_midi_data.json', 'r') as f:\n",
" tokenized_data = json.load(f)\n",
"# Convert string keys back to tuple\n",
"# tokenized_data = {tuple(key.split(\"|\")): value for key, value in tokenized_data.items()}\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "34c244ab",
"metadata": {},
"outputs": [],
"source": [
"# value로 key 찾기\n",
"def get_key_by_value(D:dict, value):\n",
" for k, v in D.items():\n",
" if v == value:\n",
" return k\n",
" return None"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "diva",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
|