Hola, seré breve: estoy utilizando la libreria vorbis para implementar OGG en mi motor.
El problema es que al ejecutar la función ov_open() el programa explota por los aires. Por inet dicen que es por linkar contra librerias que no toca, pero he probado de todo y no funciona. ¿Alguien sabe algo de esto?
El código donde peta es:
oggFile=fopen(file,"rb");
if (!oggFile)
{
ERROR_STUFF(ERROR_FILENOTFOUND,file);
return false;
}
if (ov_open(oggFile,&oggStream,NULL,0)<0) // <--- Aqui está el problema
{
fclose(oggFile);
ERROR_STUFF(ERROR_LOADINGFILE,file);
return false;
}
Se que algunos de vosotros habeis implementado esto mismo y puede que os hayais topado con este problema. Agradecería cualquier pista.
Gracias.
como me lo has pedido a titulo personal en el otro foro, voy a hacer lo qe casi nunca hago, y es responder dudas de programacion en foros.
suponiendo el resto de codigo.. yo diria qe esta todo bien, no parece un problema de tu codigo.
eso de qe te peta es xqe simplemente se corta el programa y adios, o te devuelve un error?? xqe de ser asi podrias mirar el tipo de error, qe puede darte una mejor ayuda...
por cierto, yo qe tu probaria a compilar con la libreria estatica, de esa forma sabras si es un problema de dll's
espero haberte sido de ayuda, y siento no poder decirte mucho mas :)
Primero de todo, gracias por responder.
Citar
eso de qe te peta es xqe simplemente se corta el programa y adios, o te devuelve un error?? xqe de ser asi podrias mirar el tipo de error, qe puede darte una mejor ayuda...
Cuando entra a ejecutar la función ov_open() el programa saca por pantalla el típico error de cuando intentas acceder a una posición de memoria inválida y al darle a "no enviar" se cierra.
Probaré lo de linkar con las librerias estáticas a ver como va.
De todas formas me gustaría ver código fuente donde esto funcione.
¿Nadie más ha hecho nada con la SDK de vorbis para reproducir archivos OGG?
Bueno te puedo enseñar el trozo de codigo de mi libreria en el que abro el fichero.
En la libreria he linkado con las librerias estaticas ( vorbisfile_static.lib ogg_static.lib )
aunque es igual ke tu codigo, xD, pero te aseguro ke funciona. (ole)
// open OGG file
FILE *f;
OggVorbis_File vf;
f = fopen(filename, "rb");
if (!f) return false;
ov_open(f, &vf, NULL, 0);
suerte B)
Si tienes reservada en oggStream memoria suficiente para contener una estructura OggVorbis_File está bien el código. Del tema del linkaje no te puedo decir nada obviamente :lol:
sync
Será posible: pues acabo de lincar contra las librerias estáticas de la OGG y funciona! De todas formas creia que ya habia probado eso v.V
¿Como es posible que las propias DLLs que vienen con el SDK den ese error?
En fin, gracias a todos chicos! ahora por lo menos ya no rebienta el programa en esa función, lo único que pasa ahora es que no se oye nada XDDD.. pero eso corre de mi cuenta el arreglarlo. (nooo)
solo un comentario a proposito de usar OggVorbis... nosotros lo estabamos usando junto con la genial libreria de fisica ODE, y nos dio muchos problemas al cambiar el modo de la unidad de flotantes. Esto probocaba errores catastroficos en la libreria de fisica. Intentamos usar la version que no usa flotantes de Ogg (pensada para dispositivos portatiles) y la tubimos que desechar porque bajaba bastante los fps.
Al final usamos los graphs de dsound con el codec WMA.
Un saludo
Bien, ya he corregido el fallo y ya reproduce los OGG correctamente.
Astat: yo no aprecio ninguna bajada de rendimiento al reproducir los OGG.
Gracias a todos por atenderme ;)
joer, xqe no me haran a mi tanto caso cuando posteo dudas? (grrr)
La bajada en los fps la notamos cuando usamos la version SIN FLOTANTES de OggVorbis (creo que se llama "Tremor"), no con la original.
Cita de: "Astat"
Al final usamos los graphs de dsound con el codec WMA.
Un saludo
os recomiendo usar entonces directshow y tirar de un filtro de vorbis ogg.
ademas, trabajando con directx es la forma mas rapida de poder cargar el formato qe qerais, mp3, wma, ogg.. o los qe tengan qe venir. esta tirado programarlo asi..
Seryu: pero se pierde portabilidad.
Quizá con la llegada de OpenML....
Cita de: "DraKKaR"Seryu: pero se pierde portabilidad.
Quizá con la llegada de OpenML....
drakkar, qe portabilidad pierdes usando directshow envez de directsound?? me parece qe has entendido mal los post. O_O
Estaba respondiendo a Astat, no a ti, Drakkar :)
Mea culpa. Pasaré toda la noche fustigándome para resarcirme de mi error.
pos ya qe estas echate sal cuando acabes.
x ciertop, lo de openml al final se puede usar, merece la pena, no es una pajada mental qe acabara peor qe openal??
¿Esta vez es a mi? XDD
Weno, de todos modos respondo: lo que yo se de OpenML es que es un kit de desarrollo multimedia como lo es directx para windows, pero en libre y portable. Creo que se compone de OpenGL para los gráficos, OpenAL para el sonido y no se que ostias más para el input y todo lo demás. En teoria tiene buena pinta, pero al final es lo mismo de siempre: si nadie lo usa pq prefieren usar directx, pues no hay nada que hacer.
PD: Porque dices que OpenAL es una pajada mental? de los que han respondido en este thread (o era el otro sobre que API usar?) veo que muchos han decidido usar openal + ogg para sus proyectos ye stán contentos con ello. Yo también lo he hecho y tambíen lo estoy.
preguntaba si openml era una pajada mental, no qe openal lo fuera.
de openAL solo he dicho qe la tienen olvidada.