Karya, built on 2023-08-29T07:47:28 (patch 7a412d5d6ba4968ca4155ef276a062ccdeb9109a)
Safe HaskellSafe-Inferred

User.Elaforge.Instrument.Vl1

Contents

Description

Yamaha VL1 synthesizer.

Synopsis

Documentation

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.

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.

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_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.