packages feed

hsc3-db-0.15: Sound/SC3/UGen/DB.hs

-- | SuperCollider 'UGen' database.
--
-- The database is generated by an @sclang@ program and is given by
-- the constant value 'ugenDB', which is a list of 'U' entries.
--
-- > length ugenDB == 405
module Sound.SC3.UGen.DB where

import Data.Maybe {- base -}

import Sound.SC3.Common {- hsc3 -}
import Sound.SC3.UGen.Operator {- hsc3 -}
import Sound.SC3.UGen.Rate {- hsc3 -}

import Sound.SC3.UGen.DB.Data
import Sound.SC3.UGen.DB.Record

-- | UGens that the generator mishandles or sclang treats specially.
ext_DB :: [SC3_U]
ext_DB =
    [("MaxLocalBufs",[IR],IR,[I "count" 0],1,"LocalBuf count")
    ,("MulAdd",[IR,KR,AR],AR,[I "in" 0,I "mul" 0,I "add" (0)],1,"Multiply add")
    ,("SetBuf",[IR],IR,[I "buf" 0,I "offset" 0,I "length" 0,I "array" 0],1,"Set local buffer")]

-- | 'read_meta' of 'sc3_ugenDB'.
--
-- > map ugen_name (filter u_is_demand_rate ugenDB)
ugenDB :: [U]
ugenDB = map read_meta (sc3_ugenDB ++ ext_DB)

-- | Lookup 'U' at 'ugenDB'.
--
-- > uLookup CS "Drand"
-- > fmap ugen_default_rate (uLookup CS "SinOsc") == Just Sound.SC3.AR
-- > fmap ugen_default_rate (uLookup_ci CI "fft") == Just Sound.SC3.KR
uLookup :: Case_Rule -> String -> Maybe U
uLookup cr nm = lookup_by (string_eq cr) nm (zip (map ugen_name ugenDB) ugenDB)

-- | Lookup named 'UGen' and generate simple summary string.
ugenSummary' :: Case_Rule -> String -> Maybe String
ugenSummary' cr nm = fmap u_summary (uLookup cr nm)

-- | Lookup named 'UGen' and generate simple summary string.
--
-- > ugenSummary_err CS "SinOsc" == "SinOsc [KR,AR] freq=440.0 phase=0.0"
-- > ugenSummary_err CI "fSinOsc" == "FSinOsc [KR,AR] freq=440.0 iphase=0.0"
ugenSummary_err :: Case_Rule -> String -> String
ugenSummary_err cr = fromMaybe (error "ugenSummary") . ugenSummary' cr

-- | 'ugenSummary_err' 'CI'.
--
-- > mapM_ (putStrLn . ugenSummary) (words "out RESONZ EnvGen LocalIn WhiteNoise dwhite")
ugenSummary :: String -> String
ugenSummary = ugenSummary_err CI

-- * Names

uop_names :: [String]
uop_names = map show [minBound :: Unary .. maxBound]

binop_names :: [String]
binop_names = map show [minBound :: Binary .. maxBound]

complete_names :: [String]
complete_names = map ugen_name ugenDB ++ uop_names ++ binop_names