So I have been busy learning more about AVRStrudio, and how to break up large C programs into structures C/C++ under Arduino's framework.
This is fun stuff.
I notice a bargain on eBay that is sorely tempting me ... it is a Sainsmart Touch Screen with SD caard attachment .. and the deal-breaker is it INCLUDES the Mega 2560 for about £30.
See I figure I may want to add SD support to allow storage of syx dumps etc and recall of machine state.
Sure you can update the eeprom, but this has limited lifespan.
Whereas an micro SD card is cheap and commodity item.... read more
So I also found I was stupidly increasing the UART buffer to help stop sysex overflow.
But I realized this is the wrong approach. I had _thought_ that read/write are same speed.
However, this doesnt appear to be the case.
So inevitably one runs behind.
Instead, using simple 512 byte buffer per stream (or at least per stream that will accept sysex) allows the data to be read in.
Working on sysex annotation.
NOTE: Clearly I have already solved this in the Miniak panel.
But I want to revisit that code, now that I havent looked for it a while,
so I can have an independent review and hence both products benefit.... read more
So I have debugged the merge, and apart from Sysex it pretty much works.
Sysex opens some interesting buffering challenges.
I will need to give that some thought.
The PITA with Arduino is lack of debug support.
Indeed, I lot 1 week of time because only when I added debug code did the thing work.
Short version: I made two mistakes.
The debug (1) slowed down the receive, so we READ the message.
Without the Serial.print out, the loop was far to quick to read a complete message.
Secondly, my "report if you get an incomplete message" was "out by one".
So it never told me I was incomplete ... when I was!
The debug messages made things worse because when you enable them you are NOT out by one :-).... read more
Been really busy with real work recently.
But made some time to 95% complete hardware.
To recap I have 3 In -> 3 thru (1:1 straight)
These in's are also tapped into UART 1, 2, 3 on Mega.
I have written but not debugged algorithms for midi merge between 1 and 2.
There are two outputs.
One for the merge
One for the transform.
The idea is first two inputs are from my midi master keyboard and miniak
These signals are to be merged, into BCR2000 (or any A14 NRPN knob box).... read more
I had a couple of folks contact me saying "Your Miniaktools dont work!".
Hmmh ... what OS.
Windows 7 64bit.
Odd ... that what I have on the laptop and it works ... oh shoot ... I have windows 7 32 bit on the laptop and windows 7 Ultimate 64bit on this machine.
It's the desktop I bought for the Mrs to replace the aging OptiPlex GX260 -- which is the PC you see in the MiniakTool's garage photo ... runs Linux and importantly audio/midi excellently.... read more
So I got an Arduino Mega 1280 for Christmas.
Yeah, thoughtful wife decided to buy it for me after dropping a lot of hints.
OK, so the didnt ... and I had to buy it myself and the rather excellent "Making Things Talk", by Tom Igoe.
Very slow process at first because of two issues
1] I am using the 6N136 opto-isolator since I had this lying around from donkeys years ago
2] the circuit's in Tom's book (page 426), use the 6N138. Took me a while to realize that one is a Darlington pair .. ie two transistors wired into eachother. So his 270 Ohm pull up resistor does the job. But the 6N136 appears to need a larger 4.7k Ohm for reliable data.... read more
Darned MS debugger. Most debuggers "stop" at sig11 (0xc0000005).
Some, if signals not handles, dump a core.
But MS says "yeah I know ... " and carries on.
Took me a while to find some extra switches that enable managed/unmanaged code to be handled.
Eventually, I saw that when I change the data ranges to handle
EFX (to name but one) data range changes, I am not universally setting
the min/max of the UI.... read more
I am pretty much 99% complete on this.
Thanks for Karsten and Chris for some excellent tips/discussion.
I have a bug where I claim C-0 instead of C-1 ... validating by hand (ie generating the training data).
I managed to generate controller data decode. I suspect the missing decode is pedal data ... going to get my pedal to find out. If you want to send me a sequence with a pedal controller I would be grateful.... read more
I have added on some useful missing features.
Clearly the most obvious "feature" is better QA.
So I have validated my custom patch decode faithfully captures the Sysex and will display the correct NRPN (or function of nrpn in some cases). I havent fully gone the other way yet (NPRN -> sysex file). Naturally, I have validated that the NRPNs do trigger the right output on the synth.
Next you will be able to dynamically interrogate the Miniak, assume you know how to connect the midi up, and your cable works.... read more
The really tricky one was MOD Dest. Not only is it a whacky permutation on itself .. but it has a couple of missing values that is one uses a standard signature inversion methods WILL drive you crazy because it wont work.
Instead, to make it invertible, you have to add in two phantom points, and let them take part in the permutation.
I am confident that one can load patch sysex in accurate to the latest beta version.... read more
Yes I know you will say "Did you not read Bernard docs". Of course I did. Alas they are incomplete.
Then you will say "Did you not use the Ion program decoder"? And I will say , naturally I did.
Indeed, it gives a very good hint as to what goes on between the Sysex and the NRPN.
Recall ... we know a program is comprised of about 250 NRPNs.
That each NRPN has an address and a range of values.
There are a couple of non-trivial issues if you want to read this data in from a syx dump, across the wire, or transform your NRPN state into a sysex.... read more
I added (and will improve on) TOCSysex_Sonar.exe to the Production files download area.
Essentially, folks in the forum are interested in librarians etc.
I figured, perhaps incorrectly, that since Chris has explained how Miniak loads patches (so that it is possible but difficult to overwrite programs) that IF you could load as many patches as you want to your synth, and fine a way to easily use these from your fave DAW or from MIDI-OX, then you could also use the specific WIPE ME tools to do your own DIY librarian.... read more
C# isnt my main language. Find it a bit odd.
For example, if I derive from a B say, I expect B's construct to be called.
What I didnt realize is B's default constructor is called.
Never does it call say D(filename) => B(filename).
But if you add : base (filename) to the non-default D construct ... it calls the base empty constructor then the "specific" one.
I guess I just still find that strange.... read more
Chris had asked "why are you going to use SVN?". I confessed because this was what I used when collaborating with RedHat's Hibernate folks. But they had recently moved to GIT, and I didnt fancy learning yet another SCCS.
However, I then talked to another Linux guru friend of mine, and he convinced me that Chris was right -- GIT was worthwhile learning.
I googled; found a satirical you tube video about how Linus had created GIT as a joke etc, and ultimately stumbled across a free GIT tool integrated into Visual Studio 2010 -- Git Extensions v 2.17.... read more
MS, in their infinite wisdom, dont have native knob controls.
They do have some XAML stuff, but without buying some books I aint likely to learn this quick.
So I found a nice example of a knob written by Jigar Desai and available from
Anyhow, took a little bit of effort (my lack of knowledge) to add an instance of this control to the form.
Once done one can cut and paste it.
So need to start drawing some whacky mixture of sliders and knobs, then adding these to a new UI.... read more
So I have added beta2.
This gives midi feedback, If you change something using a knob, it _should_ be reflected in the editor.
If you change values via a bcr, which is connected in your midi path, then it should be reflected.
I have just noticed a bug with the mono/poly.
Will debug this and add more changes later.
I _hope_ I have understood and designed around the garbage collected issue between managed/unmanaged code.... read more
So I got midi in working :-).
And then I got sysex working (dump to memory from synth).
Therefore I can also, potentially, see NRPN changes for feedback to the editor.
I got a lot of crashes in the early stages, but I traced this to my silly coding error.
It helps to NOT unprepare the MidiOUT when you want to unprepare the MidiIn
I also noticed I hadnt made a complete list of objects to NRPNs.
So to do... read more
I havent been using C# that long. So naturally I am making all the noob mistakes that, well, comes from being naive. However, sometimes I "see the light", and suddenly things become a lot more easy.
Take for example my NRPN v objects.
I asked my chums at work ... how can I ensure that "this" button only has "that" NRPN.
They tell me I have to go all WPF ... but infact there is a poor mans way to do this.... read more
Yes it turns out you can delete programs, rhythms, sequences, multis using sysex after all.
The info was always on the Ion site, but we seemed to gloss over it.
Please find Production 1.00 directory in files.
Here you will find C++ program to generate the sysex, but read it ... it is easy to see what I am doing.
Write it in your fave programming script.
But I also give 4 sysex files to delete banks 0..5 patches 0...127... read more
Understand curious riddle of NRPNs seemingly being 0x200 larger than published ones.
Assigning parameters to knob X leaves them unharmed.
Assigning to knob Y increases the byte 0x63 by 0x2.
Assigning to knob Z increases the byte 0x63 by 0x4.
Found params for FX, that AFAIK were not published in Alesis list.
Will be adding these in soon.
Also added command line tools in Beta2 area to decode SeqSysex.exe
and RhythmSysex.exe... read more
I have loaded a beta version of the software (pre-built for windows) in the files section. Next steps include validating that the parameters are right, which I will be doing in association with the BCR2000.
Tonight I pulled down the Ion/Micron/Miniak manuals, and am busily creating an unofficial reference manual.
The plan is to use this as a capture area for Synth patch workflow.
But also, as a reference for Param/NRPN (and as an aid in VVT ing the prototype).... read more