Hola a los expertos en programación de sonido (y los demás también :P)
Tenemos un problemilla a la hora de tratar el sonido, utilizando las librerías de Vorbis Ogg.
El tema viene a ser que cargamos un fichero y se reproduce sin problemas, hasta aquí todo bien.
Ahora, depende de en qué pc lo probemos da un error de windows justo en la función "ov_open".
Hemos investigado su documentación y dicen que en windows puede dar problemas, que una opción es utilizar "ov_open_callback".
Para cambiarlo hemos tenido algún problema al ver q el define de OV_CALLBACKS_DEFAULT no estaba donde tenía q estar (vorbisfile.h).
Después de encontrar el trozo de código q le faltaba a vorbis file, lo hemos logrado ejecutar y reproduce bien otra vez en algunos pcs pero en otros no hay forma.
Los equipos donde peta tienen los drivers de sonido actualizados y las mismas dlls q en los pcs donde funcionan.
He leido en otro hilo que alguien se enfrentó con el primer problema, y no se si lo pudo solucionar haciendo el cambio que proponen en la documentación.
Si alguien se ha tenido que pelear con esto y se acuerda de como, le agradeceriamos mucho su aportación.
Muchas gracias.
Hola, yo lo tengo así
void ogg_stream::open ( string path )
{
int result;
if ( ! ( oggFile = fopen ( path.c_str(), "rb" ) ) )
throw string ( "Could not open Ogg file." );
if ( ( result = ov_open_callbacks ( oggFile, &oggStream, NULL, 0, OV_CALLBACKS_DEFAULT ) ) < 0 )
{
fclose ( oggFile );
throw string ( "Could not open Ogg stream. " ) + errorString ( result );
}
vorbisInfo = ov_info ( &oggStream, -1 );
vorbisComment = ov_comment ( &oggStream, -1 );
if ( vorbisInfo->channels == 1 )
format = AL_FORMAT_MONO16;
else
format = AL_FORMAT_STEREO16;
alGenBuffers ( 2, buffers );
check();
alGenSources ( 1, &source );
check();
alSource3f ( source, AL_POSITION, 0.0, 0.0, 0.0 );
alSource3f ( source, AL_VELOCITY, 0.0, 0.0, 0.0 );
alSource3f ( source, AL_DIRECTION, 0.0, 0.0, 0.0 );
alSourcef ( source, AL_ROLLOFF_FACTOR, 0.0 );
alSourcei ( source, AL_SOURCE_RELATIVE, AL_TRUE );
alSourcef(source, AL_GAIN, 0.1f);
}
Los include que tengo
#include <ogg/ogg.h>
#include <vorbis/vorbisfile.h>
A mi el define me venia donde tenia que venir :/ Estoy usando libogg-1.1.3 y libvorbis-1.2.0
Un saludo :)
Uf, el mensaje era de febrero! pos vaya, supongo que ya lo has solucionado :/
Da igual mientras quede documentado en el foro una solución :)