# HG changeset patch # User Robert McIntyre # Date 1340824139 18000 # Node ID 36e5fa62eb3cba5d9b08f77a3c072007d318439e # Parent 2b6cdea9bcdbdb04ff5a310816dac99ecc85ada6 i believe this latest change will correct all A/V synching problems. diff -r 2b6cdea9bcdb -r 36e5fa62eb3c clojure/com/aurellem/run/basic_choreo.clj --- a/clojure/com/aurellem/run/basic_choreo.clj Wed Jun 27 13:41:01 2012 -0500 +++ b/clojure/com/aurellem/run/basic_choreo.clj Wed Jun 27 14:08:59 2012 -0500 @@ -70,7 +70,7 @@ (do-nothing 1800)))) (def basic-render-dir - (File. user-home "proj/vba-clojure/render/basic2")) + (File. user-home "proj/vba-clojure/render/basic3")) (defn basic-steps [] (first (activate-media))) diff -r 2b6cdea9bcdb -r 36e5fa62eb3c clojure/com/aurellem/run/final_cut.clj --- a/clojure/com/aurellem/run/final_cut.clj Wed Jun 27 13:41:01 2012 -0500 +++ b/clojure/com/aurellem/run/final_cut.clj Wed Jun 27 14:08:59 2012 -0500 @@ -15,22 +15,37 @@ (def render-dir (File. user-home "proj/vba-clojure/render/test")) -(defn force-sync - "keep the entire movie to a certain fps" - [fps] - - - ) - +(defn write-move-image! [move target-file] + (let [actual-keys (set move) + keys [:a :b :start :select :u :d :l :r] + button-on-name ["-size" "5x5" "xc:red"] + button-off-name ["-size" "5x5" "xc:white"]] + (apply + clojure.java.shell/sh + (flatten + ["convert" + "-size" "64x5" "xc:white" + (map + (fn [index] + (let [position ["-geometry" + (str "+" (* index 8) + "+" "0") "-composite"]] + (if (actual-keys (keys index)) + [button-on-name position] + [button-off-name position]))) + (range (count keys))) + (.getCanonicalPath target-file)])))) (defn render-files! ([^File target-dir initial-state moves] (let [ram-map-dir (File. target-dir "ram-map") frames-dir (File. target-dir "frames") + moves-dir (File. target-dir "moves") audio-file (File. target-dir "audio.wav") _ (.mkdir target-dir) _ (.mkdir ram-map-dir) _ (.mkdir frames-dir) + _ (.mkdir moves-dir) wave-writer (WaveWriter. audio-file) moves (vec moves) desired-fps 60 @@ -62,7 +77,9 @@ write-video! (fn [index] ;; write screenshot - + (write-move-image! + move + (File. moves-dir (format "%07d.png" index))) (write-png! @current-state @@ -112,25 +129,13 @@ (mapv #(.getCanonicalPath %) (next (sort (file-seq dir))))) (defn composite-frames-command - [screenshot ram-map target move] - (let [actual-keys (set move) - keys [:a :b :start :select :u :d :l :r] - button-on-name ["-size" "5x5" "xc:red"] - button-off-name ["-size" "5x5" "xc:white"]] - ["convert" - "-size" "318x276" "xc:white" - (map - (fn [index] - (let [position ["-geometry" - (str "+" (+ 30 (* index 8)) - "+" "225") "-composite"]] - (if (actual-keys (keys index)) - [button-on-name position] - [button-off-name position]))) - (range (count keys))) - screenshot "-geometry" "+10+10" "-composite" - ram-map "-geometry" "+180+10" "-composite" - target])) + [move-image screenshot ram-map target] + ["convert" + "-size" "318x276" "xc:white" + move-image "-geometry" "+30+225" "-composite" + screenshot "-geometry" "+10+10" "-composite" + ram-map "-geometry" "+180+10" "-composite" + target]) (defn generate-composite-frames! [^File rendered-dir moves] @@ -167,6 +172,7 @@ "-b:v" "9000k" "-c:a" "libvorbis" "-c:v" "libtheora" + "-g" "200" (.getCanonicalPath movie)) nil))