Hezký den všem,
mám trochu dost specifickou otázku a nevím, jestli mi vůbec bude někdo tady schopný poradit, ale za pokus nic nedám.
Kdysi jsem vytvořil přehrávač primárně pro můj tablet s Windows napsaný v Pythonu a Qt4/QML. K vidění je
tady.
Jelikož projekt PySide a s ním i portace Pythonu na mobilní OS (Android, Sailfish, Ubuntu, Tizen) je v podstatě mrtvý, rozhodl jsem se program přepsat do Qt5 a C++. Narazil jsem ale na poměrně zásadní problém.
Základní funkcí, bez které si nedokážu použitelný přehrávač představit, je podpora replay gain, tedy vyrovnání hlasitosti různých skladeb. Funguje to tak, že se soubor oskenuje a do tagu se zapíše hodnota o kolik se má zesílit nebo zeslabit tak, aby všechny skladby hrály stejně hlasitě. V předchozí Qt4 veriz jsem jako backend používal Phonon a ten měl funkci setVolumeDecibel, která umožňovala hlasitost srovnat. V Qt5 se přešlo na QtMultimedia a tato funkce zmizela. Existuje pouze setVolume s rozsahem hodnot 0-100, což je pro moje účely nepoužitelné.
Nastává teda otázka, co dál. Jedna možnost je nabourat se nějak hlouběji pod kapotu QtMultimedia a tam s hlasitostí hýbat. Na to ale rozhodně moje znalosti a schopnosti nejsou dostatečné, s C/C++ teprve začínám. Další možností je použít komplet jiný backend. Napadá mě GStreamer a libVLC.
GStreamer běží na platformách na které mířím - Windows, Linux a Android. Ale je to obrovský balík a hlavně je postavený kolem GTK+. Existuje sice nějaký binding QtGstreamer, ale ten je postavený na zastaralých knihovnách GStreamer 0.10 a zdá se, že vývoj pro 1.x nějak usnul...
Další možností je libVLC. I ta knihovna by měla fungovat na všech požadovaných platformách, ale nemám s ní vůbec žádné zkušenosti. Ale dostupná dokumentace mi přijde poměrně nekompletní a nevím, jestli to není vzhledem k mým slabým znalostem C/C++ příliš low-level záležitost.
Máte s tím někdo nějaké zkušenosti? Také jsem slyšel, že je problém s dynamicky linkovanými knihovnami na Androidu. Je to pravda?
Předem děkuju za jakoukoliv radu.