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:
Según pude lograr por descarte, es que se cae justo en la linea de ov_open().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'; }
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".