-- | Server input enumerations. module Sound.Sc3.Server.Enum where import Data.Maybe {- base -} {- | Enumeration of possible locations to add new nodes (s_new and g_new). >>> fromEnum AddToTail 1 -} data AddAction = AddToHead | AddToTail | AddBefore | AddAfter | AddReplace deriving (Eq, Show, Enum) -- | Enumeration of flags for '/b_gen' command. data B_Gen = Normalise | Wavetable | Clear deriving (Eq, Enum, Bounded, Show) {- | 'B_Gen' to bit number. >>> map b_gen_bit [minBound .. maxBound] [0,1,2] -} b_gen_bit :: B_Gen -> Int b_gen_bit = fromEnum {- | Set of 'B_Gen' to flag. >>> b_gen_flag [minBound .. maxBound] 7 -} b_gen_flag :: [B_Gen] -> Int b_gen_flag = sum . map ((2 ^) . b_gen_bit) -- | Error posting scope. data ErrorScope = -- | Global scope Globally | -- | Bundle scope Locally deriving (Eq, Show, Enum) -- | Error posting mode. data ErrorMode = -- | Turn error posting off ErrorsOff | -- | Turn error posting on ErrorsOn deriving (Eq, Show, Enum) -- | Enumeration of Message printer types. data PrintLevel = NoPrinter | TextPrinter | HexPrinter | AllPrinter deriving (Eq, Show, Enum) -- | Sound file format. data SoundFileFormat = Aiff | Flac | Ircam | Next | Raw | Wave deriving (Enum, Eq, Read, Show) -- | Sample format. data SampleFormat = PcmInt8 | PcmInt16 | PcmInt24 | PcmInt32 | PcmFloat | PcmDouble | PcmMulaw | PcmAlaw deriving (Enum, Eq, Read, Show) -- | Sample format to standard file extension name. soundFileFormatString :: SoundFileFormat -> String soundFileFormatString f = case f of Aiff -> "aiff" Flac -> "flac" Ircam -> "ircam" Next -> "next" Raw -> "raw" Wave -> "wav" -- | Infer sample format from file extension name. soundFileFormat_from_extension :: String -> Maybe SoundFileFormat soundFileFormat_from_extension = let tbl = [ ("aif", Aiff) , ("aiff", Aiff) , ("flac", Flac) , ("ircam", Ircam) , ("next", Next) , ("raw", Raw) , ("wav", Wave) ] in flip lookup tbl -- | Erroring variant. soundFileFormat_from_extension_err :: String -> SoundFileFormat soundFileFormat_from_extension_err = fromMaybe (error "soundFileFormat_from_extension: unknown sf extension") . soundFileFormat_from_extension -- | 'SampleFormat' string as recognised by scsynth NRT mode. sampleFormatString :: SampleFormat -> String sampleFormatString f = case f of PcmInt8 -> "int8" PcmInt16 -> "int16" PcmInt24 -> "int24" PcmInt32 -> "int32" PcmFloat -> "float" PcmDouble -> "double" PcmMulaw -> "mulaw" PcmAlaw -> "alaw"