God Rest Ye, Merry Gentlemen (ChordPro)

“God Rest Ye, Merry Gentlemen” by Jon Batiste, Judith Hill, and Stay Human really grooves and I wanted to get in on the fun(k). So, I started with Yamaha Chord Tracker and worked out a similar chord progression.

Wanting to hear the progression and jam on it, I wrote the progression and lyrics in Extended ChordPro:

{title: God Rest Ye, Merry Gentlemen} 
{Artist: Jon Batiste}
{Key: Cm}
{Time: 4/4}
# Style: JazzGuitarClub
{stylecode: 3878}
{Tempo: 120}

{start_accomp}

# Intro [Cm][*IA]

# Verse 1
God [Cm:2][*MA] rest ye [Bb/D:2] merry, [Eb5:2] gentle [Fm:2] men,
Let [Gm:2] nothing [Ab:2] you dis- [Gm:2] may. [G7:2][*FA]
Re- [Cm:2][*MA] member, [Bb/D:2] Christ our [Eb5:2] Sa- [Fm:2] vior was
[Gm:2] Born on [Ab:2] Christmas [Gm:2][*FA] day. [C7:2]
To [Fm:2][*MA] save us [Bb:2] all from [Eb5:2] Satan's [AbMaj7:2] pow'r when

[Eb5:2] We were [Dm:2] gone a- [Bb/D:2] stray. [Bb:2]
O [Eb5:2] Ti- [Ab:2] dings of [Dm:2] com- [Gaug:2] fort and
[Cm:2] Joy, [Fm7:2] Comfort and [Bb7][*FA] joy.
O [Eb5:2][*MA] Ti- [Ab:2] dings of [Dm:2] com- [Gaug:2][*FA] fort and

# Funky interlude

[Cm7:2][*MB] joy. [F:2] ---- [Cm7:2] ---- [F:2] ----
[Cm7:2] ---- [F:2] ---- [Cm7:2] ---- [F:2][*FB] ----

# Ending
[Cm7-9][*EA] --------

Extended ChordPro adds auto-accompaniment features to the well-known and widely used ChordPro song format. I translated the ChordPro to a Yamaha-compatible auto-accompaniment file and played it on Genos™.

In “God Rest Ye,” you’ll notice the new extensions right away. There are a few more directives like: {stylecode: 3878} and {start_accomp}. Chord symbols are enhanced with a beat count, e.g., “[Cm:2]“, placing chord changes on beats within a measure. Annotations indicate auto-accompaniment section changes. For example, “[*MA]” and “[*FA]” mean “Main section A” and “Fill in A”, respectively.

Getting to hear the progression — not just play it by hand — was a huge help. I found a few places where a minor chord was required instead of a major. Play-back encouraged me to listen critically and to find a few hipper voicings.

If you would like a copy of the Java program (cp2mid) which translates Extended ChordPro to a Yamaha auto-accompaniment Standard MIDI File, here is a pointer to the ZIP file page. If you would like more information, please see the ChordPro auto-accompaniment example and demo and my article with ideas and uses for Extended ChordPro auto-accompaniment.

Copyright © 2022 Paul J. Drongowski

ChordPro auto-accompaniment

Before we close out the year, a Christmas gift!

Last January, I developed and wrote about “cp2mid“, a Java program to convert extended ChordPro files to a Yamaha accompaniment MIDI files. cp2mid lets someone compose in extended ChordPro format and play the composition on a Yamaha arranger in an auto-accompaniment style of your own choosing. If you don’t feel like composing, just grab one of the many ChordPro songs on the Web, clean it up, translate it, and play it.

You’ve probably seen ChordPro on the interwebs. It looks like:

# A simple ChordPro example 

{title: God Rest Ye, Merry Gentlemen}

God [Cm] rest ye merry, [Cm] gentlemen,
Let [Ab] nothing you dis[G7]may.
Re [Cm] member, Christ our [Cm] Savior
Was [Ab] born on Christmas [G7] day.

Extended ChordPro adds a few new directives (the things between curly braces) and tightens up the notion of musical time in order to mark measures and place chord changes within measures.

cp2mid translates the chords and lyrics into a Standard MIDI File (SMF). The SMF contains all the magic needed to play an auto-accompaniment on a supporting Yamaha arranger keyboard. (PSR E series, unfortunately, is out of luck.)

If you would like more information, here are some links to dive into:

The first three posts are essential reading for cp2mid users. The last two posts are intended for coders and other technically inclined folks.

Oh, yeah, you’ll need the ZIP file with example songs and cp2mid Java code.

Copyright © 2022 Paul J. Drongowski

Adding zones to Keylab Essential with EPP

My current light-weight rehearsal instrument is a Yamaha Reface YC. Although I have put the YC to work at many a rehearsal, the Reface YC has three major limitations:

  1. It’s organ all the way and I can vary tone color only with drawbars.
  2. The three octave keyboard is maddingly too short and chops either the melody or bass line.
  3. I can cope with the mini-keys, but really?

Thus, my quest for a light-weight rehearsal rig goes on.

The V3 Sound Yammex XXL module and its closely-related sister, the Grand Piano XXL module, have very good orchestral voices. The XXL modules are small and weigh only 0.5 pounds (1.2kg) each. Hmmm, I think we have a candidate here.

The other half of the rehearsal formula is a MIDI controller, of course. Fortunately, I have an Arturia Keylab Essential 49 in hand. The Arturia is a relatively compact 49-key controller with lots of pads (8), knobs (9) and sliders (9). The Keylab Essential 49 is a relatively light 6.6 pounds (3kg).

Seems like we should have a match…

I usually split the keyboard into LOWER and UPPER zones somewhere around G3 (AKA G below middle C). This split gives my left hand enough room to roam and accommodates melody lines that dip below middle C. Although I keep the LOWER sound simple (i.e., one patch), I often layer the right hand. Most synthesized acoustic instruments need a little thickening and timbral shaping. Two UPPER layers are a minimum; three layers are sufficient, four is too many.

Seems like a slam dunk — MIDI the Keylab Essential into the Yammex, make a few configurations, and go. Unfortunately, neither the Keylab Essential or Yammex module support the split and layer capability that I need.

Time to rant about the stupidity of most MIDI keyboard controllers. Only a few 49-key controllers have split, layer, or zone capability: Samson Graphite 49, Nektar Panorama P4, Novation SL MKIII, Roland A-500. In the case of the Yammex module, the controller must send a full Bank Select MSB, Bank Select LSB, Program Change message sequence. Many controllers fail even this basic requirement.

The Arturia Keylab Essential, at the very least, sends a complete patch change message sequence. And, I am not going to buy yet another controller!

Enter the MIDI Solutions Event Processor Plus (EPP). The EPP is a MIDI-powered microcomputer that receives MIDI messages on 5-pin, modifies messages as determined by a set of rules, and sends the modified MIDI stream out through 5-pin. The Keylab Essential has a 5-pin MIDI OUT which is electrically compatible with the EPP. (The Keylab Essential voltage is about 4.5V as measured with a digital multimeter.) The EPP sits between the Keylab Essential MIDI OUT and the Yammex XXL MIDI IN. The EPP is itself a light-weight unit and adds negligible weight to the rig.

I programmed the EPP to split note ON/OFF messages arriving on Channel 1. Destination MIDI channel is determined by key zone: UPPER1 (Channel 1), UPPER2 (Channel 2), UPPER3 (Channel 3), LOWER (Channel 4),

  • Channel 1 note ON/OFF at and above the split point are copied to outgoing Channels 1, 2 and 3.
  • Channel 1 note ON/OFF below the split point are copied to outgoing Channel 4.

I also created rules to respond to button presses sending continuous controller 83 (CC#83). These rules initialize the four channels by sending patch change and expression (CC#11) messages. The EPP-based solution should work with any MIDI controller and multitimbral (multi-channel) module as long as MIDI communication is 5-pin.

Early on, I auditioned the Yammex sound set and had identifed 15 or so favorite Yammex voices. The following four voices are assigned to Yammex channels 1 to 4 by the EPP when it receives CC#83:

  1. Channel 1: 63 / 116 / 7 Full Strings 2 Long
  2. Channel 2: 63 / 118 / 58 Flute EQ
  3. Channel 3: 63 / 117 / 49 Classic Horn Ensemble
  4. Channel 4: 63 / 116 / 7 Full Strings 2 Long

The idea is to use Channel 1 as the main solo voice and Channels 2 and 3 as optional orchestral coloring. Flute EQ and Classic Horn Ensemble are mellow, unobtrusive and mix well with other voices. Channel 4, of course, is the left hand.

Initially, Channels 1 (UPPER1) and 4 (LOWER) are assigned an ensemble string voice, a reasonable default. Expression values are set such that strings are heard, and Channels 2 (UPPER2) and 3 (UPPER3) are silent.

Voices are assigned in the following way to the eight Keylab Essential pads:

      Violin            Oboe           Flute           Eng Horn 
63 / 116 / 22 63 / 118 / 48 63 / 118 / 57 63 / 118 / 49

Full Strings 2 Cello Flugelhorn Bassoon
63 / 116 / 7 63 / 116 / 24 63 / 117 / 15 63 / 118 / 50

Normally, these are the main solo voices to be assigned to UPPER1 (Channel 1). However, using Arturia’s USER MIDI channel feature, these voices can be assigned to UPPER2 (Channel 2), UPPER3 (Channel 3) and LOWER (Channel 4), too. That allows for a lot of game-time flexibility!

Wait, there’s more. I assigned MIDI expression to Sliders 5 through 8:

  • Slider 5: UPPER1 (Channel 1) expression/level
  • Slider 6: UPPER2 (Channel 2) expression/level
  • Slider 7: UPPER3 (Channel 3) expression/level
  • Slider 8: LOWER (Channel 4) expression/level

The sliders let me mix voices dynamically. A voice is silenced when I pull its Slider all the way down.

The table below summarizes the Keylab Essential knob, slider, pad and button MIDI assignments:

Knob #1  Cutoff     CC#74 Brightness 
Knob #2 Resonance CC#71 Timbre
Knob #3 Vib Rate CC#76 Vibrato rate
Knob #4 Vib Depth CC#77 Vibrato depth
Knob #5 Vib Delay CC#78 Vibrato delay
Knob #6 Port Time CC#05 Portamento time
Knob #7 Chorus CC#93 Chorus level
Knob #8 Reverb CC#71 Reverb level
Knob #9 CC#17 free

Slider #1 Attack CC#73 Attack time
Slider #2 Decay CC#75 Decay time
Slider #3 Sustain CC#64 Sustain
Slider #4 Release CC#72 Release time
Slider #5 UPPER1 CC#11 Expression channel 1 Solo
Slider #6 UPPER2 CC#11 Expression channel 2 Flute EQ
Slider #7 UPPER3 CC#11 Expression channel 3 Classic Horn Ens
Slider #8 LOWER CC#11 Expression channel 4 Strings
Slider #9 CC#85 free

Pad #1 63 / 116 / 22 Violin
Pad #2 63 / 118 / 48 Oboe
Pad #3 63 / 118 / 57 Flute
Pad #4 63 / 118 / 49 English Horn
Pad #5 63 / 116 / 7 Full Strings 2 Long
Pad #6 63 / 116 / 24 Cello
Pad #7 63 / 117 / 15 Flugelhorn
Pad #8 63 / 118 / 50 Bassoon

Button #1 (Part1) CC#65 Portamento ON/OFF (toggle)
Button #2 (Part2) CC#82 Momentary (Generic ON/OFF)
Button #3 (Live) CC#83 Initialize voices (Momentary)

So far, I’m having fun mixing and matching voices on the fly and trying new timbral combinations. One drawback is having to carry around a mental map to find, select and mix voices. I wish there was a way to display the current voice assignments! I plan to add stickies to the Keylab Essential to assist navigation and reduce pilot workload.

I hope this article has sparked ideas for your own control set-ups. The general principles should apply to most MIDI keyboard controllers and multi-timbral tone modules.

Copyright © 2022 Paul J. Drongowski