John O'Hagan wrote: > Hi, > > I'm writing an algorithmic music program which generates lists of numbers > representing notes and durations. The results can be printed as scores and > played as midi files using lilypond, and to play the results as they are > generated (i.e., bar by bar), I'm using the sox synth. > > That's pretty limited, however, so I thought that fluidsynth might be the > way forward. > > The simplest solution would be to translate my number lists into noteon > commands, etc, and pipe them to fluidsynth. > > But I need a little help understanding the fluidsynth shell. > > When that is active, I can type commands in, but I cant figure out how to > pipe them from my program. I tried sending a file object to stdout but it > seemed to just disappear. Also, when I try to run fluidsynth with the -i > switch, (no shell), it seems to start up, then immediately exit. > > I can get a result by translating my data into a text-to-midi program, > then piping that to, say, pmidi, which plays via fluidsynth, but that seems > very roundabout. > > Any advice?
Use the TCP/IP shell server mode. QSynth enables it in Linux, or you can enable it in the command line client with the argument "-s, --server". By default, the shell port is 9800/tcp, but you can change the number with the setting "shell.port", for instance: $ fluidsynth -i -s -o "shell.port=9988" ... To send commads to the shell server, use the telnet protocol: $ telnet localhost 9988 noteon 1 66 100 noteoff 1 66 ... Using the bash shell, or a bash script: $ echo "noteon 1 60 100" > /dev/tcp/localhost/9988 $ echo "noteoff 1 60" > /dev/tcp/localhost/9988 ... Hope this helps. Regards, Pedro _______________________________________________ fluid-dev mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/fluid-dev
