Safe Haskell | Safe-Inferred |
---|
Yamaha VL1 synthesizer.
Synopsis
- synth_name :: InstT.SynthName
- load :: Path.AppDir -> IO (Maybe.Maybe MidiInst.Synth)
- make_db :: Path.AppDir -> IO ()
- builtin :: FilePath
- extract_syxs :: FilePath -> FilePath -> IO ()
- syx_fname :: Int -> Text -> FilePath
- send_to_buffer :: Sysex.RMap -> Either.Either String Sysex.RMap
- send_to_patch :: Int -> Sysex.RMap -> Either.Either String Sysex.RMap
- set_pitch_bend :: Sysex.RMap -> Either.Either String Sysex.RMap
- modify :: Monad m => [a -> m a] -> a -> m a
- put_int :: String -> Int -> Sysex.RMap -> Either.Either String Sysex.RMap
- parse_builtins :: FilePath -> IO [MidiInst.Patch]
- parse_dir :: FilePath -> IO [MidiInst.Patch]
- parse_file :: FilePath -> IO [Either.Either String MidiInst.Patch]
- combine :: FilePath -> Text -> B.ByteString -> MidiInst.Patch -> MidiInst.Patch
- decode_sysex :: B.ByteString -> Either.Either String Sysex.RMap
- encode_sysex :: Sysex.RMap -> Either.Either String B.ByteString
- file_to_syx :: FilePath -> IO [B.ByteString]
- split_1bk :: Maybe.Maybe Word8 -> B.ByteString -> [B.ByteString]
- add_extra_zero :: B.ByteString -> B.ByteString
- bytes_to_syx :: Maybe.Maybe Word8 -> B.ByteString -> B.ByteString
- append_suffix :: B.ByteString -> B.ByteString
- checksum :: B.ByteString -> Word8
- type ElementInfo = (Control.PbRange, Text, [(Midi.Control, [ScoreT.Control])])
- record_to_patch :: Sysex.RMap -> Either.Either String MidiInst.Patch
- vl1_patch :: InstT.Name -> ElementInfo -> Maybe.Maybe ElementInfo -> MidiInst.Patch
- extract_element :: Int -> Sysex.RMap -> Either.Either String ElementInfo
- vl1_control_map :: [(Text, Bool)]
Documentation
load :: Path.AppDir -> IO (Maybe.Maybe MidiInst.Synth) Source #
make_db :: Path.AppDir -> IO () Source #
Read the patch file, scan the sysex dir, and save the results in a cache.
parse
extract_syxs :: FilePath -> FilePath -> IO () Source #
Write .syx and .rec files for the contents of the given file.
send_to_patch :: Int -> Sysex.RMap -> Either.Either String Sysex.RMap Source #
put_int :: String -> Int -> Sysex.RMap -> Either.Either String Sysex.RMap Source #
parse_builtins :: FilePath -> IO [MidiInst.Patch] Source #
parse_file :: FilePath -> IO [Either.Either String MidiInst.Patch] Source #
combine :: FilePath -> Text -> B.ByteString -> MidiInst.Patch -> MidiInst.Patch Source #
file_to_syx :: FilePath -> IO [B.ByteString] Source #
split_1bk :: Maybe.Maybe Word8 -> B.ByteString -> [B.ByteString] Source #
add_extra_zero :: B.ByteString -> B.ByteString Source #
For some reason, some sysexes come out with a 0 for device numbers, and some omit it entirely.
bytes_to_syx :: Maybe.Maybe Word8 -> B.ByteString -> B.ByteString Source #
Wrap sysex codes around the raw bytes.
checksum :: B.ByteString -> Word8 Source #
record
type ElementInfo = (Control.PbRange, Text, [(Midi.Control, [ScoreT.Control])]) Source #
Each voice has two elements, each with their own PbRange, name, and controls.
vl1_patch :: InstT.Name -> ElementInfo -> Maybe.Maybe ElementInfo -> MidiInst.Patch Source #
vl1_control_map :: [(Text, Bool)] Source #
Vaguely "more audible" controls come first. Having more than one seq
control affecting the same vl1 control is confusing, so when a control is
assigned to more than one control, the one first in this list will get
the control. That way, if contoller 2 is assigned to both pressure and
amplitude, the control will be called pressure
.
Of course prominence is also highly dependent on depth, but this is simpler. I ignore controls below a certain depth anyway.
Paired with the byte offset in the element parameters
sysex section.