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.