2002-07-21 Peter Hanappe <peter@hanappe.com> * src/Makefile.am (libiiwusynth_la_SOURCES): Followed Bob Ham's suggestion for the Makefile.am to fix the problems with automake 1.6 2002-07-13 Tim Goetze <tim@quitte.de> * src/iiwu_synth.c (iiwu_synth_alloc_voice): New algorithm for voice allocation, when all voice processes are in use 2002-07-13 Markus Nentwig <nentwig@users.sourceforge.net> * src/iiwu_synth.c (iiwu_synth_alloc_voice): Applied above patch, 2002-07-08 Markus Nentwig <nentwig@users.sourceforge.net> * src/iiwu_synth.c (iiwu_synth_noteoff): Changed noteoff strategy: Noteoff now turns off all voice processes with the same channel / key, regardless of the voice ID (avoids stuck notes). 2002-07-13 Peter Hanappe <peter@hanappe.com> * src/Makefile.am (EXTRA_libiiwusynth_la_SOURCES): Applied Takashi Iwai's patch. The configure stuff in iiwusynth-0.2 cannot be rebuilt with the latest automake 1.6. You cannot use substitution for *_SOURCES in Makefile.am. This fixes this problem. 2002-06-29 Markus Nentwig <nentwig@users.sourceforge.net> * src/iiwusynth.h: Added documentation, removed GEN_CHANGED (it was unused). * src/iiwu_mod.c (iiwu_dump_modulator): Cleaned up * src/iiwu_cmd.c (iiwu_handle_help): Restructured command line help system 2002-06-14 Markus Nentwig <nentwig@users.sourceforge.net> * src/iiwu_chorus.c (iiwu_chorus_processmix): Turning off chorus now, when parameters are wrong (avoid FPE) * src/iiwu_voice.c (iiwu_voice_write): Optimized turnoff condition for voice 2002-06-11 Markus Nentwig <nentwig@users.sourceforge.net> * src/iiwu_voice.c (iiwu_voice_add_mod): Fixed bug that prevented non-default modulators from being added. (iiwu_voice_config): Added peak detection for the sample loop, and a condition turning off the voice, if loop peak volume and amplitude envelope combined fall below the noise floor. 2002-06-06 Peter Hanappe <peter@hanappe.com> * acinclude.m4: Fixed problems with enable/disable jack and midishare 2002-06-06 Tim Goetze <tim@quitte.de> * src/iiwu_synth.c (iiwu_synth_all_notes_off): Added handling of all-notes-off midi message 2002-06-03 Markus Nentwig <nentwig@users.sourceforge.net> * src/iiwu_chorus.c: Fixed bug in initial phase calculation 2002-06-02 Peter Hanappe <peter@hanappe.com> * src/iiwu_jack.c: updated for new JACK types. 2002-06-02 Bob Ham <node@users.sourceforge.net> * acinclude.m4: Changed acinclude.m4 for configure to ignore jack. 2002-06-02 Markus Nentwig <nentwig@users.sourceforge.net> * autogen.sh: Added libtoolize -f to prevent error message 'libtool: ltconfig version does not match ltmain.sh version ...' * src/iiwusynth.h: Changed iiwu_voice_add_mod_t to iiwu_voice_add_mod * src/iiwu_synth.c: Added NULL termination to list returned by iiwu_synth_get_voicelist * src/iiwusynth.h: Added iiwu_synth_set_chorus (API function) * src/iiwu_synth.c: Added iiwu_synth_set_(reverb|chorus)_on (API functions) * src/iiwu_cmd.c: Added control commands for chorus (see help) 2002-05-26 Tim Goetze <tim@quitte.de> * src/iiwu_voice.c (iiwu_voice_noteoff): Fixed conversion between volenv-values from attack segment to later envelope segments 2002-05-22 Markus Nentwig <nentwig@users.sourceforge.net> * src/iiwu_voice.c (iiwu_voice_query_ID): Added, API function (iiwu_voice_query_playing): Added, API function (iiwu_voice_write): Fixed problem with filter caused 05-18 * src/iiwusynth.h: Moved iiwu_voice_update_param into the API 2002-05-19 Markus Nentwig <nentwig@users.sourceforge.net> * src/iiwusynth.h (iiwu_synth_get_voicelist): Added. * src/iiwu_voice.c (iiwu_voice_noteoff): Added a conversion for linear to cB amplitude, when a note is turned off during the attack phase of the volume envelope * src/iiwu_gen.h: Moved the generator definition to API. Changed the fields to 'double'. * src/iiwu_mod.c: Moved the modulator definitions to API. Changed the data type of amount to 'double'. * src/iiwu_voice.c (iiwu_voice_write): The condition, that quits a voice, when the amplitude falls below a threshold now uses only the volume envelope instead of the voice amplitude. Previously, turning a volume pedal briefly to 0 would quit all voices playing. * src/iiwu_rev.c (iiwu_revmodel_processreplace): Removed 'dry' path from reverb unit Motivation: This saves a couple of multiplications, the dry signal goes through the ordinary output anyway. * src/iiwusynth.h (iiwu_synth_kill_by_exclusive_class): added to API * src/iiwu_synth.c (iiwu_synth_kill_by_exclusive_class): Extended the exclusive class function to work with stereo samples (iiwu_synth_set_reverb): Renamed iwu_synth_set_reverb to iiwu_synth_set_reverb_preset iiwu_synth_set_reverb is now an API function, that allows to set all reverb parameters. 2002-05-18 Markus Nentwig <nentwig@users.sourceforge.net> * src/iiwu_chorus.c: Implemented variable delay line with bandlimited interpolation. Documentation, error handling. Removed unneeded and broken features * src/iiwusynth_priv.h: Moved typedef struct iiwu_mod_t iiwu_mod_t into iiwusynth.h * src/iiwusynth.h: Moved iiwu_voice_add_mod from iiwu_voice.h into iiwusynth.h (now API function). * src/iiwu_voice.c (iiwu_voice_update_param): Inserted chorus send into DSP loop (iiwu_voice_write): Added flag 'voice->update_filter'. Now Q can be modulated. 2002-05-12 Markus Nentwig <nentwig@users.sourceforge.net> * src/iiwu_synth.c (iiwu_synth_pitch_wheel_sens): added * src/iiwu_chan.c (iiwu_channel_pitch_wheel_sens): added * src/iiwu_cmd.c (iiwu_handle_reverbsetwidth): changed 'wet' to * 'width' 2002-05-11 Markus Nentwig <nentwig@users.sourceforge.net> * src/iiwu_conv.c (iiwu_tc2sec): Added more conversion functions with range check for different ranges: (iiwu_tc2sec_attack): (iiwu_tc2sec_hold): (iiwu_tc2sec_release): * src/iiwu_voice.c (iiwu_voice_add_mod): implemented modulator src 0 (constant mod offset) * src/iiwu_voice.c (iiwu_voice_update_param): sample-and envelope related voice parameters are now handled together with other voice parameters. Implemented generators: GEN_KEYTOVOLENVDECAY GEN_KEYTOVOLENVHOLD GEN_KEYTOMODENVDECAY GEN_KEYTOMODENVHOLD 2002-05-10 Peter Hanappe <peter@hanappe.com> * src/iiwu_synth.c (iiwu_synth_start_voice): added iiwu_synth_start_voice() to handle exclusive classes. 2002-05-09 Peter Hanappe <peter@hanappe.com> * src/iiwu_conv.h: removed velocity to cB conversion. No longer used. * src/iiwu_synth.c (iiwu_synth_write_float): removed limiter * src/iiwu_synth.h (IIWU_NUM_CHANNELS): set the number of channels to 64. * src/iiwu_synth.c (iiwu_synth_get_internal_bufsize): added * src/iiwu_ladspa.h: lower-cased ladspa files * src/iiwusynth.h: prefixed log levels with IIWU_... Updated all references. * src/iiwu_cmd.c (iiwu_handle_reverb): renamed 'rev_enable' to 'reverb' in correspondance with the long command line arguments * src/iiwusynth.c (main): checking if files on command line are valid * src/iiwuplay.c (main): checking if files on command line are valid * src/iiwusynth.h: New log level for verbose messages: IIWU_INFO 2002-04-30 Markus Nentwig <nentwig@users.sourceforge.net> * src: Added iiwu_LADSPA.c, iiwu_LADSPA.h (support for LADSPA effect plugins). * src/iiwusynth.c (main): Changed default gain to 0.2. * src/iiwu_voice.c: Restructured the voice initialization as follows: (iiwu_voice_init): sample position, IIR filter history, envelopes etc. are reset. (iiwu_voice_optimize): The generators (nominal value) have been set by the sound font. Now each modulator is calculated once to obtain the 'final' initial value for each generator, which consists of nominal value and modulator-contributed part. (iiwu_voice_update_param): Calculates all voice parameters, which depend on one particular generator. This is called once for each voice parameter during voice_optimize and further each time, when a modulator changes a generator. (iiwu_voice_update_param): Added a voice parameter filter_gain to avoid recalculating the filter gain each time the center frequency changes (it depends only on Q) (iiwu_voice_write): Voice is now turned off, when the amplitude falls below -100 dB, even during the sustain phase (happens, when holding a piano key for a very long time) * src/iiwu_voice.c (iiwu_voice_noteoff): Moved voice->chan = NO_CHANNEL into iiwu_voice_off. Previously a released note was not modulated anymore, for example pitch bend stopped working as soon as the key was released. * src/iiwu_voice.h: Changed _ON macro to figure out the state of a key from the position in the envelope, instead of using a cleared channel number as indicator. * src/iiwu_synth.c: Implemented all default modulators Added LADSPA support. Added digital clipping. Moved master gain factor ahead of LADSPA Fx. * src/iiwu_mod.c: 'Hardcoded' GM default modulator vel => filter. Replaced 128 with 127 in (127-x) * src/iiwu_midi.c: Fixed sysex for realtime MIDI. Fixed pitch bend bug. * src/iiwu_gen.c (iiwu_gen_set_default_values): Using float instead of int for default values. Added references to specifications (doc). Changed 'init array' function name to 'set_default' . * src/iiwu_defsfont.c (iiwu_preset_zone_import_sfont): Import of modulators (iiwu_inst_zone_import_sfont): Import of modulators (iiwu_defpreset_noteon): Added modulators, fixed generator problem (local zone overwrites global zone, previously it added) * src/iiwu_conv.c: Using now oncave / convex equation from SF specs. Removed ct2hz functions and tables. (iiwu_ct2hz): Limit checking (iiwu_cb2amp): Removed 'magic number' (iiwu_tc2sec): Avoided == for iiwu_real_t * src/iiwu_cmd.c: Increased number of tokens. Using WORKLINELENGTH constant. Changed max. gain to 5. Added LADSPA commands. Renamed misleading rev_bypass command to rev_enable * src/iiwu_chan.c: Centered pitch wheel. Added 'expression' modulator (CC 11). * configure.in: Added LADSPA support 2002-04-03 Peter Hanappe <peter@hanappe.com> * src/iiwu_voice.c (iiwu_voice_run_dsp): Integrated Markus Nentwig's new filter design 2002-03-12 Peter Hanappe <peter@hanappe.com> * src/iiwusynth.h: the preset iteration in a soundfont now takes a pointer to a preset structure * src/iiwu_sys.c (iiwu_profile_data): added support for profiling * src/iiwu_voice.c (iiwu_voice_write): turns off voice if amplitude < -100 dB in release phase. Set filter gain back to old value (0.25f * ...) * src/iiwuplay.c (main): added gain, interactive, and reverb options * src/iiwusynth.c (main): added gain and reverb options * src/iiwu_synth.c (iiwu_synth_write_s16): added brickwall limiter for s16 samples 2002-01-29 Stephane Letz <letz@grame.fr> * src/iiwu_midishare.c : Compilation on MacOSX, use a task for typeNote management * src/iiwu_sys.c : Compilation on MacOSX * src/iiwu_sys.h : Compilation on MacOSX * src/iiwu_sfont.c : Use the flag MACINTOSH instead of MACOS * config_macos.h : Cleanup * config_macosx.h : New file, compilation on MacOSX 2002-01-21 Stephane Letz <letz@grame.fr> * src/iiwu_midi.c (delete_iiwu_midi_handler): Desallocation of heap allocated strings * src/iiwusynth_priv.h : Definition of strdup if not available (Macintosh) 2002-01-16 Peter Hanappe <peter@hanappe.com> * src/iiwu_alsa.c (new_iiwu_alsa_seq_driver): Applied and adjusted Bob Ham's patch: support for configurable ALSA sequencer client name. * src/iiwu_chan.c (iiwu_channel_cc): Applied Bob Ham's patch: added bank select midi message. 2001-12-31 Peter Hanappe <peter@hanappe.com> * src/iiwu_synth.c (iiwu_synth_damp_voices): Sustain messages are now handled. Updated iiwu_channel and iiwu_voice. (delete_iiwu_synth): SoundFonts are deleted. 2001-12-21 Stephane Letz <letz@grame.fr> * src/iiwu_midishare.c (new_iiwu_midishare_midi_driver, delete_iiwu_midishare_midi_driver): Updated to be compiled either in driver or application mode with the flag MIDISHARE_DRIVER. 2001-12-20 Stephane Letz <letz@grame.fr> * src/iiwu_portaudio.c (iiwu_portaudio_run , new_iiwu_portaudio_driver): Adaptation for new audio drivers * src/iiwu_synth.c (audio driver definition): Adaptation for PortAudio driver * src/iiwu_sys.c (header): Adaptation for compilation on MacOS9 * src/iiwu_sys.h (header): Adaptation for compilation on MacOS9 2001-12-16 Peter Hanappe <peter@hanappe.com> * src/iiwuplay.c (main): The .iiwusynth file is loaded *before* the soundfonts on the command lines are loaded * src/iiwusynth.c (main): idem. 2001-12-16 Peter Hanappe <peter@hanappe.com> * src/iiwu_midi.c (iiwu_player_callback): Fixed error in midi timing after a tempo change * src/iiwu_jack.c (new_iiwu_jack_audio_driver): Added first version of JACK driver 2001-12-14 Peter Hanappe <peter@hanappe.com> * src/iiwu_synth.c (iiwu_synth_noteoff): noteon/notoff events can print a clear message, useful for debugging. * src/iiwu_sys.c (struct _iiwu_timer_t ): timer moved from iiwu_midi.c to iiwu_sys.c * src/iiwusynth.h: New organization of settings; using bit flags; added verbose option * src/iiwusynth.c (main): Added the verbose option * src/iiwuplay.c (main): Added the verbose option 2001-10-05 Stephane Letz <letz@grame.fr> * src/iiwu_portaudio.c (new_iiwu_portaudio_driver): imported new driver for the PortAudio library. 2001-10-04 Stephane Letz <letz@grame.fr> * src/iiwu_synth.c (new_iiwu_synth): Fixed bug in synth initialisation 2001-10-02 Peter Hanappe <peter@hanappe.com> * src/iiwu_cmd.c (iiwu_get_userconf): returns default user configuration (iiwu_get_sysconf): returns default system configuration (iiwu_synth_cmdline): Fixed bug with argument offset. Empty lines are skipped correctly. * src/iiwusynth.c (main): loads the user or system config * src/iiwuplay.c (main): loads the user or system config * src/iiwu_synth.c (iiwu_sp_write): Using new envelope model for modulation envelope 2001-09-29 Peter Hanappe <peter@hanappe.com> * src/iiwu_synth.c (iiwu_sp_write): redesigned the envelopes. 2001-09-20 Peter Hanappe <peter@hanappe.com> * src/iiwu_synth.c (iiwu_sp_write): redesigned the dsp loop. it's faster and it sounds better (!) 2001-09-19 Peter Hanappe <peter@hanappe.com> * src/iiwu_sfont.c (iiwu_sample_import_sfont): better checking for minimum sample size, loop start and loop end offsets. 2001-09-17 Peter Hanappe <peter@hanappe.com> * src/iiwu_synth.c (iiwu_sp_write): improved calculation of filter coefficients (new_iiwu_synth): using settings structure 2001-09-09 Peter Hanappe <peter@hanappe.com> * src/iiwu_synth.h (iiwu_phase_decr): fixed bug * src/iiwu_synth.c (iiwu_synth_noteoff): noteoff now turns off the oldest note only (instead of all notes with the given channel and key) 2001-07-10 Peter Hanappe <peter@hanappe.com> * src/iiwu_midi.h: removed midi driver join function. updated all structures, implementations and callers. 2001-07-04 Peter Hanappe <peter@hanappe.com> * src/iiwuplay.c (print_help): corrected errors in the help and usage display. 2001-06-29 Peter Hanappe <peter@hanappe.com> * src/iiwu_synth.c (iiwu_synth_one_block): new function. fills the buffer with fresh samples. (iiwu_synth_write_lr): now calls iiwu_synth_one_block. the synthesizer uses fixed synthesis buffer size, independent of the requested buffer length passed to iiwu_synth_write_lr. (iiwu_revmodel_processreplace): new uses fixed IIWU_BUFSIZE value for buffer length. (iiwu_revmodel_processmix): uses fixed IIWU_BUFSIZE value 2001-06-22 Peter Hanappe <peter@hanappe.com> * src/iiwusynth.c (iiwu_handle_fonts): new shell command to list the loaded fonts. (iiwu_handle_mstat): new shell command to list the statistics of the midi driver. 2001-06-19 Peter Hanappe <peter@hanappe.com> * src/iiwusynth.c (main): Several command line options are available to select the midi and audio driver and device. Using the getopt function on posix machines. 2001-06-16 Peter Hanappe <peter@hanappe.com> * src/iiwu_synth.h: new iiwu_revmodel_presets_t structure to store reverb presets (concert hall, room, ...) * src/iiwu_synth.c (iiwu_synth_write_lr): now using 1 reverb for all synthesis processes. the synthesis processes now receive a left and right buffer, a reverb buffer, a chorus buffer, and a monobuffer for their temporarry storage. reverb now always on. (new_iiwu_sp): no longer allocating a reverb module nor a monobuf. only one reverb model and monobuffer allocated by the synth object (read: much less memory usage). * src/iiwu_midi.c (iiwu_player_callback): fixed timing errors. midi should play correctly now. 2001-06-09 Peter Hanappe <peter@hanappe.com> * src/iiwu_synth.c (iiwu_sp_write_lr): now using a 64-bits fixed-point number to calculate the phase of the wavetable. because of rounding erros, the float value I used before gave terrible tuning problems. I updated all the intepolation macros. * src/iiwusynth_priv.h: included the iiwu_phase_t data type. This type represents a 64-bits fixed-point number. It's used to hold the phase in the wavetable. 2001-06-08 Peter Hanappe <peter@hanappe.com> * src/iiwu_midi.c (new_iiwu_midi_handler): Better support for runtime selection of the MIDI driver (using the iiwu_mdriver_definition_t structure) * src/iiwu_auport.c (new_iiwu_auport): Better support for runtime selection of the audio driver (using the iiwu_adriver_definition_t structure) 2001-06-07 Peter Hanappe <peter@hanappe.com> * src/iiwu_synth.c (iiwu_sp_write_lr): rewrote the dsp function to accept a seperate left and right channel buffer. (iiwu_sp_write_lr): using cubic hermite interpolation by default. (iiwu_synth_write_lr): added a dsp function to accept a seperate left and right channel buffer. 2001-05-26 Peter Hanappe <peter@hanappe.com> * src/iiwu_midi.c (iiwu_midi_parser_parse): Fixed a bug in the midi parser (running status should not be split in a status and channel part for system messages). (iiwu_midi_send_event): pitch bend events are now handled 2001-05-25 Peter Hanappe <peter@hanappe.com> * src/iiwu_midi.c (iiwu_midi_file_getc): Fixed bug when pushed back byte equals zero (mf->c >= 0) * src/iiwu_midi.c (iiwu_midi_file_getc): Fixed bug when pushed back byte equals zero (mf->c >= 0) 2001-05-24 Peter Hanappe <peter@hanappe.com> * src/iiwusynth.c: added the stupidly simple interpreter * src/iiwu_synth.c: removed all param strcutures. * src/iiwu_synth.c (iiwu_channel_get_banknum): new function 2001-05-23 Peter Hanappe <peter@hanappe.com> * src/iiwu_synth.c (iiwu_sp_write): Fixed devide by zero in filter * src/smurf.c (gerr): applied Josh's patch: using va_list now (as it should). 2001-05-22 Peter Hanappe <peter@hanappe.com> * src/iiwu_midi.c: the midi handler is now devided in a dummy iiwu_midi_handler_t and a "low level" driver. This allows for multiple midi drivers to be compiled in. * src/iiwusynth.h: renamed iiwu_midi_driver_t to iiwu_midi_handler_t * src/iiwu_auport.c (new_iiwu_auport): new "driver" argument to select between alsa, oss, midishare, directx, ... * configure.in: preparing for the first pre-release, version 0.0.1