I added a Workaround for the Sysex Bug at the Github page. (https://github.com/masl123/YM2151-Midi-Controller)
Let me know if this works.

OK, its a Problem with the Implementation of Midi in Java in Mac OS (It seems like this bug was there for ages). It prevents you from sending sysex messages in a Java app. But there are replacement libraries, which I can use. Will fix sometime soon.

The Master Tune Value you are using is not very much off from the Value I used. The Arduino will calculate [Value] - 63 so you are also able to tune downwards. In my case the real Value that got sent over Midi was 21. But both the Arduino and the Java app are using the range from -63 to 64.

Thanks for helping

Please try these three things and tell me which ones work?

Try to send a sysex with some other tool (e.g. Midiox) to the Arduino. Does the Tuning Change?:
      Use this Pattern: f0 4d 54 [Value] f7
      Where [Value] is something between 00 and 7f

Try to connect "The Control App" -> "Virtual Midi Port" -> "midiOx". Can you see the Sysex Messages?
       Follow this Tutorial on how to use MidiOx:
       https://support.native-instruments.com/ … Controller

Try to use an older Version of the Arduino IDE (Version 1.6.8 because i know this works, because I tested)

Btw: Which OS and which Version of Java do you use?

Did you try to Compile in Arduino IDE V1.6.9 or newer ?? Because for me the Code worked fine, but I compiled it in 1.6.8.
You have to retrigger a Note to hear the Change. Btw: You can set the Tune in the app from -63 to 64. (for me -42 was the one which worked)
Also if you type in a Value, you have to press enter for it to change. (or use the up and down buttons on the right side of the TextField.)
Did you choose the right Midi Devices in the Settings?

If all of this does not work, did you try to use the Code without Modifications? And did you download the newest Code from Github?
It's a bit weird, that it's 4 SemiTones off. The only thing I do is changing the kf Value in the setTone function in YM2151Driver.cpp

If really nothing happens when trying to change the Master Tune, did you ever send Sysex Messages over your Midi Interface? If not, you can use the Procedure explained here: http://forum.highlyliquid.com/showthread.php?t=280
to try if your midi Interface does send Sysex Messages. If you don't want do download the Shareware they use in this tutorial, you also should be able to use MidiOx (http://www.midiox.com/).

I think I did remove the setVolume Method because 1. it was unused and 2. it was not a function I had written and I had no Copyright on. And I thought it was very bulky and I did not quite understand what the Programmer did there. So I might rewrite it.

You can either post the Changes here, or I can write a PM with my email, where you can send me your Code. And don't forget to add your Name at the top of the Files you Modify.


I think it would be feasible to implement Portamento (I have some Ideas we could try) and Pitchbend.
I'll also add that Master Volume Knob (This would scale the Volume from 0 to whatever Volume you set for the Ops). Should be no Problem.

If you want, you can implement pitch bend or other features and send me the Files (or use github). Just be sure to use the newest Files from the github page. I will also maybe implement some features in the future.

I'm also getting these  'pop' or 'click' noises. I think it's not a Software problem. Maybe the Release is not quite done, when you trigger a new note. This would result in a  'pop' or 'click'  noise (This is also the problem with that Analog Modular Synth I got). The YM2151 sets the Audio Level back to 0, when a new note is triggered. With the Square Wave it is the same Problem. The change in Audio Level happens to quickly. I might investigate this further if I got some time.

DET1: I also first thought that it was not working, but I did test it and as far as I can tell my Code does nothing wrong. Its just really really subtle.

The problem with not being able to compile with 1.6.9 and newer Versions was the addition of some defines which sadly were named exactly like some Variables in YM2151.h. I just had to rename them and the sketch compiled again.

BTW: You should try out the Master Tune (use the Java Controller I created). The tuning range might not be wide enough. (For me it was enough to get the synth in tune, but it might not be for others). If its not enough, I also could change the Range.

late Answer, but now the Code should now work for all Versions of Arduino IDE currently available
btw, your link for the Controller Software on the github page for the Layout is wrong.

If you still want to build on 1.6.8, you need to change the line:
#include <EEPROM.h>
#include  <EEPROM/src/EEPROM.h>

I added a Master-Tune Option in the Settings of the Midi-Controller Software. This was available as a Source Commit quite for a while now, but I never got around testing and making a Release Build of it. You can Download it from the Github page. Just be sure to also update the Firmware on the Arduino.

The Master Tune Value also gets saved in EEPROM on the Arduino, so you don't need to set the Master tune always.

you need a tool to create a Virtual Midi Port. For Windows it would be loopMidi or loopbe1. For Linux, I did a quick Google and found this: http://tldp.org/HOWTO/MIDI-HOWTO-10.html  After Creating the port, you Connect your soft Keyboard, or a DAW to it and Set the Input in the Java app to that Port. Now you can use both. Btw, it is wanted behaviour from the Midi drivers to let you only connect from one device. This also does not work on Windows.
-- masl

finally I'm done.
You can find the Controller Software for PC at: https://github.com/masl123/YM2151-Midi- … r/releases
and the Code for Arduino at: https://github.com/masl123/YM2151-Arduino-Software

Let me know if you find any Bugs.

If the Synchronisation between the Arduino and the PC Software is messed up, click on MIDI->Sync Instruments. You should also do this after starting the Software (don't forget to select a Midi Output first), Setting the Poly Mode or Changing the Mapping. (I Should automate this)

Features are:
- Loading/Saving of OPM FIles
- Loading and Saving of Patch Files (include the Mapping between Instruments and Channels)
- Midi Through, so you can use LoopMidi and a DAW of your Choice
- PolyMode/Channels Mode
- ...
- Any Bugs you find xD

-- masl

I will soon release my code, with CC messages, loading of VOPM Patches and so on. Sadly saving of patches on the device itself will most certainly not be included yet. But you can use the PC tool I created, to save/load the patches on PC. (there is a Midi through option available in the Tool, so you can use the DAW or other Midi devices, to create your music, while altering the sound)

I tried the older Firmware from the Original Creator of the Board (http://www.ooishoo.org/?page_id=15) and it workes for me on the Arduino Uno. But you will have to do some fiddling around, until it compiles. (Here you can Download the Version which I changed so it Compiles: https://drive.google.com/file/d/0B-_HMI … =sharing). The new Firmware from synthy did not work for me.

I just tried to use the Midi.h/Midi.c from the Old Project and put it into the project from Synthy and it workes (Except for Sysex, because I would have to rewrite the hole part and I want to use CC instead of Sysex, I will not do it) (Download: https://drive.google.com/file/d/0B-_HMI … p=sharing)

the one from ooishoo.org should work, as it is the same Board. For the VGM Files, only these for the YM2151 could work. but someone would have to write a Tool for PC and Firmware to Transmit the File to the Arduino (possibly a long Sysex) and then Play the File to the YM2151.

Btw: As far as it looks right now, I will have to rewrite most of the Code for the shield to receive CC-Midi, and make the code more compact, because right now very "Copy-Paste'ish". So it might work for you on an original Arduino if I'm done. Which Arduino do you use?

I will rewrite the PC Controller Tool (Java) and will Modify the Code for the Arduino, so it will:
- support opening/saving the vopm files directly in the PC Tool
- send Midi-CC Data instead of Sysex
- allow to Load and Save Patches to Arduino
- allow to change the "Patches" on the Fly in your DAW (16 or 8 Patches saved on the Arduinos EEPROM. Change happens through Midi-CC)
- (Multivoice Support)

Can I Still get it somewhere? Now that the Kickstarter Campaign is over?

yeah, the Original code also only has one Voice. But it would not be difficult to add multiple voices. You can have a Maximum of 8 Voices at once, so you only have to save, what notes play and set the right register or set the Channel silent when the note stops. I will look into this IF I have my Board. You could also implement some kind of Patch Loading and Saving. So you can change to different patches on the fly and save them to the EEPROM (lets say 16 Patches or so), or load patches with another long sysex command.

I will maybe write a little Java-Converter Tool, to convert the Files, so everybody then can load the Patches, without installing Perl and CYGWIN or MinGW

Sent a PM. because im interested too. Can you also send the sourcecode. since I'd like to modify the Code so it can use CC instead of Sysex messages. So you can change  the parameters in a DAW or so.