tjb*_*982 2 io audio clojure clojure-java-interop
我正在创建一个生成.wav文件的函数.我已经设置了标题,但是我遇到了麻烦data.我有一个函数用于创建880Hz的正弦波(至少我认为这是它的作用,但这不是我的问题) - 问题是,如何将字节数组的集合转换为只有一个字节数组及其内容?这是我最好的尝试:
(defn lil-endian-bytes [i]
(let [i (int i)]
(byte-array
(map #(.byteValue %)
[(bit-and i 0x000000ff)
(bit-shift-right (bit-and i 0x0000ff00) 8)
(bit-shift-right (bit-and i 0x00ff0000) 16)
(bit-shift-right (bit-and i 0xff000000) 24)]))))
(def leb lil-endian-bytes)
(let [wr (io/output-stream (str name ".wav") :append true)]
(.write wr
(byte-array (flatten (concat (map
(fn [sample] (leb (* 0xffff (math/sin (+ (* 2 3.14 880) sample)))))
(range (* duration s-rate)) )))))
Run Code Online (Sandbox Code Playgroud)
但它没有做我想做的事情:将所有字节数组连接成一个向量,然后连接到单个字节数组.这对我来说有意义为什么它不能:它不能连接/压平一个字节[]因为它不是一个向量; 它是一个字节[].并且它不能将byte []转换为字节.但是我需要做些什么来实现这个目标呢?
您可能正在寻找类似的东西:
(byte-array (mapcat seq my-sequence-of-byte-arrays))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1253 次 |
| 最近记录: |