On Sat, Nov 3, 2012 at 6:44 AM, David Pearah <pea...@gmail.com> wrote:

> Hello.
>
> I am an experienced web programmer (Javascript, HTML, Flash, Java) but
> relatively new to MIDI. I am researching a project requires both 1.
> real-time audio synthesis and 2. real-time audio streaming from server to
> client, but I wanted to get insight/direction before moving forward with
> FluidSynth Very simply, this is what I'm trying to build:
>
>    - USER EXPERIENCE
>       - Web app (i.e. runs in most Mac + Windows desktop browsers) that
>       plays MIDI files with high-quality grand piano SoundFont
>       - Real-time controls for speed and pitch (along with typical
>       controls for volume, pause/play, etc.)... so there's no option to
>       pre-generate audio files since you can't anticipate what pitch/key
>       combination will be requested in the middle of playing the song.
>    - ARCHITECTURE:
>       - My assumption is that it is NOT a good idea to have the softsynth
>       running in the browser (computationally intense, large SoundFont 
> download,
>       install fat client vs. web app, etc.)
>       - *So this leads me to believe that the softsynth should be running
>       in real-time on the server, generating audio that can be streamed to
>       the browser app, which would be very lightweight since all it would 
> need to
>       do is play streaming audio*
>       - The controls for speed + pitch would actually go back to the
>       server, and in real-time cause the softsynth to generate the 
> corresponding
>       audio which would be streamed to the web client
>
> So my questions are:
>
>    1. Can Fluidsynth be installed on a server and generate real-time
>    audio fast enough to give up with playback, i.e. given typical server CPU
>    and single piano instrument, is it reasonable to expect that FluidSynth can
>    generate audio in faster than real-time?
>    2. Can the FluidSynth API be accessed in mid-song to change the pitch
>    and velocity, or does it have to start over from the beginning of the song?
>    3. Do you know of anyone who has taken the audio output from
>    FluidSynth and streamed it to another client?
>
>
> I greatly appreciate your time to review these questions and hopefully
> point me in the right direction. And for those who are interested, I'm
> willing to pay for a short-term development contract to help get this
> project started.
>
> Thanks!
>
> -- Dave
>
>
Hello Dave,

I have also been interested in such an application of FluidSynth for some
time now, for use with the online SoundFont instrument database project
that I was working on.  In that case it would be used to preview SoundFont
instruments with a Javascript or Flash based keyboard interface for playing
notes, etc.  Seems like a similar application to yours.

My own thoughts around the architecture of such a system is the following:

* Would be a server based solution, with a server application written in C.

* Server application would handle spawning FluidSynth rendering threads
using libFluidSynth to stream to users.

* Server would provide a FastCGI interface for control FluidSynth instances.

* Client application interface would be Javascript or Flash and use AJAX to
control the FluidSynth instance.

* Server application would interface to a Shoutcast server to stream
encoded MP3 data.


One thing about such a system is it would require quite a lot of CPU and
probably would not scale very well.  So in cases where there were a lot of
users (say more than a couple), a distributed server farm like topology
would be needed (synthesis servers, MP3 encoding servers, etc).

I am interested to hear the details of your offer to pay for such a project.

Best regards,

Element Green
_______________________________________________
fluid-dev mailing list
fluid-dev@nongnu.org
https://lists.nongnu.org/mailman/listinfo/fluid-dev

Reply via email to