rrayy commited on
Commit
fe6189b
·
1 Parent(s): 2c8bb16

Changes to be committed: 전처리 구조 잡아보는 중

Browse files

modified: preprocessing.ipynb
deleted: requirements.txt
deleted: utillity/midiplayer.py

Files changed (3) hide show
  1. preprocessing.ipynb +35 -41
  2. requirements.txt +0 -76
  3. utillity/midiplayer.py +0 -7
preprocessing.ipynb CHANGED
@@ -10,7 +10,7 @@
10
  },
11
  {
12
  "cell_type": "code",
13
- "execution_count": 2,
14
  "id": "19ba84e1",
15
  "metadata": {},
16
  "outputs": [
@@ -25,7 +25,7 @@
25
  "data": {
26
  "text/html": [
27
  "\n",
28
- " <div id=\"midiPlayerDiv3735\"></div>\n",
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(\"#midiPlayerDiv3735\");\n",
40
- " 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",
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
- " midiplayer.play_score(MIDI._midi) # type: ignore\n",
 
 
 
 
79
  "\n",
80
- " tokenized_data.append({\n",
81
- " \"vector\":{ # Max is 100\n",
82
- " \"BPM\":128,\n",
83
- " \"Aggressive\":13,\n",
84
- " \n",
85
- " },\n",
86
- " \"token\":MIDI.token_id\n",
87
- " })\n",
 
 
88
  " "
89
  ]
90
  },
91
  {
92
  "cell_type": "code",
93
- "execution_count": null,
94
  "id": "f79a6edf",
95
  "metadata": {},
96
  "outputs": [
@@ -98,7 +90,7 @@
98
  "name": "stdout",
99
  "output_type": "stream",
100
  "text": [
101
- "Tokenized MIDI data: 31\n"
102
  ]
103
  }
104
  ],
@@ -108,7 +100,7 @@
108
  },
109
  {
110
  "cell_type": "code",
111
- "execution_count": null,
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)\n",
133
- "# Convert string keys back to tuple\n",
134
- "# tokenized_data = {tuple(key.split(\"|\")): value for key, value in tokenized_data.items()}\n"
 
 
 
 
 
 
135
  ]
136
  },
137
  {
138
  "cell_type": "code",
139
- "execution_count": null,
140
- "id": "34c244ab",
141
  "metadata": {},
142
  "outputs": [],
143
  "source": [
144
- "# value로 key 찾기\n",
145
- "def get_key_by_value(D:dict, value):\n",
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,TVRoZAAAAAYAAQACBABNVHJrAAAAFAD/UQMHJw4A/1gEBAIYCIgA/y8ATVRyawAACOoA/wMPRnV0dXJlIEJvdW5jZSAxAOAAQADAAIgAkEhaAJA1WgCQPFoAkEVaAJBBWgCQUVqGAIBIAACANQAAgDwAAIBFAACAQQAAgFEAggCQSFoAkDVaAJA8WgCQRVoAkEFaAJBRWoQAgEgAAIA1AACAPAAAgEUAAIBBAACAUQCCAJBIWgCQNVoAkDxaAJBFWgCQQVoAkFFaggCASAAAgDUAAIA8AACARQAAgEEAAIBRAIIAkEhaAJA1WgCQPFoAkEVaAJBBWgCQT1qEAIBIAACANQAAgDwAAIBFAACAQQAAgE8AggCQSFoAkDVaAJA8WgCQRVoAkEFaAJBPWoQAgEgAAIA1AACAPAAAgEUAAIBBAACATwCCAJA3WgCQQ1oAkD5aAJBIWgCQVFqGAIA3AACAQwAAgD4AAIBIAACAVACEAJA3WgCQQ1oAkD5aAJBIWgCQVFqEAIA3AACAQwAAgD4AAIBIAACAVAAAkDdaAJBDWgCQPloAkEhaAJBTWoIAgDcAAIBDAACAPgAAgEgAAIBTAACQSFoAkDdaAJBDWgCQPloAkFRahACASAAAgDcAAIBDAACAPgAAgFQAAJA3WgCQQ1oAkD5aAJBIWgCQT1qCVYBDAACAPgAAgEgAAIBPAIMrgDcAAJA3WgCQN1oAkENaAJA+WgCQSFoAkFNahACANwAAgDcAAIBDAACAPgAAgEgAAIBTAACQMFqEAIAwAACQOVoAkENaAJBAWgCQSFoAkEVaAJBUWoYAgDkAAIBDAACAQAAAgEgAAIBFAACAVACCAJA5WgCQQ1oAkEBaAJBIWgCQRVoAkFRahACAOQAAgEMAAIBAAACASAAAgEUAAIBUAACQOVoAkENaAJBAWgCQSFoAkEVaAJBTWoIAgDkAAIBDAACAQAAAgEgAAIBFAACAUwAAkDlaAJBDWgCQQFoAkEhaAJBFWgCQVFqEAIA5AACAQwAAgEAAAIBIAACARQAAgFQAAJA5WgCQQ1oAkEBaAJBIWgCQRVoAkE9aglWAOQAAgEMAAIBAAACASAAAgEUAAIBPAIMrkDlaAJBDWgCQQFoAkEhaAJBFWgCQU1qEAIA5AACAQwAAgEAAAIBIAACARQAAgFMAAJAyWoQAgDIAAJA3WgCQPloAkEhaAJBHWgCQQ1oAkFFahSuANwAAgD4AAIBIAACARwAAgEMAAIBRAIJVkDdaAJA+WgCQSFoAkEdaAJBDWgCQUVqEAIA3AACAPgAAgEgAAIBHAACAQwAAgFEAAJA3WgCQPloAkEhaAJBHWgCQQ1oAkFNaggCANwAAgD4AAIBIAACARwAAgEMAAIBTAACQN1oAkD5aAJBIWgCQR1oAkENaAJBUWoQAgDcAAIA+AACASAAAgEcAAIBDAACAVAAAkDdaAJA+WgCQSFoAkEdaAJBDWgCQU1qEAIA3AACAPgAAgEgAAIBHAACAQwAAgFMAggCQN1oAkD5aAJBIWgCQR1oAkENaAJBTWoQAgDcAAIA+AACASAAAgEcAAIBDAACAUwAAkDBahACAMAAAkEhaAJA1WgCQPFoAkEVaAJBBWgCQUVqGAIBIAACANQAAgDwAAIBFAACAQQAAgFEAggCQSFoAkDVaAJA8WgCQRVoAkEFaAJBRWoQAgEgAAIA1AACAPAAAgEUAAIBBAACAUQCCAJBIWgCQNVoAkDxaAJBFWgCQQVoAkFFaggCASAAAgDUAAIA8AACARQAAgEEAAIBRAIIAkEhaAJA1WgCQPFoAkEVaAJBBWgCQT1qEAIBIAACANQAAgDwAAIBFAACAQQAAgE8AggCQSFoAkDVaAJA8WgCQRVoAkEFaAJBPWoQAgEgAAIA1AACAPAAAgEUAAIBBAACATwCCAJA3WgCQQ1oAkD5aAJBIWgCQVFqGAIA3AACAQwAAgD4AAIBIAACAVACEAJA3WgCQQ1oAkD5aAJBIWgCQVFqEAIA3AACAQwAAgD4AAIBIAACAVAAAkDdaAJBDWgCQPloAkEhaAJBTWoIAgDcAAIBDAACAPgAAgEgAAIBTAACQN1oAkENaAJA+WgCQSFoAkFRahACANwAAgEMAAIA+AACASAAAgFQAAJA3WgCQQ1oAkD5aAJBIWgCQW1qCVYBDAACAPgAAgEgAAIBbAIMrgDcAAJA3WgCQN1oAkENaAJA+WgCQSFoAkFNahACANwAAgDcAAIBDAACAPgAAgEgAAIBTAACQMFqEAIAwAACQOVoAkENaAJBAWgCQSFoAkEVaAJBUWoYAgDkAAIBDAACAQAAAgEgAAIBFAACAVACCAJA5WgCQQ1oAkEBaAJBIWgCQRVoAkFRahACAOQAAgEMAAIBAAACASAAAgEUAAIBUAACQOVoAkENaAJBAWgCQSFoAkEVaAJBTWoIAgDkAAIBDAACAQAAAgEgAAIBFAACAUwAAkDlaAJBDWgCQQFoAkEhaAJBFWgCQVFqEAIA5AACAQwAAgEAAAIBIAACARQAAgFQAAJA5WgCQQ1oAkEBaAJBIWgCQRVoAkFtaglWAOQAAgEMAAIBAAACASAAAgEUAAIBbAIMrkDlaAJBDWgCQQFoAkEhaAJBFWgCQU1qEAIA5AACAQwAAgEAAAIBIAACARQAAgFMAAJAyWoQAgDIAAJA3WgCQPloAkEhaAJBHWgCQQ1oAkFFahSuANwAAgD4AAIBIAACARwAAgEMAAIBRAIJVkDdaAJA+WgCQSFoAkEdaAJBDWgCQUVqEAIA3AACAPgAAgEgAAIBHAACAQwAAgFEAAJA3WgCQPloAkEhaAJBHWgCQQ1oAkFZaggCANwAAgD4AAIBIAACARwAAgEMAAIBWAACQN1oAkD5aAJBIWgCQR1oAkENaAJBUWoQAgDcAAIA+AACASAAAgEcAAIBDAACAVAAAkDdaAJA+WgCQSFoAkEdaAJBDWgCQVlqEAIA3AACAPgAAgEgAAIBHAACAQwAAgFYAggCQN1oAkD5aAJBIWgCQR1oAkENaAJBUWoQAgDcAAIA+AACASAAAgEcAAIBDAACAVAAAkDBahACAMACIAP8vAA==\");\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')