Programadores => Programación de audio => Mensaje iniciado por: Beyond en 27 de Febrero de 2008, 01:48:47 pm

Título: Problema al reproducir .ogg
Publicado por: Beyond en 27 de Febrero de 2008, 01:48:47 pm
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.
Título: Re: Problema al reproducir .ogg
Publicado por: wereoffs en 02 de Noviembre de 2008, 11:43:26 pm
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 :)
Título: Re: Problema al reproducir .ogg
Publicado por: wereoffs en 02 de Noviembre de 2008, 11:55:58 pm
Uf, el mensaje era de febrero! pos vaya, supongo que ya lo has solucionado :/
Título: Re: Problema al reproducir .ogg
Publicado por: Prompt en 03 de Noviembre de 2008, 09:43:27 am
Da igual mientras quede documentado en el foro una solución :)