Librairie OggStream

Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Librairie OggStream

Message par KarLKoX »

Bon, pour ceux que ça interesse, j'ai mis la dernière touche à OggStream, une librairie permettant de lire les flux Ogg Vorbis.
Ce n'est que la première version mais permet tout ce dont on à besoin pour faire un player par exemple.
J'aimerais donc avoir vos impressions, suggestions et surtout rapports de bugs, avant que je ne post sur le forum anglais :)
C'est ici que ca se passe.
L'aide se trouve dans le dossier "Help" de PureBasic et un exemple se trouve dans le dossier "Examples\Sources - Advanced\OggStream".
Prochaine étape, le support des mp3 via la bibliothèque Mad ...
"Qui baise trop bouffe un poil." P. Desproges
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Juste pour préciser: le support interne de l'OGG-Vorbis en purebasic ne necessite pas de filtre directshow, c'est une library statique, comme la tienne :). J'ai testé ta lib et ca marche nickel !
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Excuse moi mais ça correspond à quoi ?
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Fred>erf ! Excuse moi, c'est ce qu'avais dit Polux (auteur de Lethal Judgment) dans un post donc j'y ai cru, bêtement, je rectifierais ca dans le fichier d'aide.
A ce propos, tant que je t'ai sous la main : lorsque je compile la lib en release et qu'ensuite je compile l'exemple, le linker d'lcc plante lamentablement, je suis obligé de laisser les symboles de débogages, en en full (mode C7, parametre /ZI de VC++).
Ce serait bien que j'y arrive en release, ca permettrais de diminuer considérablement la taille de l'exe final (de moitié je pense).
Autre bug (en est ce un ?) : j'ai fait un driver DirectSound (8.0) mais lorsque je compile l'exemple, le linker lcc tombe dans une boucle (il ne plante pas) et me prend 100 % cpu, sans message d'erreur . (j'ai beau changer la lib dsound.lib de PureBasic par la version 8 ou 9, rien n'y fait)
J'utilise les notification et j'instancie donc l'objet COM de directX pour avoir acces aux fonctions de notifications et, mon petit me doight me dit que ca doit venir de ca.
Je sais, je n'ai qu'a réécrire le driver sans notification (c'est ce que je compte faire) mais j'aimerais juste comprendre (si tu veux les sources, pas de pb ;) ).

Oliv>la librairie permet de lire les musiques compressées au format Ogg Vorbis, qui est un sérieux "concurrent" du mp3/mp3 pro.
"Qui baise trop bouffe un poil." P. Desproges
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

J'avoue que je suis meme étonné que le linker LCC accepte les .lib de VC++ en debug, j'avais deja essayé (en release) et ca marchait pas. Je ne peux pas vraiment t'aider là dessus.. J'utilise LCC pour tout, meme si je dois adapter un peu un code C pour qu'il compile, comme ca j'ai pas de problèmes.
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Oki ca marche, c'est pas un problème en soit, ca faisait juste de gros éxécutable, si je trouve une parade, je t'en informerais :)
Tient, je viens d'ajouter le support préliminaire des mp3 en passant (via libmad 0.15 soit 108 ko de plus par exe, aie !)
"Qui baise trop bouffe un poil." P. Desproges
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Un petit up pour donner le status du wip actuel :

- Support complet des mp3 via Mad 0.15,
- Support des idtag v1.x/2.x en unicode/utf8,
- Support du streaming internet (shoutcast, icecast prochainement),
- Support du driver DirectSound via DirectX 8 et >,
- Réécriture du driver Windows WaveOut : plus de coupure lorsque l'on fait autre chose,
- Support alpha du MPC (MusePack) : j'ai un problème bizarre qui fait que la musique est saccadée,
- Apres avoir scruté le code de la bibliothèque Modplug (modules sonores), la convertir du C++ en C serait un trop gros chantier (contrairement à la bibliotheque du MPC) donc je pense que j'utiliserais MikMod.

Et à venir :

- Ajout des API pour manipuler tout ca sans se prendre la tête :)

Un exe (sans support MPC) compilé avec la userlib fait environ 320 ko.
Bon, bah dodo moi ... :sleeping:
"Qui baise trop bouffe un poil." P. Desproges
Avatar de l’utilisateur
Polux
Messages : 440
Inscription : mer. 21/janv./2004 11:17
Localisation : france
Contact :

Message par Polux »

Phénoménal Karlkox! Je m'en sers pour Pure Intruders 2, cette librairie est vraiment excellente! Beau boulot!
( tu es cité au générique bien entendu! :wink: )
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Merci, ca fait plaisir de voire que ce que je fait sert à quelque chose, y a pas plus grande satisfaction :D

J'en profiter pour ajouter mes dernieres modifications :

- J'ai dernièrement amélioré le support du shoutcast (presque plus de "grosses" coupures, merci au multithread)
- Support des pilotes WDM (meilleur performances audio),
- Support (en cours) des canaux > 2 (quad, 5.1, 6.1, 7.1, surround), la encore, il faut des pilotes WDM,
- En cours : support des serveurs icecast 1/2.

Et à venir :

- Intégration de mikmod pour lire les modules et un set dédié de fonctions uniquement aux modules (récupération du pattern, rows, nombres de voies en cours ...)

Toute aide est la bienvenue surtout en ce qui concerne le support des floats via le WAVEFORMATEXTENSIBLE.
J'ai beau essayer toute sorte de combinaison, rien n'y fait, mais je perd pas espoire :)
"Qui baise trop bouffe un poil." P. Desproges
Avatar de l’utilisateur
Polux
Messages : 440
Inscription : mer. 21/janv./2004 11:17
Localisation : france
Contact :

Message par Polux »

RRaaah, de temps en temps j'ai l'impression que soit le play soit le stop me font planter l'appli...
Avatar de l’utilisateur
Polux
Messages : 440
Inscription : mer. 21/janv./2004 11:17
Localisation : france
Contact :

Message par Polux »

Bon ben apparement ça a plus l'air de le faire... maintenant je fais un oggstreamclose() avant de recharger une zic, je teste d'abord si elle est jouée, si oui, je la stoppe avant... Je sais pas si ça joue, mais ça semble être plus stable.
Mais je ne fais pas d'erreur je pense, j'initialise la lib au début:
OggStreamSetDriver(#OGG_DSOUND)
OggStreamInit()

pis j'utilise

OggStreamLoadFile("mazizic.ogg")
OggStreamPlay()

pis j'utilise

If OggStreamIsPlaying()=1:OggStreamStop():EndIf
OggStreamClose()
OggStreamLoadFile("mazizic2.ogg")
OggStreamPlay()

pour en lancer une autre...?
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Oui tu as bien utilisé la lib, tu utilises DSOUND mais comme marqué dans la doc, ce driver n'étais pas fonctionnel :)
J'ai ausi réécrit le code du driver DSOUND (et celui de WINMM en passant) pour le faire fonctionner avec MikMod et j'ai ajouté une fonction essentielle : OggStreamFree !
Plutot que d'utiliser OggStreamClose qui peut s'utiliser pour libérer toutes les ressources utilisées par la lib et la lib elle même, j'ai ajouté cette fonction qui ne libère que les ressources utilisées par le stream en cours :)
J'ai pas mal de nettoyage de code, la doc à mettre à jour et des tests pour faire une mises à jour, donc dans maxi deux semaines, ca devrait être bon :D
"Qui baise trop bouffe un poil." P. Desproges
Avatar de l’utilisateur
Polux
Messages : 440
Inscription : mer. 21/janv./2004 11:17
Localisation : france
Contact :

Message par Polux »

RRRaaaahhhh... merci KArlKox! Tip top!
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Petite update pour signaler que je ne suis pas mort ^^
Alors, au niveau de mes avancements :

- Ajout du support des fichiers Flac, il manque juste la lecture des tags. Je comprend pas pourquoi mes routines ne passent pas car il s'agit d'idtag tout bete. M'enfin, c'pas méchant,

- Ajout d'une fonction permettant de récupérer les metatags (ShoutCast),

- Ajout du support des fichiers MPC (MusePack) : j'ai enfin compris mon erreur (de débutant ...). J'ai du aussi convertir la lib MPC du C++ en C :?

- Ajout du support des modules via MikMod ainsi que plus d'une douzaine de fonctions dédiées pour récupérer la vitesse, les bpm, nombre d'instrument, samples, voix ...

- DSOUND : je le met en standby, je vais me concentrer uniquement sur WinMM et des que j'aurais une lib qui sera stable/complete en WinMM, j'ajouterais le support de DSOUND, une chose à la fois :)

- Shoutcast encore plus stable,

- Possibilité de choisir le taux d'échantillonage : 11025, 22050 ou 44100 (8000 aussi, mais bon, c'est bien kaka). J'utilise une lib qui utilise de tres bon algos (secret rabbit), j'ai pu comparer avec des lib commerciales comme FMOD/BASS, et la qualité est identique. (test d'oreille donc subjectif, je l'avoue)

- Il y avait un léger "blip" lorsque l'on se déplacait dans la musique, c'est réparé :)

@ bientôt :)
"Qui baise trop bouffe un poil." P. Desproges
Avatar de l’utilisateur
Polux
Messages : 440
Inscription : mer. 21/janv./2004 11:17
Localisation : france
Contact :

Message par Polux »

Well done Karlkox!!! j'attends ça avec impatience. ta librairie est d'ores et déjà inclue dans pure intruders 2 ( ainsi que ton nom au générique ), si ça ne te gêne pas du moins :wink: ! Du très beau boulot!
:D
Répondre