Portál AbcLinuxu, 30. dubna 2025 10:10
TepSonic je malý, jednoduchý, rychlý, multiplatformní audio přehrávač napsaný v C++ a Qt, který bych rád představil i komunitě tady, na abíčku.
TepSonic, podobně jako třeba Amarok, podporuje kolekce. Data se ukládají do SQLite nebo MySQL databáze. Je snadno rozšiřitený formou pluginů, ale zatím má jen plugin pro spojení se službou na Last.fm. Nemá moc žádných hustodémonsky-übercool featur, cílem je, aby byl malý a uměl hlavně to, co opravdu potřebuju. Nebráním se samozřejmě návrhům na nové funkce - pokud budou mít smysl a užitek, proč ne?!
Pro načítání metadat používá osvědčenou a prověřenou knihovnu taglib. Last.fm scrobbler plugin ještě donedávna používal vlastní implementaci Last.fm API, přešel jsem ale na lastfmlib (neplést s liblastfm!), která je dokonalejší než moje vlastní implementace.
Očekávám, že se objeví v diskuzi otázky typu proč radši nepřispívám do existujících projektů, takže tu i rovnou odpovím: myslím si, že tvorbou vlastního programu se naučím víc, než jen posíláním patchů do jiného projektu - takhle se naučím i něco o návrhu aplikací. Což je pravda - většinu částí jen přepisuju, jak se postupně učím řešit věci lépe.
V současnosti TepSonic podporuje 3 základní platformy: primárně Linux, ale funguje i na Windows (ačkoliv tam jsou nějaké potíže se stabilitou), a díky Petru Vaňkovi jde přeložit i na Macovi (ale nevím, jak to běhá). Ani ne za měsíc budu na privátu mít k dispozici Macbook, takže to budu moct pořádně testovat i verzi pro Macka.
Pokud někdo budete mít chuť, budu rád, když TepSonic vyzkoušíte. Uvítal bych nějakou konstruktivní kritiku, feedback, bug reporty, rád se nechám poučit jak udělat věci lépe.
Zdrojáky: git clone http://git.gitorious.org/tepsonic/tepsonic.git
Homepage: www.tepsonic.org
Bugzilla: bugs.tepsonic.org
Chtěl jsem založit i mailinglisty, ale asi bych si v nich povídal jen sám, takže zatím pokud máte nějaké připomínky, email vratil zavináč progdansoft tečka com nebo jabber progdan@jabber.cz to jistí :)
Tiskni
Sdílej:
pak jeste takova vec, mp3 a flacy mi tepsonic normalne prehraje, ale wma ignoruje, ani je neprida do kolekce. s tim by se taky melo neco udelat, jestli to hraje pres nejakej xine backend tak ten by to mel normalne umet.
no snad sem se vyzvejk jasne a srozumitelne co mi tam chybi, ale pro jistotu to este shrnu - prehravani wma a podpora various artist v kolekci (primo nutnost pro vybery a soundtracky).co mi tam chybi ... prehravani wmaKeďže ten prehrávač je len GUI k phonon, tak musíš prehrávanie wma súborov riešiť práve tam (FFmpeg si s wma poradí, takže to je asi len vec správnych prepínačov pri kompilovaní).
a nebo z pohodlnosti zustanu u konzolovyho MOC (ten to bere podle adresaru a souboru a zadny kolekce neresi, jen playlist)
hustodémonsky-übercoolKterej rok to bylo naposledy vtipný? Jinak program nevypadá špatně. Dokonce bych řekl, že vypadá skoro stejně dobře jako Rhythmbox. ;)
Očekávám, že se objeví v diskuzi otázky typu proč radši nepřispívám do existujících projektů, takže tu i rovnou odpovímTakové otázky vesměs pokládají přihřátí lemplové, co nikdy nikam nepřispěli. Zaráží mě, že se jim to ještě někdo snaží vysvětlovat. Když budeš chtít, můžeš si napsat třeba padesát takových programů - a jim po tom bude pořád stejné hovno.
[kotyz@behemot ~]$ tepsonic
TepSonic(7825): ""CurrencyIntroducedDate" - conversion of "" to QDate failed" " (wrong format: expected 3 items, got 1)"
TepSonic(7825): ""CurrencyIntroducedDate" - conversion of "" to QDate failed" " (wrong format: expected 3 items, got 1)"
Searching in ("/usr/bin/plugins", "/usr/lib")
()
Database revisions don't match: Found revision "5" , expected revision "6"
Collections will be rebuilt
Initializing database structure
Database revisions don't match: Found revision "5" , expected revision "6"
Collections will be rebuilt
Initializing database structure
Loading plugin "/usr/lib/libtepsonic_lastfmscrobbler.so.0.2.0"
Starting collections update...
the final supported extension list: ("*.ac3", "*.flac", "*.mp3", "*.mp4", "*.ogg", "*.wav", "*.wma", "*.aif", "*.aiff", "*.asf", "*.mp2", "*.mpc", "*.ra", "*.ram", "*.wv")
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
QSortFilterProxyModel: index from wrong model passed to mapFromSource
Neoprávněný přístup do paměti (SIGSEGV)
spolecne udelame z tepsonicu lepsi program! (jeste mam v rukavu par poznamek ohledne vzhledu, ale ty si necham na pozdeji, az nebudou dulezitejsi veci k predelani).
(gdb) bt #0 0x0000000000460f23 in CollectionBuilder::insertTrack (this=0xb56780, filename=..., sqlDB=0xb64360) at /home/vojta/scm/tepsonic/player/collections/collectionbuilder.cpp:200 #1 0x000000000045fc97 in CollectionBuilder::run (this=0xb56780) at /home/vojta/scm/tepsonic/player/collections/collectionbuilder.cpp:117 #2 0x00007ffff6b29a35 in ?? () from /usr/lib64/qt4/libQtCore.so.4 #3 0x00007ffff51a0644 in start_thread () from /lib/libpthread.so.0 #4 0x00007ffff5b8abfd in clone () from /lib/libc.so.6 #5 0x0000000000000000 in ?? ()
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.