Hi, I am the lead developer of the Music Player Daemon project, and I have written a fluidsynth plugin for it:
http://git.musicpd.org/cgit/master/mpd.git/tree/src/decoder/fluidsynth_plugin.c There were lots of difficulties during the development, and I couldn't solve some of them. Let me drop a load of rants: - the API expects "char*" parameters, but I have only "const char*" - that means I have to duplicate all strings which are passed to fluidsynth. - fluidsynth is undocumented. http://www.nongnu.org/fluid/api/ lists just the prototypes http://www.toncat.de/fluidsynth/ and http://personales.ya.com/berarma/fluidsynth/html/ are a good start, but so incomplete that they're mostly unusable. Most of the time, I had to read fluidsynth's source, or the source of applications using fluidsynth. For my purposes, there is no good sample code. - there is no way to tell whether the "player" has finished playing a MIDI file - the "status" attribute is not exposed. Even the "fluidsynth" program does not exit when the song is finished, because it doesn't know either. - the "player" insists on playing in real-time, all my attempts to fill MPD's internal audio buffer as fast as possible failed, there was only silence in the buffer after the fluid_synth_write_s16() call. The same might be true when MPD is paused - I suspect fluidsynth will continue playback, but havn't tried yet (wasted more than enough time with figuring out the API). I don't want fluidsynth to make any assumptions on the wall clock - I want to read PCM samples out of it whenever I feel like doing so, as fast as the CPU can handle it. Just like all the other decoder libraries. - error handling in fluidsynth is awful. Most functions return an undocumented "int", its meaning can only be derived from reading the source, but I cannot grasp what's gone wrong, I cannot generate a usable error message. Non-fatal errors (as well as fatal errors) are printed to the log file, but the logging subsystem of fluidsynth is not thread safe (i.e. thread aware), so I cannot use the logging callback as a hack. In general, libraries shouldn't log at all, they should return good error codes/messages in some way. The application should decide what to do when an error occurs. - I don't want fluidsynth to create a new thread. Synthesize the MIDI file synchronously in the thread which called the library. Please keep me on Cc in responses, because I'm not subscribed to the mailing list. Max ------------------------------------------------------------------------------ Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM) software. With Adobe AIR, Ajax developers can use existing skills and code to build responsive, highly engaging applications that combine the power of local resources and data with the reach of the web. Download the Adobe AIR SDK and Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com _______________________________________________ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team