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.
|