Tässä on tullut jo jonkin aikaan etsittyä sopivinta vaihtoehtoa Midi tiedostojen soittoon tässä järjestelmässä.
Joskus ammoisina aikoina äänikorteissa löytyi midi jo ihan rautatavarana, mutta nykyään äänet tehdään ohjelmallisesti soundfontteja käyttäen. Äänifontteja tarvitaan eri instrumenteille, näillä juuri esim. piano saadaan kuulostamaan pianolta.
Mitään valmista systeemiä ei tähän löydy, mutta vaihtoehtoja mistä rakentaa on kyllä olemassa.
- Käännetään jokin vanha kunnon software syntetisaattori tähän järjestelmään, plus kaikki ne miljoona kirjastoa, esimerkiksi FluidSynth
- Yritetään löytää gstreamer pluginit, tosin voi olla että tämäkin vaatii jonkin soft.synthin
- JavaScript soft.synth Jasmid on mielenkiintoinen tuttavuus, ohjelma toimii selaimessa, ja äänitiedostot löytyy htlm tiedoston sisällä. Mutta ikävä kyllä Sailfish selain ei oikein "tahdista" ääniä ... itseasiassa en ole saanut mitään ääniä tulemaan ulos MIDI.js ja Jasmidia käyttäen, puuttuu web audio api, mutta kokeilin desktop versiona QML selaimella soittaa midä .. niin ei oikein innostanut.
Sinänsä olisi kuitenkin mielenkiintoinen vaihtoehto, koska tällä voisi yhdistää grafiikkaa ja ääntä, ja vieläpä yli-verkon.
Jos käännetään jokin ohjelma ja tehdään rpm paketti, niin ensimmäisenä tulisi mieleen WildMidi, vähäisten resurssien takia tämä olisi ehkä sopivin.
CPU käyttöaste eri ohjelmilla
6 % -WildMIDI
68 % -FluidSynth + pulseaudio
16% -Timidity + pulseaudio
56% - JavaSound (ei JavaScript)
17% - GStreamer
Lisäksi WildMidiin löytyy gstreamer plugin.
gst-launch-0.10 filesrc location="song.mid" ! decodebin ! alsasink
----
Projekti on nyt siinä vaiheessa, että Wildmidi on asennettu Timidityn äänifonteilla, koska se käyttää niitä kun WildMidi äänifontteja ei ole olemassakaan, myös voisi kokeilla freepatch fonteilla.
lisäksi gstreamer0.10-wildmidi plugin on asennettu (Sailfish:ssä on gstreamer 0.10 versio).
Ja hienostihan se soi!
Mutta vielä puuttuu joitakin osia, esim. konsoliohjelmaa ei ole asennettu, mutta sitä ei välttämättä edes tarvita, tämä riippuu ihan gstreameristä.
Python käynnistää soittamisen subprocess.Popen(Gst_litany)
gst-launch-0.10 filesrc location="song.mid" ! wildmidi ! audiopanorama panorama=+0.00 ! volume volume=0.2 ! alsasink
panorama=-0.50 tai simple panorama=-0.50
Midissä on tärkeää että kappaletta voidaan soittaa mistä kohdin tahansa, ja tämä on projektin seuraava haaste.
Tähän kyllä löytyy elementti nimeltä "gnlfilesource" jolla voidaan asettaa positio ja pituus mihin kohtaan muistia tahansa, jotenkin näin,
gst-launch-0.10 gnlfilesource location=file:///hillbilly.mid ! wildmidi ! media-start=0 media-duration=20000000000 ! alsasink
mutta eihän tämä tietenkään toimi .mid tiedostoilla wildmidin kanssa ... wav toimii kyllä.
Joten tähän sitten koodataan oma ohjelma ja unohdetaan gst-launch, ja myös syystä että gst-launch on aika staattinen ... (vs. gst-client) .
Eli tähän koodataan oma ohjelma ... miksei sitten jokin valmis kelpaa ?
Aluksi täytyy olla kirjastot:
PyGST taitaa olla koodattu Python 2.7, ainakin gstreamer-0.10 versio ja muutenkin aivan liian iso paketti asennettavksi, samoin kuin qt5-gstreamer, ja kun ne vielä pitäisi aluksi kääntää tähän ympäristöön.
joten tästä aloitetaan koska nämä on jo valmiina
#include <gst/gst.h>
#include <glib.h>
Täältä löytyy esimerkki hyvin yksinkertaisesta ohjelmasta, mitä voi käyttää pohjana
simple-player
-------------------------
HTML5 tiedoston kautta voidaan myös toistaa midiä jos tarvittavat pluginit on asennettu, mutta tässä tulee selaimen tuki esille, kappaletta kun on myös kyettävä muokkaamaan.
Lisäksi varsinainen midi sävellysohjelmaa ei ole edes aloitettu... ja se tehdään myös Pythonilla.

Ei kommentteja:
Lähetä kommentti