A Realistic FM Piano Patch

By Thor Zollinger, writer/musician/engineer at large.

Ever since the first synthesizer was built developers have attempted to create realistic piano sounds, with little success at first. All of the different Electric Pianos we have now are a testament to how many attempts have been made. Eventually developers resorted to using sample recordings instead of modular components in their synthesizer designs. That’s when synthesizers started sounding like real Pianos.


Frequency Modulation (FM) synthesizers were no exception, many people have tried to create realistic piano patches using FM over the years.  In forums on the topic, most people have decided that a realistic FM Piano patch will never exist.  I disagree because I found one that actually sounds quite good, which inspired me to program one myself.  It’s a very obscure patch, though.  It resides on the Yamaha FS1R, a relatively unknown FM synthesizer due to the timing of it’s release in 1998 and it’s low sales.  The FS1R came out at the same time as the surge of new sample based synthesizers took off, when musicians were moving away from FM.  It’s called simply the ‘Upright Piano’ Performance.  To me it’s leaning slightly towards a Harpsichord, and in the mid-range there is one octave that has a distinctive electric piano tone to it.  My new one is better in that range, and it’s also brighter overall.

The patch programmer, Manny Fernandez, has re-worked his Piano patch again and again over the years and has released a new one on the Yamaha Synthesizer website for the Yamaha Montage.  It’s an FM-X patch which uses 8 Parts for a total of 64 Operators!  That’s massive!  It sounds fantastic too.  There is a problem with polyphony with this technique, though.  Looking closely at his patch, he uses 6 parts in the main playing range of the keyboard.  Each Element takes up one note of polyphony.  So, since the Montage has 128 note FM polyphony, divided by 6 = 21 notes total.  A piano piece which uses the sustain pedal will run out of polyphony quick, and cut off some of the notes harming the continuity of the piece.  After watching his videos I also concluded his patch was way too complicated for me to follow.  I decided I would see if I could put a simpler one together on my FS1R (it has FM-X just like the Montage and 32 note polyphony) and only use one Part for a total of 8 Voiced Operators.  Pretty ambitious, but it is possible.  You just have to be extremely efficient.

Here are several demos of the new Piano patch I came up with on my Yamaha FS1R.  It sounds pretty good!  I still have some adjustments to make on it, but it does only use one Part/8 Operators.  Ported over to the Montage it would have 128 note polyphony!  The patch is a bit too bell like in the top most octave though, I haven't added in a noise based thunk for the key action sound, and the top octaves are a bit too loud compared to the low ranges.  I'll get those problems fixed soon.  I picked a variety of piano pieces, some slow, some fast, to demo a wide range of musical styles over the entire range of the keyboard.  Let me know what you think...

               Dancing_Fool_1922.mp3                             Bach_Invention_8_2.mp3

               Kapustin_Toccatina.mp3                             Moonlight Sonata.mp3


 Download  Javelin FS1R ZGrndPiano 4.0 KB 


I first located a set of recordings of a Piano at several notes up and down the keyboard so I could hear what was going on, and piped the sound into a spectrum analyzer on my computer.  Using a spectrum analyzer is really the key to programming an FM synthesizer.  I discovered the Piano actually has several distinct voices.  The lowest three octaves on the Piano are very different harmonically from the rest of the keyboard.  In these bottom octaves the second harmonic is dominant, and the harmonics are messy down around C0 but it gets cleaner at C1 and C2, and much more consistent.  I decided to model the C1-C2 range and extend it down to C0.  The thick, copper-wound bass strings have a more metallic timbre than the rest of the strings, giving us a deep metallic dissonance on the bottom end with lots of harmonics. 








The middle register of the Piano uses two medium weight strings per note, and the highest registers use three thin strings per note.  The harmonics the strings create from about C3 and up are very similar, getting thinner and thinner in harmonics as you go up the keyboard.  You can’t see it on the plot, but if you measure the actual frequency of each harmonic peak and compare them in a spreadsheet, the harmonics get sharper and sharper as you go higher.  This is called ‘Inharmonicity’, which I’ve discussed in more detail in my paper on the Yamaha VP1 synthesizer. There isn’t a way currently to model this in FM-X so I selected one set of out-of-tune-sharp harmonics down around C4 and modeled those.  I’m going to try and talk Yamaha into expanding the Frequency Key-Tracking parameter above 99 to 127 so we can model this characteristic of string instruments in FM-X.  I just found out the Kodamo Essence has this capability!  So that’s the next synth I’ll to port this patch to.  The Essence is a brand new, modern FM synth, with a massive 1800 operator (300 note x 6 operators per voice) 16 channel capability, an easy touch-screen interface, and importable wave forms.  I’ll have something similar to FM-X up and running on it in no time!


Before we get in too deep I need to talk about Effects for a moment.  Modeling the Piano well takes a lot Reverb and Chorus.  This makes perfect sense if you think about it.  Reverb is needed to match the surroundings, pianos are generally in nice open spaces where there is a large amount of Reverb.  Chorus is a different animal entirely, it perfectly matches the needs of a piano patch.  When you look inside a piano what do you see?  Lots and lots of strings, a multiple chorus of strings for each note.  I have the Chorus Effect on my FS1R turned up to 45 out of 100, and Reverb set to 60.  It works so well I just cranked it up and never turned it off.

The algorithm I used changed as the patch developed, but I ended up using #19 which looks like this:

   Algorithm 19

OK.  Now that we have an idea of what harmonics need to be modeled from the plots above, we can start working on the patch.  I started on the upper end since it encompasses most of the keyboard.  The sustain sound looks a lot like the ALL1 waveform, so I started with that for operator #1.  

 For Op1 I ended up using an ALL1 at a ratio of 1.0, detuned sharp +3, skirt 4, level 99.  This operator uses a piano-shaped level envelope, a 0 5-99 60-65 60-0 0-0.  This matches the sharpness of the harmonics at about C3 on the keyboard.  When I tried a sharper setting it sounded too out of tune in the lower C3 to C4 range, like a honky tonk piano, not like a higher quality grand piano.

As a feature, harmonics 4, 7, and 12 stick out.  The set are really more 4, 8, 12.  In testing, the 7th harmonic made the patch sound badly out-of-tune so I used harmonic 8 instead.  It sounds better overall that way.  I could have used an ALL1 at 4.0, sharp +4, skirt 4, level 70 for these, but I used Unvoiced operators on my FS1R instead to conserve operators.  These operators are all sharp just a bit, and all use the same piano-shaped level envelope, a 0 5-99 60-65 60-0 0-0 0.  I also quieted them down on the top end, with Level Scaling set to -5 (these are Unvoiced operators, slightly different from the Voiced).  This has the sustain sound of a piano pretty well nailed down.

I also faded out the sustain portions of the sound in the upper registers, Op1 and the harmonics 4,8,12.  If you look inside a piano you’ll see that the top octave and a half strings don’t even have any dampers.  The strings are so short and so tight they don’t really ring.  There is no sustain sound, only the note strike.  There is also a dull thunk that accompanies the upper register, but I didn’t add in any additional noise to model it.  There already is a natural thunk in the attack.  I suppose I could add that part of the sound in, I still have 5 Unvoiced operators left.

All of the operators have the Level/Velocity sensitivity set to +7, except for Op3 and Op4 mentioned in the text below.

  The next most dominant feature of a Piano is the sharp attack on the start of the note, as the hammer strikes the strings.  Operator #2 does this using another ALL1 waveform.  This one is an ALL1 at 1.0, sharp +5, skirt 4, level 99.  The envelope is an immediate strike, a little decay, then off, 0 0-99 55-90 38-0 0-0.

Amazingly, the patch so far very closely models a piano over most of the keyboard, and we’ve really only used three operators.  It starts to lose the closeness on the top-most notes, but the Frequency Key Scaling won’t let me fix that.  FreqScaling needs to go higher than 99 in order to pull that off, which is what I’m going to try and talk the Yamaha Engineers into adding to the Montage.  It’s such a simple fix, I can’t see any reason why they wouldn’t.  It would also let me model Yamaha VP1 patches on the Montage, so I have two good reasons for them to alter the parameter.  I’ll port this patch over to the Montage in a few weeks since I have a Montage to use, courtesy of a good friend of mine, Ben Varadi.  Thanks Ben!  

If you look online about tuning a piano you’ll find references to the Railsback curve.  A piano is tuned sharp on the high end, even temperament in the middle, and flat on the low end of the keyboard.  You’ll notice that I’ve tuned all my high-end operators sharp, and the low-end operators in the next section flat to match this tuning scheme.

PATCH DETAILS – C2 and Lower

Looking at the C0 through C2 plots (and other notes in that range) you see that the second harmonic is dominant on most of the notes.  Then, we get mixed up harmonics above this frequency with peaks from 9 to about 15 depending upon the note you play.  Lower notes lean towards 9 while higher notes lean towards 15.  I wasn’t quite sure what to do with this, so I set up a grouping at about 10 and blended it in as you play lower and lower notes.  It actually works pretty well, but gives a little bit of an out-of-tune sound to the overlap section of the keyboard.  It adds a bit of realism into the patch.  I could remove the effect by lowering the detuning a bit, and make the patch a little closer to a well-tuned concert grand.

  A 2:1:8 stack gives you harmonic groupings at 2, 10, and some low amplitude harmonics at 18.  The harmonics are centered on the Carrier at 2.0, then a fan is created around 2 at a spacing of 1.0, then the grouping is copied over to 2+8=10 and 10+8=18 by the third Modulator.  Details on how FM really works is covered in my ‘FM Programming Guide’ on my website.

 Download  FM Programming Guide v4 9.43MB pdf 

I used sine waves on these, a more standard FM technique rather than the more complex ALL1 waveforms.  Operator #5 is a sine at 2.0, level 80, which fades out entirely above G1.  The FreqScaling parameters are G1, R-side scaling of -99 Linear to make it fade out rapidly.  Operator #4 is a sine at 1.0, detuned -1, level 80, with the same FreqScaling.  Operator #3 is a sine at 7.98, detuned +6 to get it closer to 8.0, level 80, also the same FreqScaling.  The level envelope is a similar piano-shaped envelope like I used before for the carrier of these 2:1:8 stacked operators, the other two are almost flat-topped with no variation and have no LevelVelocity at all.  I must confess though, this stack of operators is almost straight out of one of the best DX7 piano patches out there, and the same stack Manny used in the original FS1R piano patch on the bottom end.

 In this low range, there is more dissonance than in the upper octaves.  I achieved this by adding in another set of harmonics using an ALL2 wave form.  Operator #8 is an ALL2 at 1.0, detuned -3 (different from the other operators to add dissonance) skirt 5, level 80, with Freq Scaling parameters to make it fade out at C2, R-side -99 linear.  The envelope is the same piano one I’ve used before.  I also modulated it with operator #7 at 1.0, level 80, flat-topped non-changing envelope just for good measure to add in a few more odd harmonics into the mix.  I don’t know if it was necessary, but that’s what I did. 

Operator #6 never got used, so I may have to think of something useful for it to do just for fun.  On the Montage, I’ll use it (and a slightly different algorithm, #35) to replace the Unvoiced operators.  I didn’t use the Feedback in this patch either.


So there you go, a well mannered Piano patch that sounds closer to a real piano than most of the other FM ones you’ll find, and it only uses 8 voiced operators!  Listen to the demo songs and  please let me know what you think, I’ve spent so much time listening to this patch trying to get it to work that I can’t hear it objectively anymore.  When I get a patch close, I use a wide set of midi songs to listen to the patch over and over, making adjustments to balance out the levels and harmonics.  Every time I step away for a day now and come back to it I hear things I want to fix.  I had to force myself to stop adjusting it and leave it alone.

Most people won’t actually use this patch as an acoustic Piano, though.  Most of us have superb sample-based Piano patches in our other keyboards.  The CF70 Concert Grand Piano patch on my Motif-XF is phenomenal.  So, I guess the point I wanted to make with this patch is that an FM synthesizer CAN sound like ANYTHING.  You are only limited by your ability to program the darn thing.