https://foro.gambas-es.org/viewtopic.php?f=16&t=8127
-----------------------------------
Shell
Lunes, 29 Junio 2020, 12:51

Problema Reproduciendo Midis Con La Librería PyGame. Timidity
-----------------------------------
Buenas!.

Copio y pego el mensaje enviado a Vuott, es que sé que a Vuott le gusta el tema de los midis.


Tu sabes que uso Python y me gusta "un poco" el tema de los videojuegos, crear pequeños ejemplos de estos. Muy sencillos.
Hace unos días he retomado el tema de la librería Pygame para Python. En realidad intento llevar cosas a Gambas y comprender como
funciona en un lenguaje para llevarlo a otro.

En principio la librería Pygame es un "traductor" de SDL1. Estaba viendo el tema de reproducir sonidos usando la librería Pygame. 
Hace bastante que me funcionaba sin problema reproducir archivos midis usando la librería PyGame. Llevo mucho tiempo sin volver a usarlos.

De buenas a primera ya no reproduce midis.Era el único formato que se le resistía estos días.
Pero debe ser más bien algún problema de la librería pygame, algún cambio que ha tenido.

Primero no encontraba el archivo timidity.cfg en /etc. Realmente se encuentra en /etc/timidity/
Eso lo solucioné creando un enlace simbólico.

Pero ahora surgió otro problema, un error sintáctico cuando intentaba abrir la canción midi.
Tu sabes que en timidity.cfg se tiene que configurar los bancos de instrumentos. En este caso son sound font 2, o sf2
En mi caso:

Estos son los bancos de instrumentos:

[quote]
-rw-r--r-- 1 root root 142M feb 24  2008 FluidR3_GM.sf2
-rw-r--r-- 1 root root 3,1M feb 24  2008 FluidR3_GS.sf2
-rw-r--r-- 1 root root 5,7M jun 17  2015 TimGM6mb.sf2
[/quote]

Y en el timidity.cfg los localiza de esta forma:

[quote]
...
# By default, try to use the instrument patches from freepats:
# source /etc/timidity/freepats.cfg
soundfont /usr/share/sounds/sf2/FluidR3_GM.sf2
[/quote]

No he activado esta parte:

[quote]
# alternatively, you can use the fluid-soundfont:
#source /etc/timidity/fluidr3_gm.cfg
#source /etc/timidity/fluidr3_gs.cfg
[/quote]

Al final acabé compilando de cero la librería Pygame.

https://www.pygame.org/wiki/CompileUbuntu?parent=

La página olvidaba añadir alguna dependencia. La añadí manualmente.
Cuando fui a comprobar que todos los ejemplos de test de la librería funcionaban, vi error en el "mixer",
cuando fue a usar "midis".

[spoiler]
loading pygame.tests.mixer_music_test
Traceback (most recent call last):
  File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/usr/local/lib/python3.6/dist-packages/pygame-2.0.0.dev11-py3.6-linux-x86_64.egg/pygame/tests/__main__.py", line 144, in <module>
    run_and_exit(*args, **kwds)
  File "/usr/local/lib/python3.6/dist-packages/pygame-2.0.0.dev11-py3.6-linux-x86_64.egg/pygame/tests/test_utils/run_tests.py", line 352, in run_and_exit
    total, fails = run(*args, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/pygame-2.0.0.dev11-py3.6-linux-x86_64.egg/pygame/tests/test_utils/run_tests.py", line 228, in run
    results.update(run_test(module, **options))
  File "/usr/local/lib/python3.6/dist-packages/pygame-2.0.0.dev11-py3.6-linux-x86_64.egg/pygame/tests/test_utils/test_runner.py", line 285, in run_test
    suite.addTest(loader.loadTestsFromName(module))
  File "/usr/lib/python3.6/unittest/loader.py", line 153, in loadTestsFromName
    module = __import__(module_name)
  File "/usr/local/lib/python3.6/dist-packages/pygame-2.0.0.dev11-py3.6-linux-x86_64.egg/pygame/tests/mixer_music_test.py", line 13, in <module>
    class MixerMusicModuleTest(unittest.TestCase):
  File "/usr/local/lib/python3.6/dist-packages/pygame-2.0.0.dev11-py3.6-linux-x86_64.egg/pygame/tests/mixer_music_test.py", line 195, in MixerMusicModuleTest
    @unittest.skipIf(os.environ['SDL_AUDIODRIVER'] == 'disk',
  File "/usr/lib/python3.6/os.py", line 669, in __getitem__
    raise KeyError(key) from None
KeyError: 'SDL_AUDIODRIVER'
[/spoiler]

Al crear la compilación a mano, automáticamente la versión de la librería pygame se ha puesto en la versión 2 y está usando sdl2.

Pero yo no paré ahí. Un ex-cónsul romano no se rinde tan fácilmente sin presentar batalla.
Así que fui al ejemplo que tenia creado hace tiempo y quise probar la reproducción de los archivos midis.
Y....el midi comenzó a sonar!.  :shock: 

No obstante la consola mostraba un error de que no encontraba algo que quería, te lo añado:

[quote]
pygame 2.0.0.dev11 (SDL 2.0.8, python 3.6.9)
Hello from the pygame community. https://www.pygame.org/contribute.html
fluidsynth: error: Unable to open file "/usr/share/sounds/sf3/FluidR3Mono_GM.sf3"
fluidsynth: error: Couldn't load soundfont file
fluidsynth: error: Failed to load SoundFont "/usr/share/sounds/sf3/FluidR3Mono_GM.sf3"
fluidsynth: warning: Failed to pin the sample data to RAM; swapping is possible.
[Finished in 404.8s]
[/quote]

¿ sf3 ?. Creía que el estandar era sf2.
Logicamente ni la extensión que tengo de los bancos de instrumentos es sf2 ni el directorio es el mismo.
Pero estaba sonando....

Fui de paso a ver el código fuente de timidity para compilarlo manualmente...antiguo, antiguo..no hay nada nuevo de este.

Da como a entender que los midis son algo del pasado.   :shock: 

Te he escrito este mensaje por que sé que te gusta el tema de los mdis.
No te estoy solicitando que me hables de algo que no conoces, Python y la librería PyGame.
Pero si en lo común que sea de midis, formatos, versiones.  :wink: 

Parece como si los midis hayan perdido mucho en los tiempos actuales.
Así que no te extrañes que "un día" los ejemplos ya no vengan con midis y ya incorporen el audio en formatos "mp3" o parecido.

He encontrado esto en el gestor de paquetes del sistema:

[quote]
The sf3convert tool can be used to convert an SF2 SoundFont
into SF3 format, or into C code for embedding into a binary.

The SF3 SoundFont format is the same as SF2, except it uses
an OGG container instead of WAV for the patches contained
in it. Current synthesisers, such as MuseScore and FluidSynth,
expect the Vorbis codec to be used, which is lossy; hence, an
SF3 SoundFont is considered to have a corresponding SF2 one
as source, and to be compiled via this tool.
[/quote]

Y esto es mejor aun:

[quote]
This is the new standard hard disc space-saving SF3 format
soundfont as shipped with MuseScore 2.2 and newer.

MuseScore_General has a low installed size footprint (although
larger than its antecessor fluidr3mono-gm-soundfont because it
focuses on improving quality), while providing the large GM
(General MIDI) sound set and some extras.
As it comes under the MIT licence, it can be used in most settings.

It can be used with most modern MIDI synthesisers which support
the SF3 format, although early implementations (such as the one
from MuseScore before release 2.2) had bugs making the resulting
sound bad; instead use fluidr3mono-gm-soundfont for those.

This package will be installed into /usr/share/sounds/sf3/ which
is the standard Debian location for system-wide SF3 soundfonts.
[/quote]

Todos son cambios que no todos los llevan igual y luego las cosas no funcionan.
Actualizas en plan "me tiro a la piscina", pero es que no deberías desconfiar, sobre todo cuando algo ha funcionado siempre....

No sé nada de soluciones, la más próxima que encontré fue esta:

https://github.com/pygame/pygame/issues/343

Tema cerrado hace 29 dias.

"Closing because this doesn't seem to happen with SDL2.".....

..actualicen a SDL2..

¿ Realmente los programadores van acorde ?.  :shock: 
Cosas que se quedan atrasadas, autores que no ponen al día los ejemplos, que den soluciones.. :evil: 

Puede que PyGame este ahora tomando el camino hacia SDL2.

De todas formas si llevan bastante tiempo con una versión de SDL, no siempre los cambios son para mejor...ataque de bichos!.  :twisted: 
Puede que este aun la cosa verde.

Saludos


-----------------------------------
Shell
Lunes, 29 Junio 2020, 13:28

Re: Problema Reproduciendo Midis Con La Librería PyGame. Timidity
-----------------------------------
Lo que si es verdad es lo que está consumiendo de cpu cuando reproduce!.  :shock: 

 [img]https://foro.gambas-es.org/files/images/768/consumoreproducionmidi.png[/img] 

Algo pasa

Saludos


-----------------------------------
Shell
Lunes, 29 Junio 2020, 13:43

Re: Problema Reproduciendo Midis Con La Librería PyGame. Timidity
-----------------------------------
Un poco antigua la versión que trae Linux Mint 19.1 de Fluidsynth: 1.1.9-1....

La más actual es la 2.1.3.

Fijaros segun distro y versiones: Directamente pone Ubuntu, ni Linux Mint...

[url=https://github.com/FluidSynth/fluidsynth/wiki/Download#distributions]FluidSynth y distros

A ver como soluciono el problema del consumo..

Saludos


-----------------------------------
Shell
Lunes, 29 Junio 2020, 13:57

Re: Problema Reproduciendo Midis Con La Librería PyGame. Timidity
-----------------------------------
Viendo consumos...

VLC:

 [img]https://foro.gambas-es.org/files/images/768/vlc.png[/img] 

No parece admitir el solo la extensión midi

Cuando uso midi desde el navegador inicia el XPlayer por defecto, pero el consumo es mínimo.

Saludos


