[yoshimi] Re: A slight change of plan :)

  • From: Kristian Amlie <kristian@xxxxxxxxxx>
  • To: yoshimi@xxxxxxxxxxxxx
  • Date: Tue, 28 Jun 2016 07:27:16 +0200

Cool! I love these optimizations!

-- 
Kristian


On 27/06/16 21:22, Will Godfrey wrote:

With V 1.4.0 out of the way I had intended to start up another test branch for
developing the GUI isolation from the Audio. However, it dawned on me that
doing it that way would make it very difficult to make comparisons and ensure
that the new controls did *exactly* the same as the old ones, so I'm taking a
different approach now.

What I've done in the current master is to create a new interface directory.
First I moved the command interface code there, then I created a new 
Interchange
file, and moved all the GUI control recognition code into it from SynthEngine.
Now at this stage that's just shuffling stuff around so makes no difference to
the existing operations.

With that tested and showing no problems I then made a new hidden entry in the
CLI that I could use to poke byte values in directly, and compare the results
with manipulating the GUI. So far I've only enabled part volume, pan,
velocity sense and velocity offset, but will obviously expand these. There is
no error checking yet, but I'll include some basic stuff soon.

Currently the GUI isn't updated, but I've proved the controls do work 
correctly
by listening, and also switching parts back and forth - which makes the GUI
update itself.

The final piece of this particular puzzle is that these new controls are
managed via a ring buffer, synchronised by the audio thread. This means
anything passing through this system will not need any locks.

Before anybody says this means control changes have the latency of the
audio thread, well, in terms of actual sound generation that always was the
case! The final sound does a heavy duty MUTEX lock, and that's what I hope to
get rid of :)

The only impact this new code has on the existing stuff is that the audio
thread looks to see if there is anything in the ring buffer each pass.

If you feel like playing with what is there so far, from the command line 
enter:

direct {value} {type} {control} {part}

All of these are compulsory and must be in that order.

direct - actual instruction must be typed in full

value - the actual value you want to set the control to

type - either 0 for read or 64 for write

control - the number designated in dev_notes/Yoshimi Control Numbers.ods

part - the part number you want to set.

Yoshimi source code is available from either: 
http://sourceforge.net/projects/yoshimi
Or: https://github.com/Yoshimi/yoshimi
Our list archive is at: https://www.freelists.org/archive/yoshimi
To post, email to yoshimi@xxxxxxxxxxxxx

Other related posts: