Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ogg-Vorbis, se cae en Visual C++ 2005 Express

Estas en el tema de Ogg-Vorbis, se cae en Visual C++ 2005 Express en el foro de C/C++ en Foros del Web. Bien, el problema es que tanto en linux+gcc, win32+mingw (Dev-c++ y Code::blocks) funciona impecable la carga de un archivo de sonido Ogg. Pero al compilar ...
  #1 (permalink)  
Antiguo 01/08/2007, 17:24
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 22 años, 2 meses
Puntos: 4
Ogg-Vorbis, se cae en Visual C++ 2005 Express

Bien, el problema es que tanto en linux+gcc, win32+mingw (Dev-c++ y Code::blocks) funciona impecable la carga de un archivo de sonido Ogg.

Pero al compilar lo mismo en Visual C++ 2005 Express, sin errores (ni warnings graves), al ejecutar el programa que llama al cargador del ogg se cae (el tipico error de que la apliacación tuvo un problema y asdfsd).

modulo.h
Código:
class GD_Sonido3D
{

private:
        FILE*           oggFile;       // file handle
        OggVorbis_File  oggStream;     // stream handle
        vorbis_info*    vorbisInfo;    // some formatting data
        vorbis_comment* vorbisComment; // user comments

        ALenum format;     // internal format
        vector < char > bufferData; // The sound buffer data from file

	public:
	//! Carga un sonido Ogg Vorbis
        _GDT_EXPORT_ char CargarOGG(char *archivo);
}

modulo.cpp
Código:
char GD_Sonido3D::CargarOGG(char *archivo)
{

  ALsizei freq;               // The frequency of the sound data

  // Create sound buffer and source
  alGenBuffers(1, &SBuffer);
  alGenSources(1, &SSource);

  
  int endian = 0;             // 0 for Little-Endian, 1 for Big-Endian
  int bitStream;
  long bytes;
  char array[BUFFER_SIZE];    // Local fixed size array
  FILE *f;
  // Open for binary reading
  f = fopen(archivo, "rb");
  
  vorbis_info *pInfo;
  OggVorbis_File oggFile;

  ov_open(f, &oggFile, NULL, 0);

  // Get some information about the OGG file
  pInfo = ov_info(&oggFile, -1);

  // Check the number of channels... always use 16-bit samples
  if (pInfo->channels == 1)
    format = AL_FORMAT_MONO16;
  else
    format = AL_FORMAT_STEREO16;
  // end if

  // The frequency of the sampling rate
  freq = pInfo->rate;

  do {
    // Read up to a buffer's worth of decoded sound data
    bytes = ov_read(&oggFile, array, BUFFER_SIZE, endian, 2, 1, &bitStream);
    // Append to end of buffer
    bufferData.insert(bufferData.end(), array, array + bytes);
  } while (bytes > 0);
  ov_clear(&oggFile);

  // Upload sound data to buffer
  alBufferData(SBuffer, format, &bufferData[0], static_cast < ALsizei > (bufferData.size()), freq);

  // Attach sound buffer to source
  alSourcei(SSource, AL_BUFFER, SBuffer);

  printf("Cargado archivo OGG: %s\n", archivo);
  return 'a';
}
Según pude lograr por descarte, es que se cae justo en la linea de ov_open().

No se a que puede deberse el error. La librería la compile yo mismo desde las fuentes con el mismo compilador.

Voy a intentar enlazar la misma liberia en version estática, pero no es la idea, quiero usar la version dinamica (dll).

* Los archivos fuente reales son mas largos, pero esta es la parte que realmente interesa, todas las propiedades están perfectamente declaradas y definidas, cmo dije, no tira errores, y los unicos warnings son porque marca fopen como "deprecated".
__________________
Blog | Tecnosquad
  #2 (permalink)  
Antiguo 02/08/2007, 00:13
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Re: Ogg-Vorbis, se cae en Visual C++ 2005 Express

Si compilaste todo el codigo depuralo, fijate exactamente en que linea da la excepcion y cual es la razon. Si estas usando enlazado dinamico (LoadLibrary + GetProcAddress) asegurate que ov_open no esa cero ...
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 03/08/2007, 18:45
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 22 años, 2 meses
Puntos: 4
Re: Ogg-Vorbis, se cae en Visual C++ 2005 Express

No se depurar :S nunca lo he hecho, ya probé la versión estática y si funciona.
__________________
Blog | Tecnosquad
  #4 (permalink)  
Antiguo 04/08/2007, 01:29
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Re: Ogg-Vorbis, se cae en Visual C++ 2005 Express

Cita:
Iniciado por ArrauKano Ver Mensaje
No se depurar :S nunca lo he hecho, ya probé la versión estática y si funciona.
El metodo de depuracion mas pobre que hay es el de usar "trazas", tanto printf como OutputDebugString te pueden ayudar a comprobar el valor de ese puntero (antes de llamarlo eh).

Te recomiendo aprender a depurar de verdad, es una capacidad de un valor inconmensurable.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 05/08/2007, 00:48
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 22 años, 2 meses
Puntos: 4
Re: Ogg-Vorbis, se cae en Visual C++ 2005 Express

sip, con esa forma "básica" de tirar por consola lo que se hace lo hago a menudo, pero no manejo las herramientas de depuración...

algún consejo/guía/tuto ?
__________________
Blog | Tecnosquad
  #6 (permalink)  
Antiguo 05/08/2007, 01:22
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Re: Ogg-Vorbis, se cae en Visual C++ 2005 Express

Cita:
Iniciado por ArrauKano Ver Mensaje
sip, con esa forma "básica" de tirar por consola lo que se hace lo hago a menudo, pero no manejo las herramientas de depuración...

algún consejo/guía/tuto ?
En este caso asegurate que ov_open es distinto de cero y en ultimo termino que es un valor valido.

Te recomiendo usar el WinDbg que viene con las Debugging tools for Windows, tiene ayuda y es completisimo.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:16.