littleBits Arduino: More observations

Back with a few more quick observations as I get started with the littleBits Arduino module. (Please see my first review.)

I decided to see how much stuff I could cram around the littleBits Arduino. (Click on the image below for full resolution.) This configuration starts with the power module on the left hand side. The power module is connected to a 9V 1500mA (1.5A) center positive power adapter with a 2.1mm plug. As I mentioned in my previous post, this is the same adapter that I use with my Arduino UNO. Already, I like the power switch on the power module — a very handy touch.

arduino_full_up

The power module drives three input modules (a button and two dimmers) via the fork module which is included in the Arduino Development Kit. The button module is connected to Arduino digital input D1 and the dimmer modules are connected to the Arduino analog inputs A0 and A1.

The Arduino D5 output is connected to a dimmer module that adjusts the volume (amplitude) of the signal sent to the synth speaker module. Yep, the synth speaker module has a volume control of its own. It’s that little trim pot in the lower left corner of speaker module. I find it difficult to adjust the tiny trim pot. Trim pots are designed for “set and forget” applications and have a limited rotational life (number of cycles). So, I splurged and inserted a dimmer module on the input to the speaker module.

I love the bargraph. You can use it as a poor man’s volt meter or logic indicator. I connected the bargraph module to Arduino output D9. Before I forget, the switches for D5 and D9 are set to the “analog” position.

I didn’t connect anything to Arduino digital output D1. A good first sketch would be blinking the on-board D1 LED on and off. So, I left the bitSnap empty.

The knobs on the dimmer modules are my own doing. The knobs do not come with the dimmer modules. I have a dozen or so of these basic knobs. The equivalent knobs are:

  • Multicomp CR-BA-7C6-180D ($0.35 per knob through MCM Electronics)
  • Sparkfun COM-08828 (now retired)

Knobs just make life easier and make things a little more dressed up.

I was hoping that littleBits had preloaded a sketch to the Arduino module and they did. The preloaded sketch makes the bargraph “breathe.” The sketch repeatedly ramps up the output voltage from zero volts to the MAX (5 volts) and ramps the voltage back down to zero volts. The dimmer connected to A1 controls the ramping speed, i.e., how fast the bargraph breathes.

I wish that littleBits made the preloaded sketch available on their web site. I couldn’t find it. Quite frequently, it’s handy to have a known-good sketch for testing purposes. I’m a stickler for testing and diagnostic programs. Too much emphasis on coding, not enough emphasis on testing, I say.

The littleBits site has a good introduction to installing and using the Arduino Integrated Development Environment (IDE). If you’re confused about the “analog” and “pwm” switch settings, be sure to scroll down into the comments section on this page. There is a good explanation. A short bit of advice: If you need to send an analog signal that varies anywhere from 0 to 5 volts, then put the switch into the “analog” position. If you need to send a purely digital signal (ON: 5V, OFF: 0V), then put the switch in the “pwm” position. (A pulse chain is, of course, a type of digital signal.)

If you’ve taken a look at the Arduino module schematic, you know that the switch enables (or disables) two extra stages of low pass filtering. The low pass filters (when enabled) generate an analog signal by smoothing out a PWM signal. This is essentially a poor man’s digital to analog converter (DAC) although it isn’t very hi-fi.

The littleBits web site has ten sketches to get you started. This part of their site could use a little polishing. First, I couldn’t find the source code for the sketches! At last, I realized that the link to a sketch is under the “ADDITIONAL FILES” section on the right hand side of the page — beneath the relatively huge “ADD ALL TO CART” button. Ah, sales before service. Beginning users may not realize that this is the link to the code. They may not know that the “ino” file extension refers to an Arduino IDE code file! Maybe kids are less confused than adults, but details like this could easily turn off a youngster who is lacking self-confidence.

The sketch file names are a little whack and don’t always directly refer to the section or page titles on the sketch web pages. Here is a correspondence table that I put together:

Example                     Source code file
--------------------------  ------------------------------
Blink                       blink.ino
Hold An On/Off State        buttonRead_stateChange.ino
Blink Speed Control         analogRead_digitalOutput.ino
LED Fading Effect           analogRead_analogOutput.ino
Servo Sequence Recorder     Sequence_Recorder_Starter.ino
DIY Etch A Sketch           etchasketch_arduino.ino
Analog Pong                 analog_pong_arduino.ino
DIY Computer Mouse          mouseMoveNClick.ino
Play A Melody               toneMelody.zip
Change The Pitch            tonePitchFollower.ino

Again, littleBits need to reduce the frustration barrier especially since kids are involved or teachers who have suddenly been assigned to computer science.

In my first review, I mentioned how mounting boards are essential for building mechanically robust and electrically reliable littleBits systems. Definitely true. However, littleBits still have room for improvement. The current mounting boards have quite a bit of flex in them and the pegs still pop out easily. I had a heck of a time getting the system (pictured above) to stay firmly put in the mounting board. It’s takes a lot of pressure to get a big system into a mounting board. I’m afraid that the pressure will weaken the board connections. Perhaps things will get better with practice or use…

If you’re interested in the backstory about the littleBits Arduino module, then read this article.

littleBits: First review

Some things are inevitable…

I taught undergraduate and graduate hardware design for many years. It was always a challenge to give students hands-on experience with digital logic circuits, especially for large-scale digital systems. Gosh, I could write several long blog posts that recount the various breadboarding, prototyping and simulation approaches that my students used in the lab. Along with the achievements came many horrors.

So, picking up littleBits was inevitable.

littleBits are so cute. Just in case you’ve been in an isolated cave, littleBits modules are small building blocks with magnetic “bitSnaps” at opposing ends. The magnetic bitSnaps sort the ports into inputs and outputs, and enforce an output-to-input connection rule. Each bitSnap carries the positive voltage rail, the ground rail and a signal. (Click images to get full resolution.)

dimmer_bargraph

The littleBits range covers basic digital logic and analog building blocks including audio. The Synth Kit — designed in collaboration with Korg — has perhaps done the most to promote widespread discovery and use of littleBits. The Synth Kit certainly placed littleBits in relatively non-traditional hands and sources, namely, musicians and musical instrument retailers. Before their recent bankruptcy proceedings, one could find individual ‘Bits in Radio Shack stores.

According to the manager of a local Radio Shack, the littleBits suffered a very high theft rate. Shame on anyone who unlawfully filched these!

Most retailers today (like Barnes and Noble bookstores) sell littleBits kits. The kits make it easier for people to get started and it reduces the number of separate SKUs at point-of-sale. With Radio Shack’s reorganization, these days, it is more difficult to buy individual modules a la carte. The littleBits on-line shop carries the full range, of course. Still, one rarely finds ‘Bits or kits at a discount.

The kits are also a little less easy to steal although a Barnes and Noble shopkeeper acknowledged high theft potential, too. Stop stealing!

One reason why people may feel entitled to boost littleBits with sticky fingers is their perceived expense. An LED at $7.95 may seem grossly overpriced. However, each individual module has at least two bitSnaps and there is value-added design and electronics on board. The LED module, for example, has a voltage protected input and a driver. In fact, all signals in the littleBits series are driven and normalized; that’s what makes them special. If all you want is a naked LED with two leads, then by all means pass up littleBits and try something else!

Signal standardization is what makes littleBits what they are. littleBits are very close to the plug-and-play electronic LEGO™ blocks that educators have wanted for a zillion years.

I decided to forego prepackaged kits and buy a la carte. The kits usually have modules which I probably won’t use and it just seems like a waste to buy them. That includes the Synth Kit, too. (Are you surprised?) I don’t have any interest in the tiny keyboard or the sequencer. I’m not that interested in the oscillators for that matter. I want to drive my synth and other experiments with Arduino. Thus, the only kit that I have purchased is the Arduino Coding Kit. Everything in this kit is quite useable with the exception of the servo module. (Although a Neil Young Whizzer would be a unique project!)

The littleBits Arduino board is a good example of value-added engineering. Sure, the Arduino ‘Bit doesn’t provide all of the ins and outs of a stock Arduino UNO, for example. However, the bitSnap signals are standardized with protection on the inputs and (switchable) low pass filters on the PWM outputs. The serial transmit (TX) and receive (RX) signals are made available through bitSnaps, making MIDI IN and OUT a future possibility. Programming is supported through either USB or ICSP. You’ll need to add header pins for ICSP, but if you’re using ICSP, you already ride tall in the saddle.

arduino_battery

I intend to whip up MIDI IN and MIDI OUT circuits using PROTO modules. I thought long and hard about the options. The Hardware Development Kit contains two PROTO modules, one PERF module and 12 bitSnaps (6 male, 6 female). I am not a fan of pad-per-hole perf board, so the PERF module is not that attractive to me. I much prefer “DIP style” prototyping boards that accomodate full size, through hole DIP ICs. This is sooooo much easier to solder. For similar reasons, I’m not sure that I want to fiddle around crafting circuit boards to conform to the bitSnaps. Overall, I will probably buy two PROTO modules a la carte.

The littleBits web site is a little sketchy on certain vital details:

  • The Arduino board USB port is a micro USB port.
  • The power module can be driven by a 9V, center positive, 2.1mm power adapter — the same as an Arduino UNO.
  • The power module can drive any input bitSnap (any port in a storm).
  • The Arduino IDE should be configured for the Leonardo board.

I don’t like hunting around for this kind of information and I especially do not want to watch videos to find it! In fact this information should be printed on the plastic purple baggy containing the Arduino board. (Also, the link to Arduino sketches on the current baggy is dead.)

Thank goodness that the Arduino Development Kit comes with two mounting boards. A mounting board holds a littleBits circuit in place and makes connections reliable. I whipped together a simple circuit without using a mounting board and the relatively heavy adapter cable kept pulling the power module away from the other boards. The bitSnap magnets are simply not that big and strong. Programming and using an Arduino module without a mounting board would be a nightmare.

So far, a favorable, somewhat vanilla review. Here’s a bit of my own value-added as a computer science educator.

When I first powered up the pulse module — a 555 timer-based circuit that generates a regular stream of digital pulses — I didn’t necessarily see a clock. I saw a token generator. I thought, “Given the current design of the logic elements, wouldn’t it be neat to build and visualize a one-hot state machine (controller)?” If each latch module had a built-in LED showing the state of the latch, this application would be a natural for littleBits.

Even better, why not bag synchronous control altogether and go asynchronous, self-timed?

Ivan E. Sutherland, Turing Award paper, Communications of the ACM, Volume 32, Number 6, June 1989, pages 720-738. And don’t forget everything written by Chuck Seitz, too!

This immediately raises the question of what we want students to learn from their experience with littleBits. I want students to learn that:

Electronic systems are inherently parallel.

Students need to be exposed to concurrency and parallelism before their minds are corrupted by the sequential, synchronous paradigm in conventional programming languages.

The other question that pops up is scalability. littleBits logic elements currently operate at the bit level. However, I’d love to have modules at the bus level such that students could build their own CPUs, GPUs, whatever. Plug-and-play busses are a tougher design challenge electrically and mechanically. One possible solution is to transmit data words serially from module to module. Pass the word size along with the data in order to simulate any (reasonable) bus width. littleBits could then keep the current bitSnap form factor.

Finally, I would like to mention the module technology that gave me a start in digital electronics: DEC Register Transfer Modules, also called the “PDP-16” or “RTMs.” RTMs use a flowchart-like notation for control design. This approach opened a whole world to me including ISP, Petri Nets and eventually dataflow computing. Most importantly, RTMs taught my 19 year-old mind that computation is fundamentally parallel and we should design for and exploit concurrency right from the get-go. Nico Habermann, God bless him, did the same in the sophomore programming course at C-MU. This point of view influenced my entire professional life!

If you would like to know more about RTMs, then read “Designing Computers and Digital Systems Using PDP-16 Register Transfer Modules,” by C. Gordon Bell, John Grason and Allen Newell, 1972. I was one of the first guinea pigs to use RTMs in the computer design course taught by John Grason. Thanks, John!

See also “The Description and Use of Register-Transfer Modules,” C. Gordon Bell, J.L. Eggbert, J. Grason, and P. Williams, IEEE Transactions on Computers, Volume C-21, Number 5, May 1972, pages 495-500.

Tenor to the max!

A few posts ago, I deconstructed the Yamaha MOX (Motif XS) tenor saxophone patches. The article summarizes the waveform assignment and Expanded Articulation (XA) control for each element within a preset voice. I’m not going to dive into the basics here, so I recommend reviewing the article for background information on XA and its behavior.

The blog entry covered the MOX (Motif XS) tenor sax presets, but not the newer Motif XF (MOXF) presets. The XF series workstations have two additional waveforms:

  1. Tenor Sax2 Growl
  2. Tenor Sax2 Falls

bringing the XF up to the level of Tyros/PSR Super Articulation tenor sax voices. This article deconstructs the “Tenor MAX” preset which makes use of these additional waveforms. The analysis is relevant even in the Montage era because the Montage tenor sax is based upon the XF waveforms (no update in the new model).

Pushing the main topic aside for a moment, Super Articulation 2 (SArt2) voices are a whole different technology and even to this day, the Motif and Montage do not implement SArt2 voices. SArt2 seems to be a premium feature that is reserved for Tyros. SArt2 requires realtime analysis of playing gestures and computation which is beyond basic AWM2 synthesis.

The table below gives the waveform, key range, and velocity range for each element in the “Tenor MAX” patch.

    Elem#  Waveform            XA        Notes   Velocity
    -----  ------------------  --------  ------  --------
      1    Tenor Sax2 Soft     AllAFOff  C-2 G8    1   79
      2    Tenor Sax2 Med      AllAFOff  C-2 G8   80  110
      3    Tenor Sax2 Growl    AllAFOff  C-2 G8  126  127
      4    Tenor Sax2 Hard     AllAFOff  C-2 G8  111  125
      5    Tenor Sax2 Hard     AF2 On    C-2 G8    1  127
      6    Tenor Sax2 Falls    AF1 On    C-2 G8    1  127

When the AF1 and AF2 buttons are OFF, one of the first four waveforms are triggered based upon the key velocity. The four elements cover the dynamic range from soft, through medium, through hard, all the way up to growl. The AF1 and AF2 buttons select particular waveforms depending upon the player’s intention. When AF2 is ON, all key velocities trigger the hard waveform. When AF1 is ON, all key velocities trigger sax falls.

So, bottom line, the “Tenor MAX” programming is just about what I expected.

I hope the analysis of tenor sax programming has helped you to understand XA and Motif/MOX voice programming. If you’re a Tyros/PSR player, then I hope that this analysis has helped you to understand a little bit of the technology beneath the Super Articulation voices.

Montage review: Yes, I’ve played one!

The Yamaha Montage synthesizer is now hitting stores in North America. One of the local retailers (GC in Natick) have a Montage set up for demo. Let’s go!

The demo unit is a Montage8 with the 88-key balanced hammer effect keyboard. I have always liked Yamaha’s upper-end “piano” actions and the Montage8 is no exception. I primarily play lighter “synth” action keyboards like the MOX and the PSR-S950. Fortunately, I spent the previous week working out on the Nord Elecro 2 waterfall keyboard, which requires a slightly heavier touch. I played the Montage8 for a little bit more than an hour without my hands wilting — a good sign.

First off, the demo unit was plugged into two Yamaha HS7 monitors and a Yamaha HS8S subwoofer. GC usually patches keyboards through grotty keyboard amplifiers, so I suspect that Yamaha provided the monitors in order to create the best impression of the Montage. I was dismayed when I started off with a few B-3 organ patches and could not contain the low end. The front panel EQ simply didn’t do the job. Time to check the monitor settings. The HS7s were flat, but the HS8S subwoofer level was cranked. After backing off the sub, all was right with the world.

Yes, some people like to simulate small earthquakes with subsonic frequencies. This, however, is not conducive for acoustic music. It’s not conducive for peaceful co-existence with your bass player either. If you encounter a Montage in the wild, check the EQ before proceeding!

So, as you may have gathered already, this is not a review of Montage for EDM. I took along my church audition folder (covering gospel to contemporary Christian to traditional and semi-classical music) and a small binder of rock, jazz, soul and everything in between. I’d like to think that this is the first time anyone has played “Jesu, Joy of Man’s Desiring” on the Montage, however poorly.

The electric pianos are terrific. I had a fine old time playing soul jazz and what not. Great connection between keys and sound. Comparing against Nord Stage, I would say that the Montage is top notch in this department and definitely a cut above the old Nord Electro 2. Yamaha did not put the Reface CP (Spectral Component Modeling) technology into Montage; they didn’t need to.

Tonewheel organ is still Yamaha’s Achilles’ heel. There is some modest improvement, but the Montage is not in clone territory. In this area, I would say, “Advantage Nord.” If I can cover B-3 with the MOX on Sunday, I’m sure that the Montage is up for medium duty. However, the tonewheel organs lack the visceral thrill of the EPs. I will say that the 88-key action did not inhibit my playing style too much. (If I was going to buy a Montage, tho’, it would be a 6.)

The pipe organs got some tweaks, mainly by enhancing the Motif pipe organ sounds via FM. There are a few lovely patches, but I will still look to the Tyros (and the PSR expansion pack) for true realism. The Nord Electro 5d has modeled principal organ pipes where the drawbars change the registration. Ummm, here, I would give the edge to Nord. Plus, the pipe organs in the Nord sample library are more on par with the Tyros and PSR expansion pack. Hate to say it: Montage pipe organs are good “synthesizer pipe organs,” and that ain’t entirely a compliment.

The new strings are wonderfully realistic, especially for solo/melody lines. I really enjoyed bringing sections in and out dynamically. (The expression pedal was sync’ed to the SuperKnob.) With the changes in our music ministry group, I’ve been playing more melodic and exposed parts. I could really dig playing a reflective improvisation for meditation using the strings and woodwinds under Motion Control.

The classical woodwinds got a boost in Montage, too. The woodwinds are all excellent although the sonic delta above Motif XF (MOXF and MOX, too) was not as “Wow” as the strings. Most likely, my ears were getting tired at that point…

Since I was losing objectivity, I just briefly touched on brass. I need good French horns and Montage did not disappoint. I wish that I had spent time with the solo trumpets and trombones, but my ears were telling me to knock it off.

The new Telecaster (TC) is quite a treat. The “Real Distortion” effects (Motif XF update 1.50) are now standard and the programmers made good use of them. I wish that the Montage had the voice INFO screen from the PSR/Tyros series. The INFO screen displays playing tips and articulations for each voice. This makes it a lot easier to find and exploit the sonic “Easter eggs” in the patches. (“Play AF1 to get a slide. Play AF2 to get a hammer on.”)

Fortunately, it was a rainy Saturday afternoon and the store was empty — disturbed only by the occasional uncontrolled rugrat pounding on some poor defenseless keyboard. Overall, I felt like I really heard the Montage and could make a fair evaluation.

I did not dive into editing, arpeggios, motion sequencing, recording, etc., so this is surely not a comprehensive review. Anyone spending less than one month with this ax cannot claim “comprehensive.” It just ain’t possible, so I would call my initial opinion, “first impressions.” That said, I can see why the Live Sets are important. I mainly dove in through Category Search where some of the touch buttons are a wee too small. Punching up a sound in full combat requires BIG buttons.

Montage looks, feels and sounds like a luxury good. Montage is also priced like a luxury good. The Montage8 MAP is $4000 USD. It is quite a beast physically and I would most likely go for the Montage6 at a “mere” 33 pounds and $3000 USD. None of the Montage line would be an easy schlep, especially when I have to buzz in and out of my church gig fast.

Would I buy one? Tough call. On the same field trip, I got to sit in a Tesla Model S ($71,000 USD) — a luxury car built around a computer monitor or two. I just recently bought a Scion iM (AKA Toyota Auris, Levin, Blade, whatever) for about $20,000 USD. Both cars could get me to the gym and back. I like my iM. What does that say about me as a customer? Do you think I would buy a Montage? Enigmatic.

See the list of new waveforms in the Montage. Also, check out the latest blog posts! Update: May 10, 2016.

Explicit Sax

Hope you got your Motif XF. The current stock is gone, gone, gone.

Comparing waveforms (Montage vs. XF) got me interested in the tenor sax samples and voices. The Yamaha MOX has the basic tenor sax samples (Med, Hard, Growl) while the Motif XF rounds out the set with Soft dynamic samples and falls. The XF (and MOXF) showcase the tenor sax in the “Tenor Max” preset voice.

Since I was curious to discover “what I’m missing,” I deconstructed four tenor sax patches on the MOX. Also, I compared the MOX voices against the Super Articulation tenor sax voices on the PSR-S950 arranger workstation in a listening test. The A/B test was enlightening as the MOX and S950 use the same waveforms — at least to my aging ears! The S950 triggers the samples using Super Articulation (SA) rules while the MOX triggers the samples using Expanded Articulation (XA) rules. Rules aside, you get to the same sonic place.

With XA, there are three main ways that samples are selected and triggered:

  1. Normal: Triggered when keys are played in the regular way.
  2. Legato: Triggered when Mono/Poly mode is Mono and keys are played in a legato manner, i.e. one or more keys are held while a new key is struck.
  3. AF1 and AF2: Triggered when either AF1 is ON, AF2 is ON or AF1/AF2 are both OFF and a key is struck. (The switch states are exclusive.)

See the Yamaha Synthesizer Paramater Manual for all the gory details. XA and SA differ in the amount of automated decision making made by the control software. SA is more automated and XA is more manual, giving the player more explicit control over articulations.

First up is the PRE5:008(A08)Tenor Dynamic AF1 voice. The AF1 and AF2 buttons are assigned in the following way:

    AF1: Mono/Poly mode
    AF2: FEG-D1

The AF1 and AF2 buttons do not affect sample selection in this voice other than putting the keyboard into Mono mode or Poly mode. Thanks to this simplification, it’s a good place to start ‘splaining.

The table below gives the waveform, key range, velocity range and volume level for each element in the patch.

    Elem#  Waveform            XA      Notes   Veloc  Level
    -----  ------------------  ------  ------  ------ -----
      1    Tenor Sax2 Med      Normal  C-2 G8  1   60   110
      2    Tenor Sax2 Med      Normal  C-2 G8  61  90   110
      3    Tenor Sax2 Med Of   Legato  C-2 G8  1   90    86
      4    Tenor Sax2 Hard     Normal  C-2 G8  91 127   120
      5    Tenor Sax2 Hard Of  Legato  C-2 G8  91 127    95
      6    Small Tabla Dom     Legato  C4  G8  1  127    52
      7    Small Tabla Dom     Legato  C-2 B3  1  127    78
      8    Sine                Legato  C-2 G8  1  127    78

The element levels are programmed to even out the perceived loudness across waveforms. Of course, there are many parameters for each element beyond what is shown in the table. For example, each dynamic level (velocity range) has its own filter and amplitude characteristics. There may even by a little velocity-sensitive pitch scoop at the beginning of a note!

The tenor sax waveforms (elements 1 to 5) cover the entire key range: C-2 to G8. The waveforms are assigned to different velocity ranges and are selected (and triggered) depending upon Normal or Legato playing gestures. The first element is triggered when a Normal (detached) gesture is detected and the key velocity (i.e., how hard the key is struck) is between 1 and 60 inclusive. The second element is triggered under the same conditions except the key velocity is between 61 and 90 inclusive. The AF1 button toggles between Mono and Poly mode — whether a legato gesture triggers a Legato element or Normal element.

You can see that only one of the first 5 elements is triggered at a time depending upon the combination of gesture, note range and velocity range. The Tenor Sax2 Med waveforms are played for quieter dynamic levels and the Tenor Sax2 Hard waveforms are played for the louder dynamic levels.

The Tenor Sax2 Med Of and Tenor Sax2 Hard Of waveforms are triggered by a Legato playing gesture. The “Of” in the waveform name means “Offset” and sample playback starts later in the waveform data, that is, skipping the attack part of the waveform. This eliminates the initial attack which is characteric of a sax playing detached notes.

Elements 6 to 8 are triggered only for Legato notes. These elements add a low-level “pop” at the beginning of each note. Think of this sound as a “connective tone” between notes. Tyros’s Super Articulation 2 technology (also known as “Articulated Element Modeling”) blends actual connective tones between notes, producing realistic articulations. The blending requires considerably more samples and processing power than the MOX or the S950.

The PRE5:009(A09) Tenor Soft Legato voice is a simplified version of the first patch. AF1 selects Mono and Poly modes. (AF2 is unassigned.) The patches use only the “Med” waveforms to achieve an overall softer timbre.

    Elem#  Waveform            XA      Notes   Veloc  Level
    -----  ------------------  ------  ------  ------ -----
      1    Tenor Sax2 Med      Normal  C-2 G8  1   70   110
      2    Tenor Sax2 Med Of   Legato  C-2 G8  1   80    99
      3    Tenor Sax2 Med      Normal  C-2 G8  71 127   110
      4    Tenor Sax2 Med Of   Legato  C-2 G8  81 127    99
      6    Small Tabla Dom     Legato  C4  G8  1  127    46
      7    Small Tabla Dom     Legato  C-2 B3  1  127    75
      8    Sine                Legato  C-2 G8  1  127    59

There are two dynamic levels (lower and higher velocity ranges) and two playing gestures (Normal and Legato) forming four combinations of dynamic level and gesture. Elements 6 to 8 implement a connective tone as previously described.

Life gets more interesting in the PRE5:0010(A10) Velo Growl Legato patch. AF1, again, selects Mono and Poly modes. (AF2 is unassigned.)

    Elem#  Waveform            XA      Notes   Veloc   Level
    -----  ------------------  ------  ------  ------- -----
      1    Tenor Sax2 Hard     Normal  C-2 G8  1    60   119
      2    Tenor Sax2 Med Of   Legato  C-2 G8  1    60    86
      3    Tenor Sax2 Growl    Normal  C-2 G8  61  127   125
      4    Tenor Sax2 Hard Of  Legato  C-2 G8  61  100   102
      5    Tenor Sax2 Growl Of Legato  C-2 G8  101 127    94
      6    Small Tabla Dom     Legato  C4  G8  1   127    52
      7    Small Tabla Dom     Legato  C-2 B3  1   127    78
      8    Sine                Legato  C-2 G8  1   127    78

There are roughly three dynamic levels:

  • Velocity 1 to 60: A hard attack is triggered for Normal notes and a soft attack, medium sax is triggered for Legato notes.
  • Velocity 61 to 100: A growl sax is triggered for Normal notes (up to velocity 127) and a soft attack, hard sax is triggered for Legato notes.
  • Velocity 101 to 127: A soft attack, growl sax is triggered for Legato notes.

This programming allows interesting one-hand control. Play soft to get a pure sax tone and play hard to get a growl. Play detached to get a harder attack and play legato to get a softer note attack (when Mono mode is selected via AF1).

The fourth and final patch is PRE5:011(A11) Tenor Growl AF1. The buttons are assigned in the following way:

    AF1: Mono/Poly mode and growl waveform
    AF2: Tenor Sax1 waveform

As you’ll see in the table below, the AF2 button selects the original Motif Tenor Sax1 waveform.

We again have two dynamic levels triggered by velocity ranges 1 to 100 and 101 to 127. Here, the assignable function buttons really come into play.

    Elem#  Waveform            XA        Notes   Veloc   Level
    -----  ------------------  --------  ------  ------- -----
      1    Tenor Sax2 Med      AllAFOff  C-2 G8  1   100   120
      2    Tenor Sax2 Hard     AllAFOff  C-2 G8  101 127   125
      3    Tenor Sax2 Growl    AF1 On    C-2 G8  1   127   127
      4    Tenor Sax2 Hard Of  Legato    C-2 G8  101 127   102
      5    Tenor Sax2 Hard Of  Legato    C-2 G8  1   100   102
      6    Tenor Sax1          AF2 On    C-2 G8  1   127   119

AF1 brings in a growl waveform (element 3) when it is turned ON. AF2 brings in an entirely different tenor sax waveform and tone (element 6) when it is turned ON. The first two elements play a pure tenor sax tone when all AF buttons are OFF. Elements 4 and 5 play a hard sax tone with a softer attack for legato playing gestures. You would be hard pressed to think about these combinations when actually playing — you just have to “go for it” intuitively, knowing that AF1 kicks in the growl.

Turning OFF AF1 while holding the key cuts off the note. Whether this is a bug or a feature is your’s to decide!

The effect programming in these four presets is not very adventurous. The effects are appropriate for a laid-back, mellow sound. Here’s a quick breakdown:

    Preset voice        Insert A   FX preset    Insert B    Dry/Wet
    -----------------  ----------  ---------  ------------  -------
    Tenor Dynamic AF1  VCM EQ 501    Flat     TempoCrosDly   D63>W
    Tenor Soft Legato  VCM EQ 501    Flat     TempoCrosDly   D59>W
    Velo Growl Legato  VCM EQ 501    Flat     TempoCrosDly   D54>W
    Tenor Growl AF1    VCM EQ 501    Flat     TempoCrosDly   D63>W

The Insert A effect is the VCM multi-band EQ. The EQ curve is flat, so the EQ is not coloring the sound at all. The Insert B effect is a tempo cross delay. The dry/wet mix is set conservatively (D54>W) or just plain off (D63>W). The system CHORUS effect is not applied and the system REVERB is a nice REV-X reverb.

The effect programming on the PSR-S950 is a little more exciting and adds a grittier sound for rock and R&B. The RockSax voice employs a distortion plus delay effect algorithm:

    PSR effect: DISTORTION+ > DST+DELAY1

    Parameter       Value
    --------------  --------
    LCH Delay       250.0 ms
    RCH Delay       300.0 ms
    Delay FB Time   375.0 ms
    Delay FB Level  +16
    Delay Mix       50
    Dist Drive      10
    Dist Output     110
    Dist EQ Low     +3 dB
    Dist EQ Mid     +1 dB
    Dry/Wet         D40>W

Transporting this effect to the MOX, you could assign AMP SIMULATOR 2 to insert A. For insert B, you could stick with the tempo cross delay or you could program a fixed delay instead (e.g., DELAY L,R (STEREO)) using the parameters above. A third possibility is to use the MOX’s COMP DISTORTION DELAY algorithm which combines the distortion and delay into a single effect block.

The S950 GrowlSax voice uses a different distortion plus delay algorithm:

    PSR effect: DISTORTION+ > V_DST S+DLY

    Parameter       Value
    --------------  --------
    Overdrive       14%
    Device          Dist2
    Speaker         Combo
    Presence        6
    Output Level    98%
    Delay Time L    250.0 ms
    Delay Time R    250.0 ms
    Delay FB Time   500.0 ms
    Delay FB Level  +12
    Dry/Wet         D32>W
    Delay Mix       44
    FB High Dump    1.0

Programming options are similar. Set MOX insert A to AMP SIMULATOR 1 and either stay with the tempo cross delay for insert B, or set insert B to a fixed delay algorithm. Or, run everything through the MOX’s COMP DISTORTION DELAY algorithm. Tune the Dry/Wet mix to taste.

Hey, here’s a bonus — the effects for the S950 slapback guitar. This might sound good with a sax, too.

    PSR effect: DISTORTION > V_DIST ROCA

    Parameter       Value
    --------------  --------
    Overdrive       20%
    Device          Vintage
    Speaker         Twin
    Presence        14
    Output Level    66%
    Delay Time      16th/3
    Delay FB Level  +3
    L/R Diffusion   +10ms
    Lag             +0ms
    Dry/Wet         D<W63
    Delay Mix       127
    FB High Dump    1.0

In this case, go with AMP SIMULATOR 1 for MOX insert A. Use either the tempo cross delay for insert B or change insert B to the TEMPO DELAY STEREO algorithm.

Even though I’ve discussed voice and effects programming in the context of the MOX, these techniques all apply to the Motif XS, XF and MOXF, too.

If you would like to know more about Super Articulation voices, then please check out: SA and SA2: Is Motif up to the task? I also saved two informative posts from the Motifator forum about Super Articulation and Expanded Articulation.

Read about Motif XF (MOXF) “Tenor MAX” voice programming. Update: 18 May 2016.

Montage: New waveforms

Well, well. Interesting times, again. Yamaha have now released the Montage Reference Manual and the Data List Manual. Download them from your local support site.

At the same time, the Motif XF is being blown out. Not only have retailers dropped prices, Yamaha itself is saying “Sayonara” with a promotional rebate of its own. If you want a Motif XF, now is a terrific time to buy!

I started the decision making process last weekend by comparing the MOX waveforms against the Motif XF waveforms. To me, new waveforms represent true value — true sonic potential — over a keyboard’s predecessor. Unless MOXF owners want all of the bells and whistles of the Motif XF (e.g., big color display, on-borad sampling, sliders, version 1.5 Real Distortion effects, etc.), they already have the XF waveforms. MOX owners have the older Motif XS factory set, so they might be interested in upgrading to Motif XF. Here is a list of Motif XF waveforms that are not in the MOX:

    CF3 4 layer (vs. MOX 3 layer)
    S6
    Clav4
    Harpsichord2
    Farfisa (Fr)
    Vox (Vx)
    Accordion2
    Accordion3
    Tango Accordian2
    Mussete Accordion
    Steirisch Accordion
    1Coil
    Jazz Guitar
    Pick Rndwound2
    Pick FlatWound
    Finger Rndwound
    Sect Strngs
    Tremolo Strings
    Live Pizzct
    Soft Trumpet
    Trumpet Vib
    Trumpet Shake
    Flugelhorn2
    French Horn Sft
    French Horn Med
    Soprano Sax3
    Alto Sax3
    Tenor Sax2 Soft
    Tenor Sax2 Falls
    Sax Breath
    Piccolo2

After looking over the list, frankly, I’m not motivated (bad pun) to buy an XF. My PSR-S950 does a great job covering these sounds. Plus, at 33.3 pounds (XF) vs. 15.4 pounds (MOX), a Motif XF is likely to remain in the studio, not at the gig.

The Yamaha Montage offers a bigger upgrade thanks to the large built-in waveform memory. Here is my first pass list of new Montage waveforms. I’ll leave it to you to comb through synth and percussion waveforms.

    CFX 9 layer
    S700 3 layer
    EP4 5 layer
    Rd Soft 5 layer
    Rd Hard 4 layer
    Rd73 5 layer
    Rd78 5 layer
    Rd KeyNoise
    Wr1 3 layer
    Wr2 4 layer
    Wr3 5 layer
    Wr KeyNoise
    Clav5 3 layer
    Clav KeyNoise
    CP80 5 layer
    CP80 KeyOff
    Vibraphone3
    Motor Vibes
    Tonewheel1 Fast/Slow
    Tonewheel2 Fast/Slow
    Tonewheel3 Fast/Slow St
    Tonewheel4 Fast
    Tonewheel5 Fast
    Tonewheel6 Fast
    SctAcc Mussete
    SctAcc
    Acc Key On/Off
    Nylon2
    Flamenco
    Steel2
    Steel3
    TC Cln Pick
    TC Cln Fing
    Acoustic2 (bass)
    Violin2 1st St
    Violin2 2nd St
    Viola2 St
    Cello2 St
    Celtic Violin
    US Strings
    Violins 1st
    Violins 2nd
    Violas
    Cellos
    ContBasses
    CelticHarp
    Trumpet 3
    Piccolo Tp
    Trombone 3
    Bass Trombone
    French Horn2
    Euphonium
    BrassSect3
    BrassSect3 Acc/Doits/Shake/Falls
    Trumpets1
    Trumpets2
    Trombones1
    Trombones2
    FrHorns2
    FrHorns3
    Clarinet2
    Clarinet3
    Oboe3
    Oboe4 NV/Stac
    Bassoon2
    Bassoon3
    Flute3
    Flute4 NV/Stac/Flutter
    Piccolo3
    Piccolo4 NV/Stac
    Low Whistle
    High Whistle
    Boys Choir
    Gospel Choir
    Syllables
    ScatCycle
    LatinCycle

Yamaha really upped the ante with new acoustic and electric piano samples. Yamaha have been promoting these improvements and rightfully so. I can’t wait to try these out. Jazzers will be glad to see the new vibraphone samples, too.

Tonewheel organ got a modest upgrade. I’ll reserve judgement until I can hear and play the Montage. The tonewheel samples have fast and slow variants, so the Leslie is probably sampled in. Not always a good sign, but, hey, I’m listening. A couple of more accordions round out the keyboard additions.

Guitars also got a modest upgrade. There are a few more acoustic guitars and two Telecaster variants (pick and finger). At this point, I must mention that all of the new waveforms have 3, 4, 5 or more layers and many articulations. So, even if the list looks short, the new voices should be quite rich and appealing.

Orchestral instruments got a major, major upgrade. As a liturgical musician who relies on these voices heavily, I’m excited. I called out only a few of the available articulations. Musicians who mock up orchestral scores or cover orchestral parts live should definitely take note of the Montage! Surprisingly, there aren’t new pipe organ waveforms. (Is an expansion pack in the works?)

Finally, there are a slew of choir and vocal samples from the Tyros 5. “Syllables” in the list above are all of the zillion duhs, doos, etc. ScatCycle includes the (infamous) scat syllables, but cycles through the syllables for variety. This is already a feature of the Tyros 5.

Given the boost in the orchestra department, I’m interested. I just wish that the Montage weighed about 20 pounds or less. Perhaps I need to wait for the MOXF follow-on in the light weight, mid-price category.

That’s it for now. I might have missed something during the first pass and will correct the list as I learn more about the Montage. At some point, I’ll take a look at Montage effects, too.

Read my initial review of the Montage8. Update: May 10, 2016.

All site content is Copyright © Paul J. Drongowski unless indicated otherwise.

We need “code-able” MIDI controllers!

All MIDI controllers for sale are rubbish!

Eh?

OK, here comes a rant. I’ve been working on two Arduino-based MIDI controllers in order to try out a few ideas for real time control. I’m using homebrew microcontrollers because I need the flexibility offered by code in order to prototype these ideas.

None of the commercial available MIDI controllers from Novation, Korg, AKAI, Alesis and the rest of the usual suspects support user coding or true executable scripts. Nada. I would love it if one of these vendors made a MIDI controller with an Arduino-compatible development interface. Connect the MIDI controller to a Mac or PC running the Arduino IDE, write your code, download it, and use it in real time control heaven! Fatal coding mistakes are inevitable, so provide an “Oops” button that automatically resets program memory and returns the unit to its factory-fresh state.

Commercial MIDI controllers have a few substantial advantages over home-brew. Commercial controllers are nicely packaged, are physically robust and do a good job of integrating keyboard, knob, slider, LED, display, etc. hardware resources into a compact space. Do I need to mention that they look good? Your average punter (like me) stinks at hole drilling and chassis building.

Commercial controllers, on the other hand, stink at flexibility and extensibility. Sure, the current crop of controllers support easy assignment of standard MIDI messages — usually control change (CC), program change (PC), and note ON/OFF. Maybe (non-)registered parameter number messages (RPN or NRPN messages) are supported. System exclusive (SysEx) most certainly is not supported other than maybe a fixed string of HEX — if you’re incredibly fortunate to have it.

The old JL Cooper FaderMaster knew how to insert control values into simple SysEx messages. This is now lost art.

Here are a few use cases for a fully user-programmable MIDI controller.

The first use case is drawbar control. Most tone-wheel clones use MIDI CC messages for drawbar control, but not all. The Yamaha Tyros/PSR “Organ Flutes” are controlled by a single SysEx message. That SysEx message sets everything at once: all the drawbar levels, percussion parameters and vibrato. Drawbar control requires sensing and sending all of the controller’s knob and switch settings in one fell swoop. None of the commercially available MIDI controllers can handle this.

If you’re interested in this project, check out these links: Dangershield Drawbars, design and code.

The second use case is to fix what shouldn’t have been broken in the first place. The Korg Triton Taktile is a good MIDI controller. I like it and enjoy playing it. However, it’s brain-damaged in crazy ways. The function buttons cannot send program change messages! Even worse, the Taktile cannot send a full program change: bank select MSB followed by bank select LSB followed by program change. This makes the Taktile useless as a stage instrument in control of a modern, multi-bank synthesizer or tone module. If the Taktile allowed user scripting, I would have fixed this nonsense in a minute.

The third use case is sending a pre-determined sequence of pitch bend messages to a tone generator. Yes, for example, you can twiddle a controller’s pitch bender wheel (or whatever) to send pitch bend. However, you cannot hit a button and send a long sequence of pitch bend messages to automatically bend a virtual guitar string or to play a convincing guitar vibrato. Punters (like me) have trouble playing good guitar articulations, but we do know how to hit buttons at the right time. Why not store and send decent sounding pitch bend and controller values in real time as the result of a simple button press?

The fourth use case is an example of the “heavy lifting” potential of user code. Many sample players and libraries (like the Vienna Symphonic Library) assign a range of keys to articulations or other methods of dynamically altering the sound of a notes played elsewhere on the keyboard (i.e., the actual melody or chord). I claim that it’s a more natural gesture to control articulations through the keyboard than to reach for a special function button on the front panel. User coding would allow the redefinition of key presses to articulations — possibly playing a different sample or sending a sequence of controller messages.

Let me give you a more specific example, which is an experiment that I have in progress. Yamaha instruments have Megavoices. A Megavoice is selected as a single patch. However, different samples are mapped to different velocity ranges and different key ranges. As such, Megavoices are nearly impossible to play through the keyboard. Nobody can be that precise consistently in their playing.

I’m prototyping a MIDI controller that implements articulation keys to control the mapping of melody notes to the individual Megavoice samples. This involves mapping MIDI notes and velocities according to a somewhat complicated set of rules. Code and scripting is made for this kind of work!

Finally, the Yamaha Montage demonstrates how today’s MIDI controllers are functionally limited. Yamaha have created excitement promoting the “Superknob” macro control. Basically, the Superknob is a single knob that — among other things — spins the parameters which have been assigned to individual small knobs. Please note “parameters” is plural in that last sentence.

Today’s MIDI controllers and their limited configuration paradigm typically allow only one MIDI message to be assigned to a knob at a time. The target VST or whatever must route that incoming MIDI value to one or more parameters. (The controllers’ engineers have shifted the mapping problem to the software developers at the other end.) Wouldn’t it be cool if you could configure a controller knob to send multiple MIDI messages at once from the source? Then, wouldn’t it be cool if you could yoke two or more knobs together into a single macro knob?

If you had user coding, you would be there already.

All site content Copyright © Paul J. Drongowski unless otherwise indicated

Inside the DGX digital pianos

Thanks to SeaGtGruff in the PSR Tutorial Forum, I took a chance to deep dive a few members of the Yamaha DGX portable grand family. The DGX is a “value” line of electronic keyboards offering a digital piano experience at affordable prices.

Polyphony depends on the available processing power and memory bandwidth (i.e., the ability to transfer samples from wave memory to the processing elements).

Here is a small table for some models in the DGX product line. I took a look at the service manual for models with distinctive features, e.g., DSP effects or no DSP effects. The analysis came out rather nice, so I decided to post it here, too.

           Poly Panel XGlite Kits REV CHO DSP IntMem  Processor
           ---- ----- ------ ---- --- --- --- ------  ------------------
DGX-200     32   108   480    12    8   4   0  352KB
DGX-300     32   122   480    12    8   4  38
DGX-500     32   122   480    12    8   4  38         HG73C205AFD SWX00B
DGX-520     32   127   361    12    9   4   0  875KB
DGX-530     32   127   361    12    9   4   0  875KB  YMW767-VTZ  SWL01T
DGX-620     32   127   361    12    9   4   0  875KB
DGX-630     64   130   361    12   29  24 182 1895KB
DGX-640     64   142   381    12   35  44 238 1895KB  R8A02032BG  SWX02
DGX-650    128   147   381    15   35  44 237  1.7MB  R8A02042BG  SWX08
DGX-660    192   151   388    15   41  44 237  1.7MB

Yamaha has several proprietary processors. The least powerful are the SWLs, which are normally used in the entry-level portables. The SWL does not have DSP support for variation/insert effects. Samples are transfered on the same bus as CPU instructions — low bandwidth. SWLs make for inexpensive products, but no DSP effects and relatively low polyphony.

The PSR E-series typically uses SWL01 variants such as the SWL01U in the PSR-E443. It’s interesting that the DGX members using the same SWL01 processor do not have DSP effects. The SWX processors have integrated DSP capability; the SWLs do not.

The SWX family of processors have dedicated buses/memories and a hardware digital signal processor for effects. (I deliberately avoided the acronym “DSP” here to avoid confusion with the way “DSP” is used in arranger terminology.) The SWX08 has three dedicated buses and memories:

  • SHA2 CPU bus and memory (CPU program and data)
  • Wave ROM bus and memory (voice samples)
  • DSP RAM bus and memory (working memory for digital signal processing)

The extra memory and external connections increase cost. However, this is a lot more processing power and memory bandwidth than the lowly SWL!

The SWX00 and SWX02 are earlier members of the family and aren’t used in new designs anymore. It’s too soon to see a service manual for the DGX-660, so any further comment is an educated guess. I suspect an SWX08 operating at a higher clock rate.

The SWX08 is used in the PSR-S750 and the SWX02 is used in the MOX. In both of these cases, the SWX is the main CPU and tone generation is handled by a single SWP51L tone generator chip, not the SWX. Because Yamaha had its own internal IC fab then these products were designed, Yamaha incorporated its own proprietary processor instead of an off-the-shelf Renesas R8. This is an effort to increase Yamaha’s own fab volume. Yamaha may even be using SWX chips in which the processor is good and the DSP is faulty and fused out!

Analysis isn’t complete without looking at wave memory size:

Model   Wave memory                Size         Description
------- -------------------------- ------------ ------------------------
DGX-500 K3N7V402GB-DC10            64Mbit  8MB  Mask ROM 64Mbit (wave)
DGX-530 Lapis Semi MR27V12852L     128Mbit 16MB 8Mx16b P2ROM (prog+wave)
DGX-640 Lapis Semi MR27V12852L     128Mbit 16MB 8Mx16b P2ROM (wave)
DGX-650 Spansion S29GL256S90TFI020 256Mbit 32MB 16Mx16b NOR flash (wave)

Memory size affects the number and quality of the voices. More memory allows more voices, more samples per voice, longer samples per voice, etc. Pianos are especially memory hungry. So, improvements in piano voices usually require significantly more wave memory. SWX wave memory is 16-bits, data parallel.

Now that Yamaha have sold off their IC fabrication capability, they aren’t under the same pressure to use proprietary processors. It’ll be interesting to see if Yamaha adopt ARM for tone generation and/or effects in value product lines. In the Reface line, they have adopted ARM for user interface and control. Yamaha’s Mobile Music Sequencer on iPad has a fairly completely XG engine, so Yamaha certainly aren’t strangers to tone generation on ARM!

If you enjoyed this article, you might also like this overview of the Tyros/PSR arranger family architecture.

Tutorial: Soft synths on Linux and Raspberry Pi

Stepping back a little bit, I realized that my recent series of articles add up to a “Getting started with soft synths on Linux” tutorial. Here are the links:

I hope these articles help you, too. They are a great memory refresher for me.

Eventually, I want to turn the Raspberry Pi into a low cost, stomp box-sized, stand-alone soft synth host — kind of a cheap MIDI-driven tone module that does virtual analog synthesis. I want to run a headless Raspberry Pi — no monitor, no QWERTY keyboard, no mouse. With some clever scripting, I think it should be possible to start up the JACK audio server and a soft synth like amsynth at boot time. The soft synth would listen to a MIDI IN connected to the RPi through a standard USB MIDI interface. One possible option is to add a small touch panel (e.g., Adafruit PiTFT Plus 320×240) for simple user interaction, including system shutdown.

Qsynth and FluidSynth on Raspberry Pi: The basics

The first four articles in this series are a quick guide to getting started with audio and MIDI on Raspberry Pi 2:

  1. Get started with Raspbian Jessie and Raspberry Pi 2
  2. Get started: Linux ALSA and JACK
  3. Raspberry Pi soft synthesizer: Get started
  4. USB audio for Raspberry Pi

Although the articles address Raspbian JESSIE, the HOW-TOs should be able to get you started with pretty much any version of Linux.

I showed how to use a simple monophonic soft synthesizer (amsynth) in part 3. Now, it’s time to move on to a multi-timbral synth: FluidSynth. FluidSynth has a graphical front-end, Qsynth, and I’ll demonstrate Qsynth, too. This tutorial assumes that JACK (and/or ALSA) is properly configured. The second and third articles will help you with configuration.

The Web sites for FluidSynth and Qsynth are:

Please visit these sites to learn about the advanced capacilities that are offered by these programs. You can always consult manual pages while you are working:

    man fluidsynth
    man qsynth
    man qjackctl
    man aplay

or you can request help directly, e.g., fluidsynth --help.

Installation

Installation is a breeze:

    sudo apt-get install fluidsynth
    sudo apt-get install qsynth

These commands should automatically download and install the General MIDI SoundFont. The path name for the GM SoundFont is:

    /usr/share/sounds/sf2/FluidR3_GM.sf2

If you did not get the GM SoundFont by installing Qsynth or FluidSynth, then enter the command:

    sudo apt-get install fluid-soundfont-gm

to install it. If you want a Roland GS-compatible SoundFont, install it with the command:

    sudo apt-get install fluid-soundfont-gs

The General MIDI SoundFont file is about 140MBytes and the GS-compatible SoundFont file is about 32MBytes in size.

FluidSynth

Although you’re most likely to use FluidSynth via Qsynth, it’s worth discussing FluidSynth’s unique capabilities first. Some things can be done quite handily from the command line. The number of FluidSynth’s command line options can be overwhelming, so if you skip to Qsynth, that’s understandable.

FluidSynth is a multi-timbral software synthesizer based on SoundFont 2 specifications. It is a command line application program that accepts MIDI input from either a MIDI controller keyboard or a software MIDI sequencer. FluidSynth needs a SoundFont file containing instrument definitions and samples. It plays the incoming notes using the selected SoundFont instruments. FluidSynth supports sixteen MIDI channels (default). It provides chorus and reverb effects.

There are many SoundFonts available for download from the Web. Two of the best known and widely used SoundFonts are:

  • FluidR3_GM.sf2: A General MIDI sound set
  • FluidR3_GS.sf2: A Roland GS-compatible sound set

The General MIDI sound set is pretty good; don’t let the “General MIDI” label drive you away!

FluidSynth has three main usage modes:

  1. Interactive command mode.
  2. One-liner mode. “One-liner” is my name for this mode of operation.
  3. Server mode.

If you just type fluidsynth on the command line, FluidSynth launches into its interactive mode, i.e., FluidSynth accepts and interpets commands of its own. I won’t go into interactive mode here, but suffice it to say, that you can set parameters, load SoundFont files, etc. using FluidSynth commands. Enter help when you are in interactive mode in order to get information about commands and parameters. Interactive mode is a good way to explore FluidSynth configuration such that you can write out complicated combinations of FluidSynth command line options.

“One-liner mode” (option -i) launches FluidSynth without dropping into its interactive mode. You’re mostly likely to use this mode when launching FluidSynth from a shell script or if you just have a simple job to do from the command line.

One-liner mode means that you need to dive into FluidSynth’s command line options. There are many command line options including:

  • -C, --chorus: Turn chorus ON or OFF
  • -R, --reverb: Turn reverb ON or OFF
  • -K, --midi-channels: Set the number of MIDI channels
  • -j, --connect-jack-outputs: Connect JACK outputs
  • -F, --fast-render: Render MIDI to an audio file
  • -O, --audio-file-format: Audio file format for fast rendering
  • -r, --sample-rate: Set the sample rate
  • -T, --audio-file-type: Audio file type for fast rendering
  • -i, --no-shell: Don’t run in interative mode
  • -S, --server: Start FluidSynth as a server process

A full list of command line parameters is given in the FluidSynth User Manual.

One-liner mode handles two everyday tasks without a lot of GUI hoopla:

  1. Play back MIDI given a list of MIDI files on the command line.
  2. Render a MIDI file to an audio file (fast render).

FluidSynth looks for command line options, followed by a SoundFont file, followed by a list of MIDI files. Enter the following command to play back a MIDI file (“EvilWays.mid” in these examples) through the ALSA audio port such as the 3.5mm stereo jack on the Raspberry Pi 2:

fluidsynth -a alsa -n -i /usr/share/sounds/sf2/FluidR3_GM.sf2 EvilWays.mid

The -a option selects the ALSA audio device, -n suppresses MIDI input, and -i suppresses interactive mode. ALSA should be configured to use the 3.5mm audio jack. (See the second article in this series about ALSA and JACK.)

If you prefer to use JACK instead of vanilla ALSA, start the JACK server running via qjackctl. (See the third article in this series about using JACK with a soft synth.) Then, enter the following command:

fluidsynth -a jack -j -n -i /usr/share/sounds/sf2/FluidR3_GM.sf2 EvilWays.mid

The -a option selects JACK and the -j option tells JACK to connect the audio output of FluidSynth to the system audio output. If you leave out the -j option, JACK will not make the audio connection and you will be left wondering why there isn’t any sound coming from your speakers! You can also make this connection in the qjackctl Connections or Patchbay windows. In practice, if you aren’t getting audio output or MIDI, check your connections in JACK — audio or MIDI connections may be missing.

The image below shows the audio connection from FluidSynth to JACK. (Click on the image to enlarge it to full resolution.) This is a snapshot of the qjackctl Connections window while FluidSynth is playing a MIDI file. The audio connection is broken when FluidSynth is done with playback (i.e., when FluidSynth exits).

qjackctl_fluidsynth

Fluidsynth provides a way to fast render a MIDI file to a digital audio file. “Fast” is a relatively term. Perhaps “non-realtime render” may be a more accurate description. The following command:

fluidsynth -T wav -F EvilWays.wav /usr/share/sounds/sf2/FluidR3_GM.sf2 EvilWays.mid

converts a MIDI file (“EvilWays.mid”) to a WAV format audio file (“EvilWays.wav”). The -T option specifies the file format and the -F option specifies the name of the output file. The rendering process grinds on for a little while, so please be patient. Once you have the audio file, play it back using the ALSA aplay program:

    aplay -D hw:CODEC,0 EvilWays.wav

This example command sends digital audio to the CODEC audio device. Of course, you may use the built-in audio port or some other device. (See part 2 of this series for more examples. These tutorial articles build on each other!)

The way to get a list of audio types (-T) and audio file formats (-O) is confusing. You need to pass “help” to the appropriate command line option. (Grrrrrr.) The command:

    fluidsynth -O help

produces the following output on Raspbian JESSIE:

-O options (audio file format):
   'double','float','s16','s24','s32','s8','u8'

s8, s16, s24, s32: Signed PCM audio of the given number of bits
float, double: 32 bit and 64 bit floating point audio

The command:

    fluidsynth -T help

produces the output:

-T options (audio file type):
  'aiff','au','auto','avr','caf','flac','htk','iff','mat','mpc','oga',
  'paf','pvf','raw','rf64','sd2','sds','sf','voc','w64','wav','wve','xi'

auto: Determine type from file name extension, defaults to "wav"

Finally, server mode is needed when you want to run FluidSynth as a stand-alone server process. Qsynth is more convenient, so I won’t discuss server mode here just to keep things short.

I have to warn you, working with FluidSynth in either interactive mode or one-liner mode is not always smooth. Feedback is limited and you often have to work through rather cryptic error messages. Qsynth makes life much easier and interesting.

Qsynth

Qsynth is a graphical user interface (GUI) for FluidSynth. Qsynth is based on the Qt framework and toolset for user interface design and implementation.

Qsynth is the way to go if you want to use it as a soft synth with a MIDI controller or sequencer. It pairs up rather nicely with QJackControl, too.

We intend to demonstrate Qsynth using an M-Audio Keystation Mini 32 controller. If you’re working along with me, plug a MIDI keyboard controller into an available Raspberry Pi 2 USB port. Launch qjackctl:

    qjackctl &

and start the JACK server by clicking the Start button in the QJackCtl control panel. JACK routes the audio to the selected audio output port. Then, launch qsynth:

    qsynth

Qsynth automatically searches for the JACK server and connects audio to it. Qsynth displays a control panel which resembles an old school MIDI module. The panel knobs control master gain and the reverb and chorus effects. There are also buttons to Restart FluidSynth, to stop stuck notes (Panic), to Reset settings and to view/edit MIDI channel settings (Channels).

qsynth_panel

At this point, you need a MIDI connection from the Keystation (or other MIDI controller) to Qsynth. In the demo, I clicked the Connect button on the QJackCtl panel and made the MIDI connection using the Connections window. (See the image below. Click on the image for full resolution.)

qjackctl_qsynth

Select the Keystation entry on the left and select the FluidSynth entry on the right. Click the Connect button to make the MIDI connection. “FluidSynth” appears as a destination in the right hand column instead of “Qsynth.” Remember, Qsynth is a graphical front-end for a FluidSynth running in the background. The MIDI controller needs to communicate with the soft synth.

Play a few notes on the MIDI controller to make sure that audio and MIDI are working. Then, click the Setup button on the Qsynth front panel. Qsynth displays its Setup window which has four tabs: MIDI, Audio, Soundfonts and Settings. Click SoundFonts to go to the Soundfonts tab.

qsynth_setup

The SoundFonts tab displays the SoundFont files that are currently loaded into Qsynth (FluidSynth). Click on the Open button to load a SoundFont file like:

    /usr/share/sounds/sf2/FluidR3_GS.sf2

Use the Remove button to unload a SoundFont. Click the OK button when you are finished making changes.

If you start Qsynth with the General MIDI SoundFont and play notes on MIDI channel 1, you hear a grand piano voice. Click the Channels button on the front panel in order to change voices. With the Channels window open, double click on a row in the MIDI channel table. Should you prefer contextual menus instead, right click on a row and select Edit in the pop-up menu. This action gets you to the same place: the channel edit window (below).

qsynth_edit_channel

The channel edit window displays a list of available SoundFont voices. Voices are organized and selected in the conventional way, namely, banks and individual programs (voices). Choose a different voice like Strings (General MIDI bank 0, program 48). Qsynth does not change the voice until you click the OK button to confirm the change. If you would like to browse and try voices, check the Preview box. When Preview is enabled, Qsynth temporarily changes the voice, letting you plink away on the controller and hear the voice before changing it (or perhaps just leaving things alone by cancelling).

Click the Quit button on the Qsynth front panel when you’re finished. Then, stop the JACK server using the QJackCtl control panel.

That’s all there is to it!

Copyright © 2016 Paul J. Drongowski