Skip to content

Commit

Permalink
First release of breath expression soundfont. Version 0.0.1
Browse files Browse the repository at this point in the history
  • Loading branch information
louis-barman committed Jul 10, 2021
1 parent 242cf06 commit 84939f9
Show file tree
Hide file tree
Showing 6 changed files with 560 additions and 2 deletions.
90 changes: 88 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,88 @@
# ExpresionSoundFont
Sound Font with expression for use with MIDI wind controllers
# Breath_Expression.sf2

**Version 0.0.1**

---


This SoundFont works well with a MIDI Wind Controller (an Electronic Wind Instrument)
that uses the breath controller #2 (CC2) to set the level of the sound.

> WARNING: This soundfont will not normally work with standard MIDI keyboards
or respond to a MIDI file unless the MIDI breath controller (CC2) is used.

## Download

This soundfont is too large to be included as part of the source code in this GitHub repository
but it is provided on the GitHUb release page. see: https://github.com/louis-barman/breath-expression-soundfont/releases


## About

This soundfont is based on the **MuseScore_General_Full** SoundFont that is
provided in the **musescore-general-soundfont-lossless** package on Debian (Linux).
This soundfont uses all the expression patches that were added to support
Single-Note Dynamics available in MuseScore >3.2.
As these expression patches all use the breath controller (CC2) they also
work very well with a MIDI Wind instrument.

To reduce the size of this soundfont it has been reorganised by removing all
General MIDI patches leaving just the expression patches which have been
renumbered and moved to bank 0.

## MIDI Wind Controller setup

When using a MIDI Wind Controller it is recommended that fluidsynth 2.x
is used and that MIDI Mono (Monophonic mode) is turned on using Control Change #126
(CC126). There is a noticeable improvement in the quality of some of
the sounds with MIDI Mono On which causes the ADSR volume envelopes to be improved
when playing legato.

This soundfont has been tested using FluidSynth version 2.1.1 and the WARBL
MIDI Wind Controller. For the WARBL set Expression to "Send Pressure as CC"
using CC2 for the breath pressure sensor output.

## Expressive Presets

The dynamics of these presets are controlled using MIDI Control Change #2 (CC2),
allowing fluid crescendos and diminuendos while a note is being held. This makes
for much more realistic expression of strings, brass, woodwinds, etc. Note velocity
no longer controls dynamics in these presets, but in some instruments, velocity will
have some effect on the speed of the note attack. In MuseScore, the default (and ideal)
behaviour is for expressive instruments to have their dynamics controlled by sending
identical values to both CC2 and note velocity (the latter only during note-on, naturally).


## SoundFont Compatibility

**Breath_Expression** makes full use of SoundFont 2.01 specification modulators
(particularly in the newer instruments) and requires a player/sampler with robust
support for the standard. To my knowledge, the only SoundFont players that can
accurately play this SoundFont are:

* [MuseScore](https://musescore.org)
* [FluidSynth](http://www.fluidsynth.org/)
* [Sobanth VSTi](https://blog.rosseaux.net/page/e5ca75d98990e33b31dadc78a8df1333/Sobanth)
* Sound Blaster Audigy/Audigy2 hardware SoundFont synth (probably X-Fi as well)

The only SoundFont editors that can play this SoundFont correctly are:

* Creative Vienna SoundFont Studio (requires Sound Blaster or E-MU hardware synth with SoundFont 2.01 modulator support)
* [SWAMI](http://www.swamiproject.org/) (uses FluidSynth)


## Breath Expression Requirements

There are some different requirements when adding a new instrument or editing
an existing one when designing them to be used with a MIDI Wind Controller:

* It is much better to have sound samples without any vibrato because the player
can control the amount of vibrato using their breath.
* Be aware that a MIDI wind instrument may generate very short transient
MIDI notes. This is because the players fingers may not open or
close all the keys at exactly the same time when moving to another note.
The soundfont should be setup to handle these short transient MIDI notes without
introducing any unwanted sounds (pops or squeaks).
* When two notes are played legato on a monophonic wind instrument the
first note does not need to have a decay and the second note does not need
to have an attack so that the sound flows smoothly between the two notes.
58 changes: 58 additions & 0 deletions copyright.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
This Breath_Expression SoundFont uses the same licence as
the MuseScore_General_HQ SoundFont which is reproduce below.


Licence:

MuseScore_General_HQ SoundFont

Original Stereo version (Fluid (R3) SoundFont)
Copyright © 2000-2002, 2008 Frank Wen <[email protected]>
Inclusion into Debian derivatives © 2008 Toby Smithe
Debian packaging © 2018-2020 mirabilos <[email protected]>

Temple Blocks instrument Copyright © 2002 Ethan Winer
Drumline Cymbals (MIT) Copyright © 2016 Michael Schorsch

Fluid (R3) Mono GM SoundFont Copyright © 2014-2017 Michael Cowgill

Splendid Grand piano from AKAI S5000 (verified Public Domain)

Ensemble strings from Versilian Studios Chamber Orchestra (VSCO) 2.1.1
Community Edition (CC0) by Sam Gossner, Simon Dalzell, Elan Hickler/Soundemote

Marching Cymbals: open crash samples from Versilian Community Sample Library
https://github.com/sgossner/VCSL (CC0) by Sam Gossner

MuseScore Drumline (MDL) samples (CC0) by S. Christian Collins & Amir Oosman

Adaptation for MuseScore_General Copyright © 2018-2020 S. Christian Collins

Fluid was constructed in part from samples found in the public
domain that I [Frank Wen] edited/cleaned/remixed/programmed and
largely from recordings of my own and in conjunction with the
people below who helped along the way: Suren M. Seron,
Scott Hanan, Steve Aupperle, Chris Gillman, Alex Taubr,
Chris Prola, Andrew Klenk, Winfried Hubbe, Dylan, Tim, Gort,
Uros Katic, Ethan Winer (http://www.ethanwiner.com)

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
,louis,rocket-spin,09.07.2021 17:30,file:///home/louis/.config/libreoffice/4;
124 changes: 124 additions & 0 deletions original-musescore-docs/MuseScore_General_HQ_Readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
# MuseScore_General_HQ.sf2

**Version 0.1.9**

---

Please see **MuseScore_General_HQ_License.md** for authorship and license information.

The purpose of this README is to provide useful information on instruments contained within MuseScore_General_HQ. It is currently a work-in-progress.

## About

This is a fork of FluidR3Mono_GM.sf2, with many samples (eventually) being replaced and/or reprogrammed. The SoundFont is currently a work-in-progress. Detailed information on presets and sample sources used can be found in "MuseScore_General_HQ_Sample_Sources.csv". All instruments without attribution are still using samples from FluidR3Mono.

## SoundFont Compatibility

**MuseScore_General_HQ** makes full use of SoundFont 2.01 specification modulators (particularly in the newer instruments) and requires a player/sampler with robust support for the standard. To my knowledge, the only SoundFont players that can accurately play this SoundFont are:

* [MuseScore](https://musescore.org)
* [FluidSynth](http://www.fluidsynth.org/)
* [Sobanth VSTi](https://blog.rosseaux.net/page/e5ca75d98990e33b31dadc78a8df1333/Sobanth)
* Sound Blaster Audigy/Audigy2 hardware SoundFont synth (probably X-Fi as well)

The only SoundFont editors that can play this SoundFont correctly are:

* Creative Vienna SoundFont Studio (requires Sound Blaster or E-MU hardware synth with SoundFont 2.01 modulator support)
* [SWAMI](http://www.swamiproject.org/) (uses FluidSynth)

## Presets

### General MIDI Presets

**MuseScore_General_HQ** is compatible with the [General MIDI standard](https://en.wikipedia.org/wiki/General_MIDI) with some additional presets from the [Roland GS standard](https://en.wikipedia.org/wiki/Roland_GS) as well.

### Fluid r3 Additional Drum Kits

Additional drum kits have been inherited from **Fluid r3**, beyond the kits specified in the [Roland GS standard](https://en.wikipedia.org/wiki/Roland_GS). It is possible that some of these kits will be removed in the future when new drum samples are added.

### Instrument Variations

In addition to the General MIDI presets, further instrument variations can be found on banks 20 and above, utilizing identical preset numbers so that General MIDI preset fallback can occur if ever the instrument becomes no longer available on the higher bank number. In other words, if you have a track assigned to bank #40, preset #48 "Celli Fast", then try to play it using a different General MIDI device or SoundFont, the preset will fall back to bank #0, preset #48 "Fast Strings" instead, and playback will at least sound somewhat correct.

### MuseScore Marching Percussion

The following marching percussion presets exist in the percussion bank (bank 128):
* 56: Marching Snare
* 57: OldMarchingBass
* 58: Marching Cymbals
* 59: Marching Bass
* 95: OldMarchingTenor
* 96: Marching Tenor

These presets are used for marching percussion support in MuseScore and do not conform to GM layout.

### Expressive Presets

As of version 0.1.5, **MuseScore_General_HQ** features expressive variants of all sustained presets, indicated by "Expr." at the end of the preset name. The dynamics of these presets are controlled using MIDI Control Change #2 (CC2), allowing fluid crescendos and diminuendos while a note is being held. This makes for much more realistic expression of strings, brass, woodwinds, etc. Note velocity no longer controls dynamics in these presets, but in some instruments, velocity will have some effect on the speed of the note attack. In MuseScore, the default (and ideal) behavior is for expressive instruments to have their dynamics controlled by sending identical values to both CC2 and note velocity (the latter only during note-on, naturally).

The expressive presets exist on higher bank numbers but use the same preset number as their non-expressive defaults. You can see what bank numbers the expressive presets use in column #2 ("Expr. Bank #") of the included **MuseScore_General_HQ_Sample_Sources.csv** file. The general rule is as follows:

* Bank 0 expressive presets are on Bank 17
* Bank 8 expressive presets are on Bank 18
* Bank 20-126 expressive presets are one bank higher (e.g., Bank 20 Expr. presets are on Bank 21)

### VSCO2 Ensemble Strings

**MuseScore_General_HQ** features an ensemble strings library based on samples from [VSCO 2.1.1 Community Edition](http://vis.versilstudios.net/vsco-community.html). This library includes unique sections for Violins, Violins 2, Violas, Celli and Basses, the presets for which can be found on banks 20-32. The bank:preset arrangement is such that proper GM fallback can occur (e.g., if a user selects "020:048 Violins Fast" for a staff but plays the score back later using a different SoundFont, they will hear the fallback preset "000:048 Strings Fast" instead). The default GM strings presets on bank 0 offer a more homogenized sound, with the Violins, Violas, Celli and Basses spread across the entire key range.

Each instrument section contains the following articulations:

* **Fast:** Sustained notes with fast attack
* **Slow:** Sustained notes with slow attack
* **Tremolo:** Tremolo, sustained notes
* **Pizzicato:** Plucked strings

The default sustained articulation for use in MuseScore should be "Fast", so that notes in fast passages will be audible. "Slow" can be used where a more lyrical tone is desired.

Some additional articulations have been created, but are not yet included in **MuseScore_General_HQ**:

* **CC2:** Sustained with note volume & tone controlled by CC2, and note attack controlled by key velocity
* **Staccato:** Short bowstrokes
* **Trem CC2:** Tremolo, sustained with note volume & tone controlled by CC2

The Staccato presets will only be added if there are enough SoundFont instrument generators left after upgrading all of the other instrument samples, potentially along with second viola and cello sections as well. The "CC2" presets cannot currently be used by MuseScore, but future versions may be able to incorporate a fluid expression mode (e.g., crescendo on a single note). I am designing all of the new expressive instruments to be able to support this feature. See: https://www.youtube.com/watch?v=TlhB6RBWIJA. Any developers wishing to implement such support in MuseScore should contact me, [S. Christian Collins](mailto:[email protected]), for details.

#### Preset List (bank:preset)

- 000:044 - Strings Tremolo
- 000:045 - Strings Pizzicato
- 000:048 - Strings Fast
- 000:049 - Strings Slow
- 020:044 - Violins Tremolo
- 020:045 - Violins Pizzicato
- 020:048 - Violins Fast
- 020:049 - Violins Slow
- 025:044 - Violins2 Tremolo
- 025:045 - Violins2 Pizzicato
- 025:048 - Violins2 Fast
- 025:049 - Violins2 Slow
- 030:044 - Violas Tremolo
- 030:045 - Violas Pizzicato
- 030:048 - Violas Fast
- 030:049 - Violas Slow
- 040:044 - Celli Tremolo
- 040:045 - Celli Pizzicato
- 040:048 - Celli Fast
- 040:049 - Celli Slow
- 050:044 - Basses Tremolo
- 050:045 - Basses Pizzicato
- 050:048 - Basses Fast
- 050:049 - Basses Slow

#### Additional Details

* Each instrument's tone changes gradually across the entire velocity range. VSCO2 only provides samples at two dynamic levels (in some cases only one), so the samples use pseudo-crossfading to provide a smooth transition from PP to FF.
* The second violin section ("Violins2") uses the same samples as the first, but they are manipulated using sample offset and other tricks so that they can play in unison with the first section without the usual sample doubling effect.
* Realtime sample manipulation is performed to achieve variable note attacks for each instrument group. The violin samples, for example, all have a slow attack, so I used sample offset and layering of the staccato samples to create a faster attack for the "Violins Fast" preset. Doing this without sounding artificial is *extremely* difficult, but I think I have it about as realistic as possible using these samples. As with any orchestral sample library, a good reverb plugin will help everything sound more natural.
* I have made many changes to the original VSCO2 samples, including:
* All samples were normalized.
* Loops were created for all sustained and tremolo samples.
* Created new timestretched samples to extend the upper range of all instruments (particularly needed for the violins).
* There was no bass section in the VSCO 2 samples (only solo contrabass), so I combined solo bass samples to create a small section.
* Many noises have been removed/reduced (scrapes, bangs, notes from instrument in neighboring room).
* Pitch drift on some samples has been fixed.
Loading

0 comments on commit 84939f9

Please sign in to comment.