J
John O'Hagan
Hi,
I'm using the socket module (python 2.5) like this (where 'options' refers to
an optparse object) to connect to the Fluidsynth program:
host = "localhost"
port = 9800
fluid = socket(AF_INET, SOCK_STREAM)
try:
fluid.connect((host, port)) #Connect if fluidsynth is running
except BaseException:
print "Connecting to fluidsynth..." #Or start fluidsynth
soundfont = options.soundfont
driver = options.driver
Popen(["fluidsynth", "-i", "-s", "-g", "0.5",
"-C", "1", "-R", "1", "-l", "-a", driver, "-j", soundfont])
timeout = 50
while 1:
timeout -= 1
if timeout == 0:
print "Problem with fluidsynth: switching to synth."
play_method = "synth"
break
try:
fluid.connect((host, port))
except BaseException:
sleep(0.05)
continue
else:
break
(I'm using BaseException because I haven't been able to discover what
exception class[es] socket uses).
The problem is that this fails to connect ( the error is "111: Connection
refused") the first time I run it after booting if fluidsynth is not already
running, no matter how long the timeout is; after Ctrl-C'ing out of the
program, all subsequent attempts succeed. Note that fluidsynth need not be
running for a success to occur.
I've also tried it without the while loop, simply sleeping for a few seconds
to give fluidsynth time to start (not a preferred approach as I want a short
startup), but the same thing happens.
I am a long way from being a networking guru and am at a loss as to how to
debug this. Maybe someone can point out some flaw in my use of socket.
Thanks,
John O'Hagan
I'm using the socket module (python 2.5) like this (where 'options' refers to
an optparse object) to connect to the Fluidsynth program:
host = "localhost"
port = 9800
fluid = socket(AF_INET, SOCK_STREAM)
try:
fluid.connect((host, port)) #Connect if fluidsynth is running
except BaseException:
print "Connecting to fluidsynth..." #Or start fluidsynth
soundfont = options.soundfont
driver = options.driver
Popen(["fluidsynth", "-i", "-s", "-g", "0.5",
"-C", "1", "-R", "1", "-l", "-a", driver, "-j", soundfont])
timeout = 50
while 1:
timeout -= 1
if timeout == 0:
print "Problem with fluidsynth: switching to synth."
play_method = "synth"
break
try:
fluid.connect((host, port))
except BaseException:
sleep(0.05)
continue
else:
break
(I'm using BaseException because I haven't been able to discover what
exception class[es] socket uses).
The problem is that this fails to connect ( the error is "111: Connection
refused") the first time I run it after booting if fluidsynth is not already
running, no matter how long the timeout is; after Ctrl-C'ing out of the
program, all subsequent attempts succeed. Note that fluidsynth need not be
running for a success to occur.
I've also tried it without the while loop, simply sleeping for a few seconds
to give fluidsynth time to start (not a preferred approach as I want a short
startup), but the same thing happens.
I am a long way from being a networking guru and am at a loss as to how to
debug this. Maybe someone can point out some flaw in my use of socket.
Thanks,
John O'Hagan