Karya, built on 2022-03-21T01:30:44 (patch 89d1651424c35e564138d93424a157ff87457245)
Safe HaskellSafe-Inferred




Yamaha VL1 synthesizer.



make_db :: Path.AppDir -> IO () Source #

Read the patch file, scan the sysex dir, and save the results in a cache.


extract_syxs :: FilePath -> FilePath -> IO () Source #

Write .syx and .rec files for the contents of the given file.

modify :: Monad m => [a -> m a] -> a -> m a 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.


type ElementInfo = (Control.PbRange, Text, [(Midi.Control, [ScoreT.Control])]) Source #

Each voice has two elements, each with their own PbRange, name, and controls.

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.