comparison clojure/com/aurellem/music/midi_util.clj @ 309:e6a5dfd31230

made progress on music; fixed several music pointers I grabbed from the internet.
author Dylan Holmes <ocsenave@gmail.com>
date Sat, 31 Mar 2012 06:47:05 -0500
parents 2873f50b7291
children ea5ed834be11
comparison
equal deleted inserted replaced
308:de172acc5a03 309:e6a5dfd31230
8 8
9 ShortMessage) 9 ShortMessage)
10 (com.sun.media.sound FastShortMessage) 10 (com.sun.media.sound FastShortMessage)
11 (java.io File)) 11 (java.io File))
12 12
13 (:use (com.aurellem.gb saves util constants gb-driver vbm items assembly characters)) 13 (:use (com.aurellem.gb saves util mem-util constants gb-driver vbm items assembly characters))
14 (:use (com.aurellem.run title)) 14 (:use (com.aurellem.run title))
15 (:use (com.aurellem.exp pokemon item-bridge)) 15 (:use (com.aurellem.exp pokemon item-bridge))
16 (:use (com.aurellem.world practice)) 16 ;; (:use (com.aurellem.world practice))
17 (:import [com.aurellem.gb.gb_driver SaveState])) 17 (:import [com.aurellem.gb.gb_driver SaveState]))
18 18
19 19
20 ;;; PURE MIDI MANIPULATION 20 ;;; PURE MIDI MANIPULATION
21 21
185 :lavender 0x827C 185 :lavender 0x827C
186 :ss-anne 0x8288 186 :ss-anne 0x8288
187 :meet-prof 0x8291 187 :meet-prof 0x8291
188 :meet-blue 0x829A 188 :meet-blue 0x829A
189 :follow 0x82A3 189 :follow 0x82A3
190 :safari 0x82AF 190 :evolution 0x82AF
191 :sfx-heal 0x82BA 191 :sfx-heal 0x82B8
192 :route-1 0x82C1 ;; route 1,2 192 :route-1 0x82C1 ;; route 1,2
193 :route-2 0x82CD ;; route 24, 25 193 :route-2 0x82CD ;; route 24, 25
194 :route-3 0x82D9 ;; route 3-10,16-22 194 :route-3 0x82D9 ;; route 3-10,16-22
195 :route-4 0x82E5 ;; route 11-15 195 :route-4 0x82E5 ;; route 11-15
196 :route-5 0x82F1 ;; indigo plateau 196 :route-5 0x82F1 ;; indigo plateau
197 197
198 ;;:1 0xc977 ;; fourteen "tracks" X
199 :1 0x801cb ;; slot machine music
200 :2 0x801d4
201 :3 0x801dd
202
203 :4 0x202be ;; uber slow battle songs?
204 :5 0x202c7 ;; can't play with pallet or bike (wrong base)
205 :6 0x202d9
206 :7 0x202e2
207 :8 0x202eb
208 :9 0x202f4
209
198 :title 0x7C249 210 :title 0x7C249
199 :credits 0x7C255 211 :credits 0x7C255
200 :hall-of-fame 0x7C25E 212 :hall-of-fame 0x7C25E
201 :lab-prof 0x7C267 213 :lab-prof 0x7C267
202 :jigglypuff 0x7C270 214 :jigglypuff 0x7C270
203 :bike 0x7C276 215 :bike 0x7C276
204 :surfing 0x7C282 216 :surfing 0x7C282
205 :casino 0x7C28B 217 :casino 0x7C28B
206 :intro-battle 0x7C294 218 :intro 0x7C294
207 :power-plant 0x7C2A0 ;; power plant, unknown dungeon 219 :power-plant 0x7C29D ;; power plant, unknown dungeon
208 :viridian-forest 0x7C2AC ;;viridian forest, seafoam islands 220 :viridian-forest 0x7C2A9 ;;viridian forest, seafoam islands
209 :victory-rd 0x7C2B8 ;;mt moon, rock tunnel, victory rd 221 :victory-rd 0x7C2B5 ;;mt moon, rock tunnel, victory rd
210 :mansion 0x7C2C4 222 :mansion 0x7C2C1
211 :pkmn-tower 0x7C2D0 223 :pkmn-tower 0x7C2CD
212 :silph 0x7C2D9 224 :silph 0x7C2D6
213 :trainer-bad 0x7C2E2 225 :trainer-bad 0x7C2DF
214 :trainer-girl 0x7C2EB 226 :trainer-girl 0x7C2E8
215 :trainer-angry 0x7C2F4 227 :trainer-angry 0x7C2F1
216 }) 228 })
217 229
218 230
219 (defn low-high-format 231 (defn low-high-format
220 "Returns the number represented by the bytes." 232 "Returns the number represented by the bytes."
250 262
251 )) 263 ))
252 264
253 265
254 266
255 267 (defn find-music []
268 (let [extract-song
269 (fn [mem]
270 (if (and
271 (> (count mem) 6)
272 (zero? (rem (first mem) 16))
273 (not(zero? (first mem)))
274 (= (nth mem 3) 1)
275 (= (nth mem 6) 2))
276 (take 12 mem)))]
277 (loop [mem (rom)
278 results []
279 ptr 0]
280 (cond (empty? mem)
281 results
282
283 (nil? (extract-song mem))
284 (recur (rest mem)
285 results
286 (inc ptr))
287 :else
288 (recur (rest mem)
289 (conj results
290 [(hex ptr) (extract-song mem)])
291 (inc ptr))))))
292
293 (defn music-header
294 "Given a valid address to a music header, returns the music header."
295 [address]
296 (let [
297 rom (rom)
298 data (drop address rom)
299 ]
300 (->
301 (loop [n 1 k 3]
302 (if (= n (nth data k))
303 (recur (inc n) (+ k 3))
304 k))
305 (take data))))
306
307 (defn pallet-song [song-name]
308 (write-rom!
309 (rewrite-memory
310 (vec(rom))
311 0x822e
312 (music-header (songs song-name)))))
313
314 (defn bike-song [song-name]
315 (write-rom!
316 (rewrite-memory
317 (vec(rom))
318 0x7c276
319 (music-header (songs song-name)))))
320
321 (defn bike-song* [address]
322 (write-rom!
323 (rewrite-memory
324 (vec(rom))
325 0x7c276
326 (music-header address))))
327
328
329 (defn pallet-song* [address]
330 (write-rom!
331 (rewrite-memory
332 (vec(rom))
333 0x822e
334 (music-header address))))
256 ;; (defn note? 335 ;; (defn note?
257 ;; "Does the given byte correspond to a note?" 336 ;; "Does the given byte correspond to a note?"
258 ;; [n]) 337 ;; [n])
259 338
260 ;; (comment defn parse-ops 339 ;; (comment defn parse-ops