V 1.5.9 Yet Another Sparrow
So common, but what would we do without them?

There isn't much visibly changed for most users, but for the command line it's a very different story.

Command line users can now run plain text scripts that behave in exactly the same way as if the commands had been entered from the CLI itself. The actual script command can be initiated from any context and is simply:

    RUN {filepath of script}

To avoid any possible confusion, the routine will first set the context to the top level, then perform all the commands, and once again return to the top level. If there is a fault in the script it will be reported along with the number of the line where the error occurred. Due to the buffering used, the script will return before many of the actions have actually taken place. Therefore an error report is likely to be some way up the responses. Typically it will be something like:
    *** Error: Which Operation? @ line 13 ***

Here is a simple working example:

    # A script test
    set part on
        # These two lines are spaced in a bit
        set add on
    set voice on
    set volume 45

This will make sure the part is on, then make sure the relative addsynth and voice are on, and finally set the voice volume to 45.

Now although this starts from the top level it will use all the last set parameters. So if you had previously been working on part 7, addsynth voice 2, then that is the one that will have its volume adjusted, ensuring all the intermediate steps are available. This means you can set up generic scripts then apply them to any part, engine etc.

The script routine honours any normal abbreviations, blank lines are ignored. A '#' at the start of a line marks it as a comment so will also be ignored. These will be counted if an error is reported.


Recent developments in the underlying code have made it possible to greatly extend command line access deep into the synth structures.

This created a problem where the command line itself could become unmanageably long. This has been changed so that only the current context level is printed in full. The ones higher up the tree are minimised. e.g.

yoshimi Part 1+>
yoshimi P1, Sub>
yoshimi P1, S, analog Filter>

Rather than stating whether a switch is on or off, there is now just a '+' sign for on and nothing for off. This is actually clearer than using a '-' and the slight shift in the line gives the user another clue.

There is also a new command in the 'config' context that controls where this is displayed, or whether it is shown at all. This is "EXPose {OFf, ON, PRompt}

'OFf', will give just the bare prompt with no other information, and 'ON' shows it as a separate line above the prompt:
    @ P1, S, analog Filter
    yoshimi>

Default is 'ON'.

For the new commands, first of all there is the part kit structure. There are three forms of kits the engines can take, multi, single and crossfade. These are exactly the same as the graphical controls and can be set when in the part context, so starting at the part level prompt:
    yoshimi Part 1+> set kmode multi

Will return:
    Part 1 Kit Mode multi

and show a new context level prompt:
    yoshimi Part 1+, kit 1+, multi>

This is now looking at the kit item number one (which is always enabled).
    yoshimi Part 1+, kit 1+, multi> set kitem 4

Changes this to:
    yoshimi Part 1+, kit 4, multi>

Which hasn't yet been enabled so:
    yoshimi Part 1+, kit 4, multi> set on

Then for example:
    yoshimi Part 1+, kit 4+, multi> set sub on

Now the SubSynth engine on that kit item has been enabled and will sound. Also the prompt line compacts as you have moved to the SubSynth context:
yoshimi P1+, K4+, M, Sub+>

These new controls are added to the part context help list.

The synth engines, AddSynth, Voice and PadSynth now also have their own contexts with appropriate help lists.

There is also a new list which doesn't show directly in any context but has to be called specifically. It is '? COMmon' and lists all the commands that are applicable from the part level through the new engine contexts. A typical example is 'Volume' which is a context sensitive control for part, AddSynth, Voice, SubSynth & PadSynth.

Finally inserts LFO, Filter and Envelope have their own contexts above whichever engine they are sitting on, and again have their own help lists.

Currently the greatest context depth is:
    yoshimi P1+, K4+, M, A+, V5+, freq LFO>

Envelopes and LFOs are slightly complicated as they have groupings, and one has to specify the command first followed by the group, but these are displayed the other way round. So:

    yoshimi P1+, K4+, M, A+, Voice 5+> set lfo frequency

This would have set the context shown above. The need for compressing the text is obvious. At that level just '?' will list the LFO controls.
