]> git.mxchange.org Git - simgear.git/blob - simgear/sound/openal_test1.cxx
Merge branch 'timoore/mat-effect'
[simgear.git] / simgear / sound / openal_test1.cxx
1 #include <stdio.h>
2
3 #ifdef _WIN32
4 #include <windows.h>
5 #define sleep(x) Sleep(x*1000)
6 #else
7 #include <unistd.h>     // sleep()
8 #endif
9
10 #if defined( __APPLE__ )
11 # define AL_ILLEGAL_ENUM AL_INVALID_ENUM
12 # define AL_ILLEGAL_COMMAND AL_INVALID_OPERATION
13 # include <OpenAL/al.h>
14 # include <OpenAL/alc.h>
15 # include <OpenAL/alut.h>
16 #elif defined(OPENALSDK)
17 # include <al.h>
18 # include <alc.h>
19 # include <AL/alut.h> 
20 #else
21 # include <AL/al.h>
22 # include <AL/alc.h>
23 # include <AL/alut.h>
24 #endif
25
26 #define AUDIOFILE       SRC_DIR"/jet.wav"
27
28 #include <simgear/debug/logstream.hxx>
29
30 static void print_openal_error( ALuint error ) {
31     if ( error == AL_INVALID_NAME ) {
32         SG_LOG( SG_GENERAL, SG_ALERT, "AL_INVALID_NAME" );
33     } else if ( error == AL_ILLEGAL_ENUM ) {
34         SG_LOG( SG_GENERAL, SG_ALERT, "AL_ILLEGAL_ENUM" );
35     } else if ( error == AL_INVALID_VALUE ) {
36         SG_LOG( SG_GENERAL, SG_ALERT, "AL_INVALID_VALUE" );
37     } else if ( error == AL_ILLEGAL_COMMAND ) {
38         SG_LOG( SG_GENERAL, SG_ALERT, "AL_ILLEGAL_COMMAND" );
39     } else if ( error == AL_OUT_OF_MEMORY ) {
40         SG_LOG( SG_GENERAL, SG_ALERT, "AL_OUT_OF_MEMORY" );
41     } else {
42         SG_LOG( SG_GENERAL, SG_ALERT, "Unhandled error code = " << error );
43     }
44 }
45
46
47 int main( int argc, char *argv[] ) {
48     // initialize OpenAL
49     ALCdevice *dev;
50     ALCcontext *context;
51
52     alutInit(&argc, argv);
53     sglog().setLogLevels( SG_ALL, SG_ALERT );
54
55     // initialize OpenAL
56     if ( (dev = alcOpenDevice( NULL )) != NULL
57             && ( context = alcCreateContext( dev, NULL )) != NULL ) {
58         alcMakeContextCurrent( context );
59     } else {
60         context = 0;
61         SG_LOG( SG_GENERAL, SG_ALERT, "Audio initialization failed!" );
62     }
63
64     // Position of the listener.
65     ALfloat listener_pos[3];
66
67     // Velocity of the listener.
68     ALfloat listener_vel[3];
69
70     // Orientation of the listener. (first 3 elements are "at", second
71     // 3 are "up")
72     ALfloat listener_ori[6];
73
74     listener_pos[0] = 0.0;
75     listener_pos[1] = 0.0;
76     listener_pos[2] = 0.0;
77
78     listener_vel[0] = 0.0;
79     listener_vel[1] = 0.0;
80     listener_vel[2] = 0.0;
81     
82     listener_ori[0] = 0.0;
83     listener_ori[1] = 0.0;
84     listener_ori[2] = -1.0;
85     listener_ori[3] = 0.0;
86     listener_ori[4] = 1.0;
87     listener_ori[5] = 0.0;
88
89     alListenerfv( AL_POSITION, listener_pos );
90     alListenerfv( AL_VELOCITY, listener_vel );
91     alListenerfv( AL_ORIENTATION, listener_ori );
92
93     // Buffers hold sound data.
94     ALuint buffer;
95
96     // Sources are points emitting sound.
97     ALuint source;
98
99     // Position of the source sound.
100     ALfloat source_pos[3];
101
102     // Velocity of the source sound.
103     ALfloat source_vel[3];
104
105     // configuration values
106 //    ALenum format;
107 //    ALsizei size;
108 //    ALvoid* data;
109 //    ALsizei freq;
110     ALboolean loop = false;
111
112     source_pos[0] = 0.0; source_pos[1] = 0.0; source_pos[2] = 0.0;
113     source_vel[0] = 0.0; source_vel[1] = 0.0; source_vel[2] = 0.0;
114
115     // create an OpenAL buffer handle
116     alGenBuffers(1, &buffer);
117     ALuint error = alGetError();
118     if ( error != AL_NO_ERROR ) {
119         print_openal_error( error );
120         SG_LOG( SG_GENERAL, SG_ALERT, "Failed to gen OpenAL buffer." );
121     } else {
122         SG_LOG( SG_GENERAL, SG_ALERT, "Buffer created ok!" );
123     }
124
125     // Load the sample file
126 #if defined(ALUT_API_MAJOR_VERSION) && ALUT_API_MAJOR_VERSION >= 1
127
128   buffer = alutCreateBufferFromFile(AUDIOFILE);
129   if (buffer == AL_NONE) {
130     SG_LOG( SG_GENERAL, SG_ALERT, "Failed to buffer data.");
131   }
132
133 #else
134 # if defined (__APPLE__)
135     alutLoadWAVFile( (ALbyte *)AUDIOFILE, &format, &data, &size, &freq );
136 # else
137     alutLoadWAVFile( (ALbyte *)AUDIOFILE, &format, &data, &size, &freq, &loop );
138 # endif
139     if (alGetError() != AL_NO_ERROR) {
140         SG_LOG( SG_GENERAL, SG_ALERT, "Failed to load wav file.");
141     }
142
143     // Copy data to the internal OpenAL buffer
144     alBufferData( buffer, format, data, size, freq );
145     if (alGetError() != AL_NO_ERROR) {
146         SG_LOG( SG_GENERAL, SG_ALERT, "Failed to buffer data.");
147     }
148
149     alutUnloadWAV( format, data, size, freq );
150 #endif
151
152     alGenSources(1, &source);
153     if (alGetError() != AL_NO_ERROR) {
154         print_openal_error( error );
155     }
156
157     alSourcei( source, AL_BUFFER, buffer );
158     alSourcef( source, AL_PITCH, 1.0 );
159     alSourcef( source, AL_GAIN, 1.0 );
160     alSourcefv( source, AL_POSITION, source_pos );
161     alSourcefv( source, AL_VELOCITY, source_vel );
162     alSourcei( source, AL_LOOPING, loop );
163
164     alSourcePlay( source );
165
166     sleep(10);
167     alutExit();
168
169     return 0;
170 }