Commit graph

2176 commits

Author SHA1 Message Date
Josh Green
8aa1027115 Reverted bank and SoundFont ID queuing, now executed immediately using atomic instructions as previously.
Program number now uses 8 bits in the SoundFont ID/bank/program integer, where a value of 128 indicates an unset preset.
fluid_synth_unset_program() now causes preset to be unassigned until a program change occurs.
Updated units in documentation for fluid_player_set_midi_tempo().
2009-12-14 03:57:25 +00:00
David Henningsson
b1f76f8b0c Update deltatime on midi file load (closes ticket #59) 2009-12-05 11:19:24 +00:00
Josh Green
39b542ad02 New README-OSX from Ebrahim Mayat for 1.1.1. 2009-11-29 04:12:52 +00:00
Josh Green
9e434ca8e0 Updated versions for 1.1.1 release. 2009-11-27 23:27:54 +00:00
Josh Green
2ee782a6cc Now setting shadow_preset parameter directly in fluid_channel_set_preset() which fixes crash bug where MIDI system reset event would cause shadow_preset and preset to get out of sync.
Reverted return queuing of program changes. Program changes are once again real-time unsafe.
Added public function fluid_synth_unset_program().
Renamed fluid_synth_get_channel_preset_info() to fluid_synth_get_channel_info().
Changed fluid_preset_info_t to fluid_synth_channel_info_t and moved to synth.h header.
Shell 'channels' command now uses thread safe fluid_synth_get_channel_info().
Removed fluid_synth_set_preset_LOCAL(), now just using fluid_channel_set_preset().
Added New In 1.1.1 section to developer docs.
2009-11-27 22:28:23 +00:00
David Henningsson
836a6b45d8 Recommit fix for voice stealing algorithm 2009-11-18 19:14:29 +00:00
Josh Green
35f5a739a2 Added events for bank select and SoundFont ID select and a payload structure for MIDI channel and integer values.
Return queue process is now a thread, instead of a timer, which blocks until signaled by synthesis thread.
fluid_synth_one_block() signals return queue process if any events are pending.
Program change messages are now queued via return event queue if they occur in synthesis context.
Changed fluid_synth_cc() to always queue when in non-synthesis context, no more exceptions.
fluid_synth_bank_select() and fluid_synth_sfont_select() now queue if called out of synthesis context.
Removed checks for synth->state == FLUID_SYNTH_PLAYING, since those functions shouldn't be getting called after state is changed to STOPPED (in delete_fluid_synth).
2009-11-17 08:13:23 +00:00
Josh Green
7758f5a630 Added public fluid_synth_get_channel_preset_info() function and fluid_preset_info_t structure.
Added shadow_preset field to fluid_channel_t which stores the last assigned preset (irrespective of queuing).
Presets now deleted under lock for shadow_preset functionality.
Marked fluid_synth_get_channel_preset() as deprecated.
2009-11-16 07:43:43 +00:00
Josh Green
50c88d392a Moved snd_pcm_nonblock call into new_fluid_alsa_audio_driver2() and out of audio run functions.
Removed unnecessary test of snd_pcm_state and call to snd_pcm_drop.
Removed SETCC macro in fluid_chan.c and replaced with fluid_channel_set_cc() which uses atomic op.
Removed invalid fluid_channel_set_cc() and fluid_channel_get_cc() function declarations (they were replaced with macros).
Added shadow_polyphony field to fluid_synth_t which is accessed via atomic ops by all threads, polyphony field is now only set by synthesis thread.
fluid_synth_cc() now sets cc channel field atomically and queues an update as needed.
synth_thread_id field assigned every call to fluid_synth_one_block().
fluid_synth_alloc_voice() now atomically accesses gain.
Fixed bug in fluid_timer_join() where timer->thread was set to NULL even if auto_destroy was enabled, but was at that point no longer in existence.
2009-11-15 02:34:24 +00:00
Josh Green
8f63cef0aa Actual checkin of -Wno-cast-qual warning inhibitor (wasn't actually checked in in r264).
Added example source files and fluidsynth-v11-devdoc.txt in doc/ to EXTRA_DIST.
Added work around in fluid_coremidi.c for OSX 10.4.
2009-11-07 03:26:19 +00:00
David Henningsson
7eeb88d42f fix unknown macro warning 2009-11-05 22:16:10 +00:00
Josh Green
5040b4bcb0 Reverted char * -> const char * changes to function prototypes: fluid_log_function_t, fluid_default_log_function, fluid_settings_foreach_option_t, fluid_settings_foreach_t, fluid_server_newclient_func_t.
Removed WITHOUT_SERVER from src/config_win32.h.in (the right one this time).
Added atomic value set/get functions for various channel parameters in fluid_chan.h.
Removed shadow parameters in fluid_chorus_t (they weren't needed before).
Merged fluid_chorus_update() into fluid_chorus_set().
Fixed crash bug in Jack driver related to last_client remaining set even if the client was deleted.
fluid_mod_get_value() now uses new fluid_channel_get_* atomic macros.
Synth gain, polyphony, channel pressure, pitch bend and pitch bend sensitivity are now assigned atomically AND querying the value will return the most recent assignment (fixes QSynth knob jumping issues), also changed many _LOCAL functions to update the current assigned value instead of passing the value via the event queue.
Reverb and chorus shadow values set atomically and querying the values will return the most recently assigned ones (fixes QSynth knob jumping issues).
Fixed bug in fluid_synth_process_event_queue_LOCAL() related to chorus parameter order.
Added -Wno-cast-qual to get rid of warning of required cast from (const char *) to (char *).
2009-11-05 04:37:51 +00:00
Josh Green
8b231faab7 Added fluid_synth_get_active_voice_count(). 2009-11-01 22:56:26 +00:00
Josh Green
b46061bfe7 High priority scheduling was not working in alsa, oss and pthread drivers. Converted to using fluid_thread_t.
Removed prio parameter from new_fluid_thread (now just using prio_level of 0 to disable).
Fixed non-blocking in alsa_raw and alsa_seq drivers.
Added polling and non-blocking to OSS MIDI driver.
2009-10-30 21:49:54 +00:00
David Henningsson
997b660805 Fix possibility to set string parameters 2009-10-30 20:27:17 +00:00
Josh Green
c389878c5d Updated libtool library versions for release. 2009-10-30 19:19:35 +00:00
Josh Green
f746e8d1ec Removed audio.realtime and midi.realtime boolean settings as suggested by David Henningsson. audio.realtime-prio and midi.realtime-prio now take 0 to disable high priority scheduling.
Updated docs and drivers relating to high priority settings.
Adjusted default values of audio and MIDI high priority to 60 and 50 respectively.
Changed doc/example.c to enable reset_presets option to fluid_synth_sfload().
Updated README-OSX from Ebrahim Mayat.
2009-10-30 19:13:45 +00:00
Josh Green
e49ccb7373 Updated help command related output to reflect change to 'help' listing help topics.
Added fluid_player_get_status() to the new API list in the developers doc.
2009-10-28 19:54:15 +00:00
Josh Green
b3fb606bde Changed relevant char * arguments to const char * as per request by Louis B.
Some callback prototypes also changed from char * to const char *, including: fluid_log_function_t, fluid_settings_foreach_option_t, fluid_settings_foreach_t and fluid_server_newclient_func_t.
Fixed fluid_event_note() prototype in event.h (looks like an accidental paste in a text editor).
Added @since 1.1.0 to some enums in public headers.
Provided documentation for missing modulator functions in mod.h and other doc updates.
Added missing docs for fluid_event_callback_t.
Added missing docs for fluid_player_add and fluid_player_get_status.
Added missing docs for fluid_version and fluid_version_str.
Fixed missing docs for fluid_synth_program_reset and fluid_synth_sfcount.
Added missing docs for fluid_get_stdin and fluid_get_stdout.
2009-10-28 19:38:10 +00:00
David Henningsson
c09f52f50a Small additions and corrections 2009-10-28 18:13:50 +00:00
David Henningsson
c557766f74 Fix compiler warning 2009-10-28 17:10:15 +00:00
Josh Green
6b92375195 Reverted r245 changeset which added audio driver2 support to DirectSound driver, since it wasn't implemented properly (fluid_audio_callback_t != fluid_audio_func_t). 2009-10-28 06:16:12 +00:00
Josh Green
50f185a143 Updates for VC++ 2008:
Updated vcproj files for glib/gthread and new .c/.h files.
Moved inline functions in fluid_event_queue.c to .h header.
Moved inclusion of winsock2.h and ws2tcpip.h to fluidsynth_priv.h and before windows.h (fixes redefinition errors).
Fixed some other minor build errors and warnings.
2009-10-26 06:43:18 +00:00
Josh Green
2a367ab6a0 Jack driver will now pair up audio and MIDI driver instances, so that audio and MIDI is synchronous.
Fixed bug in delete_fluid_timer() where timer instance was being accessed after it was possibly destroyed (if auto_destroy enabled).
2009-10-26 03:17:01 +00:00
Pedro Lopez-Cabanillas
08d1dea6b8 * missing comma, compile error. 2009-10-23 20:43:05 +00:00
Josh Green
ab517db31f Updated man page to include additional command line options and all settings.
Removed system specific fluid_timer_t code in fluid_sys.c and created a unified system.
Added checks and calls to g_thread_init() in key thread functions.
Removed g_thread_init() from fluidsynth.c.
2009-10-23 06:52:29 +00:00
Josh Green
bcec3dc993 Added a "Whats new in 1.1.0?" section to the developer doc.
Added fluid_settings_option_concat() to concatenate string setting options.
Removed fluid_audio_driver_get_names() and fluid_midi_driver_get_names(), since fluid_settings_option_concat() can be used in their place.
Renamed fluid_synth_program_select2() to fluid_synth_program_select_by_sfont_name().
Added fluid_synth_program_select_by_sfont_name(), fluid_synth_get_sfont_by_name() and fluid_synth_set_gen2() to public API.
Re-organized fluid_file_renderer_process_block() since it wasn't being picked up by Doxygen due to #if preprocessor stuff.
All integer and number settings now have FLUID_HINT_BOUNDED_BELOW and FLUID_HINT_BOUNDED_ABOVE hints set.
2009-10-23 02:18:26 +00:00
Josh Green
93ddc1fc5f Converted all yes/no string boolean parameters to FLUID_HINT_TOGGLED integers.
Added FLUID_HINT_FILENAME to audio.file.name setting.
Added backwards compatibility for yes/no string booleans to fluid_settings_setstr, fluid_settings_copystr, fluid_settings_dupstr, fluid_settings_getstr, fluid_settings_str_equal and fluid_settings_getstr_default.
Added support for integer type to fluid_settings_get_hints and fluid_settings_is_realtime.
fluid_settings_add_option now automatically enables FLUID_HINT_OPTIONLIST.
Replaced fluid_settings_foreach_option() with fluid_settings_foreach_option_alpha().
Replaced fluid_settings_foreach() with fluid_settings_foreach_alpha().
Added backwards compatibility to fluidsynth -o switch for yes/no booleans and improved error handling.
Added support for boolean strings to 'set' shell command and improved type handling and errors.
Added boolean support to 'settings' and 'info' commands.
Added boolean type output to -o help.
Welcome message is now always displayed in fluidsynth.
Changed 'help' command to list topics (help help), instead of general help.
Marked FLUID_HINT_INTEGER as deprecated (since there is a FLUID_INT_TYPE).
2009-10-22 18:41:01 +00:00
Josh Green
f3b62ad39a Overhauled MIDI router and added public API for creating and adding rules.
Updated synth.audio-channels and synth.audio-groups to reflect actual maximum value of 128.
Re-enabled aufile-support argument in configure.ac to make it possible to disable audio output driver.
Updates to doc/Doxyfile to exclude private header files.
Lots of updates to doc/fluidsynth-v11-devdoc.txt: Removed some information that seemed irrelavent to the topic at hand, added descriptions of all FluidSynth settings and sorted, re-wrote MIDI router information and added example code, and more.
Removed src/config.h.in from svn.
2009-10-22 07:06:26 +00:00
Josh Green
9ea9f60494 Merged support for new_fluid_audio_driver2 to DirectSound driver from Z-Maestro. 2009-10-20 22:51:17 +00:00
Josh Green
c7a865ff24 Removed fluid_file_renderer_get_(type_names/format_names/endian_names) from API, now just using settings subsystem.
Removed explicity enable of AUFILE_SUPPORT in fluid_adriver.c.
Warning about failure to set high priority scheduling, now only printed if actually attempted high priority scheduling.
Removed unused fluid_alsa2.c.
Moved fluid_file_audio_driver_settings() from fluid_aufile.c to fluid_filerenderer.c and renamed to fluid_file_renderer_settings().
Added fluid_file_renderer_find_valid_format() to search for valid audio formats for a given file type (to fix Ogg/Vorbis output).
Added audio.jack.server and midi.jack.server settings.
Now using jack_client_open() instead of deprecated jack_client_new().
Fixed declaration of new_fluid_midishare_midi_driver() in fluid_mdriver.c.
Added support for realtime settings to fluid_oss.c and fluid_pulse.c.
Added call to Pa_Terminate() in fluid_portaudio_driver_settings() to free unused resources (such as Jack connections).
Removed synth.midi-mode and preset note-off ignore code for now, until its properly supported.
Added/improved command line "help" output for -a, -E, -m, -O and -T.
Welcome message and "Rendering audio to file .." message now displayed on fast render (-F).
2009-10-19 05:41:07 +00:00
Josh Green
420ba8198f Added correct spelling of FLUID_SEQ_PITCHWHEELSENS with backwards compatible misspelled symbol.
Added FLUID_OK and FLUID_FAILED to public API (misc.h).
Renamed parameter of new_fluid_sequencer2() to use_system_timer.
Renamed fludi_sequencer_get_useSystemTimer() to fluid_sequencer_get_use_system_timer().
Added missing FLUIDSYNTH_API to fluid_sequencer_add_midi_event_to_buffer().
Declared many local functions as static.
Changed settings in doc/Doxyfile to only extract public documentation.
Tons and tons of documentation updates on public API.
2009-10-15 07:00:30 +00:00
David Henningsson
76777760ce Default to 10 ms min-note-length. Minor refactoring. 2009-10-14 07:27:30 +00:00
Josh Green
220337916e Fixed some endian related bugs in fluid_defsfont.c which were introduced when the real glib.h was included.
Some changes of "sound font" to SoundFont in fluid_defsfont.c.
Added FLUID_IS_BIG_ENDIAN macro to fluid_sys.h.
2009-10-13 03:41:19 +00:00
David Henningsson
e86df648a9 Implement feature to have a minimum note length for all notes 2009-10-13 01:08:10 +00:00
Josh Green
3bc6d961a6 Min glib version set to 2.6.5 (latest version for OS2).
Added public function fluid_midi_event_set_sysex().
MIDI sysex events now use param2 to indicate if its dynamically allocated or not.
Added SYSEX handling to alsa sequencer.
Re-wrote fluid_midi_parser_parse to handle SYSEX data (used by ALSA raw MIDI, CoreMidi, Jack and OSS MIDI drivers).
Added 'out' parameter to fluid_istream_readline for displaying the prompt.
Fixed bug in MIDI router where router mutex was left in a locked state with MIDI system reset messages.
Added SYSEX handling to MIDI router.
Added SYSEX handling to MidiShare driver.
Fixed synth->thread_queues free bug caused by order of fluid_private_free and queue frees.
Bug fixes in fluid_synth_sysex() to handle GM ON SYSEX and check length for GS reset message.
WIN32 HACK in fluid_sys.c to OR a flag into fluid_istream_t and fluid_ostream_t on WIN32 to differentiate between file descriptors and sockets.
Bug fix in delete_fluid_timer() where double free would occur if auto destroy was enabled.
Fixed bugs in WIN32 socket server code, which now functions properly.
CR chars are stripped in fluid_istream_gets().
Added SYSEX processing to winmidi driver, which was a non-trivial undertaking!  Fixed allocation bug related to midi.winmidi.device setting.
Command line string option settings are now surrounded by single quotes and separate with commas.
2009-10-12 19:18:06 +00:00
Josh Green
1b425d9e12 Made with_reverb and with_chorus of type int instead of char, so that atomic int ops will work right. 2009-10-11 04:08:29 +00:00
David Henningsson
629fd249ff Make ogg vorbis support to work if libsndfile >= 1.0.18 2009-10-09 18:43:27 +00:00
David Henningsson
aac65ca01a file name handling fixed 2009-10-08 21:59:35 +00:00
David Henningsson
f49fed5e83 Do not call fluid_player_join if the player does not advance 2009-10-08 19:56:03 +00:00
Josh Green
2579d853fb Added FLUID_EVENT_QUEUE_ELEM_MIDI_MODE event queue event.
Added handling of GM On/Off and GS reset SYSEX messages.
Added synth.midi-mode-lock parameter to prevent SYSEX messages from changing MIDI mode.
If MIDI mode is set to "gm" or "gs" then note-offs are ignored for percussion instruments (except Long Guiro and Long Whistle).
Split off MIDI Tuning Standard SYSEX messages into fluid_synth_sysex_midi_tuning.
2009-10-08 05:31:11 +00:00
Josh Green
422924ee45 Added -Wno-unused-parameter because its annoying to have warning for unused parameters.
Removed many unused variables.
Added a new macro fluid_profile_ref_var() for defining a profiling reference variable, to get rid of unused variable warnings when profiling is disabled.
Removed unused functions fluid_oss_get_caps and fluid_oss_get_sample_formats.
2009-10-07 05:20:55 +00:00
Josh Green
799f01a2dc Added no/yes options to boolean string settings that were missing them.
Added synth.midi-mode setting with normal/gm/gs/xg options, does not do anything yet.
Removed -Wno-unused from configure.ac so that warnings are given for unused variables and functions.
2009-10-06 06:53:53 +00:00
Josh Green
16a6d7ef63 Removed all but the synth parameter from new_fluid_file_renderer(), which now accesses the synth's settings directly.
Fixed incorrect order with synth.device-id setting.
2009-10-05 07:03:42 +00:00
Josh Green
ebd21b4dd9 Added new settings public functions: fluid_settings_foreach_option_alpha, fluid_settings_option_count and fluid_settings_foreach_alpha.
Shell output "no such settings" was missing newline and corrected grammer.
Shell settings and info commands now list settings and options in alphabetical order.
Added fluid_list_str_compare_func() for sorting string lists.
Moved setting name token parsing to fluid_settings_get() and fluid_settings_set().
fluidsynth -o help now lists settings alphabetically and displays string option values.
2009-10-05 00:13:48 +00:00
Josh Green
ae6b17d916 Fixed some warnings in fluid_filerenderer and improved -T, -E, -O help output for case where libsndfile support not enabled. 2009-10-03 18:21:12 +00:00
Josh Green
e0a18f7c2a Added libsndfile support to fluid_filerenderer.c with file type, audio format and endian byte order options.
Added 3 additional parameters to new_fluid_file_renderer() for specifying audio format options.
Added public functions fluid_file_renderer_get_(type/format/endian)_names.
Added new settings options "audio.file.(type/format/endian)".
fluid_aufile.c updated to use new file renderer.
fluid_settings_add_option and fluid_settings_remove_option now use const char *.
Added FLUID_N_ELEMENTS and FLUID_MUTEX_INIT to fluid_sys.h.
Added -E, -O and -T command line options and help for file rendering options.
Re-organized --help output to be lower case letter before upper case.
Added FLUID_STRRCHR to fluidsynth_priv.h.
2009-10-03 18:12:19 +00:00
Josh Green
43a9923dff Added public API functions: fluid_synth_sysex, fluid_synth_activate_key_tuning, fluid_synth_activate_octave_tuning, fluid_synth_tune_notes, fluid_synth_activate_tuning and fluid_synth_deactivate_tuning.
Added audio.realtime, audio.realtime-prio, midi.realtime and midi.realtime-prio (only ALSA updated to use them at this point).
Fixed bug in new_fluid_channel() where tuning field was not initialized.
fluid_settings.h had wrong field order in prototypes for fluid_settings_register_num and fluid_settings_register_int.
Added multi core support: "synth.cpu-cores" setting, fluid_synth_core_thread_func() and many core_ variables to fluid_synth_t.
Switched fluid_mutex_t back to a normal non-recursive mutex and added fluid_rec_mutex_t.
Added fluid_cond_t thread synchronization stuff.
Added fluid_cond_mutex_t which is a dynamically allocated regular mutex for use with fluid_cond_t.
fluid_settings_t and fluid_synth_t are now using fluid_rec_mutex_t (same as before, just name change).
Added platform specific fluid_thread_self_set_prio() functions to fluid_sys.c for activating high priority for the calling thread.
Modified new_fluid_thread() to take a prio and prio_level parameters.
Added missing fluid_atomic_pointer_set().
fluid_voice_write() changed to only take a voice audio buffer to render to, mixing is done separately with new fluid_voice_mix().
fluid_voice_write() now returns the count of samples rendered.
fluid_voice_effects() split into fluid_voice_filter() and fluid_voice_mix().
Added dsp_buf_count field to fluid_voice_t to keep track of last count of samples rendered to dsp_buf.
fluid_voice_get_channel() converted to a macro.
Added FLUID_DEFAULT_AUDIO_RT_PRIO and FLUID_DEFAULT_MIDI_RT_PRIO in fluidsynth_priv.h, set to 90 and 80 respectively which get used for audio.realtime-prio and midi.realtime-prio (was 90 and 90 before).
2009-09-29 21:40:28 +00:00
Josh Green
012f627017 Tuning unref event is now sent in fluid_channel_init() if there is an old tuning.
Some one liner functions in fluid_chan.c moved to macros in fluid_chan.h.
Added tuning_bank and tuning_prog fields to fluid_channel_t.
Unnecessary 'if (status & 0x80)' removed from fluid_midi_file_read_event().
Added paramptr field to fluid_midi_event_t for dynamic SYSEX data (size of data stored to param1).
SYSEX messages now handled in fluid_midi_file_read_event().
delete_fluid_midi_event() will free paramptr if its a SYSEX message.
Removed fluid_midi_send_event() and replaced with fluid_synth_handle_midi_event().
Added some enums and #defines for SYSEX MIDI Tuning Standard messages.
Added synth.device-id settings field for SYSEX device ID.
Renamed fluid_synth_cc_LOCAL to fluid_synth_cc_real, which now handles event queue determination.
Tuning bank and program changes are now handled in fluid_synth_cc_real().
Added fluid_synth_sysex() for processing SYSEX messages (MIDI Tuning Standard messages only currently).
Added public fluid_synth_activate_key_tuning() which has an additional apply parameter.
Added public fluid_synth_activate_octave_tuning() which has an additional apply parameter.
Added public fluid_synth_activate_tuning() which has an additional apply parameter.
Added public fluid_synth_deactivate_tuning() which has an additional apply parameter.
Reverted behavior of fluid_synth_create_key_tuning, fluid_synth_create_octave_tuning and fluid_synth_reset_tuning, to be non-realtime.
SYSEX messages now handled in fluid_synth_handle_midi_event().
2009-09-26 20:10:14 +00:00
Josh Green
ac93e45103 Tuning system should now be thread safe.
Added reference counting to fluid_tuning_t.
Added fluid_tuning_duplicate() to duplicate a tuning.
Added FLUID_EVENT_QUEUE_ELEM_(SET_TUNING/REPL_TUNING/UNREF_TUNING) events.
The tuning iterator functions now use a thread private variable to be thread safe.
Tuning changes can now be activated in realtime (existing voices updated).
Added fluid_synth_get_event_elem() helper function.
Added fluid_atomic_float_(get/set) which use automic integer functions and memcpy.
CPU load should now be thread safe (using atomic integer functions to get/set float value).
Added missing free of thread_queues private in delete_fluid_synth().
Added conversion macros to/from integers and pointers.
Some cleanup in fluid_voice_calculate_gen_pitch() and made it public to libfluidsynth, used to activate tuning changes in realtime.
2009-09-25 00:56:48 +00:00