{ "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", "
\n", " \n", " \n", " " ], "text/plain": [ "" ] }, "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 }