From: <c99...@us...> - 2007-05-01 19:20:13
|
Revision: 399 http://svn.sourceforge.net/cadcdev/?rev=399&view=rev Author: c99koder Date: 2007-05-01 12:20:11 -0700 (Tue, 01 May 2007) Log Message: ----------- Tiki: replace deprecated ALUT code with pure OpenAL Modified Paths: -------------- tiki/src/audio/sound.cpp tiki/src/audio/stream.cpp Modified: tiki/src/audio/sound.cpp =================================================================== --- tiki/src/audio/sound.cpp 2007-05-01 18:21:33 UTC (rev 398) +++ tiki/src/audio/sound.cpp 2007-05-01 19:20:11 UTC (rev 399) @@ -13,16 +13,6 @@ #include <string.h> -#if TIKI_PLAT == TIKI_OSX -# include <OpenAL/alut.h> -#else -#if TIKI_PLAT == TIKI_SDL -# include <AL/alut.h> -#else -# include <alut.h> -#endif -#endif - /* This port of the snd_sfx manager uses OpenAL to do its work. For simplicity's @@ -131,23 +121,69 @@ ALsizei size; ALvoid* data; ALsizei freq; + + char magic[4]; + uint32 len, hz; + uint16 *tmp, chn, bitsize, fmt; + + File wavFile(fn,"r"); + wavFile.seek(8, SEEK_SET); + wavFile.read(magic, 4); + + if(strncmp(magic, "WAVE", 4)) { + Debug::printf("Sound::loadFromFile: file is not RIFF WAVE\n"); + wavFile.close(); + alDeleteBuffers(1, &m_buffer); m_buffer = 0; + return false; + } + + /* Read WAV header info */ + wavFile.seek(0x14, SEEK_SET); + wavFile.readle16(&fmt, 1); + wavFile.readle16(&chn, 1); + wavFile.readle32(&hz, 1); + wavFile.seek(0x22, SEEK_SET); + wavFile.readle16(&bitsize, 1); + + /* Read WAV data */ + wavFile.seek(0x28, SEEK_SET); + wavFile.readle32(&len, 1); -// Good one, Apple... -#if TIKI_PLAT == TIKI_OSX - alutLoadWAVFile((ALbyte *)fn.c_str(), &format, &data, &size, &freq); -#else - ALboolean looping; - alutLoadWAVFile((ALbyte *)fn.c_str(), &format, &data, &size, &freq, &looping); -#endif - ALuint err = alGetError(); - if (err != AL_NO_ERROR) { - Debug::printf("Sound::loadFromFile: couldn't load WAV: %d\n", err); + Debug::printf("WAVE file is %s, %dHZ, %d bits/sample, %d bytes total, format %d\n", + chn==1 ? "mono" : "stereo", hz, bitsize, len, fmt); + + if(chn == 1 && bitsize == 8) { + format = AL_FORMAT_MONO8; + } else if(chn == 1 && bitsize == 16) { + format = AL_FORMAT_MONO16; + } else if(chn == 2 && bitsize == 8) { + format = AL_FORMAT_STEREO8; + } else if(chn == 2 && bitsize == 16) { + format = AL_FORMAT_STEREO16; + } else { + Debug::printf("Sound::loadFromFile: unsupported bitsize / channel combination\n"); + wavFile.close(); alDeleteBuffers(1, &m_buffer); m_buffer = 0; return false; } + + size = (ALsizei)len; + freq = (ALsizei)hz; + + data = malloc(len); + if(bitsize == 8) { + wavFile.read(data, len); + } else { //byte swapping may be needed, depending on host endianness + for(int i = 0; i < size; i+=2) { + wavFile.readle16((uint8 *)data + i, 1); + } + } + alBufferData(m_buffer, format, data, size, freq); check(); - alutUnloadWAV(format, data, size, freq); + + free(data); + wavFile.close(); check(); if (format == AL_FORMAT_MONO16 || format == AL_FORMAT_MONO8) Modified: tiki/src/audio/stream.cpp =================================================================== --- tiki/src/audio/stream.cpp 2007-05-01 18:21:33 UTC (rev 398) +++ tiki/src/audio/stream.cpp 2007-05-01 19:20:11 UTC (rev 399) @@ -12,16 +12,6 @@ #include <string.h> -#if TIKI_PLAT == TIKI_OSX -# include <OpenAL/alut.h> -#else -#if TIKI_PLAT == TIKI_SDL -# include <AL/alut.h> -#else -# include <alut.h> -#endif -#endif - using namespace Tiki::Audio; using namespace Tiki::Thread; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |