[C/C++] lib vorbis et ouverture de fichier oggvorbis

lib vorbis et ouverture de fichier oggvorbis [C/C++] - C++ - Programmation

Marsh Posté le 23-05-2003 à 14:28:10    

J'essaye ectuellement d'utiliser la lib ogg vorbis ( http://www.vorbis.org/ ) pour lire des musiques via OpenAL
 
l'exemple qu'ils fournissent semble passer correctement ... (disons qu'il n'est pas vraiment pratique ...)
Il attend qu'on passe le flux ogg vorbis via stdin, or, étrangement (:D) je préfère passer par des fichiers.
 
J'ai donc fait ca en 2 secondes, mais ca foire ... le fichier est bien ouvert, pas de pb, mais à l'appel d'ov_open, j'ai une erreur à l'exec qui fait lamentablement planter mon appli ... :(
 

Code :
  1. ALboolean alutLoadOggVorbisFile(const char *fname, ALenum *format, ALvoid **data, ALsizei *size, ALsizei *freq, ALboolean *loop) {
  2. OggVorbis_File vorbisFile;
  3. FILE *f = fopen(fname, "rb" );
  4. if(!f) return AL_FALSE;
  5. if(ov_open(f, &vorbisFile, NULL, 0) < 0) {
  6.  fclose(f);
  7.  return AL_FALSE;
  8. }
  9. // .....
  10. }


 
Y'a-t-il quelqu'un qui utilise cette lib ici et qui voit un pb ? Parce que là, je fais quasiment rien quoi ...
 
 
(râle pas pour les FILE * et char * Taz, c'est des libs C, même si on les utilise en C++... :D)
 
Edit : ortograf'


Message édité par theshockwave le 23-05-2003 à 14:33:41

---------------
last.fm
Reply

Marsh Posté le 23-05-2003 à 14:28:10   

Reply

Marsh Posté le 26-05-2003 à 17:12:30    

Bon ... J'ai réussi à identifier un peu mieux la cause de mon pb ...
 
Pour ceux que ca peut intéresser, je linkais avec les libs ogg.lib, vorbis.lib et vorbisfile.lib, qui sont les versions dynamiques des libs Ogg Vorbis. J'ai essayé de passer aux libs statiques ( ogg_static.lib, vorbis_static.lib et vorbisfile_static.lib ) et ca fonctionne à merveille.
 
Je préfèrerais qd même passer par les libs dynamiques : exe plus petit, plus facile à mettre à jour aux changements de libs, mais je n'arrive pas à voir d'où vient le pb avec la lib dynamique ...
 
Je me suis dit qu'il ne trouvait pas les .dll, or ils sont dans un répertoire dans le path, donc il n'y a pas de pb ... J'ai essayé de mettre les libs dans le répertoire de debug et dans le rep de compilation, rien n'y fait ...
 
Si quelqu'un peut proposer une hypothétique solution à mon problème, je suis preneur !


---------------
last.fm
Reply

Marsh Posté le 26-05-2003 à 19:50:25    

Je suis p-e complètement HS, mais si tu as un exemple qui lit stdin correctement, tu peux p-e rediriger stdin vers ton fichier...non?

Reply

Marsh Posté le 26-05-2003 à 21:01:36    

skeye a écrit :

Je suis p-e complètement HS, mais si tu as un exemple qui lit stdin correctement, tu peux p-e rediriger stdin vers ton fichier...non?


 
 
La méthode choisie dans l'exemple me gonflait, je m'en suis grandement inspiré pour faire ma fonction, mais justement, je m'étonnais de voir dans la doc qu'on pouvait passer un fichier et que ca plantait malgré tout. Mais comme je l'ai dit dans mon post précédent, le pb venait de la lib avec laquelle je linkais ... maintenant, je sais que le pb ne vient pas de mon code mais plutôt de la manière dont je linke ou de la disponibilité des DLL ou d'un quelconque paramètre auquel je ne pense pas encore ...


---------------
last.fm
Reply

Marsh Posté le 26-05-2003 à 21:06:30    

si tu passe le FILE * a une fonction de ta DLL c normal que ca plante (CRT differente => echec. C la meme blague si tu fais un delete [] dans ton exe sur un bout de mémoire alloué dans une dll...)
 
Si le type a fait ca DLL comme ca c'est vraiment un gros cracra :O
 
Conclu : heuh ben t'es mal :D
 
a ta place, ce que je ferais, c'est me faire une DLL encapsulant ta lib static et ensuite utiliser ta DLL, ca limitera la casse


Message édité par chrisbk le 26-05-2003 à 21:09:50
Reply

Marsh Posté le 26-05-2003 à 21:10:01    

Je pense que d'une certaine façon, soit le système n'a pas fait la liason avec les fichiers .dll ( ils sont bien disponibles à coté du .exe ou dans System32 ? ), soit tu as oublié d'appeler une quelconque fonction qui initialise la dll.

Reply

Marsh Posté le 26-05-2003 à 21:12:24    

Kristoph a écrit :

Je pense que d'une certaine façon, soit le système n'a pas fait la liason avec les fichiers .dll ( ils sont bien disponibles à coté du .exe ou dans System32 ? ), soit tu as oublié d'appeler une quelconque fonction qui initialise la dll.


 
Je suis a peu pres sur de mon histoire pour le coup ;) J'ai deja eu le pb et c'est assez a s'arracher les cheveux quand on a jamais entendu parler de cette histoire

Reply

Marsh Posté le 26-05-2003 à 21:29:04    

chrisbk a écrit :


 
Je suis a peu pres sur de mon histoire pour le coup ;) J'ai deja eu le pb et c'est assez a s'arracher les cheveux quand on a jamais entendu parler de cette histoire


 
Dans ce cas, il ne faut pas utiliser les fonctions de base de vorbis file mais utilisé celles qui sont configurables pour les entrées sorties. Par exemple, utilise ov_open_callbacks au lieu de ov_open
 
PS : j'ai évité d'avoir ce problème car je n'ai même pas essayé d'utiliser les fonctions "de base" :D


Message édité par Kristoph le 26-05-2003 à 21:30:37
Reply

Marsh Posté le 26-05-2003 à 21:33:52    

Kristoph a écrit :


 
Dans ce cas, il ne faut pas utiliser les fonctions de base de vorbis file mais utilisé celles qui sont configurables pour les entrées sorties. Par exemple, utilise ov_open_callbacks au lieu de ov_open
 
PS : j'ai évité d'avoir ce problème car je n'ai même pas essayé d'utiliser les fonctions "de base" :D


 
Suremenent, je connais pas la lib, mais les symptomes ;)
Perso j'ai resolu le pb en mettant une classe a moi dans une dll qui se charge des IO (enfin avec un vieux systeme d'abstraction), tout se passe dans la dll : 0pb. Par contre fo que les libs soient suffisament bien foutu pour permettre de redefinir les lecture/ecriture, jusque la pas de pb (libjpeg/libpng/flex/bison/zlib(bon la ca a été :sweat: c horrible cette lib) to be continued....)
 
 
 
 
 
 

Reply

Marsh Posté le 27-05-2003 à 11:21:48    

Effectivement, si on redéfini les fonctions d'entrées de la lib, il n'y aura plus de problèmes avec des échanges de FILE* !
 
Bon, et bien merci à tous les deux pour cette précieuse aide ! :jap:


---------------
last.fm
Reply

Marsh Posté le 27-05-2003 à 11:21:48   

Reply

Marsh Posté le 28-05-2003 à 16:45:23    

Encore une petite question ... Pour quelqu'un qui a utilisé la lib en particulier ...
 
Je me sers du nb de samples contenues dans le fichier ogg pour déterminer la taille du buffer audio à créer ... Ca me semblait assez logique ... :D
 
Vu que je demande des samples sur 16 bits, j'ai la formule mathématique archi-complexe suivante : taille_buff = nb_samples * 2
 
J'ai regardé : ca segfault pas qu'un peu ... On dirait que le buffer est 2x trop petit ! [:ddr555] j'ai pas demandé des samples sur 32 bits ! :D
 
A moins que je sois une buse en audio et qu'un sample en 16 bits, ca signifie en fait 2 valeurs sur 16 bits ... Mais ca me semble qd même bien louche ...


---------------
last.fm
Reply

Marsh Posté le 28-05-2003 à 17:07:00    

theShOcKwAvE a ecrit :

Encore une petite question ... Pour quelqu'un qui a utilise la lib en particulier ...
 
Je me sers du nb de samples contenues dans le fichier ogg pour determiner la taille du buffer audio `a creer ... Ca me semblait assez logique ... :D
 
Vu que je demande des samples sur 16 bits, j'ai la formule mathematique archi-complexe suivante : taille_buff = nb_samples * 2
 
J'ai regarde : ca segfault pas qu'un peu ... On dirait que le buffer est 2x trop petit ! [:ddr555] j'ai pas demande des samples sur 32 bits ! :D
 
A moins que je sois une buse en audio et qu'un sample en 16 bits, ca signifie en fait 2 valeurs sur 16 bits ... Mais ca me semble qd meme bien louche ...


 
Stereo ou Mono ? :whistle:

Reply

Marsh Posté le 28-05-2003 à 17:12:32    

Kristoph a écrit :


 
Stereo ou Mono ? :whistle:


 
Bien vuuuu ! :D J'avais oublié cette histoire de canaux ! [:ddr555]
 
Effectivement, c'était du stéréo ! :D Je vais rendre ma formule mathématique impréssionnante à force ...
 
taille_buff = nb_samples * nb_octets_par_sample * nb_canaux
:D
 
Merci, ca devrait rouler, maintenant ! ...


---------------
last.fm
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed