Mercurial > vba-clojure
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 |