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,TVRoZAAAAAYAAQACBABNVHJrAAAAFAD/UQMHJw4A/1gEBAIYCIgA/y8ATVRyawAACMQA/wMPRnV0dXJlIEJvdW5jZSAyAOAAQADAAIgAkFFeAJBBVACQPFQAkDVeAJBFVIYAgFEAAIBBAACAPAAAgDUAAIBFAIIAkDVeAJBBVACQPFQAkEVUAJBRXoQAgDUAAIBBAACAPAAAgEUAAIBRAIIAkFFeAJA1XoIAgFEAAIA1AIIAkE9eAJA1XgCQRVQAkDxUAJBBVIQAgE8AAIA1AACARQAAgDwAAIBBAIIAkDVeAJBFVACQPFQAkEFUAJBPXoJVgDUAAIBFAACAPAAAgEEAAIBPAIMrkDdeAJBUXoIAkDdeAJBUXgCQPlQAkEhUAJBDVIQAgD4AAIBIAACAQwBVgDcAAIBUAIErgDcAAIBUAIIAkFReAJA+VACQSFQAkENUAJA3XoQAgFQAAIA+AACASAAAgEMAAIA3AACQU14AkDdeAJBDVACQSFQAkD5UggCAUwAAgDcAAIBDAACASAAAgD4AAJA3XgCQQ1QAkEhUAJA+VACQVF6EAIA3AACAQwAAgEgAAIA+AACAVAAAkDdeAJBDVACQSFQAkD5UAJBPXoJVgEMAAIBIAACAPgAAgE8AgyuANwAAkDdeAJBDVACQSFQAkD5UAJBTXoQAkDBegSuANwAAgEMAAIBIAACAPgAAgFMAVYAwAIIAkFNeAJBAUwCQSFMAkENTAJBFUwCQOV4AkFReglWAUwAAgEAAAIBIAACAQwAAgEUAhSuAOQAAgFQAAJBDUwCQSFMAkEBTAJA5XgCQVF4AkEVThACAQwAAgEgAAIBAAACAOQAAgFQAAIBFAACQU14AkEBTAJBIUwCQQ1MAkEVTAJA5XoIAgFMAAIBAAACASAAAgEMAAIBFAACAOQAAkENTAJBIUwCQQFMAkDleAJBFUwCQVF6EAIBDAACASAAAgEAAAIA5AACARQAAgFQAAJBAUwCQSFMAkENTAJBFUwCQT14AkDleglWAQAAAgEgAAIBDAACARQAAgE8AgyuAOQAAkENTAJBIUwCQQFMAkDleAJBFUwCQU16EAIBDAACASAAAgEAAAIA5AACARQAAgFMAAJAyXoQAgDIAAJA8UwCQQ1MAkD5TAJBHUwCQUV4AkDdeglWAPAAAgEMAAIA+AACARwCDK4BRAACANwCCAJA8UwCQQ1MAkD5TAJBHUwCQN14AkFFehACAPAAAgEMAAIA+AACARwAAgDcAAIBRAACQPFMAkFNeAJBDUwCQR1MAkDdeAJA+U4IAgDwAAIBTAACAQwAAgEcAAIA3AACAPgAAkDxTAJA3XgCQR1MAkD5TAJBDUwCQU14AkFReggCAPAAAgDcAAIBHAACAPgAAgEMAAIBTAACAVACCAJA8UwCQQ1MAkEdTAJA+UwCQU14AkDdeglWAPAAAgEMAAIBHAACAPgAAgFMAgyuANwAAkDxTAJA3XgCQR1MAkD5TAJBDUwCQU16EAIA8AACANwAAgEcAAIA+AACAQwAAgFMAAJAwXoIAgDAAggCQUV4AkEFUAJA8VACQNV4AkEVUhgCAUQAAgEEAAIA8AACANQAAgEUAggCQUV4AkDVeAJBBVACQPFQAkEVUhgCAUQAAgDUAAIBBAACAPAAAgEUAAJA1XgCQUV6CAIA1AACAUQCCAJA1XgCQRVQAkDxUAJBBVACQT16CVYA1AACARQAAgDwAAIBBAACATwCDK5A1XgCQRVQAkDxUAJBBVACQT16CVYA1AACARQAAgDwAAIBBAACATwCDK5BDVACQSFQAkD5UAJBUXoIAkENUAJBIVACQPlQAkFReAJA3XgCQVF6EVYBDAACASAAAgD4AAIBUAIErgEMAAIBIAACAPgAAgFQAAIA3AACAVACCAJBUXgCQPlQAkEhUAJBDVACQN16EAIBUAACAPgAAgEgAAIBDAACANwAAkD5UAJBIVACQQ1QAkDdeAJBTXoIAgD4AAIBIAACAQwAAgDcAAIBTAACQVF4AkD5UAJBIVACQQ1QAkDdehACAVAAAgD4AAIBIAACAQwAAgDcAAJA3XgCQQ1QAkEhUAJA+VACQW16CVYBDAACASAAAgD4AAIBbAIMrgDcAAJBTXgCQN14AkD5UAJBIVACQQ1QAkDdehACAUwAAgDcAAIA+AACASAAAgEMAAIA3AACQMF6CAIAwAIIAkFNeAJBAUwCQSFMAkENTAJBFUwCQOV4AkFReglWAUwAAgEAAAIBIAACAQwAAgEUAhSuAOQAAgFQAAJBUXgCQOV4AkEBTAJBIUwCQQ1MAkEVThACAVAAAgDkAAIBAAACASAAAgEMAAIBFAACQOV4AkENTAJBIUwCQQFMAkFNeAJBFU4IAgDkAAIBDAACASAAAgEAAAIBTAACARQAAkENTAJBIUwCQQFMAkDleAJBUXgCQRVOEAIBDAACASAAAgEAAAIA5AACAVAAAgEUAAJA5XgCQQ1MAkEhTAJBAUwCQW14AkEVTglWAQwAAgEgAAIBAAACAWwAAgEUAglaAOQBVkFNeAJBDUwCQSFMAkEBTAJA5XgCQRVOEAIBTAACAQwAAgEgAAIBAAACAOQAAgEUAAJAyXoQAgDIAAJBDUwCQPFMAkD5TAJBFUwCQUV4AkDdeglWAQwAAgDwAAIA+AACARQCDK4BRAACANwCCAJBDUwCQRVMAkD5TAJA8UwCQN14AkFFehACAQwAAgEUAAIA+AACAPAAAgDcAAIBRAACQN14AkDxTAJBDUwCQVl4AkEdTAJA+U4IAgDcAAIA8AACAQwAAgFYAAIBHAACAPgAAkD5TAJA3XgCQPFMAkENTAJBWXgCQR1MAkFReggCAPgAAgDcAAIA8AACAQwAAgFYAAIBHAACAVACCAJBWXgCQPlMAkEdTAJBDUwCQPFMAkDdeglWAVgAAgD4AAIBHAACAQwAAgDwAgyuANwAAkFReAJA+UwCQPFMAkDdeAJBDUwCQR1OEAIBUAACAPgAAgDwAAIA3AACAQwAAgEcAAJAwXoJVgDAAiAD/LwA=\");\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
}