Direct OpenAL interactionΒΆ
openal
is a simple (really, really simple) wrapper around the bindings
offered by the OpenAL 1.1 specification. Each constant, type and function
defined by the standard can be found within openal
. There are no
additional object structures, safety nets or whatever else, so that you can
transfer code written using openal
easily to any other platform in a 1:1
manner.
A brief example in C code:
#include <AL/al.h>
#include <AL/alc.h>
int main(int argc, char *argv[]) {
ALuint source;
ALCdevice *device;
ALCcontext *context;
device = alcOpenDevice(NULL);
if (device == NULL)
{
ALenum error = alcGetError();
/* do something with the error */
return -1;
}
/* Omit error checking */
context = alcCreateContext(device, NULL);
alcMakeContextCurrent(context);
/* Do more things */
alGenSources(1, &source);
alSourcef(source, AL_PITCH, 1);
alSourcef(source, AL_GAIN, 1);
alSource3f(source, AL_POSITION, 10, 0, 0);
alSource3f(source, AL_VELOCITY, 0, 0, 0);
alSourcei(source, AL_LOOPING, 1);
alDeleteSources(1, &source);
alcDestroyContext(context);
alcCloseDevice(device);
return 0;
}
Doing the same in Python:
from openal import al, alc # imports all relevant AL and ALC functions
def main():
source = al.ALuint()
device = alc.alcOpenDevice(None)
if not device:
error = alc.alcGetError()
# do something with the error, which is a ctypes value
return -1
# Omit error checking
context = alc.alcCreateContext(device, None)
alc.alcMakeContextCurrent(context)
# Do more things
al.alGenSources(1, source)
al.alSourcef(source, al.AL_PITCH, 1)
al.alSourcef(source, al.AL_GAIN, 1)
al.alSource3f(source, al.AL_POSITION, 10, 0, 0)
al.alSource3f(source, al.AL_VELOCITY, 0, 0, 0)
al.alSourcei(source, al.AL_LOOPING, 1)
al.alDeleteSources(1, source)
alc.alcDestroyContext(context)
alc.alcCloseDevice(device)
return 0
if __name__ == "__main__":
raise SystemExit(main())
This does not feel very pythonic, does it? As initially said, openal
is a
really simple, really thin wrapper around the OpenAL functions. If you want a
more advanced access to 3D positional audio, you might want to read on about
openal.audio
.