fluidsynth/doc/fluidsynth-v20-devdoc.txt

774 lines
38 KiB
Text
Raw Normal View History

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
\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-10-23 19:00:20 +00:00
\version Revision 2.1.0RC1
\date 2019-10-23
2009-04-20 21:10:55 +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
- \ref NewIn2_1_0
2019-09-24 14:23:55 +00:00
- \ref NewIn2_0_7
2019-08-17 16:01:01 +00:00
- \ref NewIn2_0_6
2019-04-17 18:07:40 +00:00
- \ref NewIn2_0_5
- \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
- \ref FileRenderer
- \ref MIDIPlayerMem
2009-04-20 21:10:55 +00:00
- \ref MIDIRouter
- \ref Sequencer
- \ref Shell
- \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
\section NewIn2_1_0 Whats new in 2.1.0?
- fluid_sample_set_sound_data() caused broken sound when copying sample data
- smallest allowed chorus speed is now 0.1 Hz (previously 0.29 Hz)
2019-09-24 14:23:55 +00:00
\section NewIn2_0_7 Whats new in 2.0.7?
2019-09-27 14:53:27 +00:00
- fluid_free() has been added to allow proper deallocation by programming languages other than C/C++
2019-09-24 14:23:55 +00:00
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
\section NewIn2_0_3 Whats new in 2.0.3?
- fix incorrect behaviour of fluid_sample_set_sound_data()
- 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
FluidSynths major version was bumped. The API was reworked, deprecated functions were removed.
2017-09-21 12:33:28 +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
- 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
- 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>
- explicit client unregistering is required for fluid_sequencer_register_client() and fluid_sequencer_register_fluidsynth()
- all public functions consistently receive signed integers for soundfont ids, bank and program numbers
- use unique device names for the "audio.portaudio.device" setting
- fluid_synth_process() received a new more flexible implementation, but now requires zeroed-out sample buffers
<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
- \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
- rename \c fluid_mod_new() and \c fluid_mod_delete() to match naming conventions: new_fluid_mod() and delete_fluid_mod()
- rename chorus getters to match naming conventions: fluid_synth_get_chorus_speed() and fluid_synth_get_chorus_depth()
- fluid_synth_remove_sfont() returns FLUID_OK or FLUID_FAILED
- introduce a separate data type for sequencer client IDs: #fluid_seq_id_t
- fluid_get_userconf() has been implemented for Windows
<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
- 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"
- 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()
- add fluid_synth_add_default_mod() and fluid_synth_remove_default_mod() for manipulating default modulators
- 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
- 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)
- add support for text and lyrics midi events, see fluid_midi_event_set_lyrics() and fluid_midi_event_set_text()
- 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>
- 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
- 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()
<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
- 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
- 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-04-20 21:10:55 +00:00
\section CreatingSettings Creating and changing the settings
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();
fluid_settings_setint(settings, "synth.polyphony", 128);
2009-04-20 21:10:55 +00:00
/* ... */
delete_fluid_settings(settings);
return 0;
}
\endcode
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
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)
- opensles: OpenSL ES (Android)
- oboe: Oboe (Android)
- 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
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
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.
\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:
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.
\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
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
\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
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
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-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)
{
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]);
}
}
/* 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
A list of available <strong>MIDI player settings</strong> can be found in <a href="fluidsettings.xml" target="_blank"><b>FluidSettings Documentation</b></a>.
\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.
\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,
0x72, 0x6b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x90,
0x3c, 0x64, 0x87, 0x40, 0x80, 0x3c, 0x7f, 0x00,
0x90, 0x43, 0x64, 0x87, 0x40, 0x80, 0x43, 0x7f,
0x00, 0x90, 0x48, 0x64, 0x87, 0x40, 0x80, 0x48,
0x7f, 0x83, 0x60, 0xff, 0x2f, 0x00
};
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
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
- 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
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.
\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
/* 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
/* 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
/* 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
/* ... 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
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();
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
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>.
\section Multi-channel Multi-Channel audio rendering
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
\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
*/
/*!
\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
*/
/*!
\example fluidsynth_register_adriver.c
Example of how to register audio drivers using fluid_audio_driver_register() (advanced users only)
*/
/*!
\example fluidsynth_sfload_mem.c
Example of how read a soundfont from memory (advanced users only)
*/
/*!
\example fluidsynth_process.c
Usage examples of how to render audio using fluid_synth_process() (advanced users only)
*/