Compilació de fluidsynth amb compatibilitat midishare

De wikijoan
Salta a la navegació Salta a la cerca

Introducció

Anem a compilar fluidsynth des de les fonts, amb compatibiliat del driver midi de MidiShare. La idea és que quan tingui una aplicació que utilitzi la llibreria midishare, a temps real, el que soni passi pel fluidsynth per a fer síntesi musical. Per ex, jo toco el teclat midi o el controlador midi de vent, que estaran connectats a la meva tarja de so. Els events midi passaran per l'ordinador, on s'executarà una aplicació que farà coses amb aquests events. Per exemple, canviar de forma aleatòria el programa (l'instrument que sona). El resultat el puc enviar de nou a la trageta de so i escoltar-lo pels auriculars o altaveus. Ara bé, abans de fer això, puc tenir una altra etapa que és passar la sortida pel fluidsynth, que modularà aquest so de la manera que jo vull. La gràcia és que amb el format sf2 que suporta el fluidsynth puc tenir sons reals d'instruments de vent, etc.

estudi preparatiu

fluidsynth compiled with MidiShare support -> --enable-midishare

http://fluidsynth.resonance.org/trac/wiki/BuildingFluidSynth

L'objectiu que es persegueix és que pugui fer coses del tipus:

$ fluidsynth -m midishare soundfont.sf2

-> l'entrada que em ve del driver lògic del midishare la rediregeixo en aquest cas a uns soundfonts. Alhora, el driver de midishare està connectat a una aplicació, que tant pot ser un controlador midi real com una aplicació JAVA,...

Recopilem una mica d'informció...

Would it even be possible to have both of them in the CCRMA repossitory and make a midishare enabled version of Fluidsynth?

el QSynth és la versió gràfica del Fluidsynth. En el setup, apartat MIDI, hi ha una llista dels drivers disponibles, que actualment són: alsa_seq, alsa_raw, oss. L'objectiu seria que en aquesta llista aparegués el MidiShare

http://blogdrake.net/node/324:

El resultado del proyecto es muy interesante, pero encontré algo que llamó mi atención en lo que tiene que ver con Linux y MIDI, pues el programa que empleamos permite conectar un teclado MIDI y sintetizar los sonidos desde el computador según la fuente de sonido generada, pero para eso necesitaba el teclado MIDI corriendo y el programa "midishare". Casi que tenía descartada esa opción cuando me entró el arranque por intentarlo (seguro que tenía mucha cafeína en mi organismo), descargué el midishare, lo compilé y volví a compilar la aplicación de manejo de fuentes musicales ahora con la opción del midishare y el teclado MIDI volvió a la vida pues sólo fue necesario compilar la librería "midishare" y esta se encargó de todo el resto. Ahora puedo leer MIDI con Rosegarden gracias a las configuraciones hechas por esta aplicación en forma automática. El "midishare" crea un demonio que atiende a los mensajes "midi" del puerto y del programa empleando la librería que instala, aunque también puede atender a los mensajes pues vincula simbólicamente al puerto /dev/midi con el demonio. El programa para manejar las fuentes de sonido se llama "Swami" y requiere de "fluidsynth" y de "midishare".

Y ante tanta maravilla intenté probar con el rosegarden y encontré un medio para emplear el fluidsynth de tal forma que éste sintetice el sonido si no tenemos aunque la tarjeta de sonido no se encargue de esto (como es mi caso). Desde hace 3 meses volví a tener teclado MIDI con mi PC y trabaja de vicio.

...Remove the fluidsynth dependency (and the --enable-midishare option in configure) from the spec file...

In conclusion, I am of the opinion that it would be much simpler for the user of fluidsynth on Mac OS X to pre-install the MidiShare MIDI operating system before compiling and installing fluidsynth.

Thu May 13 2004 Fernando Lopez-Lezcano <nando@ccrma.stanford.edu>

- added buildrequires, made midishare optional

$ fluidsynth --midi-driver=midishare --audio-driver=jack 8mbgmsfx.sf2
Midishare fluidsynth.png

En aquesta imatge es pot veure com es configura msconnect. Tenim l'aplicació Common Music que té com a destí fluidsynth. Recordem que de fet destí vol dir entrada, és a dir, el fluidsynth està preparat per rebre els missatges que li arriben de l'aplicació (fluidsynth --midi-driver=midishare)

You also need to hook CM to the synthesizer. Figure 3 shows off CM connected to QSynth (a GUI for Fluidsynth) by way of the MidiShare msconnect utility. In this arrangement Fluidsynth is seen running with the JACK audio driver, hence the appearance of QJackCtl.

compilació

Anem a compilar: http://fluidsynth.resonance.org/trac/wiki/BuildingFluidSynth

$ sudo apt-get install build-essential automake libtool

en aquest cas les fonts les treuré de subversion i no de CVS:

$ sudo apt-get install subversion
$ sudo apt-get install libasound2-dev               # For ALSA drivers (audio output and sequencer) -> no el tenia
[No] sudo apt-get install lib64asound2-dev             # Same as above but for 64 bit systems
$ sudo apt-get install libjack-dev                  # For Jack audio driver -> no el tenia
[No] sudo apt-get install lashd lash-bin liblash-dev   # For LASH audio application session management support
$ sudo apt-get install libreadline5-dev             # Readline command editing at the FluidSynth shell
[No] sudo apt-get install lib64readline5-dev           # Same as above but for 64 bit systems


Run the following command to checkout FluidSynth into a sub directory called fluidsynth:

$ svn co https://resonance.org/svn/fluidsynth/trunk/fluidsynth
$ cd fluidsynth
$ ./autogen.sh -> es crea configure
$./configure

obro el fitxer configure i veig que hi ha informació sobre midishare:

Optional Features:
  --enable-midishare      Compile MIDISHARE support (default=auto)
$ ./configure --enable-midishare -> OK

**************************************************************
Summary:
ALSA:                  yes
OSS:                   yes
MidiShare:             yes
JACK:                  yes
CoreAudio:             no
LADSPA support:        no
LASH support:          no
LADCCA support:        no
Readline:              yes
Profiling:             no
Debug:                 no
Trap on FPE (debug):   no
Check FPE (debug):     no
**************************************************************
$ make -> OK
$ sudo make install -> OK

Ha compilat i s'ha instal.lat bé. Tanmateix, hi ha alguna cosa que no funciona

$ fluidsynth -m midishare soundfont.sf2

fluidsynth: error: Couldn't find the requested midi driver
Failed to create the MIDI thread; no MIDI input
will be available. You can access the synthesizer 
through the console.


el que sí funciona és:

$ fluidsynth -m alsa_seq soundfont.sf2

hi ha soundfonts a

./home/joan/fluidsynth/doc/example.sf2
./home/joan/fluidsynth/sf2/VintageDreamsWaves-v2.sf2
$ fluidsynth -m alsa_seq /home/joan/fluidsynth/doc/example.sf2
> channels -> puc veure el que tinc associat als canals:
chan 0, El Cheapo Organ
chan 1, no preset
...
$ fluidsynth -m alsa_seq /home/joan/fluidsynth/sf2/VintageDreamsWaves-v2.sf2
> channels -> puc veure el que tinc associat als canals:
chan 0, FM Bells 1
chan 1, FM Carillion
chan 2, Simple Square Floot
chan 3, Grungy Ramp Bass
chan 4, Detuned Saws
chan 5, El Cheapo Organ
chan 6, Dragon Sweep
chan 7, Sheet Bass
chan 8, Resonating Pad
chan 9, TR-101 Drumset
chan 10, FM Christmas Bells
chan 11, Meat Grinder
chan 12, Church Organ
chan 13, Classic FM Bass
chan 14, Thin Sawtooth
chan 15, Triangle Dream Flute

Per comprovar el funcionament, amb el QSynth importo aquest sf2 i veig que la informació és la mateixa. Arrenco el Rosegarden, escric unes quantes notes en el track #1. Parámetros de tocar: Dispositivo: Midi Soft Synth, i aleshores escullo l'instrument que es correspon amb els instruments importats.

Download soundfonts: http://www.soundzone.info/download.php?switch=all

Em descarrego unes fonts de piano: AI-APiano02trans.SF2

http://freepats.opensrc.org/sf2/

violin_sordino.sf2 (33Mb)

Actualització (3/4/2009)

Estic amb Ubuntu 9.04 (beta)

He instal.lat fluidsynth des de les fonts, i aparentment tot ha anat bé.

Ara bé, faig

$ fluidsynth -m midishare soundfont.sf2
fluidsynth: error while loading shared libraries: libfluidsynth.so.1: cannot open shared object file: No such file or directory

$ fluidsynth -version
fluidsynth: error while loading shared libraries: libfluidsynth.so.1: cannot open shared object file: No such file or directory

La shared library la trobo a ~/fluidsynth/src/.libs (les fonts)

lrwxrwxrwx 1 joan joan     22 2009-04-03 13:04 libfluidsynth.so -> libfluidsynth.so.1.1.2
lrwxrwxrwx 1 joan joan     22 2009-04-03 13:04 libfluidsynth.so.1 -> libfluidsynth.so.1.1.2
-rwxr-xr-x 1 joan joan 367635 2009-04-03 13:04 libfluidsynth.so.1.1.2

i a /usr/local/lib (on s'instal.la finalment):

lrwxrwxrwx  1 root root      22 2009-04-03 13:04 libfluidsynth.so -> libfluidsynth.so.1.1.2
lrwxrwxrwx  1 root root      22 2009-04-03 13:04 libfluidsynth.so.1 -> libfluidsynth.so.1.1.2
-rwxr-xr-x  1 root root  367635 2009-04-03 13:04 libfluidsynth.so.1.1.2

La pista per trobar la solució l'obtinc de http://ooommm.org/sudelwiki/index.php?title=Get_qsynth_and_fluidsynth_running_with_JACK_on_Ubuntu_Feisty_Fawn_7.04#fluidsynth

Sembla ser que en el procés de configure espera trobar les llibreries a /usr/lib:

Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --wi
th-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.1 --en
able-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --enable-checking=release i486-linux-gnu

La solució ve ficant un enllaça simbòlic entre on estan realment les llibreries i on espera trobar-les

$ sudo ln -s /usr/local/lib/libfluidsynth.so.1 /usr/lib/libfluidsynth.so.1 

Aquesta és la manera que m'ha funcionat. He intentat abans fer-ho d'una altra manera, que és editar el fitxer configure, i allà on busca les llibreries posar també com a alternativa /usr/local/lib (que a vegades o posa o a vegades no):

sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"

però la veritat és que compila bé però em passava el mateix, que no troba la shared library. La solució de l'enllaç simbòlic és la que ha funcionat.

$ fluidsynth -version
Unknown option e
FluidSynth version 1.0.8
Copyright (C) 2000-2006 Peter Hanappe and others.
Distributed under the LGPL license.
SoundFont(R) is a registered trademark of E-mu Systems, Inc.

Usage: fluidsynth [options] [soundfonts]
Try -h for help.

i ara ja funciona:

$ fluidsynth -m midishare soundfont.sf2

lash_open_socket: could not connect to host 'localhost', service '14541'
lash_comm_connect_to_server: could not create server connection
no message buffer overruns
jackd 0.116.1
Copyright 2001-2005 Paul Davis and others.
jackd comes with ABSOLUTELY NO WARRANTY
This is free software, and you are welcome to redistribute it
under certain conditions; see the file COPYING for details

JACK compiled with System V SHM support.
loading driver ..
creating alsa driver ... hw:0|hw:0|1024|2|48000|0|0|nomon|swmeter|-|32bit
control device hw:0
configuring for 48000Hz, period = 1024 frames (21.3 ms), buffer = 2 periods
ALSA: final selected sample format for capture: 16bit little-endian
ALSA: use 2 periods for capture
ALSA: final selected sample format for playback: 32bit integer little-endian
ALSA: use 2 periods for playback
lash_open_socket: could not connect to host 'localhost', service '14541'
lash_comm_connect_to_server: could not create server connection
Connected to JACK server with client name 'LASH_Server'
Opened ALSA sequencer with client ID 128
Listening for connections
Created project project-1 in directory /home/joan/audio-projects/project-1
Added client c992208e-3dc8-4643-8c4a-419c8b64070d of class fluidsynth to project project-1
Parameter 'soundfont.sf2' not a SoundFont or MIDI file or error occurred identifying it.
fluidsynth: warning: Jack sample rate mismatch, expect tuning issues (synth.sample-rate=44100, jackd=48000)
FluidSynth version 1.0.8
Copyright (C) 2000-2006 Peter Hanappe and others.
Distributed under the LGPL license.
SoundFont(R) is a registered trademark of E-mu Systems, Inc.

Type 'help' for information on commands and 'help help' for help topics.

> 

creat per Joan Quintana Compte, ocutbre 2008