PU-1: Emulating the Apogee GIO, Part 1

The Apogee GIO is a small pedal board expressly made to interface with Apple’s Garageband or Logic. I use Logic for music production and control, as well as for live performance.

Apogee GIO


Since the PU-1 is awaiting a purpose in life, I decided to try emulating the functionality of the Apogee GIO. Let’s review the functions:

  1. Stomp box control
  2. Hands Free recording
  3. Patch select
  4. Midi Expression pedal input
  5. USB connection
  6. Guitar Preamp
  7. Headphones amp or Speaker Pre-amp

I can emulate the first five items. For connection to a guitar and headphones, I use a M-Audio Fast Track PRO. Many of you probably own an equivalent USB computer interface. Actually, if you do vocals, you probably already have an interface. While I know that Apogee is known for the high quality of their audio interfaces, the M-Audio fills my need and won’t be updated.

PU-1 with numbered switches


1, 2 & 3: Switches and controls

The GIO will automatically know which stompboxes you’re using in Logic or GarageBand. Well… to a maximum of five (four in Mainstage). One feature that is promoted is the ability for the GIO to show the color of the stomp box it’s connected to. This discussion implies that the GIO uses standard Midi CC messages to exchange information with external software. Since I have not installed RGB LEDs on the PU-1 (yet!), I can’t show colored stompbox indicators. Not a big feature, as far as I’m concerned. But the GIO indicates the fact that a particular pedal is in use by using a different intensity for the LED. I could use a different intensity, or I could make the LED blink. I will test both.

The GIO has two rows of switches. My PU-1 has one. I will have to switch functionality by using an extra switch. The top left switch (number 7) will be used to switch the functions of the bottom row (switches 1 to 6). Of course, I when I transfer this to the  FCB1010, I will have enough switches to implement this using one less step.

I like the idea of being able to press a switch to change the sound patch in Logic, so I will use switches 1 and 6 to do this, emulating the corner switches on the GIO.

I will be able to control 4 stomp boxes and, after a press of switch 7, I will be able to send the appropriate codes for Play/stop, Record, forward and Back/Back to Beginning. I will use switch 8 as a Master Mute (Panic Button).

One thing the GIO doesn’t have is a rotary encoder. I will use mine to quickly select patches (turn and click to confirm).

4: Expression pedals

With the GIO, you have to buy separate expression pedals (very specific models). The PU-1 has two!

5: USB connection

The PU-1 was built with USB connection in mind. In fact, I can use two different connections: one to talk directly to the Arduino, the other to send and receive Midi codes.

Programming the Arduino

The toughest part will be controlling the stomp boxes. So let’s start with that one.

In Logic, the stompboxes are assigned to a particular instrument. It is possible to send a midi Control Change (Midi CC) to Logic to affect parameters on the stompbox. They have a “learn” mode. But the idea is to get a feedback from Logic telling the PU-1 if an effect is on or off, or even what a particular value is, in the case of a variable, like a knob. I would like to receive that value to make sure that the pedal board is reflecting the same state as Logic. Otherwise, the programming is quite simple.

Pressing a switch on the PU-1 will send a midi signal to Logic. Logic has a learn mode that allows any(?) variable to be modified by an external midi signal. For example, my M-Audio Oxygen 49 keyboard sends Midi CC 116 when I press the STOP transport button. So if I put Logic in “learn” mode for the STOP function and then press the button on my keyboard, an association is made between the two. Actually, Logic doesn’t care which button I press. I could even be a keyboard note!

So, in the Arduino sketch, I just have to create a Midi code table and have logic respond to these codes. Of course, each code is linked to a switch, an encoder or a pedal. In turn, I would like logic to send some confirmation signal when it has responded to a midi command. That would prevent de-synchronization between the state of the pedal board and the actual effect in Logic. I haven’t found a way to send the signal from Logic to the pedal board, but I was given a way to do it in Mainstage.

Since I decided to keep switches 1 & 6 for Next/Previous Patch, I have to select 4 transport. I will use Loop, Stop, Play and Record. Function Selection is on Switch 7, Master Mute on Switch 8, Wah/Modulation is activated with Switch 9 (toe down on left Expression pedal). Then I’ve assign CC values to all the switches and pedals. That choice is based on previous experience and compatibility with other equipment. The CC values could be anything, really.

Once the code is uploaded to the Arduino, it is used as a Midi source for Logic/Mainstage.

I will post a video soon. The code is here. It has not been optimised and is not using the Arduino Midi library yet.


3 responses to “PU-1: Emulating the Apogee GIO, Part 1”

  1. Nick Avatar

    I’m trying to program my Behringer fcb 1010 to control the wah pedal position in garageband. CC#7 controls volume no problem, but I can’t seem to find any documentation regarding the CC value for the wah position control. Thanks!

    1. Unfortunately, Apple chose to prevent communication to GarageBand effects using Midi. I’m trying to find a way to emulate the effects controls of the Apogee GIO, but everybody (Apple and Apogee) is secretive about the innards of GarageBand. I am researching the issue though, because I really want the PU-1 to emulate a full GIO.

  2. mrmarcyj Avatar

    hi there,

    i was was just wondering which part of the main working code deals with the sending the midi note to the midi interface to the computer. i am looking to create another midi controller and having a spell of trouble trying to figure it out.

    many thanks


Leave a Reply

Your email address will not be published. Required fields are marked *