/*************************************************************************************** * * fluidsynth~ * * Fluid Synth soundfont synthesizer for Max/MSP. * * Fluid Synth is written by Peter Hanappe et al. * see http://www.fluidsynth.org/ * * Max/MSP integration by Norbert Schnell ATR IRCAM - Centre Pompidou * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * * See file COPYING.LIB for further informations on licensing terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02110-1301, USA. * */ /* * This file contains the (mostly empty) implementation of some functions without * which Fluidsynth wouldn't compile. * * The Max/MSP version of FluidSynth tries to link only with a minimum of needed * files. Some of the linked files depend on functions that are not necessary * and that are implemnted in files we don't want to include. So, alternate or empty * implemntations of these functions are provided here. * */ #include "ftmax.h" #include "fluidsynth.h" #include "fluidsynth_priv.h" #include "fluid_settings.h" unsigned int fluid_curtime() { return (unsigned int)gettime(); } double fluid_utime(void) { return 0.0; } typedef void fluid_timer_t; typedef int(*fluid_timer_callback_t)(void *data, unsigned int msec); fluid_timer_t * new_fluid_timer(int msec, fluid_timer_callback_t callback, void *data, int new_thread, int auto_destroy) { /* just call it right away */ (*callback)(data, msec); return NULL; } void fluid_sys_config() { } char * fluid_error() { return NULL; } /* This code is (unelegantly) copied from fluid_sys.c since other parts of fluid_sys.c * that we don't need here depend on many other things that we don't want here. */ char * fluid_strtok(char **str, char *delim) { char *s, *d, *token; char c; if(str == NULL || delim == NULL || !*delim) { FLUID_LOG(FLUID_ERR, "Null pointer"); return NULL; } s = *str; if(!s) { return NULL; /* str points to a NULL pointer? (tokenize already ended) */ } /* skip delimiter chars at beginning of token */ do { c = *s; if(!c) /* end of source string? */ { *str = NULL; return NULL; } for(d = delim; *d; d++) /* is source char a token char? */ { if(c == *d) /* token char match? */ { s++; /* advance to next source char */ break; } } } while(*d); /* while token char match */ token = s; /* start of token found */ /* search for next token char or end of source string */ for(s = s + 1; *s; s++) { c = *s; for(d = delim; *d; d++) /* is source char a token char? */ { if(c == *d) /* token char match? */ { *s = '\0'; /* overwrite token char with zero byte to terminate token */ *str = s + 1; /* update str to point to beginning of next token */ return token; } } } /* we get here only if source string ended */ *str = NULL; return token; } int fluid_log(int level, char *fmt, ...) { char buf[1024]; va_list args; va_start(args, fmt); vsprintf(buf, fmt, args); va_end(args); if((level > 0) && (level < LAST_LOG_LEVEL)) { post("fluidsynth~ core (level %d): %s", level, buf); } return -1; } void fluid_shell_settings(fluid_settings_t *settings) { } void fluid_audio_driver_settings(fluid_settings_t *settings) { fluid_settings_register_str(settings, "audio.driver", "", 0, NULL, NULL); } void fluid_midi_driver_settings(fluid_settings_t *settings) { fluid_settings_register_str(settings, "midi.driver", "", 0, NULL, NULL); } int fluid_midi_event_get_type(fluid_midi_event_t *evt) { return 0; } int fluid_midi_event_set_type(fluid_midi_event_t *evt, int type) { return FLUID_OK; } int fluid_midi_event_get_channel(fluid_midi_event_t *evt) { return 0; } int fluid_midi_event_set_channel(fluid_midi_event_t *evt, int chan) { return FLUID_OK; } int fluid_midi_event_get_key(fluid_midi_event_t *evt) { return 0; } int fluid_midi_event_set_key(fluid_midi_event_t *evt, int v) { return FLUID_OK; } int fluid_midi_event_get_velocity(fluid_midi_event_t *evt) { return 0; } int fluid_midi_event_set_velocity(fluid_midi_event_t *evt, int v) { return FLUID_OK; } int fluid_midi_event_get_control(fluid_midi_event_t *evt) { return 0; } int fluid_midi_event_set_control(fluid_midi_event_t *evt, int v) { return FLUID_OK; } int fluid_midi_event_get_value(fluid_midi_event_t *evt) { return 0; } int fluid_midi_event_set_value(fluid_midi_event_t *evt, int v) { return FLUID_OK; } int fluid_midi_event_get_program(fluid_midi_event_t *evt) { return 0; } int fluid_midi_event_set_program(fluid_midi_event_t *evt, int val) { return FLUID_OK; } int fluid_midi_event_get_pitch(fluid_midi_event_t *evt) { return 0; } int fluid_midi_event_set_pitch(fluid_midi_event_t *evt, int val) { return FLUID_OK; }