Hey folks. So I'm having an issue with my arduinoboy setup and baffled that I can't find anyone else with this issue. Hopefully someone else has had a similar problem to this?

Here's my setup: I'm sending MIDI out of my computer through arduinoboy to a DMG-01 with mGB. Almost everything works perfectly. Except there seems to be a cap on the Midi note range coming out of the Gameboy. From what I can tell, anything that isn't between MIDI notes 36-80 plays an entirely different note. Notes above 80 play the same super low note(which sounds like MIDI note 36). Notes below 36 mostly play what sounds like MIDI note 36 but with a few other random notes scattered around. This lets me only be able to use notes C2-G#5 which is a big problem for what I'm doing.

I've tested sending MIDI out of two different programs, LogicX, and MaxMSP, and have gotten the same results, so this definitely seems to be a problem with either my arduinoboy or mGB. Has anyone else had this problem?

Also, I've found a way to circumvent this issue by using the pitch bend to bend the note up an octave or two, but this workaround ties up the pitch bend and doesn't allow me to program in vibrato. Worst case scenario I can't have vibrato...but that would really suck big time. Anyone have any ideas?

That's a limitation of the gameboy sound chip dude.

Really? The sound chip is more than capable of making ridiculously high tones. Is there no workaround other than pitch shifting? I find it hard to believe that the sound chip is incapable of making tones that so much original game boy music uses.

A common workaround is over/underclocking.
For instance, some people use a half clocked GB to reach lower notes.

You should be able to find some info and examples of the half clock mod here on the forum.

Or use a real midi synth.

herr_prof wrote:

Or use a real midi synth.

Actually that's a good question. Does anyone have a recommendation for an 8-bit hardware synth? I've seen novelty arduino based projects, are there any that people would recommend?

The Roland A-01 looked intriguing.

Any synth with pure squares and pwm and make a super high resolution lfo should be great.

I'll have a look into over clocking and see if that can help me out. Thanks for the pointer.

My project involves using a gameboy so I'm not looking for a fancier synth. Guess you have to make to with the limitations that you have! But this is frustrating because from what I can tell this isn't a limitation with how the gameboy can make sound. I think this is a limitation in how it's able to interpret the information it's receiving from the Arduinoboy.  I'm attempting to recreate original gameboy music that I've transcribed as detailed as possible and I feel like this setup is massively unequipped to do what I want :\

Last edited by Ahmaykmewsik (October 24, 2016 10:01 pm)

that does sound like a software issue. the lowest note is definitely 36 on the pulse channels (lowest note of wav channel is 24), but the highest note should exceed MIDI note 127. LSDJ is capable of playing up to note 143 (B11) in pulse and 131 (B10) in wav.

I just checked over the arduinoboy code and I don't see anything that would restrict the pitch range. The problem must lay in mGB. I also checked over the mGB code but I don't understand assembly enough to make heads or tails of what's going on.

I still need to actually set this up and try to replicate the issue. I believe that it's happening and it doesn't seem like it should be.

For your setup, I would not recommend overclocking. You would have to enable/disable the overclock real time and even if you made that work, there's a pretty decent possibility it could crash the gameboy. If I'm wrong, someone please tell me.

There is no midi note higher than 128, but yea mgb software limits probably on top of that. The lsdj pitches are off an octave from piano tuning iirc, so c3 on the pulse is actually c2 on a piano,

Anyways you are probably better off doing like carillion or something if your goals are A midi composition, and b running on hardware.

catskull wrote:

I just checked over the arduinoboy code and I don't see anything that would restrict the pitch range. The problem must lay in mGB. I also checked over the mGB code but I don't understand assembly enough to make heads or tails of what's going on.

I still need to actually set this up and try to replicate the issue. I believe that it's happening and it doesn't seem like it should be.

For your setup, I would not recommend overclocking. You would have to enable/disable the overclock real time and even if you made that work, there's a pretty decent possibility it could crash the gameboy. If I'm wrong, someone please tell me.

Yeah I also get the sense this shouldn't be happening. I'm hoping this is a unique problem that has an easy fix? Although I'm in the dark on how to modify the Arduino, I bought it pre-built from catskull.

I also took a look at the code. I couldn't make much sense of it either.

I agree, overclocking seems equivalent to giving it steroids to fix what might be a really simple issue, not sure if I want to do that to the poor thing.

herr_prof wrote:

Anyways you are probably better off doing like carillion or something if your goals are A midi composition, and b running on hardware.

I looked up carillon. Is it able to receive MIDI data from an external source? That's the medium I'm working in, not a sequencer. The documentation also recommends only using a Gameboy color and I'm using a DMG. From what I can tell that's not going to work for me.

I experimented more with pitch bending on my mGB setup yesterday and found some other odd behaviors...I'm going to make a video later today so you can see/hear this. Hopefully that might make clear what's going on.

Whats the "external source" Whats the end game here?

Here's the end game: this is for a music commission for a toy museum (In where I'm wearing the hat of a classical composer - sort of). I've transcribed music from the top 15 Gameboy games according to Wikipedia and have written a "mash up" piece mismatching melodies with the wrong accompaniment, having Tetris morph into Zelda into Super Mario Land into Kirby - that sort of thing, it's fun. I've written this in a music notation software and the song exists as a MIDI file. I'm using Logic on my computer to playback the MIDI and send it through the arduinoboy to mGB. I'm also controlling the pulse waves, envelopes, and pitch shifting/vibrato via MIDI messages, attempting to recreate the original music as closely as possible.

I made a video here that shows what's going on: https://www.youtube.com/watch?v=SeZsoSXZaws

There are some loud sounds. Probably don't want to wear headphones.

Setup: The keyboard is connected to a computer, which through Logic outputs MIDI to the Arduinoboy, which sends data to the Gameboy and interpreted by mGB. Audio from the Gameboy is being routed to a speaker.

There's a strange pitch limitation that might be a mGB bug. In the video I only show this happening on the upper bound on the WAV channel, however this also occurs on the other channels and on the lower bound. On WAV, notes after G#4 (MIDI 68) don't play correctly. They sound as if they were the lowest note the sound chip can produce. However pitches play correctly to a certain point if the pitch shift is being used, and the new upper limit becomes what would be the pitch B7 regardless of how the pitch shifter is set. If pitch shifting is done outside of this range, some very strange microtonal sounds result. A possible avenue for some cool experimentation, but I think this upper limit is a bug with mGB and if you'll excuse the dumb pun it's pretty "limiting"...the Gameboy is definitely capable of producing the notes that aren't working as you can tell by the microtonal randomness the pitch shifting produces.

When I'm clicking with the mouse mouse button, I am sending a MIDI message that sets the pitch shifter range to it's highest possible value: 127. In the mGB documentation it says the shifter only works up to an octave (12) and in mGB itself you can set it up to 48, but you can set it to be as large a value as the MIDI can send(127), and it will still function. However when the pitch shifter is set this high there is some sort of overflow happening in the software and it results in some very unusual scales and notes, some of which are far outside what can be normally produced. If what's happening here can be reverse engineered, I'm thinking that I may be able to cheat and get the few higher notes that I need (in WAV: C8, C#8, D8, etc.) if this upper bound issue can't be solved.

You might have better results using midi to MML to gbs. This thread covers it:

http://chipmusic.org/forums/topic/2946/ … lsdj-cart/

Will have less headaches on the performance end, at the expense of some more work on the composition end.