2009-04-20 21:10:55 +00:00
/*!
2017-10-30 18:50:58 +00:00
\mainpage FluidSynth 2.0 Developer Documentation
2009-04-20 21:10:55 +00:00
\author Peter Hanappe
\author Conrad Berhörster
\author Antoine Schmitt
\author Pedro López-Cabanillas
2009-10-22 07:06:26 +00:00
\author Josh Green
2010-08-25 23:18:18 +00:00
\author David Henningsson
2017-09-03 08:05:12 +00:00
\author Tom Moebert
2018-12-30 11:42:00 +00:00
\author Copyright © 2003-2019 Peter Hanappe, Conrad Berhörster, Antoine Schmitt, Pedro López-Cabanillas, Josh Green, David Henningsson, Tom Moebert
2019-08-17 16:00:29 +00:00
\version Revision 2.0.6
\date 2019-08-17
2009-04-20 21:10:55 +00:00
2017-07-12 15:45:23 +00:00
All the source code examples in this document are in the public domain; you can use them as you please. This document is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ . The FluidSynth library is distributed under the GNU Lesser General Public License. A copy of the GNU Lesser General Public License is contained in the FluidSynth package; if not, visit http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt or write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
2009-04-20 21:10:55 +00:00
\section Abstract
<a href="http://www.fluidsynth.org">FluidSynth</a> is a software synthesizer based on the <a href="http://en.wikipedia.org/wiki/SoundFont">SoundFont 2</a> specifications. The synthesizer is available as a shared object that can easily be reused in any application that wants to use wave-table synthesis. This document explains the basic usage of FluidSynth. Some of the more advanced features are not yet discussed but will be added in future versions.
\section Contents Table of Contents
2017-09-03 08:05:12 +00:00
- \ref Disclaimer
- \ref Introduction
2019-08-17 16:01:01 +00:00
- \ref NewIn2_0_6
2019-04-17 18:07:40 +00:00
- \ref NewIn2_0_5
2018-12-20 16:44:08 +00:00
- \ref NewIn2_0_3
2018-10-09 15:52:33 +00:00
- \ref NewIn2_0_2
2017-10-30 18:50:58 +00:00
- \ref NewIn2_0_0
2009-04-20 21:10:55 +00:00
- \ref CreatingSettings
- \ref CreatingSynth
- \ref CreatingAudioDriver
- \ref UsingSynth
- \ref LoadingSoundfonts
- \ref SendingMIDI
- \ref RealtimeMIDI
- \ref MIDIPlayer
2018-04-04 16:45:24 +00:00
- \ref FileRenderer
2011-02-20 23:45:00 +00:00
- \ref MIDIPlayerMem
2009-04-20 21:10:55 +00:00
- \ref MIDIRouter
- \ref Sequencer
- \ref Shell
2018-07-16 10:10:07 +00:00
- \ref Multi-channel
2009-04-20 21:10:55 +00:00
- \ref Advanced
\section Disclaimer
2019-04-13 12:52:45 +00:00
This documentation may be partly incomplete. As always, the source code is the final reference.
2009-04-20 21:10:55 +00:00
SoundFont(R) is a registered trademark of E-mu Systems, Inc.
\section Introduction
What is FluidSynth?
- FluidSynth is a software synthesizer based on the SoundFont 2 specifications. The synthesizer is available as a shared object (a concept also named Dynamic Linking Library, or DLL) that can be easily reused in any application for wave-table synthesis. This document explains the basic usage of FluidSynth.
- FluidSynth provides a Command Line Interface program ready to be used from the console terminal, offering most of the library functionalities to end users, among them the ability of render and play Standard MIDI Files, receive real-time MIDI events from external hardware ports and other applications, perform advanced routing of such events, enabling at the same time a local shell as well as a remote server commands interface.
- FluidSynth is an API (Application Programming Interface) relieving programmers from a lot of details of reading SoundFont and MIDI events and files, and sending the digital audio output to a Sound Card. These tasks can be accomplished using a small set of functions. This document explains most of the API functions and gives short examples about them.
- FluidSynth uses instrument samples contained in standard SF2 (SoundFont 2) files, having a file structure based on the RIFF format. The specification can be obtained here: http://connect.creativelabs.com/developer/SoundFont/Forms/AllItems.aspx but most users don't need to know any details of the format.
2010-08-25 23:18:18 +00:00
- FluidSynth can easily be embedded in an application. It has a main header file, fluidsynth.h, and one dynamically linkable library. FluidSynth runs on Linux, Mac OS X, and the Windows platforms, and support for OS/2 and OpenSolaris is experimental. It has audio and midi drivers for all mentioned platforms but you can use it with your own drivers if your application already handles MIDI and audio input/output. This document explains the basic usage of FluidSynth and provides examples that you can reuse.
2009-04-20 21:10:55 +00:00
- FluidSynth is open source, in active development. For more details, take a look at http://www.fluidsynth.org
2019-08-17 16:01:01 +00:00
\section NewIn2_0_6 Whats new in 2.0.6?
- the MIDI player did not emit any audio when calling fluid_player_play() after fluid_player_stop()
2019-04-17 18:07:40 +00:00
\section NewIn2_0_5 Whats new in 2.0.5?
- fluid_synth_process() omitted audio samples when called with arbitrary sample counts that were not a multiple of fluid_synth_get_internal_bufsize()
- fluid_synth_sfunload() was not releasing sample buffers of SoundFont3 files if <a href="fluidsettings.xml#synth.dynamic-sample-loading">"synth.dynamic-sample-loading"</a> was set to FALSE
2018-12-20 16:44:08 +00:00
\section NewIn2_0_3 Whats new in 2.0.3?
2018-12-29 16:34:36 +00:00
- fix incorrect behaviour of fluid_sample_set_sound_data()
2018-12-20 16:44:08 +00:00
- add missing getters for midi events:
- fluid_midi_event_get_text()
- fluid_midi_event_get_lyrics()
2018-10-09 15:52:33 +00:00
\section NewIn2_0_2 Whats new in 2.0.2?
- fluid_synth_error() has been deprecated, use fluid_set_log_function() to interfere log messages
2017-10-30 18:50:58 +00:00
\section NewIn2_0_0 Whats new in 2.0.0?
2017-09-21 12:33:28 +00:00
2018-05-18 14:28:09 +00:00
FluidSynths major version was bumped. The API was reworked, deprecated functions were removed.
2017-09-21 12:33:28 +00:00
2018-05-18 14:28:09 +00:00
<strong><span style="color:red">Important changes that may not result in a compilation error but may cause your app to misbehave:</span></strong>
2017-09-21 12:33:28 +00:00
2017-10-06 08:59:41 +00:00
- all public \c fluid_settings_* functions that return an integer which is not meant to be interpreted as bool consistently return either FLUID_OK or FLUID_FAILED
2019-01-11 14:19:59 +00:00
- fluid_settings_setstr() cannot be used to set integer (toggle) settings with "yes" or "no" values anymore. Use fluid_settings_setint() instead, for example: <br /><code>fluid_settings_setint(settings, "synth.reverb.active", 0)</code> instead of <code>fluid_settings_setstr(settings, "synth.reverb.active", "no")</code>
2018-05-17 13:36:38 +00:00
- explicit client unregistering is required for fluid_sequencer_register_client() and fluid_sequencer_register_fluidsynth()
2018-05-18 14:28:09 +00:00
- all public functions consistently receive signed integers for soundfont ids, bank and program numbers
- use unique device names for the "audio.portaudio.device" setting
2018-06-23 12:26:41 +00:00
- fluid_synth_process() received a new more flexible implementation, but now requires zeroed-out sample buffers
2018-05-18 14:28:09 +00:00
<strong>Other changes in FluidSynth 2.0.0 concerning developers:</strong>
- all public \c delete_* functions return void and are safe when called with NULL
2017-10-07 13:21:38 +00:00
- the shell command handler was decoupled internally, as a consequence the param list of new_fluid_server() and new_fluid_cmd_handler() was adapted
2019-01-11 14:19:59 +00:00
- \c fluid_settings_set* functions no longer silently register unknown settings but return an error instead
2017-12-27 16:55:04 +00:00
- reverb: roomsize is now limited to an upper threshold of 1.0 to avoid exponential volume increase
2019-01-11 14:19:59 +00:00
- rename \c fluid_mod_new() and \c fluid_mod_delete() to match naming conventions: new_fluid_mod() and delete_fluid_mod()
2018-05-17 18:45:09 +00:00
- rename chorus getters to match naming conventions: fluid_synth_get_chorus_speed() and fluid_synth_get_chorus_depth()
2018-04-08 08:19:57 +00:00
- fluid_synth_remove_sfont() returns FLUID_OK or FLUID_FAILED
2018-05-18 14:28:09 +00:00
- introduce a separate data type for sequencer client IDs: #fluid_seq_id_t
2018-09-09 20:34:35 +00:00
- fluid_get_userconf() has been implemented for Windows
2018-05-18 14:28:09 +00:00
<strong>New Features and API additions:</strong>
2017-12-12 19:47:22 +00:00
- add <a href="fluidsettings.xml#midi.autoconnect">"midi.autoconnect"</a> a setting for automatically connecting fluidsynth to available MIDI input ports
2017-12-27 16:41:05 +00:00
- add <a href="fluidsettings.xml#synth.overflow.important">"synth.overflow.important"</a> and <a href="fluidsettings.xml#synth.overflow.important-channels">"synth.overflow.important-channels"</a> settings to take midi channels during overflow calculation into account that are considered to be "important"
2018-04-27 19:39:28 +00:00
- add <a href="fluidsettings.xml#synth.dynamic-sample-loading">"synth.dynamic-sample-loading"</a> a setting for enabling on demand sample loading
2017-12-07 16:11:35 +00:00
- add support for polyphonic key pressure events, see fluid_event_key_pressure() and fluid_synth_key_pressure()
2017-11-24 16:43:38 +00:00
- add fluid_synth_add_default_mod() and fluid_synth_remove_default_mod() for manipulating default modulators
2017-10-06 08:59:41 +00:00
- add individual reverb setters: fluid_synth_set_reverb_roomsize(), fluid_synth_set_reverb_damp(), fluid_synth_set_reverb_width(), fluid_synth_set_reverb_level()
- add individual chorus setters: fluid_synth_set_chorus_nr(), fluid_synth_set_chorus_level(), fluid_synth_set_chorus_speed(), fluid_synth_set_chorus_depth(), fluid_synth_set_chorus_type()
2018-05-17 17:59:34 +00:00
- add realtime settings for <a href="fluidsettings.xml#synth.reverb.damp">reverb</a> and <a href="fluidsettings.xml#synth.chorus.depth">chorus</a> parameters
2017-12-03 20:37:25 +00:00
- add seek support to midi-player, see fluid_player_seek()
2017-11-27 17:30:20 +00:00
- expose functions to manipulate the ladspa effects unit (see ladspa.h)
2017-12-11 18:35:07 +00:00
- add support for text and lyrics midi events, see fluid_midi_event_set_lyrics() and fluid_midi_event_set_text()
2018-02-11 15:56:53 +00:00
- complete rewrite of the soundfont loader API, see sfont.h
- support for 24 bit audio samples, see fluid_sample_set_sound_data()
- expose new_fluid_defsfloader() to support loading soundfonts from memory, see fluid_sfloader_set_callbacks() and <a href="fluidsynth_sfload_mem_8c-example.html">fluidsynth_sfload_mem.c</a>
2018-03-03 13:15:47 +00:00
- remove these structs from the public API and provide proper getter and setter functions instead:
- struct _fluid_sfloader_t
- struct _fluid_sample_t
- struct _fluid_sfont_t
- struct _fluid_preset_t
2018-02-11 14:18:28 +00:00
- add an additional general-purpose IIR filter, see fluid_synth_set_custom_filter()
- add a custom sinusoidal modulator mapping function, see #FLUID_MOD_SIN
Add Polymono Support (#306)
This commit implements the polymono functionality as per MIDI spec.
closes #306
resolves #158
Squashed commit of the following:
commit b56e92b378f21b7fbc189e8c580d85e679c2ee3f
Merge: 07f4c53 30c9dda
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sat Mar 3 14:20:23 2018 +0100
Merge branch 'master' into polymono
commit 07f4c53b9a0e46f511134d39d72073523fc3e202
Author: derselbst <tom.mbrt@googlemail.com>
Date: Fri Mar 2 16:51:46 2018 +0100
update API docs for polymono
commit 82c74ff07251e0fb34b15a066f501bf1e968a51c
Merge: f07e515 ba2c053
Author: derselbst <tom.mbrt@googlemail.com>
Date: Fri Mar 2 10:41:43 2018 +0100
Merge branch 'master' into polymono
commit f07e515ebdeb3d075bd9307ebf8768a6ffaae3e3
Author: derselbst <tom.mbrt@googlemail.com>
Date: Fri Mar 2 10:39:44 2018 +0100
clarify comment
commit 7635825325a168f9ee383afd8023d82d4c33c185
Author: jjceresa <jjc_fluid@orange.fr>
Date: Thu Mar 1 04:13:52 2018 +0100
Enhancement of portamento performance calculation.
- The lost of performance is now -0.5% rather -12%.
commit 09cb1d3ec6ced215adec9faa09fac5cae6c0f8fc
Author: jjceresa <jjc_fluid@orange.fr>
Date: Wed Feb 21 19:40:17 2018 +0100
moving polymono commands among synth commands
commit 63b8c480226b15d5d5bee5de8e1722a93ff69493
Author: jjceresa <jjc_fluid@orange.fr>
Date: Wed Feb 21 03:16:10 2018 +0100
fixes comments, FLUID_INLINE, update pdf
commit 49c1ee39d2ef525ac0af22ab22a4d8f8d49ab0e9
Merge: 200c860 4a0a736
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sun Feb 11 17:38:31 2018 +0100
Merge branch 'master' into polymono
commit 200c8609582560d781c0d49b99a9d02bdb7d2a2a
Author: jjceresa <jjc_fluid@orange.fr>
Date: Thu Feb 8 23:27:28 2018 +0100
Fixes typos, update /doc/polymono
commit 9f6474cee712f947a0227957acbb4d1e4f56f2d6
Merge: cb7f43f 28b1bef
Author: jjceresa <jjc_fluid@orange.fr>
Date: Wed Feb 7 00:44:52 2018 +0100
merge before updating pdf document.
commit cb7f43feb56edeed016b0b3ad7293fbd64beb7ae
Author: jjceresa <jjc_fluid@orange.fr>
Date: Wed Feb 7 00:40:52 2018 +0100
fixes typos in pdf document
commit 28b1bef97a498ea5e15fdffb57b861998642bd5a
Author: derselbst <tom.mbrt@googlemail.com>
Date: Tue Feb 6 23:02:05 2018 +0100
avoid type redefinition warning
commit 551940854053ccf0ff0d4cfd21d0e6328a9e657c
Author: jjceresa <jjc_fluid@orange.fr>
Date: Tue Feb 6 18:58:16 2018 +0100
cleanup fluid_synth.c
commit 263f9badcb7f75bf8027df60abb20b3354ea67e2
Author: derselbst <tom.mbrt@googlemail.com>
Date: Tue Feb 6 16:36:55 2018 +0100
cleanup fluid_synth.h
commit fd58bc0c22756b67e75c80ed8efecfed9baf2901
Author: derselbst <tom.mbrt@googlemail.com>
Date: Tue Feb 6 16:30:46 2018 +0100
move synth API macros back to fluid_synth.c
commit 101ea0961a18c4724d7bd7f4d47f5a7fc27bb679
Author: derselbst <tom.mbrt@googlemail.com>
Date: Tue Feb 6 16:17:15 2018 +0100
rename fluid_synth_mono.c to fluid_synth_monopoly.c
commit ec60840304fdebf4d854a0879045249e9a90af79
Author: derselbst <tom.mbrt@googlemail.com>
Date: Tue Feb 6 16:05:06 2018 +0100
move fluid_synth_polymono functions back to fluid_synth.c
commit b18e99d34fcfef1444f235bed4c866985433f072
Author: derselbst <tom.mbrt@googlemail.com>
Date: Tue Feb 6 15:43:18 2018 +0100
explicitly check for default_vel2att_mod
commit ceeba2af7824c3e12f6a5302d79d4e582732141d
Author: jjceresa <jjc_fluid@orange.fr>
Date: Sun Feb 4 22:30:17 2018 +0100
Using INVALID_NOTE instead of -1
- polishing fluid_synth_noteon_monopoly_legato().
- Adds chapter "introducing Poly/mono basic channels API" (2.6.1) in pdf.
commit 04d1a2119ad4847797c9cfc848a4158c6b0b3ce8
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sun Feb 4 19:49:25 2018 +0100
const correctness
commit 7583bc24ad21df5e01b73b685f50e8a2eef3b2f3
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sun Feb 4 19:45:05 2018 +0100
fix naming convention
commit a8e109f9f1ec3a55b6e0b9bfd9163e6dd4ea9e09
Author: jjceresa <jjc_fluid@orange.fr>
Date: Sun Feb 4 01:39:58 2018 +0100
fixes comments, update pdf
commit 1f33394a6579f9ee7341246df3e110db6926abeb
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sat Feb 3 17:19:33 2018 +0100
remove duplicate comments
commit e9451695aafece991af74ee2cfb9368d256c728a
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sat Feb 3 17:06:09 2018 +0100
specify enum types explicitly
commit f810f1942eaf19447ed29487209e227d7c4f8bd6
Author: jjceresa <jjc_fluid@orange.fr>
Date: Fri Feb 2 18:54:03 2018 +0100
fix construction of new_mode - cleanup comment
commit 3108da38ecc877e2f7428db0a988e1f05d324743
Author: derselbst <tom.mbrt@googlemail.com>
Date: Fri Feb 2 11:42:44 2018 +0100
cleanup fluid_synth_cc_LOCAL()
commit d61eea6aeff75cfb051e4baf546ff26073c2e62b
Author: derselbst <tom.mbrt@googlemail.com>
Date: Fri Feb 2 11:18:46 2018 +0100
inline warn string
commit b7ed427470309e85c44da632f6fe9a319fc49683
Author: derselbst <tom.mbrt@googlemail.com>
Date: Fri Feb 2 11:16:14 2018 +0100
unlock API mutex
commit bc12603c993bf4af8ad260e18fd79f46e98c0785
Author: jjceresa <jjc_fluid@orange.fr>
Date: Fri Feb 2 00:33:04 2018 +0100
fix comments in fluid_synth_polymono.c
commit 34d8b73d856e3a0f664bfc816f20beff5f340627
Author: jjceresa <jjc_fluid@orange.fr>
Date: Thu Feb 1 23:59:27 2018 +0100
fixes typos in comments
commit eba067d735118077bf6bd8bb4ebb4bdab5046258
Author: jjceresa <jjc_fluid@orange.fr>
Date: Thu Feb 1 23:47:58 2018 +0100
moving fluid_synth_check_next_basic_channel()
commit 7976be599a4940ec0dc4420954ef8cfe310dd386
Author: jjceresa <jjc_fluid@orange.fr>
Date: Wed Jan 31 23:26:42 2018 +0100
fluid_synth_set_basic_channel_LOCAL cannot change an existing basic
channels.
- Both fluid_synth_set_basic_channel_LOCAL() and
fluid_synth_set_basic_channel_LOCAL() behave the same way.
- Update documentation pdf.
commit a22d1a35fac5b4f697c1d41ae3e368a61a27d653
Author: jjceresa <jjc_fluid@orange.fr>
Date: Tue Jan 30 14:07:50 2018 +0100
command setbasicchannels can change an existing basic channel.
- fix comments.
- update documentation pdf.
commit 4777f7b1f428935691be7d1289cb244c56137793
Author: jjceresa <jjc_fluid@orange.fr>
Date: Mon Jan 29 23:37:16 2018 +0100
fluid_synth_set_basic_channel() is not allowed to change an existing basic channel
commit 5161e4cec71a5c09eed08510458544257b7a66b2
Merge: 435d062 2a4b208
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sat Jan 27 14:40:58 2018 +0100
Merge branch 'master' into polymono
commit 435d062513583dea397686ec8fd442eba732f820
Author: jjceresa <jjc_fluid@orange.fr>
Date: Sat Jan 27 00:09:42 2018 +0100
Fixes typos, update pdf documentation
commit 13a8c6c6dd1a7dc861e367aed286c7f071b4e0ea
Author: jjceresa <jjc_fluid@orange.fr>
Date: Fri Jan 26 19:49:18 2018 +0100
correct comments of fluid_synth_set_basic_channel()
- comments compliant with MIDI spec when val is 0.
"means all possible channels from basic channel to
MIDI count - 1".
commit 0689257d8f1e880617a6039b677c1fe26a02d27b
Author: derselbst <tom.mbrt@googlemail.com>
Date: Thu Jan 25 20:03:07 2018 +0100
remove redundant channel mode flags from public API
commit d632e30c419652cbb5e986fb35aeaf055dfc5b43
Author: derselbst <tom.mbrt@googlemail.com>
Date: Thu Jan 25 19:57:11 2018 +0100
make fluid_synth_get_basic_channel() only return MIDI modes
not fluidsynth's internal flags
commit d1aa433e4a9aa1121bfaa78e1aa33e7ea5a88bae
Author: derselbst <tom.mbrt@googlemail.com>
Date: Thu Jan 25 19:43:42 2018 +0100
update API doc of fluid_synth_reset_basic_channel()
commit b96f17b0c95a43e172da876108cb50756d023f94
Author: derselbst <tom.mbrt@googlemail.com>
Date: Thu Jan 25 19:34:21 2018 +0100
make val of fluid_synth_set_basic_channel() compliant to MIDI spec
commit 904fd36bc1fa7013665190d3a54469094892c0ec
Author: derselbst <tom.mbrt@googlemail.com>
Date: Thu Jan 25 19:25:16 2018 +0100
rename fluid_synth_reset_basic_channels() to fluid_synth_reset_basic_channel()
commit 15a52f6bdfda37f5b25909ad566405543b4c0572
Author: derselbst <tom.mbrt@googlemail.com>
Date: Thu Jan 25 19:21:00 2018 +0100
API doc cleanup and clarification
commit 74c22da6fbfc3444cba448945579e451c28a333b
Author: jjceresa <jjc_fluid@orange.fr>
Date: Wed Jan 24 13:50:45 2018 +0100
Fixes mores comments in synth.h, fluid_cmd.c, fluid_synth_polymono.c
commit 6718cfe68e8e4209bfc396d53bdc71f27edea1ba
Author: jjceresa <jjc_fluid@orange.fr>
Date: Tue Jan 23 20:19:17 2018 +0100
fix build, fix minor comments
commit 9a4d9afc4230a3ff1ebfe8f5035ddd4aee1d4484
Author: jjceresa <jjc_fluid@orange.fr>
Date: Tue Jan 23 19:53:12 2018 +0100
Cleanup basic channels API.
- Removing fluid_basic_channels_infos struct.
- Removing fluid_synth_get_basic_channels() API.
- Clarifying fluid_synth_reset_basic_channels() API and fluid_synth_set_basic_channel() APIs.
- Changes commands resetbasicchannels , setbasicchannels accordling to API changes.
- Replace fluid_synth_get_channel_mode() API by fluid_synth_get_basic_channel() API.
commit a2ec80ded11f95fcbde842c69b69efd8023c0e44
Author: jjceresa <jjc_fluid@orange.fr>
Date: Fri Jan 19 13:35:32 2018 +0100
update examples in /doc/polymono, fix comments
commit 1f283c49551d546db2394ba376291f716f8f3bbc
Author: jjceresa <jjc_fluid@orange.fr>
Date: Thu Jan 18 18:15:47 2018 +0100
remame SIZE_MONOLIST to FLUID_CHANNEL_SIZE_MONOLIST
commit 06093a23e42379ba05ba888937bc9351208583c0
Author: jjceresa <jjc_fluid@orange.fr>
Date: Thu Jan 18 16:08:43 2018 +0100
Adding comments compliant with MIDI specs.
- Adding comments compliant with MIDI spec. for val parameters.
- Cleanup comments.
- Cleanup pdf document.
commit 87e1dbda569b91f5f585232e4ca9086ac579b350
Author: jjceresa <jjc_fluid@orange.fr>
Date: Mon Jan 15 10:23:43 2018 +0100
Adding fluid_synth_get_previous_basic_channel()
commit 82fa1702643a506667c6d997962ac63381ce81ce
Author: jjceresa <jjc_fluid@orange.fr>
Date: Sun Jan 14 11:28:37 2018 +0100
adding fluid_channel_update_legato_staccato_state()
commit 3309b6f172c56e9cb7c95fbeb09f6ebfe88351da
Author: jjceresa <jjc_fluid@orange.fr>
Date: Fri Jan 12 22:49:22 2018 +0100
integrates fluid_channel_keep_lastnote_monolist()
commit 92f1e9230d065c8153baf64b77222891de417c99
Author: jjceresa <jjc_fluid@orange.fr>
Date: Thu Jan 11 02:24:53 2018 +0100
adds comments
commit f4241272d8fdd70da268fbdf04458055f084c446
Author: jjceresa <jjc_fluid@orange.fr>
Date: Thu Jan 11 01:32:53 2018 +0100
Removing prev field in mononote struct
- this is replaced by adding i_prev parameter in functions
fluid_channel_search_monolist(),fluid_channel_remove_monolist().
commit b09da5ed213ba36279755a306c379d33e3cd3716
Author: jjceresa <jjc_fluid@orange.fr>
Date: Thu Jan 11 01:28:11 2018 +0100
update comment API, update pdf
commit 3308ca252d1f5894be6d9c26bb1763a2efb6a5a9
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Jan 10 11:01:45 2018 +0100
use fluid_cb2amp rather than fluid_atten2amp
fixes build
commit 6d648f44aeb1132e0f576521c2f35c4e30e7122f
Merge: f881a08 37218ba
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Jan 10 11:00:41 2018 +0100
Merge branch 'master' into polymono
commit f881a08e6b3019f07a675e3dc11972364f1e4620
Author: jjceresa <jjc_fluid@orange.fr>
Date: Wed Jan 10 09:51:23 2018 +0100
naming convention for fluid_synth_polymono
commit bfb359a3299c7c6cc3384aa11a63eac354d93b62
Author: jjceresa <jjc_fluid@orange.fr>
Date: Tue Jan 9 13:16:52 2018 +0100
apply allman braces
commit 9275d7ae677463f8354c1163d9fd5af92a669b40
Author: jjceresa <jjc_fluid@orange.fr>
Date: Tue Jan 9 11:23:18 2018 +0100
adding result checking functions
commit 6e3c804ca4a43394929b6f77b6f43d486ea1db24
Author: jjceresa <jjc_fluid@orange.fr>
Date: Mon Jan 8 12:48:39 2018 +0100
removing tabs mixed with spaces
commit 94c46a8b689db7ce2e214f574d061d1f61f73e4b
Author: jjceresa <jjc_fluid@orange.fr>
Date: Sun Jan 7 19:29:01 2018 +0100
fix comment
commit 1bedf8d5d4c547a7d7c9b920e7bfefa8204ed894
Author: jjceresa <jjc_fluid@orange.fr>
Date: Sun Jan 7 19:05:06 2018 +0100
rename key_sustained, cleanup, fix typos
commit 959144acad2312085ade3071c2cfa5b82ab87511
Author: jjceresa <jjc_fluid@orange.fr>
Date: Sun Jan 7 04:36:27 2018 +0100
fix typos in comments
commit c7b25cfd120f70c5b4092e5c625e903eeb40afdc
Author: jjceresa <jjc_fluid@orange.fr>
Date: Sun Jan 7 04:17:15 2018 +0100
cleanup on search/remove monolist functions
commit 756424065e67913b09a1945413cde4513f727426
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sat Jan 6 20:22:22 2018 +0100
fix typo
commit da991a236fac2e273aa9d60acb89061db956e980
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sat Jan 6 20:20:51 2018 +0100
use FLUID_STRCMP wrapper macro
commit 0dc6d9bcd06615f9d33dfea7beec5fa29dc7230c
Author: jjceresa <jjc_fluid@orange.fr>
Date: Sat Jan 6 00:22:48 2018 +0100
simplify arguments checking functions
commit 0103aa4ab08ab3cc8fe12906e8193f6a2a1984bd
Author: jjceresa <jjc_fluid@orange.fr>
Date: Fri Jan 5 16:57:12 2018 +0100
fix build warning
commit 26773a567b894e2720038a26752b56b8705f4464
Author: jjceresa <jjc_fluid@orange.fr>
Date: Fri Jan 5 16:04:17 2018 +0100
declare release_voice_on_same_note_LOCAL in fluid_synth.h
commit 693ba8d300d824674b3d3d0dea0d89eb46a83e69
Author: jjceresa <jjc_fluid@orange.fr>
Date: Fri Jan 5 15:50:39 2018 +0100
fix global cc, update comment, update pdf
commit 9d35a509480aef4ea5be09c453fc0c5ce7e53077
Author: jjceresa <jjc_fluid@orange.fr>
Date: Fri Jan 5 14:44:22 2018 +0100
adding arguments checking functions
commit bd63cd2021bf46a78454884ba5c76a9659d3e5ee
Author: jjceresa <jjc_fluid@orange.fr>
Date: Thu Jan 4 18:01:57 2018 +0100
missing static const
commit 4d24109b457a038cfb70d7e2fbe7fbbd1e25d05c
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Jan 3 20:04:38 2018 +0100
apply naming convention to is_valid_note
commit b1b6738b982cddd4c08839f557a46a6c8b23fa02
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Jan 3 20:00:46 2018 +0100
reoder fluid_channel_* declarations
commit 56279b2622d738c1c910d7c64a30ab055670a6a1
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Jan 3 19:56:40 2018 +0100
move fluid_channel_*() functions to fluid_chan.c
commit 2e54feb3beb0b89ec2203de259fa93c5343f1dfe
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Jan 3 19:30:46 2018 +0100
more naming convention for fluid_synth_mono.c
commit cd84bf96af7b4219920b5b070fbbf606eb5a21ef
Author: jjceresa <jjc_fluid@orange.fr>
Date: Wed Jan 3 18:57:13 2018 +0100
simplify portamemto pitch calc.
commit af98b362ed0d471c46b7f1475c3c0de469d4f432
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Jan 3 10:37:42 2018 +0100
readd accidently removed custom_breath2att_mod
fix build
commit 1a4d5d392bee44677ed8e633d2acf4589b3dfdf6
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Jan 3 10:35:16 2018 +0100
make fluid_gen_info static again
commit da4481dc278069cdc7452cd5e533613191df4830
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Jan 3 10:35:08 2018 +0100
fix comments
commit fa6734bcdc66c581de39ff8db56d737852111a86
Merge: 47a0718 dd2b78a
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Jan 3 10:14:35 2018 +0100
Merge branch 'master' into polymono
commit 47a0718175ca8bd900d8ed823d502f0ef004a7d5
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Jan 3 10:11:36 2018 +0100
cleanup fluid_synth_*() forward decl.
commit c730bcf296c0e5895158ef08bbee278a33e43e93
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Jan 3 10:06:32 2018 +0100
move polymono fluid_channel_* macros to fluid_chan.h
commit 228c7bca6a17c13ac5a82d8faaf3fbc1fba39162
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Jan 3 09:57:09 2018 +0100
apply naming convention to polymono helper macros
commit 0d2e16497f93b02649041a7dd5ff0697e94b443c
Author: jjceresa <jjc_fluid@orange.fr>
Date: Mon Jan 1 22:36:10 2018 +0100
move param checking, FLUID_API_ENTRY_CHAN to API, cleanup
commit 1d73cec83bc4da75b754191db0105097874c8f39
Author: derselbst <tom.mbrt@googlemail.com>
Date: Mon Jan 1 17:52:59 2018 +0100
remove redundant null termination for FLUID_SNPRINTF
commit bca5472c347ef17203dfe7d37311a24b1c608b64
Merge: e64b08a 70dffe7
Author: derselbst <tom.mbrt@googlemail.com>
Date: Mon Jan 1 17:49:25 2018 +0100
Merge branch 'master' into polymono
commit e64b08a800976bd5176a594f93ea4e050db5846c
Author: jjceresa <jjc_fluid@orange.fr>
Date: Sun Dec 31 15:22:54 2017 +0100
fix scope mode names
commit fba23b6a018a96c4cb3779b43de79eb1b82b0495
Author: jjceresa <jjc_fluid@orange.fr>
Date: Sun Dec 31 14:53:11 2017 +0100
fix comments, typo errors, update doc
commit 330826eb4739e8521a31d58205359a353e7fc9ef
Author: jjceresa <jjc_fluid@orange.fr>
Date: Sun Dec 31 05:34:37 2017 +0100
adding mode name for shell command
commit 52689198d1224540b36fc584aad0d885c9eea39a
Author: jjceresa <jjc_fluid@orange.fr>
Date: Sat Dec 30 22:48:37 2017 +0100
update doc API fluid_synth_set_basic_channel()
commit 329df43f5d67a99b8dcdf2c7c6dd35bec6b3e356
Author: jjceresa <jjc_fluid@orange.fr>
Date: Sat Dec 30 19:18:45 2017 +0100
fluid_synth_get_channel_mode() return basicchan
commit 29de66116b2bf7a1545818a0604adf5a0559420f
Author: jjceresa <jjc_fluid@orange.fr>
Date: Sat Dec 30 17:59:32 2017 +0100
Simplfying fluid_synth_set_basic_channel signature
- also cleanup variable declarations (static, scope, ...).
- calling fluid_synth_set_basic_channel_LOCAL() instead of
fluid_synth_set_basic_channel().
commit 5e9bc3977a9a3616ac4697c6b16e186656cd2baf
Author: jjceresa <jjc_fluid@orange.fr>
Date: Sat Dec 30 03:39:24 2017 +0100
cleanup status variable and rename variables
commit 650ad51af9fcb1fa88ab64cfad868ce0d80fc917
Author: jjceresa <jjc_fluid@orange.fr>
Date: Sat Dec 30 00:55:16 2017 +0100
remove basic channels settings
update FluidPolyMono-0004.pdf
- removing basic channels settings.
- addding comment for Global channel.
commit 1bbb520ab9b5c9b5cb954f3bc3d0ecf929237369
Author: jjceresa <jjc_fluid@orange.fr>
Date: Sat Dec 30 00:49:31 2017 +0100
update comments on breat flags
commit 795321aa8710c409dccd4773ccd8491f5427a7d9
Author: derselbst <tom.mbrt@googlemail.com>
Date: Fri Dec 29 20:28:30 2017 +0100
reorder synth API macros
commit e1589234d01a62e304e8edf53107e5a404829367
Author: derselbst <tom.mbrt@googlemail.com>
Date: Fri Dec 29 20:20:52 2017 +0100
introduce FLUID_API_RETURN_IF_CHAN_DISABLED macro for synth
to reduce nesting
commit f8dee9b6ab02140d2104167fe7d273bfcf597abb
Author: derselbst <tom.mbrt@googlemail.com>
Date: Fri Dec 29 19:42:15 2017 +0100
correct API comment of fluid_synth_cc()
commit 41083f4b970fa46e652609f92302f228dc6fe550
Author: derselbst <tom.mbrt@googlemail.com>
Date: Fri Dec 29 10:49:43 2017 +0100
fix build
forgot to commit fluid_synth.c
commit ac04f365c715615f44885445ba7666050c655525
Author: derselbst <tom.mbrt@googlemail.com>
Date: Fri Dec 29 10:49:03 2017 +0100
remove redundant fluid_channel_get_cc_portamento helper macro
commit d707f5e0bc8807c4c43b51eb0503ef91f0d5c8b9
Author: derselbst <tom.mbrt@googlemail.com>
Date: Fri Dec 29 10:45:13 2017 +0100
fix naming of fluid_channel helper macros
commit fa38f6a9b2c3250f9dd77e5fd94a7107790ad1f6
Author: derselbst <tom.mbrt@googlemail.com>
Date: Fri Dec 29 10:44:49 2017 +0100
handle BREATH_MSB is switch-case
commit c68c7eb40cd020f0a0b068d8497328692c8e0800
Author: jjceresa <jjc_fluid@orange.fr>
Date: Fri Dec 29 00:20:10 2017 +0100
fix comment in enum fluid_basic_channel_modes
commit 56a63af296bc90f8b0e8bd075e7b4b57d2425310
Merge: c29e401 d35601a
Author: derselbst <tom.mbrt@googlemail.com>
Date: Thu Dec 28 20:33:19 2017 +0100
Merge branch 'polymono' of https://github.com/FluidSynth/fluidsynth into polymono
commit c29e40157921a2de0abe8e8d7ff467ea63bc33a7
Author: derselbst <tom.mbrt@googlemail.com>
Date: Thu Dec 28 20:32:33 2017 +0100
reorder polymono API calls
to place them after the other synth functions
commit 6ac82ff2b7a4b4079ec5121b40fe06bd13a4d08c
Author: derselbst <tom.mbrt@googlemail.com>
Date: Thu Dec 28 20:29:52 2017 +0100
cleanup polymono API comments
commit d35601ae5a71bfbb11f2e6ea79c5a7bf766f6983
Author: jjceresa <jjc_fluid@orange.fr>
Date: Thu Dec 28 19:15:10 2017 +0100
Fix typo in FluidPolyMono-0004.pdf
Cleanup fluid_synth.c
commit 731c59bcd64ac4e1ef06decf36774ed771c7bd41
Author: jjceresa <jjc_fluid@orange.fr>
Date: Thu Dec 28 16:50:03 2017 +0100
Fix parameters checking in commands with no arguments.
commit 6d0fa0f53ed07edaf0a71bc219d807ee35a5f50d
Author: jjceresa <jjc_fluid@orange.fr>
Date: Wed Dec 27 11:33:58 2017 +0100
update doc/polymono/readme.txt
commit 3fa932e9188e27241be4acb4c4d3360ba630eda7
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Sun Dec 24 22:20:05 2017 +0100
- Fix typos errors.
commit 59e2ed3cc52c782dbad17847f083b96fff004165
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Sun Dec 24 00:03:57 2017 +0100
Comments additions.
commit 88f11588750b1e8196508c19e32e98ca540bf3f2
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Sat Dec 23 23:42:21 2017 +0100
Removing fluid_voice_update_release() signature.
commit 9b8cd5e5532a6f87ed516b83f728509f2ad0d890
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Sat Dec 23 23:38:50 2017 +0100
Removing fluid_voice_update_release().
- removing fluid_voice_update_release().
- adding comments.
commit 2787d150deb0c64519507f4fbfa8ef58a28d11b9
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Sat Dec 23 23:24:55 2017 +0100
Using fluid_voice_release() in legato mode 0.
substitute fluid_voice_update_release() by fluid_voice_release().
commit 68f7c7778b07a384d3d1648bb34bcf705a05affb
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Sat Dec 23 23:14:12 2017 +0100
Add comments to poly/mono public API.
commit 51cedfdfed88883e00f08e4e9253f5bf08cb5287
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Sat Dec 23 00:55:09 2017 +0100
Update FluidPolyMono-0004.pdf
-Cleanup chapter 1.
-Update doc API.
commit 1ac23daf6dd10f1d1c0afc52bf1d7182d4d0538f
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Dec 22 23:12:38 2017 +0100
Change enum in fluid_cmd.c
commit 902f603c102689b58f86dfd789c01155d26c8bd8
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Dec 22 23:09:38 2017 +0100
Change enum names in fluid_synth_polymono.c
commit df52819193c058cbce9201af647e740931889900
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Dec 22 23:03:59 2017 +0100
Change enum names in fluid_synth_mono.c
commit 8aea95e0f4276d9904f9428e9a2cc93d8188a3e3
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Dec 22 22:56:29 2017 +0100
Change enum names in fluid_chan.c
commit da0e94c2a8d8d7af8c5bbd81de7fa4cb7953372b
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Dec 22 22:52:54 2017 +0100
Change legato and portamento enum
-Change enum LegatoMode to enum fluid__channel_legato_mode.
-Change enum PortamentoModeto enum fluid__fluid__channel_portamento_mode
commit 75309ef3a322050b4d452144028ca909fef0977c
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Dec 22 19:22:30 2017 +0100
Channel mode and Breath in commands
Make use of enum fluid_basic_channel_mode_flags.
commit 0aca0a4e9405dc2201f7201904a0192af0f4f5d4
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Dec 22 19:14:12 2017 +0100
Channel mode and breath in fluid_synth_polymono.c
Make use of new enum fluid_basic_channel_mode_flags
commit 4828760f45326884322d850ec50401825ded997b
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Dec 22 18:52:59 2017 +0100
Rename enum in Fluid_synth_mono.c
Make use of new values enum fluid_basic_channel_mode_flags
commit a0246d16ed5db3d5771a9a60c13d66c628e11447
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Dec 22 18:44:31 2017 +0100
Rename enum in fluid_synth.c
Make use of new enum fluid_basic_channel_mode_flags
commit ba6dea233ab6667361eaefbb0e9b8cacbab6724f
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Dec 22 18:10:34 2017 +0100
Change MONO name
Change MONO to FLUID_CHANNEL_POLY_OFF
commit 091bf7f3eeab75f1d5766592da9e6a0b1b1da5f4
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Dec 22 18:04:48 2017 +0100
Renaming enum fluid_basic_channel_mode_flags
-Renaming enum fluid_basic_channel_mode_flags values.
-Integrating Breath mode in enum fluid_basic_channel_mode_flags values.
commit de945f2bb3af2692f9268e3afb37093709d47845
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Dec 22 03:56:40 2017 +0100
Move signatures to fluid_chan.h
commit 614b74202b7c2d6aaf6b75cc524c908523549e37
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Dec 22 03:54:36 2017 +0100
Add sigature functions.
void fluid_channel_set_onenote_monolist(fluid_channel_t* chan, unsigned char key, unsigned char vel);
void fluid_channel_clear_monolist(fluid_channel_t* chan);
void fluid_channel_invalid_prev_note_staccato(fluid_channel_t* chan);
void fluid_channel_cc_legato(fluid_channel_t* chan, int value);
void fluid_channel_cc_breath_note_on_off(fluid_channel_t* chan, int value);
commit 963a37a36f3c2b2d494deeb472efe8b4ce5365a7
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Dec 22 01:39:25 2017 +0100
fix incorrect cast
fix incorrect unsigned cast.
remove unused extern.
commit 67ff72659f4e83a0e0e24912e919071ae692f590
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 23:45:12 2017 +0100
fix comments - fix help commands strings
commit 2c4aff8773a363fa5902f1425c302bd4da8c8c68
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 23:11:53 2017 +0100
Fix comments.
commit 301712ac4686d2768aa6d441492a172f805c7fc4
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 23:02:55 2017 +0100
Update FluidPolyMono-0004.pdf
commit d4c4d0fc1382ee8795d3565d2373e8c2f36600a4
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 22:45:07 2017 +0100
Update FluidPolyMono-0004.pdf
commit 410b073565395ce6bc73194c99d9f8d48d632642
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 22:33:44 2017 +0100
Add files via upload
commit 0ce5bc65a676144631a3264ef27a6602b87152ae
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 19:27:16 2017 +0100
Update poly_mono_4.txt
commit 088fd806464187dc23e07c843c3a25925a94313f
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 19:22:36 2017 +0100
Adds files leg_port_00.txt - leg_port_01.txt
commit 9b98446a3f1c49c7bfcd51eb00a726eb918cdb70
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 19:13:29 2017 +0100
Delete leg_por_4.txt
commit c832a9b123af5456bce860197786f50555111652
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 19:13:12 2017 +0100
Delete leg_por_3.txt
commit 8cacbb99375b37310e30c1a681bcdcb204a9bd91
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 19:12:57 2017 +0100
Delete leg_por_2.txt
commit af04826db6ca384ed1797fcedf9200db40bbe458
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 19:12:42 2017 +0100
Delete leg_por_1.txt
commit 0cdf52de97779720917839f842d776eb7e1a7856
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 19:12:25 2017 +0100
Delete leg_por_0.txt
commit d750fe34dbd918bf0f3e6be391befc16c962bd1d
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 19:10:12 2017 +0100
Update leg_01.txt
commit 1d9541d8cddb3a761d26739556275560d43acc10
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 19:08:53 2017 +0100
Update leg_00.txt
commit 237f6d500c375aea569930c675ff3463796e71b6
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 19:03:44 2017 +0100
Delete Legato_demo.sf2
commit e875c02fbe8bf11fb3cb3ffc847e1d786c952a15
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 19:01:34 2017 +0100
Update readme.txt
Removing soundfont file
commit 07335cfdb93a6b65d595debdef7973b53adfb62e
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 00:36:23 2017 +0100
Add FluidPolyMono-0004.pdf
commit aa94b3fe12a1301a23c10a3f69a8212d18c36d8e
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 00:34:36 2017 +0100
Update readme.txt
commit 3aa942922149541102f2c46584aac1aa1341c5ab
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 00:33:54 2017 +0100
Delete FluidPolyMono-0003.pdf
commit ddd9b2de37d056a20b430f113e351ea6c786fc8e
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 00:30:52 2017 +0100
documentation files adding/update
leg_00.txt
leg_01.txt
poly_mono_0.txt
poly_mono_1.txt
poly_mono_2.txt
poly_mono_3.txt
poly_mono_4.txt
poly_mono_5.txt
commit 89983fb42eb54a6bab5b6045e5a31a6800ef23ba
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 00:26:50 2017 +0100
Update readme.txt
Removing legato modes 0,3,4
Tutorials examples addition chapter 2.1
poly_mono_0.txt
poly_mono_1.txt
poly_mono_2.txt
poly_mono_3.txt
poly_mono_4.txt
poly_mono_5.txt
commit dcedce20d79d317c834bfd6c961a3fdf87ed1f7f
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 00:17:56 2017 +0100
Delete leg_2.txt
commit a9d765def0170e204027abfa42fc02acfdd47704
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 00:17:29 2017 +0100
Delete leg_1.txt
commit 8e0fc533d69cb261c0cfd6a8f58fe729b758ab0e
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 00:17:00 2017 +0100
Delete leg_4.txt
commit ae670075e592241830ef539c9bf26c4cd84a3a47
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 00:16:14 2017 +0100
Delete leg_3.txt
commit 6040f7575277f53c8803155d58fd158cb8e29a5f
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Dec 20 00:15:23 2017 +0100
Delete leg_0.txt
commit 1e8c4ad4dc7b6ecd0727a73b0ac814679b9fd4f3
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Dec 19 23:34:03 2017 +0100
fix build type conflict.
commit a0fa4debd6fc21d652edfabaaf963b31babcd045
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Dec 19 23:21:10 2017 +0100
Removing legato modes (0,3,4).
commit f53476bfc0c46b313f5b293243a3f3b6d9c3af64
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Dec 19 23:01:50 2017 +0100
Removing legato modes (0,3,4).
commit d69868bdb8179e1eb75661d6b02799de0d7a3e48
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Dec 19 22:57:22 2017 +0100
Removing legato modes (0,3,4).
commit ebd37fdb680e3062f0174fe7c414b3fce6b8c60f
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Dec 19 22:53:38 2017 +0100
Removing legato modes (0,3,4).
commit 265eeb4f321a8bab54ae6aa700474d96a3c83951
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Dec 19 22:47:25 2017 +0100
Removing legato modes (0,3,4).
commit 601216e83e01953c58ceabd0e44cc4f361d1c4ae
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Dec 19 22:44:18 2017 +0100
Removing legato modes (0,3,4).
commit 16b0e65697d57d3bc653e3419d924799b37e3a01
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Dec 19 22:39:17 2017 +0100
Removing legato modes (0,3,4).
commit 5c4b9322e7b6f8600be9849d869233f20beb3d4c
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Dec 19 22:31:16 2017 +0100
Two legato modes 1 and 2 (rnumbered 0 and 1).
Removing legato modes (0,3,4).
Legato modes 1,2 are numbered 0,1 respectively.
commit 8c4096910e9e44c896f7169345d6a262a17e522d
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Dec 19 22:25:33 2017 +0100
Two legato modes 0 and 1 (dfefault mode: 1).
commit fb4205b215648efc1949708073f68237eed8679a
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Dec 19 22:20:56 2017 +0100
Two legato modes 1 and 2 (rnumbered 0 and 1).
Removing legato modes (0,3,4).
Legato modes 1,2 are numbered 0,1 respectively.
commit d0adfe31f4961d034483a95705ac8b86839cf11d
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sat Dec 16 11:42:31 2017 +0100
refactor poly mono bit flags
commit da5ac8dd79479b6a19f5c3608be7ec3507a5b637
Merge: 13754fa 07a167c
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sat Dec 16 10:37:34 2017 +0100
Merge branch 'master' into polymono
commit 13754fad6acbce51bdf5b57526a4ca243948a3ed
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Dec 15 19:38:04 2017 +0100
Fix bug in new_fluid_preset_zone().
Add missing initialization since moving ignoreInstrumentZone check to fluid_zone_inside_range().
commit 64dc235485a004e7b0f6e8f9afae1375321f6afa
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Dec 13 13:41:32 2017 +0100
move ignoreInstrumentZone check to fluid_zone_inside_range()
commit 427a513e2caac645bc571a8fbe7e3a513f874fa1
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Dec 13 13:20:36 2017 +0100
fix spelling of IGNORE_INST_ZONE
commit c9b74903f1e54976b0ed3e5d4aa5e5a2ba2f8c1c
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Dec 13 13:17:32 2017 +0100
remove redundant NULL check
fixes #302
commit 9c8f41be408475ebc8a16dbf468067c795ee5830
Merge: 09fcf6c 5806d9e
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sun Dec 10 10:03:31 2017 +0100
Merge branch 'master' into polymono
commit 09fcf6c3fc36739a29b79008224dd0b46f827cd1
Merge: 9440884 1629f9f
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sat Dec 9 15:16:51 2017 +0100
Merge branch 'master' into polymono
commit 944088440f4c91ce712909a12af1332b09b9a1c5
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Dec 5 00:51:55 2017 +0100
fix bug GEN_VELRANGE
commit 73caf02a323776bd320d30624ebe4dd60a1c940f
Author: derselbst <tom.mbrt@gmail.com>
Date: Sun Dec 3 14:59:30 2017 +0100
cleanup
commit b0f43feac5de166f5791d6203d4c78f9f4f3ab38
Author: derselbst <tom.mbrt@gmail.com>
Date: Sun Dec 3 14:31:45 2017 +0100
rename fluid_inst_zone_range_t to fluid_zone_range_t
find . -type f -exec sed -i 's/fluid_inst_zone_range_t/fluid_zone_range_t/g' {} +
commit 133b418ca5641579eb22cacb5059c48b642b8f5e
Author: derselbst <tom.mbrt@gmail.com>
Date: Sun Dec 3 14:28:45 2017 +0100
make use of range struct for presets as well
remove code duplications
commit 42e23a5e398520959bf1124439539e0f278a80fc
Author: derselbst <tom.mbrt@gmail.com>
Date: Sun Dec 3 13:44:33 2017 +0100
remove zone_range from _fluid_synth_t
prefer explicit parameter passing rather than hacky non-threadsafe param struct saving
commit 2bc061557b9aedb9a2c0f891488aeb1122272395
Merge: 6037bdb cdfe8d3
Author: derselbst <tom.mbrt@gmail.com>
Date: Sun Dec 3 13:31:57 2017 +0100
Merge branch 'master' into polymono
commit 6037bdbd30f793b007c589b5f870cabea2c85c6a
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Nov 29 23:45:10 2017 +0100
fix parameter flfuid_voice_init()
commit bb0da222bd420989b63b0229568b178e8da3e293
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Nov 29 23:24:12 2017 +0100
fix IGNORE_INST_Z0NE
commit d8752cc835b52eda6122dba7d6ab2354a7e83deb
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Nov 29 23:16:56 2017 +0100
fix fluid_voice_init in voice.h
commit 41e4b77fe5f6fc0766b1974d5031d516a7ff0c11
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Nov 29 23:04:45 2017 +0100
Add zone_range tp poly_mono.c
commit f3550d18e74845a09800af8aef12f5c5da21fc7b
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Nov 29 22:51:30 2017 +0100
Add zone_range to fluid_voice_init()
commit 2e9ebad6cb5bd44e82674e87ef4fb7b88b9b9445
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Nov 29 22:48:13 2017 +0100
Add zone_range to fluid_voice_t
commit d779583c490d85ea8b14481fcedbe50efda27aed
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Nov 29 22:41:45 2017 +0100
restore fluid_synth_alloc_voice signature
restore fluid_synth_alloc_voice signature to synth.h
commit 27a4e4407843cfb7c7c86b6a99c0f10d43ad4326
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Nov 29 22:36:06 2017 +0100
Add zone_range to fluid_synth.c
Restore API signature luid_synth_alloc_voice()
commit f4749fc88372a32b055a6dcb6a1b00e247d15c6b
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Nov 29 22:27:03 2017 +0100
Add zone_range to fluid_synth.h
commit 7250f40d7aa3dc074c3ffd6dfb1e6aa2821c26f2
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Nov 29 22:24:37 2017 +0100
Add zone_range to ramsfont
commit a3ffce39355c7fcb86c25ae5c0254758a502b1f3
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Nov 29 22:19:39 2017 +0100
Adding zone_range.
commit e2f99a91e58950373f99032eb1fa752805ed8eee
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Nov 29 22:03:44 2017 +0100
type fluid_inst_zone_range_t
commit adb5e74311b6010289d7f672985cc24f9153bcfd
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Nov 29 21:57:05 2017 +0100
Adding fluid_inst_zone_range_t in fluid_inst_zone_t
commit 89ed46f063301096f0ce4a3b673a8fce3b6c4cde
Merge: 45773e1 7ed5d1f
Author: derselbst <tom.mbrt@googlemail.com>
Date: Fri Nov 24 17:40:17 2017 +0100
Merge branch 'master' into polymono
commit 45773e14d21a56085da7344d0168fb87a9a58607
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 23 23:44:10 2017 +0100
Ignore voices when there is no instrument zone.
commit 156eb2f547cff9e0bca43830ed35f9bb315e48c4
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Sat Nov 11 00:03:29 2017 +0100
Fix warning build
commit 1b1233014a3d8b1fdf043d1fdd4ea51cb6b0aaf9
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Nov 10 20:06:23 2017 +0100
Fix fluid_voice_is_on(voice)
commit 88317aaaa8e33f999393a0a582110642e1726e93
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Nov 10 19:55:30 2017 +0100
Replacement of macro _ON(voice )
Replacement of macro _ON() by fluid_voice_is_on()
Note : fluid_voice_is_on() isn't yet in fluid_voice.h, so to avoid a failing build
we define fluid_voice_is_on() extern.
commit 0ba247f2c6c5b93c3354069b791b46be9d9b6235
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Nov 10 18:35:34 2017 +0100
Fix functions naming in chapter 4.
commit aeaceefa24b03f0ff28b6fb734c56ab40d16fbf8
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Nov 10 18:34:25 2017 +0100
Delete FluidPolyMono-0003.pdf
commit 24f1fa56974dde407007b48f065f0779d78ddfb5
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Nov 10 18:31:25 2017 +0100
Addition of missing comments
Comments in fluid_synth_noteon_LOCAL(),
fluid_synth_damp_voices_by_sustain_LOCAL(),
fluid_synth_damp_voices_by_sostenuto_LOCAL()
commit 023a101642fc246c542e900cabdbc1dae24829f0
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 23:15:59 2017 +0100
renaming functions
commit 87e26ff24b7f30731ff59878f444c58747dc3277
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 23:08:46 2017 +0100
Renaming functions
commit 1b41b67e6fd9ec4ee789abc0448bec8db8923046
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 23:04:54 2017 +0100
renaming functions
commit 486dfed111bce8e48b4bad59d0330e4593e92cbf
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 22:59:41 2017 +0100
Renaming functions
commit 0d5269520b652114251c13f0d87b2c8ec062a60c
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 22:01:24 2017 +0100
Fix build
commit 7c0c3c2944ee15a69d7e1b6c1ae6d4c35f062156
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 21:58:46 2017 +0100
Fix build
commit 1c7958250d48bdfa46b7df8918d087323ee9bc4c
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 20:15:35 2017 +0100
fix build
commit dd4c86a2245c76c74781fa3dfa236cd9acfd225e
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 20:02:32 2017 +0100
Fix build
commit 490d0745dc6e6338b2641f68bac8da86a83b6ed7
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 19:49:29 2017 +0100
Add macro #define _ON(voice) to fix build
commit 553a1dc13b87ea0158c7dd2cab8aa7787dc60f2f
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 18:26:04 2017 +0100
Fix build in legato_on_off()
commit e075c1e7ba695f3529422c74a77ed2571368a729
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 18:22:10 2017 +0100
Fix comments
commit fe763339e3ac3872afcb7bbf557884d31306868a
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 18:19:01 2017 +0100
Fix comments
commit 662a3632d863fab6e9a949e4030f3018cea49660
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 16:41:37 2017 +0100
Updating Chapter 4
commit e15a0198fe6af9c52004159933faeb7cc7bdb0fc
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 16:40:30 2017 +0100
Delete FluidPolyMono-0003.pdf
commit 5bec835f3aa7c4d605a04d66b7eadce9aaf2e276
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 16:01:00 2017 +0100
Renaming fluid_synth_noteon_mono_legato()
Renaming fluid_synth_noteon_mono_legato() to fluid_synth_noteon_monopoly_legato()
commit 1192769461366dbe496ae41d3ba24f97418013eb
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 15:56:17 2017 +0100
Renaming fluid_synth_noteon_mono_legato()
Renaming fluid_synth_noteon_mono_legato() to fluid_synth_noteon_monopoly_legato()
commit f76b3062f8ec32ad0cc361af3b4755db128e020e
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 15:52:51 2017 +0100
Renaming fluid_synth_noteon_mono_legato()
Renaming fluid_synth_noteon_mono_legato() to fluid_synth_noteon_monopoly_legato()
commit b80684df57523f55f346c95e4731756715821572
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 15:47:57 2017 +0100
Renaming fluid_synth_noteon_mono_legato()
Renaming fluid_synth_noteon_mono_legato() to fluid_synth_noteon_monopoly_legato()
commit 181affa17f9099fb3606ee326ee819ad4736cc6b
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 15:45:51 2017 +0100
Renaming fluid_synth_noteon_mono_legato()
Renaming fluid_synth_noteon_mono_legato() to fluid_synth_noteon_monopoly_legato()
commit 2efbfa98c7a2f80a11a8847ff3d89cc2d545f971
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 00:11:39 2017 +0100
Update documentation
Addition of figures in chapter 4.
Part 4: Appendices for understanding implementations in FluidSynth.
commit a32b12b15c37669c1c1bda9228955bacd9844400
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 00:08:26 2017 +0100
Delete FluidPolyMono-0003.pdf
commit ee3820fedd5024131ecbf0f6a66936792c651818
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 9 00:01:45 2017 +0100
Comments addition
Comment addition about the size of monolist SIZE_MONOLIST.
commit fbf496d8f7c79ed8a72ffb22a12f0ead28815084
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Nov 8 23:57:59 2017 +0100
Comments addition
Comments addition relative to FluidPolyMono-0003.pdf chapter 4:
"Appendices for understanding implementations in FluidSynth"
commit af551859b7558e73915c6fefab873c0ebb46221c
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Nov 7 00:29:30 2017 +0100
Update FluidPolyMono.pdf
Removing obsoletes chapters.
Adding appendices for understanding implementations in FluidSynth (see chapter 4).
commit 8953f099bcfbeb58ecbf0b4ad69e97d004cef7bd
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Nov 7 00:26:36 2017 +0100
Delete FluidPolyMono-0003.pdf
commit d000ddac93df0c12ecbe4b2de6b3d4fee1b6b06e
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Nov 7 00:23:33 2017 +0100
Fix typos errors
commit 539c0b3c5db214765ada1ac214391bea33aa2f97
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Nov 7 00:19:06 2017 +0100
Fix typos errors
commit 168669bb603fff83166e3c8df1aff972415dd921
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Sun Nov 5 03:11:11 2017 +0100
correction typos erros
commit 8afb104f880660c08556f712aa804c2cb889eb2d
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Sun Nov 5 02:16:02 2017 +0100
Adding a new chapter.
Adding chapter : 3.11. PART 3: APPENDICES FOR UNDERSTANDING IMPLEMENTATIONS IN FS.
commit d21a528e474e13d62ac4141d224b9d1d16ca8a29
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Sun Nov 5 02:13:16 2017 +0100
delete FluidPolyMono-0003.pdf
commit 942d911dc886ef391cb8975b93c4380c1c4d8977
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Sun Nov 5 02:07:08 2017 +0100
changes functions name
invalid_prev_note_staccato(), legato_on_off(),breath_note_on_off()
commit 62c2529ae3f983797713b64cdaaa2e4c2cb2e3c9
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Sun Nov 5 02:01:03 2017 +0100
Changes names functions
invalid_prev_note_staccato(),legato_on_off(), breath_note_on_off()
commit 10271467d86530b16ef606ddbda964215e73690e
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Sun Nov 5 01:53:35 2017 +0100
update functions documentation
Documentation addition.
Correct get_fromkey_portamento_legato() name.
Changes names: legato_on_off(), breath_note_on_off(),invalid_prev_note_staccato()
commit decf7817706a5ade25903730d11135acfee77817
Merge: 84ee8b3 30c0a72
Author: derselbst <tom.mbrt@gmail.com>
Date: Sat Nov 4 08:52:21 2017 +0100
Merge branch 'master' into polymono
commit 84ee8b3304d87485cd21d802214d670183e51c17
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 2 20:18:03 2017 +0100
Polishing and documenting
commit 99eaf83cef87555926c0078eb38912901a80b003
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 2 20:14:36 2017 +0100
Polishing and documenting
commit 172a9b0cae9aef9a18abb31aa4c2d7543b4ea054
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 2 19:43:51 2017 +0100
Polishing
commit 0d0b47181df5cea717ab848e88e5e87a2ce643e1
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 2 19:00:41 2017 +0100
Polishing
commit f55273986d847e99814bd92d8fc109dea02a85f3
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 2 18:50:38 2017 +0100
Polishing
commit fb6f0eac8ce50a987ff438e942d59d1c24b769c4
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 2 18:43:54 2017 +0100
Polishing
commit fe8e7f692d89be52a95ae2726b1b20870c7fe042
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 2 18:35:56 2017 +0100
Polishing
commit 8e37f562c14141c573a13bb43e9612a3586e672e
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 2 18:23:06 2017 +0100
polishing
commit 8a20a766f995c3c5d9928bb46270758fc92c29a1
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Thu Nov 2 18:18:25 2017 +0100
polishing
commit 3dab1a0edc973c0ddfa762b214a22dff4d2e9bb5
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Mon Oct 30 01:23:11 2017 +0100
Again avoid macros
Avoid GetPortamentoMode, GetLegatoMode macros
commit d39cfe5a199cb7179a174d11dadbfd2bcb992088
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Mon Oct 30 01:18:44 2017 +0100
Again avoiding macros
Avoid GetChanPortamentoMode, GetChanLegatoMode macros
commit bb519495956f5e3d0bc5264d3aea491e5de85afb
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Mon Oct 30 01:11:54 2017 +0100
Again avoiding macros
Avoiding GetChanLegatoMode, GetChanPortamentoMode macros
commit c31449626ad195b3fd44215f8bd51be8cfcc6a29
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Mon Oct 30 00:40:05 2017 +0100
Add FluidPolyMono-0003.pdf
Adding explanations about the legato detector (3.4.3).
Adding example about breathmode (3.4.5).
commit 53f215e602156ecfbb8aeef81ba7a19e201313d4
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Mon Oct 30 00:38:15 2017 +0100
Delete FluidPolyMono-0003.pdf
commit 7dcde051986ae8b17c0613e83f0253db647dd1ee
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Mon Oct 30 00:30:20 2017 +0100
Again avoiding macros
commit 8afbb4503a98d9caa9a85f703d19740bd07ade36
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Mon Oct 30 00:24:57 2017 +0100
Again avoid macros
commit 4e2a6750c15973cb2515c2f9b7971d821b04031a
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Mon Oct 30 00:16:04 2017 +0100
Again avoid macros
commit 21ae600907287e87f35a8f9c1cd1e0fe6e920565
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Mon Oct 30 00:02:41 2017 +0100
Again avoiding macros
commit a0ec029bd886682b3d88ed8150ef90c29a75eec7
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Sun Oct 29 23:46:53 2017 +0100
Again avoiding macros
commit 1e583799f6690253bfcad4cbc4fb5fb0f5b9fa99
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Sun Oct 29 23:18:26 2017 +0100
avoiding macros
commit d92445b99f0a3fd7f896bd03afca05eaa1271b9c
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Oct 27 16:37:34 2017 +0200
Avoid nested macros
commit 71d6a180cb574a754e30a821b52b1a975bc4b2f6
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Oct 27 16:13:30 2017 +0200
avoid nested macros
commit e22013c37d01734c4bc535eba65e6b2cd8db0aad
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Oct 27 15:40:47 2017 +0200
Avoid nested macros
commit 92ba702ffca8284470f45d6568ffa6d81be3a5db
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Oct 27 14:54:19 2017 +0200
Cleanup macro.
commit 2a31e93320907779cd7f56d62991bcce00bedaba
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Oct 27 14:49:52 2017 +0200
Removing nested macros.
commit 9433f2bf2c91939fddb67ba24057225c9e1be7a7
Merge: 71f7c35 cdd9f75
Author: derselbst <tom.mbrt@googlemail.com>
Date: Thu Oct 26 19:56:02 2017 +0200
Merge branch 'master' into polymono
commit 71f7c35a77e8192596f95df6894dae5e2a653dc2
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Oct 25 10:38:05 2017 +0200
remove static from fluid_gen_info to fix build
commit 6c70db9065f81bc323eadcd654a5d5800ca4622c
Merge: 1dbae28 e485129
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Oct 25 09:55:15 2017 +0200
Merge branch 'master' into polymono
commit 1dbae2874f68d1eb62db2ab34dcb4e3e1105f47d
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Oct 24 03:02:32 2017 +0200
Add FluidPolyMono-0003.pdf
Correction API documentation (see 2.6.1, 2.6.4)
commit f01b955de22c4551821199aa670c713a4456e14a
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Oct 24 02:57:18 2017 +0200
Delete FluidPolyMono-0003.pdf
commit b557289b5f6c3ccb531c6c38b45fc61e089a83bc
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Oct 24 02:55:31 2017 +0200
Replacing FLUID_POLYMONO_WARNING by FLUID_FAILED
commit 2d06adef8af6e8d2cef2e03ab669270a727a1742
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Oct 24 02:52:06 2017 +0200
Replacing FLUID_POLYMONO_WARNING by FLUID_FAILED
commit 06108d9f7a61f8773cac02bc32749859e415794e
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Oct 24 02:38:23 2017 +0200
Replacing FLUID_POLYMONO_WARNING by FLUID_FAILED
commit 66b85fb38ec24bb3468e5b8c205a8b15a0002272
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Oct 20 16:08:46 2017 +0200
Polymono documentation has moved to ./doc/polymono
commit 1a03ef03e1ad1043152224cf604ec2bb47756f74
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Oct 20 15:41:21 2017 +0200
Adapt functions names to follow fluidsynth conventions.
commit d40cf8798612eea9accf41aba7e325d6a69f326e
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Oct 20 15:33:42 2017 +0200
Adapt functions naming to follow fluidsynth conventions.
commit 49423cb8bfb7b19b9164d6e642b4549468f003f7
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Oct 20 15:28:08 2017 +0200
Adapt functions names to fluidsynth conventions
Avoiding abbreviations.
Change functions names to follow fluidsynth conventions
commit bc5345ab1c37173cf075b6572dbff5d8bd57a85a
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Oct 20 14:56:41 2017 +0200
Clarify variables spelling and bug fix
Avoiding abbreviations in comments and variables names.
Bug fix.
commit 1f0a1ad3cbf1180ed242eb5997b18b79a98db6ba
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Oct 20 14:48:00 2017 +0200
Clarify variables meaning
avoiding abbreviations in comment and variables.
commit c947686bfc8d6adde47c831a411d639938df8428
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Oct 20 14:35:05 2017 +0200
Clarify comments.
Avoiding abbreviations on comments
commit 7e7296e276b1c9ef254788634e5e2bc565dec211
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Oct 20 01:34:53 2017 +0200
Adding others documentation files.
commit 4a6417ff8fb3afa60f6cd39f6b299759e122398c
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Fri Oct 20 01:32:02 2017 +0200
Create readme.txt
commit 3babbed01e6fb3a264bb61d6e0be0d67e45cd853
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Wed Oct 18 16:27:48 2017 +0200
Update and fix API parameters checking in fluid_synth_polymono.c
Fix correction in Poly/Mono API
fluid_synth_get_channel_mode()
fluid_synth_set_legato_mode(), fluid_synth_get_legato_mode()
fluid_synth_set_portamento_mode(), fluid_synth_get_portamento_mode()
fluid_synth_set_breath_mode(),fluid_synth_get_breath_mode()
commit 98234eb7c146c75bd25cef0813b1f1b12d93ad84
Merge: bb7b483 b908c04
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Oct 18 13:18:05 2017 +0200
Merge branch 'master' into polymono
commit bb7b48340cde04ee7c8e0d19942e45de3fa5197e
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Oct 18 12:51:19 2017 +0200
fix param check for fluid_synth_set_basic_channel()
commit b2157bdc4aa614647ff0a32d46b53941999d6fed
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Oct 18 12:34:14 2017 +0200
another param check fix for fluid_synth_reset_basic_channels()
commit 2ff7dccb555099f1f508e5318aa295338638123a
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Oct 18 10:52:40 2017 +0200
correctly check parameters and enter synth API
for fluid_synth_reset_basic_channels()
commit 55ca184b1fa1a2bfa61918d155e9b8d7a32d2c0e
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Oct 18 10:29:05 2017 +0200
move synth API entry macros to header
so they are usable in polymono and mono synth files
commit deb1ea53a121625eaa913b9b16f4a63a8eb4183e
Author: derselbst <tom.mbrt@googlemail.com>
Date: Wed Oct 18 10:25:17 2017 +0200
Revert "Update API parameter checking"
This reverts commit 8ca4c7d16130c928580f410af9c79663fc8d069e. Crashes if synth == NULL
commit 8ca4c7d16130c928580f410af9c79663fc8d069e
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Tue Oct 17 20:50:26 2017 +0200
Update API parameter checking
Update Poly mono API parameters checking to be thread safe.
commit d5b95232efcc14c072d9237c26a5bd68fe647b69
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Mon Oct 16 18:25:48 2017 +0200
Cleaning up the documentation
Cleaning up the documentation, comments, typos errors.
commit 72d9cdfc99cef9da1638adfde86138444a8f6817
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Mon Oct 16 17:45:52 2017 +0200
cleaning up the API documentation
cleaning up the API documentation and comments so it is usable with doxygen.
commit bf587f4998267ebfbbc7682abdb1abec3fc12009
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sun Oct 15 13:31:24 2017 +0200
move polymono shell commands to fluid_cmd
and fix build
commit 20d417e83b42ea0403f484d4c45d3723a3616c13
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sun Oct 15 13:30:49 2017 +0200
fix public synth portamento function decl
commit f1a9856f5f79c1fd7e9e31bdf2c1c3276545ad94
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sun Oct 15 11:34:48 2017 +0200
move function decl. to header
commit 4c75d038973413e97e9c52b19237cae4850e592b
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sun Oct 15 11:12:17 2017 +0200
fluid_synth_noteoff_monopoly(): use voice getter functions
commit fa00735fa1af49089026abf30f6763e3481bccf2
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sun Oct 15 11:05:00 2017 +0200
fix declaration of fluid_voice_noteoff()
commit f53c00f2e0defa91a49185919b4ea451e4b58ac9
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sun Oct 15 11:02:18 2017 +0200
fix broken merge of fluid_synth_program_change()
commit c18f88df9a8fd80a0ad58ad3a08ea12c6eb10681
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sun Oct 15 11:01:58 2017 +0200
reorder modulator decalaration
commit 12b378244be1b137dfc1e18e4e928bed8073e7c2
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sun Oct 15 10:42:30 2017 +0200
rename breath2att modulator
commit ba3b3c855a8dbcab1a4b8601f52577600061fd42
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sun Oct 15 10:35:42 2017 +0200
manually resolved conflict in fluid_synth_alloc_voice()
for polymono
commit 7b31b8605c94bea44dbacc0779ded1ef7b3eaaab
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sat Oct 14 11:25:49 2017 +0200
fix indentation
commit 1d1d03cb3a27a99643e5f6a4d701b137191cd1b1
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sat Oct 14 11:24:52 2017 +0200
manually merge fluid_synth_noteoff_monopoly()
commit f8fa5d6534553fbb7d617f06620fd3b746349cdd
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sat Oct 14 11:12:37 2017 +0200
refactor fluid_voice_noteoff() to return void
commit 3430db0dce1ff0084da60beb157fb36ca1a23c7d
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sat Oct 14 10:35:45 2017 +0200
add PDF documenting polymono functionality
commit e3818abe427a14bcd05d7c959cd6d125533b4219
Author: derselbst <tom.mbrt@googlemail.com>
Date: Sat Oct 14 10:34:52 2017 +0200
manually resolve fluid_voice_calculate_pitch() conflict
commit b94d42b3923bfcab0a270903ad69bba2d3531089
Author: derselbst <tom.mbrt@googlemail.com>
Date: Tue Oct 10 22:49:16 2017 +0200
move polymono synth files to correct dir
commit 2719e03cfce460a132477080d383e5de5de70fed
Merge: badddc5 0902b26
Author: derselbst <tom.mbrt@googlemail.com>
Date: Tue Oct 10 21:03:49 2017 +0200
Merge branch 'master' into polymono
a few too complex conflicts remain unresolved
commit badddc5b43e064b597c72992434a9786f1367597
Author: jjceresa <32781294+jjceresa@users.noreply.github.com>
Date: Mon Oct 9 17:50:58 2017 +0200
applied jjc's poly mono patch
start of poly/mono implementation, addressing #158
2018-03-03 13:22:51 +00:00
- implement polymono support according to MIDI specs:
- add basic channel support, see fluid_synth_reset_basic_channel(), fluid_synth_set_basic_channel(), fluid_synth_get_basic_channel()
- implement MIDI modes Omni On, Omni Off, Poly, Mono, see #fluid_basic_channel_modes
- implement portamento control, see fluid_synth_set_portamento_mode(), fluid_synth_get_portamento_mode()
- implement legato control, see fluid_synth_set_legato_mode(), fluid_synth_get_legato_mode()
- implement breath control, see fluid_synth_set_breath_mode(), fluid_synth_get_breath_mode()
2018-05-18 14:28:09 +00:00
<strong>API cleanups:</strong>
2018-06-26 06:09:27 +00:00
- the ramsfont has been removed, because it is unmaintained and believed to be unused; please get in touch with the mailing list if you still need it
2018-05-18 14:28:09 +00:00
- remove deprecated fluid_synth_get_channel_info() in favour of fluid_synth_get_program() and fluid_synth_get_channel_preset()
- remove deprecated fluid_settings_getstr()
- remove deprecated fluid_synth_set_midi_router(), instead supply the midi-router instance when creating a command handler with new_fluid_cmd_handler()
- remove deprecated fluid_get_hinstance() and fluid_set_hinstance() (dsound driver now uses the desktop window)
- remove deprecated fluid_synth_create_key_tuning(), use fluid_synth_activate_key_tuning(synth, bank, prog, name, pitch, FALSE) instead
- remove deprecated fluid_synth_create_octave_tuning(), use fluid_synth_activate_octave_tuning(synth, bank, prog, name, pitch, FALSE) instead
- remove deprecated fluid_synth_select_tuning(), use fluid_synth_activate_tuning(synth, chan, bank, prog, FALSE) instead
- remove deprecated fluid_synth_reset_tuning(), use fluid_synth_deactivate_tuning(synth, chan, FALSE) instead
- remove deprecated FLUID_HINT_INTEGER
2019-04-17 18:07:40 +00:00
- remove deprecated fluid_synth_set_gen2() as there doesn't seem to be a use case for absolute generator values
2018-05-18 14:28:09 +00:00
- remove deprecated "synth.parallel-render" setting
- remove obsolete "audio.[out|in]put-channels" settings
- remove unimplemented "synth.dump" setting
- remove fluid_cmd_handler_register() and fluid_cmd_handler_unregister() from public API, as they seem to be unused downstream
- remove misspelled FLUID_SEQ_PITCHWHHELSENS macro
- remove struct _fluid_mod_t from public API, use the getters and setters of mod.h instead
- remove struct _fluid_gen_t, fluid_gen_set_default_values() and enum fluid_gen_flags from public API
- remove macros fluid_sfont_get_id() and fluid_sample_refcount() from public API
- remove FLUID_NUM_MOD macro from public API
- remove the following deprecated enum values from public API:
- GEN_LAST
- LAST_LOG_LEVEL
- FLUID_SEQ_LASTEVENT
- FLUID_MIDI_ROUTER_RULE_COUNT
2009-10-23 02:18:26 +00:00
2009-04-20 21:10:55 +00:00
\section CreatingSettings Creating and changing the settings
2009-10-22 07:06:26 +00:00
Before you can use the synthesizer, you have to create a settings object. The settings objects is used by many components of the FluidSynth library. It gives a unified API to set the parameters of the audio drivers, the midi drivers, the synthesizer, and so forth. A number of default settings are defined by the current implementation.
2009-04-20 21:10:55 +00:00
2019-04-13 12:52:45 +00:00
All settings have a name that follows the "dotted-name" notation. For example, "synth.polyphony" refers to the number of voices (polyphony) allocated by the synthesizer. The settings also have a type. There are currently three types: strings, numbers (double floats), and integers. You can change the values of a setting using the fluid_settings_setstr(), fluid_settings_setnum(), and fluid_settings_setint() functions. For example:
2009-04-20 21:10:55 +00:00
\code
#include <fluidsynth.h>
int main(int argc, char** argv)
{
fluid_settings_t* settings = new_fluid_settings();
2011-12-18 04:44:14 +00:00
fluid_settings_setint(settings, "synth.polyphony", 128);
2009-04-20 21:10:55 +00:00
/* ... */
delete_fluid_settings(settings);
return 0;
}
\endcode
2009-10-22 07:06:26 +00:00
The API contains the functions to query the type, the current value, the default value, the range and the "hints" of a setting. The range is the minimum and maximum value of the setting. The hints gives additional information about a setting. For example, whether a string represents a filename. Or whether a number should be interpreted on on a logarithmic scale. Check the settings.h API documentation for a description of all functions.
2009-04-20 21:10:55 +00:00
\section CreatingSynth Creating the synthesizer
To create the synthesizer, you pass it the settings object, as in the following example:
\code
#include <fluidsynth.h>
int main(int argc, char** argv)
{
fluid_settings_t* settings;
fluid_synth_t* synth;
settings = new_fluid_settings();
synth = new_fluid_synth(settings);
/* Do useful things here */
delete_fluid_synth(synth);
delete_fluid_settings(settings);
return 0;
}
\endcode
2017-10-16 16:08:29 +00:00
For a full list of available <strong>synthesizer settings</strong>, please refer to <a href="fluidsettings.xml" target="_blank"><b>FluidSettings Documentation</b></a>.
2009-04-20 21:10:55 +00:00
\section CreatingAudioDriver Creating the Audio Driver
The synthesizer itself does not write any audio to the audio output. This allows application developers to manage the audio output themselves if they wish. The next section describes the use of the synthesizer without an audio driver in more detail.
2018-12-14 15:43:35 +00:00
Creating the audio driver is straightforward: set the <code>audio.driver</code> settings and create the driver object. Because the FluidSynth has support for several audio systems, you may want to change which one you want to use. The list below shows the audio systems that are currently supported. It displays the name, as used by the fluidsynth library, and a description.
2009-04-20 21:10:55 +00:00
- jack: JACK Audio Connection Kit (Linux, Mac OS X, Windows)
- alsa: Advanced Linux Sound Architecture (Linux)
- oss: Open Sound System (Linux, Unix)
- pulseaudio: PulseAudio (Linux, Mac OS X, Windows)
- coreaudio: Apple CoreAudio (Mac OS X)
- dsound: Microsoft DirectSound (Windows)
- portaudio: PortAudio Library (Mac OS 9 & X, Windows, Linux)
- sndman: Apple SoundManager (Mac OS Classic)
- dart: DART sound driver (OS/2)
2019-03-27 17:02:23 +00:00
- opensles: OpenSL ES (Android)
- oboe: Oboe (Android)
2009-10-22 07:06:26 +00:00
- file: Driver to output audio to a file
2018-12-14 15:43:35 +00:00
- sdl2*: Simple DirectMedia Layer (Linux, Windows, Mac OS X, iOS, Android, FreeBSD, Haiku, etc.)
2009-04-20 21:10:55 +00:00
The default audio driver depends on the settings with which FluidSynth was compiled. You can get the default driver with fluid_settings_getstr_default(). To get the list of available drivers use the fluid_settings_foreach_option() function. Finally, you can set the driver with fluid_settings_setstr(). In most cases, the default driver should work out of the box.
Additional options that define the audio quality and latency are "audio.sample-format", "audio.period-size", and "audio.periods". The details are described later.
You create the audio driver with the new_fluid_audio_driver() function. This function takes the settings and synthesizer object as arguments. For example:
\code
void init()
{
fluid_settings_t* settings;
fluid_synth_t* synth;
fluid_audio_driver_t* adriver;
settings = new_fluid_settings();
/* Set the synthesizer settings, if necessary */
synth = new_fluid_synth(settings);
fluid_settings_setstr(settings, "audio.driver", "jack");
adriver = new_fluid_audio_driver(settings, synth);
}
\endcode
2009-10-22 07:06:26 +00:00
As soon as the audio driver is created, it will start playing. The audio driver creates a separate thread that uses the synthesizer object to generate the audio.
2009-04-20 21:10:55 +00:00
2017-10-16 16:08:29 +00:00
There are a number of general audio driver settings. The audio.driver settings define the audio subsystem that will be used. The audio.periods and audio.period-size settings define the latency and robustness against scheduling delays. There are additional settings for the audio subsystems used. For a full list of available <strong>audio driver settings</strong>, please refer to <a href="fluidsettings.xml" target="_blank"><strong>FluidSettings Documentation</strong></a>.
2018-12-14 15:43:35 +00:00
<strong>*Note:</strong> In order to use sdl2 as audio driver, the application is responsible for initializing SDL (e.g. with SDL_Init()). This must be done <strong>before</strong> the first call to <code>new_fluid_settings()</code>! Also make sure to call SDL_Quit() after all fluidsynth instances have been destroyed.
2009-10-22 07:06:26 +00:00
\section UsingSynth Using the synthesizer without an audio driver
It is possible to use the synthesizer object without creating an audio driver. This is desirable if the application using FluidSynth manages the audio output itself. The synthesizer has several API functions that can be used to obtain the audio output:
2018-06-23 12:26:41 +00:00
fluid_synth_write_s16() fills two buffers (left and right channel) with samples coded as signed 16 bits (the endian-ness is machine dependent). fluid_synth_write_float() fills a left and right audio buffer with 32 bits floating point samples. The function fluid_synth_process() is the generic interface for synthesizing audio, which is also capable of multi channel audio output.
2009-10-22 07:06:26 +00:00
\section LoadingSoundfonts Loading and managing SoundFonts
Before any sound can be produced, the synthesizer needs a SoundFont.
SoundFonts are loaded with the fluid_synth_sfload() function. The function takes the path to a SoundFont file and a boolean to indicate whether the presets of the MIDI channels should be updated after the SoundFont is loaded. When the boolean value is TRUE, all MIDI channel bank and program numbers will be refreshed, which may cause new instruments to be selected from the newly loaded SoundFont.
The synthesizer can load any number of SoundFonts. The loaded SoundFonts are treated as a stack, where each new loaded SoundFont is placed at the top of the stack. When selecting presets by bank and program numbers, SoundFonts are searched beginning at the top of the stack. In the case where there are presets in different SoundFonts with identical bank and program numbers, the preset from the most recently loaded SoundFont is used. The fluid_synth_program_select() can be used for unambiguously selecting a preset or bank offsets could be applied to each SoundFont with fluid_synth_set_bank_offset(), to try and ensure that each preset has unique bank and program numbers.
The fluid_synth_sfload() function returns the unique identifier of the loaded SoundFont, or -1 in case of an error. This identifier is used in subsequent management functions: fluid_synth_sfunload() removes the SoundFont, fluid_synth_sfreload() reloads the SoundFont. When a SoundFont is reloaded, it retains it's ID and position on the SoundFont stack.
Additional API functions are provided to get the number of loaded SoundFonts and to get a pointer to the SoundFont.
2009-04-20 21:10:55 +00:00
\section SendingMIDI Sending MIDI Events
2009-10-22 07:06:26 +00:00
Once the synthesizer is up and running and a SoundFont is loaded, most people will want to do something useful with it. Make noise, for example. MIDI messages can be sent using the fluid_synth_noteon(), fluid_synth_noteoff(), fluid_synth_cc(), fluid_synth_pitch_bend(), fluid_synth_pitch_wheel_sens(), and fluid_synth_program_change() functions. For convenience, there's also a fluid_synth_bank_select() function (the bank select message is normally sent using a control change message).
2009-04-20 21:10:55 +00:00
The following example show a generic graphical button that plays a note when clicked:
\code
class SoundButton : public SomeButton
{
public:
SoundButton() : SomeButton() {
if (!_synth) {
initSynth();
}
}
static void initSynth() {
_settings = new_fluid_settings();
_synth = new_fluid_synth(_settings);
_adriver = new_fluid_audio_driver(_settings, _synth);
}
/* ... */
virtual int handleMouseDown(int x, int y) {
/* Play a note on key 60 with velocity 100 on MIDI channel 0 */
fluid_synth_noteon(_synth, 0, 60, 100);
}
virtual int handleMouseUp(int x, int y) {
/* Release the note on key 60 */
fluid_synth_noteoff(_synth, 0, 60);
}
protected:
static fluid_settings_t* _settings;
static fluid_synth_t* _synth;
static fluid_audio_driver_t* _adriver;
};
\endcode
2009-10-22 07:06:26 +00:00
\section RealtimeMIDI Creating a Real-time MIDI Driver
2009-04-20 21:10:55 +00:00
FluidSynth can process real-time MIDI events received from hardware MIDI ports or other applications. To do so, the client must create a MIDI input driver. It is a very similar process to the creation of the audio driver: you initialize some properties in a settings instance and call the new_fluid_midi_driver() function providing a callback function that will be invoked when a MIDI event is received. The following MIDI drivers are currently supported:
- jack: JACK Audio Connection Kit MIDI driver (Linux, Mac OS X)
- oss: Open Sound System raw MIDI (Linux, Unix)
- alsa_raw: ALSA raw MIDI interface (Linux)
- alsa_seq: ALSA sequencer MIDI interface (Linux)
- winmidi: Microsoft Windows MM System (Windows)
- midishare: MIDI Share (Linux, Mac OS X)
- coremidi: Apple CoreMIDI (Mac OS X)
\code
#include <fluidsynth.h>
int handle_midi_event(void* data, fluid_midi_event_t* event)
{
printf("event type: %d\n", fluid_midi_event_get_type(event));
}
int main(int argc, char** argv)
{
fluid_settings_t* settings;
fluid_midi_driver_t* mdriver;
settings = new_fluid_settings();
mdriver = new_fluid_midi_driver(settings, handle_midi_event, NULL);
/* ... */
delete_fluid_midi_driver(mdriver);
return 0;
}
\endcode
2009-10-22 07:06:26 +00:00
There are a number of general MIDI driver settings. The midi.driver setting
defines the MIDI subsystem that will be used. There are additional settings for
2017-10-16 16:08:29 +00:00
the MIDI subsystems used. For a full list of available <strong>midi driver settings</strong>, please refer to <a href="fluidsettings.xml" target="_blank"><strong>FluidSettings Documentation</strong></a>.
2009-10-22 07:06:26 +00:00
2009-04-20 21:10:55 +00:00
\section MIDIPlayer Loading and Playing a MIDI file
2009-10-28 18:13:50 +00:00
FluidSynth can be used to play MIDI files, using the MIDI File Player interface. It follows a high level implementation, though its implementation is currently incomplete. After initializing the synthesizer, create the player passing the synth instance to new_fluid_player(). Then, you can add some SMF file names to the player using fluid_player_add(), and finally call fluid_player_play() to start the playback. You can check if the player has finished by calling fluid_player_get_status(), or wait for the player to terminate using fluid_player_join().
2009-04-20 21:10:55 +00:00
\code
#include <fluidsynth.h>
int main(int argc, char** argv)
{
2009-10-22 07:06:26 +00:00
int i;
2009-04-20 21:10:55 +00:00
fluid_settings_t* settings;
fluid_synth_t* synth;
fluid_player_t* player;
fluid_audio_driver_t* adriver;
settings = new_fluid_settings();
synth = new_fluid_synth(settings);
player = new_fluid_player(synth);
/* process command line arguments */
for (i = 1; i < argc; i++) {
if (fluid_is_soundfont(argv[i])) {
fluid_synth_sfload(synth, argv[1], 1);
}
if (fluid_is_midifile(argv[i])) {
fluid_player_add(player, argv[i]);
}
}
2019-08-25 08:59:11 +00:00
/* start the synthesizer thread */
adriver = new_fluid_audio_driver(settings, synth);
2009-04-20 21:10:55 +00:00
/* play the midi files, if any */
fluid_player_play(player);
/* wait for playback termination */
fluid_player_join(player);
/* cleanup */
delete_fluid_audio_driver(adriver);
delete_fluid_player(player);
delete_fluid_synth(synth);
delete_fluid_settings(settings);
return 0;
}
\endcode
2017-10-16 16:08:29 +00:00
A list of available <strong>MIDI player settings</strong> can be found in <a href="fluidsettings.xml" target="_blank"><b>FluidSettings Documentation</b></a>.
2009-10-22 07:06:26 +00:00
2018-04-04 16:45:24 +00:00
\section FileRenderer Fast file renderer for non-realtime MIDI file rendering
Instead of creating an audio driver as described in section \ref MIDIPlayer one may chose to use the file renderer, which is the fastest way to synthesize MIDI files.
\code
fluid_settings_t* settings;
fluid_synth_t* synth;
fluid_player_t* player;
fluid_file_renderer_t* renderer;
settings = new_fluid_settings();
// specify the file to store the audio to
// make sure you compiled fluidsynth with libsndfile to get a real wave file
// otherwise this file will only contain raw s16 stereo PCM
fluid_settings_setstr(settings, "audio.file.name", "/path/to/output.wav");
// use number of samples processed as timing source, rather than the system timer
fluid_settings_setstr(settings, "player.timing-source", "sample");
// since this is a non-realtime szenario, there is no need to pin the sample data
fluid_settings_setint(settings, "synth.lock-memory", 0);
synth = new_fluid_synth(settings);
// *** loading of a soundfont omitted ***
player = new_fluid_player(synth);
fluid_player_add(player, "/path/to/midifile.mid");
fluid_player_play(player);
renderer = new_fluid_file_renderer (synth);
while (fluid_player_get_status(player) == FLUID_PLAYER_PLAYING)
{
if (fluid_file_renderer_process_block(renderer) != FLUID_OK)
{
break;
}
}
// just for sure: stop the playback explicitly and wait until finished
fluid_player_stop(player);
fluid_player_join(player);
delete_fluid_file_renderer(renderer);
delete_fluid_player(player);
delete_fluid_synth(synth);
delete_fluid_settings(settings);
\endcode
Various output files types are supported, if compiled with libsndfile. Those can be specified via the \c settings object as well. Refer to the <a href="fluidsettings.xml#audio.file.endian" target="_blank"><b>FluidSettings Documentation</b></a> for more \c audio.file\.\* options.
2011-02-20 23:45:00 +00:00
\section MIDIPlayerMem Playing a MIDI file from memory
FluidSynth can be also play MIDI files directly from a buffer in memory. If you need to play a file from a stream (such as stdin, a network, or a high-level file interface), you can load the entire file into a buffer first, and then use this approach. Use the same technique as above, but rather than calling fluid_player_add(), load it into memory and call fluid_player_add_mem() instead. Once you have passed a buffer to fluid_player_add_mem(), it is copied, so you may use it again or free it immediately (it is your responsibility to free it if you allocated it).
\code
#include <stdlib.h>
#include <string.h>
#include <fluidsynth.h>
/* An example midi file */
const char MIDIFILE[] = {
0x4d, 0x54, 0x68, 0x64, 0x00, 0x00, 0x00, 0x06,
0x00, 0x01, 0x00, 0x01, 0x01, 0xe0, 0x4d, 0x54,
2011-09-18 10:51:54 +00:00
0x72, 0x6b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x90,
2011-02-20 23:45:00 +00:00
0x3c, 0x64, 0x87, 0x40, 0x80, 0x3c, 0x7f, 0x00,
0x90, 0x43, 0x64, 0x87, 0x40, 0x80, 0x43, 0x7f,
0x00, 0x90, 0x48, 0x64, 0x87, 0x40, 0x80, 0x48,
2011-09-18 10:51:54 +00:00
0x7f, 0x83, 0x60, 0xff, 0x2f, 0x00
2011-02-20 23:45:00 +00:00
};
int main(int argc, char** argv)
{
int i;
void* buffer;
size_t buffer_len;
fluid_settings_t* settings;
fluid_synth_t* synth;
fluid_player_t* player;
fluid_audio_driver_t* adriver;
settings = new_fluid_settings();
synth = new_fluid_synth(settings);
player = new_fluid_player(synth);
adriver = new_fluid_audio_driver(settings, synth);
/* process command line arguments */
for (i = 1; i < argc; i++) {
if (fluid_is_soundfont(argv[i])) {
fluid_synth_sfload(synth, argv[1], 1);
}
}
/* queue up the in-memory midi file */
fluid_player_add_mem(player, MIDIFILE, sizeof(MIDIFILE));
/* play the midi file */
fluid_player_play(player);
/* wait for playback termination */
fluid_player_join(player);
/* cleanup */
delete_fluid_audio_driver(adriver);
delete_fluid_player(player);
delete_fluid_synth(synth);
delete_fluid_settings(settings);
return 0;
}
\endcode
2009-04-20 21:10:55 +00:00
\section MIDIRouter Real-time MIDI router
2009-10-22 07:06:26 +00:00
The MIDI router is one more processing layer directly behind the MIDI input. It processes incoming MIDI events and generates control events for the synth. It can be used to filter or modify events prior to sending them to the synthesizer. When created, the MIDI router is transparent and simply passes all MIDI events. Router "rules" must be added to actually make use of its capabilities.
Some examples of MIDI router usage:
2009-04-20 21:10:55 +00:00
2009-10-22 07:06:26 +00:00
- Filter messages (Example: Pass sustain pedal CCs only to selected channels)
- Split the keyboard (Example: noteon with notenr < x: to ch 1, >x to ch 2)
- Layer sounds (Example: for each noteon received on ch 1, create a noteon on ch1, ch2, ch3,...)
- Velocity scaling (Example: for each noteon event, scale the velocity by 1.27)
- Velocity switching (Example: v <= 100: "Angel Choir"; v > 100: "Hell's Bells")
- Get rid of aftertouch
2009-04-20 21:10:55 +00:00
2009-10-22 07:06:26 +00:00
The MIDI driver API has a clean separation between the midi thread and the synthesizer. That opens the door to add a midi router module.
2009-04-20 21:10:55 +00:00
2009-10-28 18:13:50 +00:00
MIDI events coming from the MIDI player do not pass through the MIDI router.
2009-10-22 07:06:26 +00:00
\code
#include <fluidsynth.h>
int main(int argc, char** argv)
{
fluid_settings_t* settings;
fluid_synth_t* synth;
fluid_midi_router_t* router;
fluid_midi_router_rule_t* rule;
settings = new_fluid_settings();
synth = new_fluid_synth(settings);
/* Create the MIDI router and pass events to the synthesizer */
router = new_fluid_midi_router (settings, fluid_synth_handle_midi_event, synth);
/* Clear default rules */
fluid_midi_router_clear_rules (router);
2009-04-20 21:10:55 +00:00
2009-10-22 07:06:26 +00:00
/* Add rule to map all notes < MIDI note #60 on any channel to channel 4 */
rule = new_fluid_midi_router_rule ();
fluid_midi_router_rule_set_chan (rule, 0, 15, 0.0, 4); /* Map all to channel 4 */
fluid_midi_router_rule_set_param1 (rule, 0, 59, 1.0, 0); /* Match notes < 60 */
fluid_midi_router_add_rule (router, rule, FLUID_MIDI_ROUTER_RULE_NOTE);
2009-04-20 21:10:55 +00:00
2009-10-22 07:06:26 +00:00
/* Add rule to map all notes >= MIDI note #60 on any channel to channel 5 */
rule = new_fluid_midi_router_rule ();
fluid_midi_router_rule_set_chan (rule, 0, 15, 0.0, 5); /* Map all to channel 5 */
fluid_midi_router_rule_set_param1 (rule, 60, 127, 1.0, 0); /* Match notes >= 60 */
fluid_midi_router_add_rule (router, rule, FLUID_MIDI_ROUTER_RULE_NOTE);
2009-04-20 21:10:55 +00:00
2009-10-22 07:06:26 +00:00
/* Add rule to reverse direction of pitch bender on channel 7 */
rule = new_fluid_midi_router_rule ();
fluid_midi_router_rule_set_chan (rule, 7, 7, 1.0, 0); /* Match channel 7 only */
fluid_midi_router_rule_set_param1 (rule, 0, 16383, -1.0, 16383); /* Reverse pitch bender */
fluid_midi_router_add_rule (router, rule, FLUID_MIDI_ROUTER_RULE_PITCH_BEND);
2009-04-20 21:10:55 +00:00
2009-10-22 07:06:26 +00:00
/* ... Create audio driver, process events, etc ... */
/* cleanup */
delete_fluid_midi_router(router);
delete_fluid_synth(synth);
delete_fluid_settings(settings);
return 0;
}
\endcode
2009-04-20 21:10:55 +00:00
\section Sequencer
2009-10-22 07:06:26 +00:00
FluidSynth's sequencer can be used to play MIDI events in a more flexible way than using the MIDI file player, which expects the events to be stored as Standard MIDI Files. Using the sequencer, you can provide the events one by one, with an optional timestamp for scheduling.
2009-04-20 21:10:55 +00:00
2009-10-28 18:13:50 +00:00
The client program should first initialize the sequencer instance using the function new_fluid_sequencer2(). There is a complementary function delete_fluid_sequencer() to delete it. After creating the sequencer instance, the destinations can be registered using fluid_sequencer_register_fluidsynth() for the synthesizer destination, and optionally using fluid_sequencer_register_client() for the client destination providing a suitable callback function. It can be unregistered using fluid_sequencer_unregister_client(). After the initialization, events can be sent with fluid_sequencer_send_now() and scheduled to the future with fluid_sequencer_send_at(). The registration functions return identifiers, that can be used as destinations of an event using fluid_event_set_dest().
2009-04-20 21:10:55 +00:00
The function fluid_sequencer_get_tick() returns the current playing position. A program may choose a new timescale in milliseconds using fluid_sequencer_set_time_scale().
The following example uses the fluidsynth sequencer to implement a sort of music box. FluidSynth internal clock is used to schedule repetitive sequences of notes. The next sequence is scheduled on advance before the end of the current one, using a timer event that triggers a callback function. The scheduling times are always absolute values, to avoid slippage.
\code
#include "fluidsynth.h"
fluid_synth_t* synth;
fluid_audio_driver_t* adriver;
fluid_sequencer_t* sequencer;
short synthSeqID, mySeqID;
unsigned int now;
unsigned int seqduration;
// prototype
void seq_callback(unsigned int time, fluid_event_t* event, fluid_sequencer_t* seq, void* data);
void createsynth()
{
fluid_settings_t* settings;
settings = new_fluid_settings();
2019-01-11 14:21:37 +00:00
fluid_settings_setint(settings, "synth.reverb.active", 0);
fluid_settings_setint(settings, "synth.chorus.active", 0);
2009-04-20 21:10:55 +00:00
synth = new_fluid_synth(settings);
adriver = new_fluid_audio_driver(settings, synth);
2009-10-28 18:13:50 +00:00
sequencer = new_fluid_sequencer2(0);
2009-04-20 21:10:55 +00:00
// register synth as first destination
synthSeqID = fluid_sequencer_register_fluidsynth(sequencer, synth);
// register myself as second destination
mySeqID = fluid_sequencer_register_client(sequencer, "me", seq_callback, NULL);
// the sequence duration, in ms
seqduration = 1000;
}
void deletesynth()
{
delete_fluid_sequencer(sequencer);
delete_fluid_audio_driver(adriver);
delete_fluid_synth(synth);
}
void loadsoundfont()
{
int fluid_res;
// put your own path here
fluid_res = fluid_synth_sfload(synth, "Inside:VintageDreamsWaves-v2.sf2", 1);
}
void sendnoteon(int chan, short key, unsigned int date)
{
int fluid_res;
fluid_event_t *evt = new_fluid_event();
fluid_event_set_source(evt, -1);
fluid_event_set_dest(evt, synthSeqID);
fluid_event_noteon(evt, chan, key, 127);
fluid_res = fluid_sequencer_send_at(sequencer, evt, date, 1);
delete_fluid_event(evt);
}
void schedule_next_callback()
{
int fluid_res;
// I want to be called back before the end of the next sequence
unsigned int callbackdate = now + seqduration/2;
fluid_event_t *evt = new_fluid_event();
fluid_event_set_source(evt, -1);
fluid_event_set_dest(evt, mySeqID);
fluid_event_timer(evt, NULL);
fluid_res = fluid_sequencer_send_at(sequencer, evt, callbackdate, 1);
delete_fluid_event(evt);
}
void schedule_next_sequence() {
// Called more or less before each sequence start
// the next sequence start date
now = now + seqduration;
// the sequence to play
// the beat : 2 beats per sequence
sendnoteon(0, 60, now + seqduration/2);
sendnoteon(0, 60, now + seqduration);
// melody
sendnoteon(1, 45, now + seqduration/10);
sendnoteon(1, 50, now + 4*seqduration/10);
sendnoteon(1, 55, now + 8*seqduration/10);
// so that we are called back early enough to schedule the next sequence
schedule_next_callback();
}
/* sequencer callback */
void seq_callback(unsigned int time, fluid_event_t* event, fluid_sequencer_t* seq, void* data) {
schedule_next_sequence();
}
int main(void) {
createsynth();
loadsoundfont();
// initialize our absolute date
now = fluid_sequencer_get_tick(sequencer);
schedule_next_sequence();
sleep(100000);
deletesynth();
return 0;
}
\endcode
\section Shell Shell interface
2017-10-16 16:08:29 +00:00
The shell interface allows you to send simple textual commands to the synthesizer, to parse a command file, or to read commands from the stdin or other input streams. To find the list of currently supported commands, please check the fluid_cmd.c file or type "help" in the fluidsynth command line shell. For a full list of available <strong>command line settings</strong>, please refer to <a href="fluidsettings.xml" target="_blank"><b>FluidSettings Documentation</b></a>.
2018-07-16 10:10:07 +00:00
\section Multi-channel Multi-Channel audio rendering
2017-10-16 16:08:29 +00:00
2018-07-16 10:10:07 +00:00
FluidSynth is capable of rendering all audio and all effects from all MIDI channels to separate stero buffers. Refer to the documentation of fluid_synth_process() and review the different use-cases in the example file for information on how to do that: \ref fluidsynth_process.c
2009-04-20 21:10:55 +00:00
2009-10-22 07:06:26 +00:00
\section Advanced Advanced features, not yet documented. API reference may contain more info.
2009-04-20 21:10:55 +00:00
- Accessing low-level voice parameters
- Reverb settings
- Chorus settings
- Interpolation settings (set_gen, get_gen, NRPN)
2010-08-25 23:18:18 +00:00
- Voice overflow settings
2009-04-20 21:10:55 +00:00
- LADSPA effects unit
- MIDI tunings
*/
/*!
\example example.c
Example producing short random music with FluidSynth
*/
/*!
\example fluidsynth_simple.c
A basic example of using fluidsynth to play a single note
*/
/*!
\example fluidsynth_fx.c
Example of using effects with fluidsynth
*/
2009-05-01 17:26:42 +00:00
/*!
\example fluidsynth_metronome.c
Example of a simple metronome using the MIDI sequencer API
*/
/*!
\example fluidsynth_arpeggio.c
Example of an arpeggio generated using the MIDI sequencer API
*/
2017-11-11 14:27:35 +00:00
/*!
\example fluidsynth_register_adriver.c
Example of how to register audio drivers using fluid_audio_driver_register() (advanced users only)
*/
2017-11-26 09:07:08 +00:00
/*!
\example fluidsynth_sfload_mem.c
Example of how read a soundfont from memory (advanced users only)
*/
2018-05-17 12:43:59 +00:00
/*!
\example fluidsynth_process.c
Usage examples of how to render audio using fluid_synth_process() (advanced users only)
*/