Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python synthesize midi with fluidsynth

I can't import fluidsynth. [Maybe there's an better module?]

I'm trying to synthesize midi from python or pygame. I can send midi events from pygame. I'm using mingus, and it seemed pyfluidsynth would be good / easiest.

I think this means pyfluidsynth is installed, but a seperate fluidsynth was not. I don't know if it requires a 'fluidsynth' installer to work?

test.py:

import fluidsynth
print ":("

error:

Traceback (most recent call last):
  File "test.py", line 1, in <module>
    import fluidsynth
  File "C:\Users\jake\AppData\Roaming\Python\Python27\site-packages\fluidsynth.py", line 34, in <module>
    raise ImportError, "Couldn't find the FluidSynth library."
ImportError: Couldn't find the FluidSynth library.

using: python 2.7-win32

like image 504
ninMonkey Avatar asked Apr 25 '11 22:04

ninMonkey


2 Answers

The python fluidsynth module is looking for the FluidSynth binary library file (ie fluidsynth.dll).

To get this you can download, compile and install http://sourceforge.net/projects/fluidsynth/files/fluidsynth-1.1.3/

OR

you may be able to find projects using fluidsynth (ie QSynth) which include precompiled copies of the .dll file.

like image 156
Hugh Bothwell Avatar answered Nov 05 '22 05:11

Hugh Bothwell


Yes you need the FuildSynth lib also (dll for windows).

To make it works with:

  • fluid synthsynth 1.1.6
  • python26 (32bits)
  • pyFluidSynth 1.1.4
  • Windows

I've put everythings in the same directory (fluidsynth dll, PyFluidSynth Module, python script).

and changes the following lines in the pyFluidSynth modules (from line 30) :

# A short circuited or expression to find the FluidSynth library
# (mostly needed for Windows distributions of libfluidsynth supplied with QSynth)
# and Dynamically link the FluidSynth library

lib = find_library('fluidsynth') or find_library('libfluidsynth') or find_library('libfluidsynth-1')
if lib is None:
   _fl = ctypes.cdll.LoadLibrary("./libfluidsynth")
   lib = "ok";
else:
  _fl = CDLL(lib)   

if lib is None:
    raise ImportError, "Couldn't find the FluidSynth library."


# Helper function for declaring function prototypes

It works fine with this setup.

like image 27
Damien Henry Avatar answered Nov 05 '22 06:11

Damien Henry