annotate clojure/com/aurellem/run/final_cut.clj @ 531:c6ad363e36f7

trying to find out map problem.
author Robert McIntyre <rlm@mit.edu>
date Sun, 24 Jun 2012 17:18:22 -0500
parents 8d3177d19d5f
children a3bdff5554ad
rev   line source
rlm@530 1 (ns com.aurellem.run.final-cut
rlm@530 2 (:use (com.aurellem.gb saves gb-driver util constants
rlm@530 3 items vbm characters money
rlm@530 4 rlm-assembly))
rlm@530 5 (:use (com.aurellem.run util sound music title save-corruption
rlm@530 6 bootstrap-0 bootstrap-1
rlm@530 7 ram-display
rlm@530 8 ))
rlm@530 9 (:require clojure.string)
rlm@530 10 (:import [com.aurellem.gb.gb_driver SaveState])
rlm@530 11 (:import java.awt.image.BufferedImage)
rlm@530 12 (:import java.io.File)
rlm@530 13 (:import com.aurellem.gb.WaveWriter))
rlm@530 14
rlm@530 15
rlm@530 16 (def render-dir (File. user-home "proj/vba-clojure/render"))
rlm@530 17
rlm@530 18 (defn render-files!
rlm@530 19 ([^File target-dir initial-state moves]
rlm@530 20 (let [ram-map-dir (File. target-dir "ram-map")
rlm@530 21 frames-dir (File. target-dir "frames")
rlm@530 22 audio-file (File. target-dir "audio.wav")
rlm@530 23 _ (.mkdirs ram-map-dir)
rlm@530 24 _ (.mkdirs frames-dir)
rlm@530 25 wave-writer (WaveWriter. audio-file)
rlm@530 26 moves (vec moves)]
rlm@530 27 (set-state! initial-state)
rlm@530 28 (dorun
rlm@530 29 (map
rlm@530 30 (fn [index]
rlm@530 31 (run-moves @current-state (vector (moves index)))
rlm@530 32
rlm@530 33 ;; record audio
rlm@530 34 (.process wave-writer (sound-bytes)
rlm@530 35 gb-sound-format)
rlm@530 36
rlm@530 37 ;; write screenshot
rlm@530 38 (write-png!
rlm@530 39 @current-state
rlm@530 40 (File. frames-dir (format "%07d.png" index)))
rlm@530 41
rlm@530 42 ;; write ram-image
rlm@530 43 (write-ram-image!
rlm@530 44 @current-state
rlm@530 45 (File. ram-map-dir (format "%07d.png" index))))
rlm@530 46 (range (count moves))))
rlm@530 47 (.cleanup wave-writer)))
rlm@530 48 ([initial-state moves]
rlm@530 49 (render-files! render-dir initial-state moves))
rlm@530 50 ([moves]
rlm@530 51 (render-files! (root) moves)))
rlm@530 52
rlm@531 53 (defn file-names [#^File dir]
rlm@531 54 (mapv #(.getCanonicalPath %) (next (sort (file-seq dir)))))
rlm@531 55
rlm@531 56 (defn composite-frames-command
rlm@531 57 [screenshot ram-map target]
rlm@531 58 ["convert"
rlm@531 59 "-size" "318x276" "xc:white"
rlm@531 60 screenshot "-geometry" "+10+10" "-composite"
rlm@531 61 ram-map "-geometry" "+180+10" "-composite"
rlm@531 62 target])
rlm@531 63
rlm@531 64 (defn generate-composite-frames!
rlm@531 65 ([^File rendered-dir]
rlm@531 66 (let [final-frames (File. rendered-dir "final")
rlm@531 67 _ (.mkdir final-frames)
rlm@531 68 screenshots (file-names (File. rendered-dir "frames"))
rlm@531 69 ram-maps (file-names (File. rendered-dir "ram-map"))
rlm@531 70 targets (map #(File. final-frames (format "%07d.png"))
rlm@531 71 (range (count screenshots)))]
rlm@531 72 (dorun
rlm@531 73 (map
rlm@531 74 ;; (comp ;;clojure.java.shell/sh
rlm@531 75 ;; println
rlm@531 76 ;; flatten
rlm@531 77 composite-frames-command
rlm@531 78 screenshots ram-maps targets))
rlm@531 79
rlm@531 80 ))
rlm@531 81 ([] (generate-composite-frames! render-dir)))
rlm@531 82
rlm@531 83
rlm@531 84
rlm@531 85