Safe Haskell | None |
---|---|
Language | Haskell98 |
- data Field
- class F_Value a where
- class F_Value a => F_Num a
- f_double_m :: Field -> Maybe Double
- f_reader_err :: String -> String -> (Field -> Maybe a) -> Field -> a
- f_double_err :: String -> Field -> Double
- f_bool_err :: String -> Field -> Bool
- f_int_err :: String -> Field -> Int
- f_ref :: Field -> Field
- f_array :: [Double] -> Field
- f_vector_m :: Field -> Maybe [Field]
- f_vector_length :: Field -> Maybe Int
- f_double_err_ix :: String -> Maybe Int -> Field -> Double
- f_instr_m :: Field -> Maybe Instr
- f_instr_err :: String -> Field -> Instr
- f_map :: (Field -> Field) -> Field -> Field
- f_uop :: (Double -> Double) -> Field -> Field
- f_binop :: (Double -> Double -> Double) -> Field -> Field -> Field
- f_atf :: (Double -> a) -> Field -> a
- f_atf2 :: (Double -> Double -> a) -> Field -> Field -> a
- f_atf3 :: (Double -> Double -> Double -> a) -> Field -> Field -> Field -> a
- f_mce_extend :: Int -> Field -> Field
- data Key
- = K_degree
- | K_mtranspose
- | K_scale
- | K_stepsPerOctave
- | K_gtranspose
- | K_note
- | K_octave
- | K_root
- | K_ctranspose
- | K_harmonic
- | K_midinote
- | K_detune
- | K_freq
- | K_delta
- | K_dur
- | K_lag
- | K_legato
- | K_fwd'
- | K_stretch
- | K_sustain
- | K_tempo
- | K_db
- | K_amp
- | K_rest
- | K_instr
- | K_id
- | K_type
- | K_latency
- | K_param String
- k_name :: Key -> String
- k_reserved :: [Key]
- k_vector :: [Key]
- k_is_parameter :: (Key, a) -> Bool
- type Event = Map Key Field
- e_insert :: Key -> Field -> Event -> Event
- e_from_list :: [(Key, Field)] -> Event
- e_to_list :: Event -> [(Key, Field)]
- e_get :: Key -> Event -> Maybe Field
- e_get_ix :: Maybe Int -> Key -> Event -> Maybe Field
- e_get_double :: Key -> Event -> Maybe Double
- e_get_double_ix :: Maybe Int -> Key -> Event -> Maybe Double
- e_get_bool :: Key -> Event -> Maybe Bool
- e_get_int :: Key -> Event -> Maybe Int
- e_get_int_ix :: Maybe Int -> Key -> Event -> Maybe Int
- e_get_instr :: Key -> Event -> Maybe Instr
- e_get_instr_ix :: Maybe Int -> Key -> Event -> Maybe Instr
- e_get_array :: Key -> Event -> Maybe [Double]
- e_get_array_ix :: Maybe Int -> Key -> Event -> Maybe [Double]
- e_type :: Event -> String
- e_type_match :: Event -> T3 (Event -> t) -> t
- e_type_match' :: Event -> T3 t -> t
- e_dur :: Maybe Int -> Event -> Dur
- e_pitch :: Maybe Int -> Event -> Pitch
- e_id :: Maybe Int -> Event -> Maybe Int
- e_db :: Maybe Int -> Event -> Double
- e_amp :: Maybe Int -> Event -> Double
- e_latency :: Event -> Double
- e_parameters :: Maybe Int -> Event -> [(String, Double)]
- e_edit :: Key -> Field -> (Field -> Field) -> Event -> Event
- e_edit' :: Key -> (Field -> Field) -> Event -> Event
- e_merge' :: (Time, [Event]) -> (Time, [Event]) -> [(Time, Event)]
- e_add_fwd :: [(Time, Event)] -> [Event]
- e_merge :: (Time, [Event]) -> (Time, [Event]) -> [Event]
- e_par :: [(Time, [Event])] -> [Event]
- e_rest :: Event
- e_is_rest :: Event -> Bool
- e_mce_depth :: Event -> Maybe Int
- e_mce_extend :: Event -> Maybe (Int, Event)
- e_mce_expand :: Event -> Event
- e_un_mce :: Event -> Maybe [Event]
- e_un_mce' :: Event -> [Event]
- e_messages :: Dur -> Event -> Int -> Maybe Int -> Maybe (T2 [Message])
- e_messages_mce :: Dur -> Event -> Int -> (Maybe (T2 [Message]), Int)
- e_bundles :: Time -> Int -> Dur -> Event -> (Maybe (T2 Bundle), Int)
- newtype Event_Seq = Event_Seq {
- e_seq_events :: [Event]
- e_bundle_seq :: Time -> Event_Seq -> [T2 Bundle]
- e_nrt :: Event_Seq -> NRT
- e_play :: Transport m => Event_Seq -> m ()
- e_empty :: Event
- e_union :: Event -> Event -> Event
- t_merge :: Ord t => [(t, a)] -> [(t, a)] -> [(t, a)]
- type T2 n = (n, n)
- type T3 n = (n, n, n)
- mcons :: Maybe a -> [a] -> [a]
Field
Event field.
5 :: Field 4 + 5 :: Field negate 5 :: Field f_array [2,3] + f_array [4,5] == f_array [6,8] f_array [1,2,3] + f_array [4,5] == f_array [5,7,7] 4 + f_array [5,6] == f_array [9,10]
Set of types that can be lifted to Field
.
f_reader_err :: String -> String -> (Field -> Maybe a) -> Field -> a Source
Variant of reader with specified error message.
f_array :: [Double] -> Field Source
Uniform vector constructor.
f_array [1,2] == F_Vector [F_Double 1,F_Double 2]
f_vector_length :: Field -> Maybe Int Source
length
of f_vector_m
.
f_vector_length (f_array [1..5]) == Just 5
f_double_err_ix :: String -> Maybe Int -> Field -> Double Source
Indexed variant of f_double_err
.
f_double_err_ix "" Nothing 1 == 1 f_double_err_ix "" (Just 1) (f_array [0,1]) == 1
f_map :: (Field -> Field) -> Field -> Field Source
Map fn over vector elements at f.
f_map negate (f_array [0,1]) == f_array [0,-1]
f_uop :: (Double -> Double) -> Field -> Field Source
Numerical unary operator.
f_uop negate (F_Double 1) == F_Double (-1) f_uop negate (F_Vector [F_Double 0,F_Double 1]) == f_array [0,-1]
f_binop :: (Double -> Double -> Double) -> Field -> Field -> Field Source
Numerical binary operator.
f_binop (+) (F_Double 1) (F_Double 2) == F_Double 3 f_binop (*) (f_array [1,2,3]) (f_array [3,4,5]) == f_array [3,8,15] f_binop (/) (F_Double 9) (F_Double 3) == F_Double 3
f_atf3 :: (Double -> Double -> Double -> a) -> Field -> Field -> Field -> a Source
At floating branches of Field
s.
f_mce_extend :: Int -> Field -> Field Source
Extend to Field
to n.
f_mce_extend 3 (f_array [1,2]) == f_array [1,2,1] f_mce_extend 3 1 == f_array [1,1,1]
Key
The type of the key at an Event
.
:set -XOverloadedStrings [K_dur,"pan"] == [K_dur,K_param "pan"]
k_name :: Key -> String Source
SC3 name of Key
.
map k_name [K_freq,K_dur,K_param "pan"] == ["freq","dur","pan"]
k_reserved :: [Key] Source
List of reserved Key
s used in pitch, duration and amplitude
models. These are keys that may be provided explicitly, but if not
will be calculated implicitly.
(K_freq `elem` k_reserved) == True
k_is_parameter :: (Key, a) -> Bool Source
Is Key
not k_reserved
, and not k_vector
.
k_is_parameter (K_param "pan",0) == True
Event
e_insert :: Key -> Field -> Event -> Event Source
Insert (k,v) into e.
e_get K_id (e_insert K_id 1 mempty) == Just 1
e_from_list :: [(Key, Field)] -> Event Source
Event from association list.
e_get K_id (e_from_list [(K_id,1)]) == Just 1
e_to_list :: Event -> [(Key, Field)] Source
Event from association list.
let a = [(K_id,1)] in e_to_list (e_from_list a) == a
e_get_ix :: Maybe Int -> Key -> Event -> Maybe Field Source
Immediate or vector element lookup.
e_get_ix Nothing K_id (e_from_list [(K_id,1)]) == Just 1
let n = f_array [0,1,2] in e_get_ix Nothing K_id (e_from_list [(K_id,n)]) == Just n
let n = f_array [0..9] in e_get_ix (Just 5) K_id (e_from_list [(K_id,n)]) == Just 5
e_get_array_ix :: Maybe Int -> Key -> Event -> Maybe [Double] Source
Type specialised e_get_ix
.
let e = e_from_list [(K_scale,f_array [0,2])] in e_get_array_ix Nothing K_scale e == Just [0,2]
let e = e_from_list [(K_scale,f_ref (f_array [0,2]))] in e_get_array_ix (Just 0) K_scale e == Just [0,2]
e_type_match :: Event -> T3 (Event -> t) -> t Source
Match on event types, in sequence: s_new, n_set, rest.
e_type_match' :: Event -> T3 t -> t Source
const
variant of e_type_match
.
e_pitch :: Maybe Int -> Event -> Pitch Source
Generate Pitch
from Event
.
P.midinote (e_pitch Nothing mempty) == 60 P.freq (e_pitch Nothing (e_from_list [(K_degree,5)])) == 440
let e = e_from_list [(K_degree,5),(K_scale,f_array [0,2,3,5,7,8,10])] in P.midinote (e_pitch Nothing e) == 68
let e = e_from_list [(K_degree,5),(K_scale,f_ref (f_array [0,2,3,5,7,8,10]))] in P.midinote (e_pitch (Just 0) (e_mce_expand e)) == 68
P.freq (e_pitch Nothing (e_from_list [(K_midinote,69)])) == 440
e_amp :: Maybe Int -> Event -> Double Source
The linear amplitude of the amplitude model at e.
e_amp Nothing (e_from_list [(K_db,-60)]) == 0.001 e_amp Nothing (e_from_list [(K_amp,0.01)]) == 0.01 e_amp Nothing mempty == 0.1
e_parameters :: Maybe Int -> Event -> [(String, Double)] Source
Extract non-reserved
Keys
from Event
.
let e = e_from_list [(K_freq,1),(K_param "p",1),(K_scale,f_ref (f_array [0,3,7]))] in e_parameters Nothing e == [("p",1)]
Event temporal
e_par :: [(Time, [Event])] -> [Event] Source
N-ary variant of e_merge
.
e_par [(0,repeat (e_from_list [(K_id,1)])) ,(0,repeat (e_from_list [(K_param "b",2)])) ,(0,repeat (e_from_list [(K_param "c",3)]))]
MCE
e_mce_depth :: Event -> Maybe Int Source
Maximum vector length at Event
.
e_mce_depth (e_from_list [(K_id,1)]) == Nothing e_mce_depth (e_from_list [(K_id,1),(K_param "b",f_array [2,3])]) == Just 2
e_mce_extend :: Event -> Maybe (Int, Event) Source
Extend vectors at Event
if required, returning e_mce_depth
.
let {e = e_from_list [(K_id,f_array [1,2]),(K_param "b",f_array [2,3,4])] ;r = e_from_list [(K_id,f_array [1,2,1]),(K_param "b",f_array [2,3,4])]} in e_mce_extend e == Just (3,r)
let e = e_from_list [(K_id,1)] in e_mce_extend e == Nothing
e_mce_expand :: Event -> Event Source
e_mce_extend
variant.
e_un_mce :: Event -> Maybe [Event] Source
Parallel Event
s, if required.
let {e = e_from_list [(K_id,1),(K_param "b",f_array [2,3])] ;r = [e_from_list [(K_id,1),(K_param "b",2)],e_from_list [(K_id,1),(K_param "b",3)]]} in e_un_mce e == Just r
let {e = e_from_list [(K_id,f_array [1,2]),(K_param "b",f_array [3,4,5])] ;r = e_from_list [(K_id,1),(K_param "b",5)]} in fmap (!! 2) (e_un_mce e) == Just r
e_un_mce (e_from_list [(K_id,1)]) == Nothing
SC3
e_messages_mce :: Dur -> Event -> Int -> (Maybe (T2 [Message]), Int) Source
MCE variant of e_messages
.
Ordered sequence of Event
.
Event_Seq | |
|
e_bundle_seq :: Time -> Event_Seq -> [T2 Bundle] Source
Transform Event_Seq
into a sequence of SC3
(on,off) Bundles
.
e_bundle_seq 0 (Event_Seq (replicate 5 mempty))
Aliases
e_union :: Event -> Event -> Event Source
Type-specialised mappend
.
let {l = [(K_id,0)];r = [(K_degree,1)]} in e_from_list l <> e_from_list r == e_from_list (l <> r)
Temporal
t_merge :: Ord t => [(t, a)] -> [(t, a)] -> [(t, a)] Source
Left-biased merge of two sorted sequence of temporal values.
let m = t_merge (zip [0,2,4,6] ['a'..]) (zip [0,3,6] ['A'..]) in m == [(0,'a'),(0,'A'),(2,'b'),(3,'B'),(4,'c'),(6,'d'),(6,'C')]