hsc3-auditor-0.11: Sound/SC3/Auditor/PF.hs
-- | /Bosendorfer/ piano sample library based auditioner.
module Sound.SC3.Auditor.PF (bosendorfer_set_osc
,bosendorfer_subset_osc
,bosendorfer_octpc_to_index
,for_pf
,au_load_bosendorfer_set) where
import Sound.OpenSoundControl {- hosc -}
import Sound.SC3 {- hsc3 -}
import Sound.SC3.Auditor
import System.FilePath {- filepath -}
-- * Bosendorfer
-- | 'DER' function for /Bosendorfer/ sample set. The offset from
-- buffer number to midi note number, adjusted for by this function,
-- is @24@.
bosendorfer_octpc_to_index :: DER OCTPC
bosendorfer_octpc_to_index (o,pc) = fromIntegral (o * 12 + pc + 12 - 24)
-- | Convert set of 'OCTPC' based 'P' to 'PP' with appropriate 'DER'
-- function.
for_pf :: [P OCTPC] -> PP OCTPC
for_pf x = (bosendorfer_octpc_to_index,x)
note_names :: [String]
note_names = ["C", "C#", "D", "D#", "E", "F"
,"F#", "G", "G#", "A", "A#", "B"]
file_names :: [String]
file_names = [(n ++ show o) <.> "aif" | o <- [1::Int .. 7], n <- note_names]
bosendorfer_osc :: FilePath -> (String, Int) -> OSC
bosendorfer_osc d (fn,i) = b_allocRead i (d </> fn) 0 0
-- | Generate set of 'OSC' messages to load /Bosendorfer/ sample
-- library.
bosendorfer_set_osc :: FilePath -> [OSC]
bosendorfer_set_osc d = map (bosendorfer_osc d) (zip file_names [0..])
-- | Variant of 'bosendorfer_set_osc' to load required subset of library.
bosendorfer_subset_osc :: FilePath -> SAMPLE_LOADER
bosendorfer_subset_osc d ix =
let nm = filter ((`elem` ix) . snd) (zip file_names [0..])
in map (bosendorfer_osc d) nm
-- | Send 'OSC' set given by 'bosendorfer_set_osc' to @scsynth@ at
-- 'Transport'.
au_load_bosendorfer_set :: Transport t => FilePath -> t -> IO ()
au_load_bosendorfer_set d fd = mapM_ (async fd) (bosendorfer_set_osc d)
{-
let d = "/home/rohan/disk/proudhon/data/bosendorfer/008/"
bosendorfer_set_osc d
withSC3 (au_load_bosendorfer_set d)
withSC3 au_load_instr
withSC3 (\fd -> send fd (s_new "s" (-1) AddToTail 1 [("b", 60-24)]))
-}