Compilació de fluidsynth amb compatibilitat midishare
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
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