55 lines
1.7 KiB
Clojure
55 lines
1.7 KiB
Clojure
(ns app.aggregate
|
|
(:use app.wav)
|
|
(:require [hiphip.double :as dbl]
|
|
[app.block :as block]
|
|
[app.blocklist :as blocklist]))
|
|
|
|
(defn data-to-sound [data]
|
|
(reify SampledSound
|
|
(duration [this] (/ (count data) 44100))
|
|
(channels [this] 1)
|
|
(chunks [this sample-rate]
|
|
;; sloooow
|
|
[[data]])))
|
|
|
|
(defn sound-to-data [sound]
|
|
(first (first (.chunks sound 44100))))
|
|
|
|
(defn render-blocklist [blocklist]
|
|
(reify SampledSound
|
|
(duration [this] (/ (* (count (:pcm (first blocklist)))
|
|
(count blocklist)) 44100))
|
|
(channels [this] 1)
|
|
(chunks [this sample-rate]
|
|
;; sloooow
|
|
(let [strp (map (fn [b] (:pcm b)) blocklist)]
|
|
[[(double-array (apply concat strp))]]))))
|
|
|
|
(defn render-blocklist-fft [blocklist]
|
|
(reify SampledSound
|
|
(duration [this] (/ (* (count (:pcm (first blocklist)))
|
|
(count blocklist)) 44100))
|
|
(channels [this] 1)
|
|
(chunks [this sample-rate]
|
|
;; sloooow
|
|
(let [strp (map (fn [b] (:fft b)) blocklist)]
|
|
[[(double-array (apply concat strp))]]))))
|
|
|
|
(defn search [src target ratio]
|
|
(map
|
|
(fn [block]
|
|
(let [r (blocklist/search src block ratio)]
|
|
(println (first r)) (second r)))
|
|
target))
|
|
|
|
(defn aggregate [source-path-list target-filename rate block-size ratio]
|
|
(let [blocks (apply
|
|
concat
|
|
(map
|
|
(fn [filename]
|
|
(blocklist/build (read-sound filename) rate block-size))
|
|
source-path-list))
|
|
target (blocklist/build (read-sound target-filename) rate block-size)]
|
|
(println "built sources")
|
|
(render-blocklist (search blocks target ratio))))
|