No release in over 3 years
program/play (MIDI) music from your code.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Runtime

~> 1.17
 Project Readme

FiddleFluidsynth

A fiddle (ffi is partially used) wrapped libfluidsynth. We can program/play the music from our code with this.

To experiment with that code, run bin/console for an interactive prompt.

Requirements

libfluidsynth is required.

In macOS, do brew install fluidsynth and make symbolic link default.sf2 in /opt/homebrew/share/fluid-synth/sf2/ for the default SoundFont.

As for the default soundfont, I recommend GeneralUser GS 2.0.2 (GeneralUser-GS.sf2), created by S. Christian Collins. We can download it from his site. This package includes some MIDI files for demo.

FluidR3 GM soundfont by Frank Wen and Toby Smithe is also great. We can download them on Musical Artifact.

Other soundfont resources are listed in the FluidSynth User Manual Wiki, SoundFont chapter.

Developed Environment

Developed/Tested environments are as follows:

  • libfluidsynth 2.4.6
  • Ruby 3.3.0
  • macOS 15.5

Installation

Install the gem and add to the application's Gemfile by executing:

bundle add fiddle_fluidsynth

If bundler is not being used to manage dependencies, install the gem by executing:

gem install fiddle_fluidsynth

Usage

See examples/ directory.

Technical info

fiddle is used to wrap and ffi is partially used (for callback functions).

The Structure of classes/modules is:

  • FiddleFluidSynth (class) top.
    • (class/)instance methods are defined. These are almost one-to-one mapping with C-functions, but little bit ruby-fied.
    • utility methods for shortcuts.
  • FiddleFluidSynth::C (module) direct mapping for C-functions.

Ruby-fication is actually not enough and work in progress...

Attention on callback functions

If we use the callbacks of FiddleFluidSynth, including each_something{ ... }- code blocks, we have to have special attention to our codes.

Because the code blocks of them are out of our Ruby code once, we could not catch Exceptions correctly.

I highly recommend that code blocks for the callbacks should be short as far as we can, or use methods which are tested well.

and also do FiddleFluidSynth.#raise_error_in_callback after some main routine to get the errors in callback function.

  • Settings

    • fluid_settings_foreach()
    • fluid_settings_foreach_option()
    • =>#each_setting(), #each_option_of()
  • Synthesizer

    • fluid_synth_tuning_iteration_start(), fluid_synth_tuning_iteration_next()
    • Not Yet.
  • SoundFont

    • fluid_sfont_iteration_start(), fluid_sfont_iteration_next()
    • =>#each_preset()
  • callback sample programs are example/{ffs_fx, ffs_metronome, ffs_arpeggio, ffs_midiplay}.rb.

  • each_* sample programs are example/{presets-each, settings}.rb, etc.

libfluidsynth and other MIDI/SoundFont-related apps and resources

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake test to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and the created tag, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/mephistobooks/fiddle_fluidsynth.

License

The gem is available as open source under the terms of the MIT License.

DISCLAIMER

SoundFont® is a registered trademark of Creative Technology Ltd.


end.