-- | Encode audio data. module Sound.File.Encode (interleave,encode) where import qualified Data.ByteString.Lazy as B {- bytestring -} import Data.List {- base -} import Sound.OSC.Coding.Byte {- hosc -} import Sound.File.Encoding -- | Interleave channel data, ie. 'concat' '.' 'transpose'. -- -- > interleave [[0,2..8],[1,3..9]] == [0,1,2,3,4,5,6,7,8,9] interleave :: [[a]] -> [a] interleave = concat . transpose encodef32 :: (Real n,Floating n) => [[n]] -> B.ByteString encodef32 = B.concat . map (encode_f32 . realToFrac) . interleave encodef64 :: (Real n,Floating n) => [[n]] -> B.ByteString encodef64 = B.concat . map (encode_f64 . realToFrac) . interleave -- | Given 'Encoding' and a set of channels, 'interleave' and encode -- as 'B.ByteString'. encode :: (Real n,Floating n) => Encoding -> [[n]] -> B.ByteString encode enc d = case enc of Float -> encodef32 d Double -> encodef64 d _ -> error "hsc3-sf: encode"