diff clojure/com/aurellem/run/final_cut.clj @ 546:36e5fa62eb3c

i believe this latest change will correct all A/V synching problems.
author Robert McIntyre <rlm@mit.edu>
date Wed, 27 Jun 2012 14:08:59 -0500
parents 86d23b6d433f
children b3b7a06686c4
line wrap: on
line diff
     1.1 --- a/clojure/com/aurellem/run/final_cut.clj	Wed Jun 27 13:41:01 2012 -0500
     1.2 +++ b/clojure/com/aurellem/run/final_cut.clj	Wed Jun 27 14:08:59 2012 -0500
     1.3 @@ -15,22 +15,37 @@
     1.4  
     1.5  (def render-dir (File. user-home "proj/vba-clojure/render/test"))
     1.6  
     1.7 -(defn force-sync
     1.8 -  "keep the entire movie to a certain fps"
     1.9 -  [fps]
    1.10 -
    1.11 -
    1.12 -  )
    1.13 -
    1.14 +(defn write-move-image! [move target-file]
    1.15 +  (let [actual-keys (set move)
    1.16 +        keys [:a :b :start :select :u :d :l :r]
    1.17 +        button-on-name  ["-size" "5x5" "xc:red"]
    1.18 +        button-off-name ["-size" "5x5" "xc:white"]]
    1.19 +    (apply
    1.20 +     clojure.java.shell/sh
    1.21 +     (flatten 
    1.22 +      ["convert"
    1.23 +       "-size" "64x5" "xc:white"
    1.24 +       (map
    1.25 +        (fn [index]
    1.26 +          (let [position ["-geometry"
    1.27 +                          (str "+" (* index 8)
    1.28 +                               "+" "0") "-composite"]]
    1.29 +            (if (actual-keys (keys index))
    1.30 +              [button-on-name  position]
    1.31 +              [button-off-name position])))
    1.32 +        (range (count keys)))
    1.33 +       (.getCanonicalPath target-file)]))))
    1.34  
    1.35  (defn render-files!
    1.36    ([^File target-dir initial-state moves]
    1.37       (let [ram-map-dir (File. target-dir "ram-map")
    1.38             frames-dir (File. target-dir "frames")
    1.39 +           moves-dir (File. target-dir "moves")
    1.40             audio-file (File. target-dir "audio.wav")
    1.41             _ (.mkdir target-dir)
    1.42             _ (.mkdir ram-map-dir)
    1.43             _ (.mkdir frames-dir)
    1.44 +           _ (.mkdir moves-dir)
    1.45             wave-writer (WaveWriter. audio-file)
    1.46             moves (vec moves)
    1.47             desired-fps 60
    1.48 @@ -62,7 +77,9 @@
    1.49                     write-video!
    1.50                     (fn [index]
    1.51                       ;; write screenshot
    1.52 -                     
    1.53 +                     (write-move-image!
    1.54 +                      move
    1.55 +                      (File. moves-dir (format "%07d.png" index)))
    1.56                       
    1.57                       (write-png!
    1.58                        @current-state
    1.59 @@ -112,25 +129,13 @@
    1.60     (mapv #(.getCanonicalPath %) (next (sort (file-seq dir)))))
    1.61  
    1.62  (defn composite-frames-command
    1.63 -  [screenshot ram-map target move]
    1.64 -  (let [actual-keys (set move)
    1.65 -        keys [:a :b :start :select :u :d :l :r]
    1.66 -        button-on-name  ["-size" "5x5" "xc:red"]
    1.67 -        button-off-name ["-size" "5x5" "xc:white"]]
    1.68 -    ["convert"
    1.69 -     "-size" "318x276" "xc:white"
    1.70 -     (map
    1.71 -      (fn [index]
    1.72 -        (let [position ["-geometry"
    1.73 -                        (str "+" (+ 30 (* index 8))
    1.74 -                             "+" "225") "-composite"]]
    1.75 -          (if (actual-keys (keys index))
    1.76 -            [button-on-name  position]
    1.77 -            [button-off-name position])))
    1.78 -      (range (count keys)))
    1.79 -     screenshot   "-geometry" "+10+10"  "-composite"
    1.80 -     ram-map      "-geometry" "+180+10" "-composite"
    1.81 -     target]))
    1.82 +  [move-image screenshot ram-map target]
    1.83 +  ["convert"
    1.84 +   "-size" "318x276" "xc:white"
    1.85 +   move-image   "-geometry" "+30+225" "-composite"
    1.86 +   screenshot   "-geometry" "+10+10"  "-composite"
    1.87 +   ram-map      "-geometry" "+180+10" "-composite"
    1.88 +   target])
    1.89  
    1.90  (defn generate-composite-frames!
    1.91    [^File rendered-dir moves]
    1.92 @@ -167,6 +172,7 @@
    1.93       "-b:v" "9000k"
    1.94       "-c:a" "libvorbis"
    1.95       "-c:v" "libtheora"
    1.96 +     "-g"   "200"
    1.97       (.getCanonicalPath movie)) nil))
    1.98       
    1.99