]> git.mxchange.org Git - simgear.git/blobdiff - simgear/sound/openal_test1.cxx
Add Update the World Magnetic Model to 2015.0
[simgear.git] / simgear / sound / openal_test1.cxx
index 55127b2b4c73cb203981976ca83a811d54cc1b1d..7909f2cd3938028f58b35b7062a5c43ba1ba2365 100644 (file)
@@ -1,16 +1,31 @@
 #include <stdio.h>
+#include <cstdlib> // EXIT_FAILURE
+
+#ifdef _WIN32
+#include <windows.h>
+#define sleep(x) Sleep(x*1000)
+#else
+#include <unistd.h>    // sleep()
+#endif
 
 #if defined( __APPLE__ )
 # define AL_ILLEGAL_ENUM AL_INVALID_ENUM
 # define AL_ILLEGAL_COMMAND AL_INVALID_OPERATION
 # include <OpenAL/al.h>
-# include <OpenAL/alut.h>
+# include <OpenAL/alc.h>
+#elif defined(OPENALSDK)
+# include <al.h>
+# include <alc.h>
 #else
 # include <AL/al.h>
-# include <AL/alut.h>
+# include <AL/alc.h>
 #endif
 
+#define AUDIOFILE      SRC_DIR"/jet.wav"
+
+#include <simgear/sound/readwav.hxx>
 #include <simgear/debug/logstream.hxx>
+#include <simgear/misc/sg_path.hxx>
 
 static void print_openal_error( ALuint error ) {
     if ( error == AL_INVALID_NAME ) {
@@ -29,13 +44,24 @@ static void print_openal_error( ALuint error ) {
 }
 
 
-int main( int argc, char *argv[] ) {
+int main( int argc, char *argv[] ) 
+{
+    sglog().setLogLevels( SG_ALL, SG_ALERT );
+    
     // initialize OpenAL
-    alutInit( 0, NULL );
-    alGetError();
-    if ( alGetError() != AL_NO_ERROR) {
-       SG_LOG( SG_GENERAL, SG_ALERT, "Audio initialization failed!" );
+    ALCdevice *dev = alcOpenDevice(NULL); 
+    if (!dev) {
+      SG_LOG( SG_GENERAL, SG_ALERT, "Audio device initialization failed!" );
+      return EXIT_FAILURE;
     }
+    
+    ALCcontext *context = alcCreateContext(dev, NULL);
+    if (!context) {
+      SG_LOG( SG_GENERAL, SG_ALERT, "Audio context initialization failed!" );
+      return EXIT_FAILURE;
+    }
+    
+    alcMakeContextCurrent( context );
 
     // Position of the listener.
     ALfloat listener_pos[3];
@@ -79,45 +105,20 @@ int main( int argc, char *argv[] ) {
     ALfloat source_vel[3];
 
     // configuration values
-    ALenum format;
-    ALsizei size;
-    ALvoid* data;
-    ALsizei freq;
-    ALboolean loop;
+    ALboolean loop = false;
 
     source_pos[0] = 0.0; source_pos[1] = 0.0; source_pos[2] = 0.0;
     source_vel[0] = 0.0; source_vel[1] = 0.0; source_vel[2] = 0.0;
 
-    // create an OpenAL buffer handle
-    alGenBuffers(1, &buffer);
-    ALuint error = alGetError();
-    if ( error != AL_NO_ERROR ) {
-        print_openal_error( error );
-        SG_LOG( SG_GENERAL, SG_ALERT, "Failed to gen OpenAL buffer." );
-    } else {
-        SG_LOG( SG_GENERAL, SG_ALERT, "Buffer created ok!" );
-    }
-
     // Load the sample file
-#if defined (__APPLE__)
-    alutLoadWAVFile( (ALbyte *)"jet.wav", &format, &data, &size, &freq );
-#else
-    alutLoadWAVFile( (ALbyte *)"jet.wav", &format, &data, &size, &freq, &loop );
-#endif
-    if (alGetError() != AL_NO_ERROR) {
-        SG_LOG( SG_GENERAL, SG_ALERT, "Failed to load wav file.");
-    }
-
-    // Copy data to the internal OpenAL buffer
-    alBufferData( buffer, format, data, size, freq );
-    if (alGetError() != AL_NO_ERROR) {
+      buffer = simgear::createBufferFromFile(SGPath(AUDIOFILE));
+      if (buffer == AL_NONE) {
         SG_LOG( SG_GENERAL, SG_ALERT, "Failed to buffer data.");
-    }
-
-    alutUnloadWAV( format, data, size, freq );
+      }
 
     alGenSources(1, &source);
     if (alGetError() != AL_NO_ERROR) {
+        ALuint error = alGetError();
         print_openal_error( error );
     }
 
@@ -131,6 +132,10 @@ int main( int argc, char *argv[] ) {
     alSourcePlay( source );
 
     sleep(10);
-
+    
+     alcMakeContextCurrent(NULL);
+     alcDestroyContext(context);
+     alcCloseDevice(dev);
+     
     return 0;
 }