OpenAL integration for Python
Project description
PyOpenAL provides OpenAL bindings for python as well as an interface to them.
It also provides a simple way to play WAVE and even OGG Vorbis and OGG Opus files, the latter two if used together with PyOgg.
PyOpenAL requires a dynamic OpenAL library (e.g. OpenAL32.dll). You can use the official OpenAL library (deprecated) or the much better sounding OpenAL Soft library, which is still actively developed (or any other OpenAL compatible library).
PyOpenAL provides OpenAL bindings, as you would find them in C++, meaning you can follow any OpenAL C++ tutorial with Python. OpenAL’s methods expect C types as arguments, which means you will have to convert Python’s types to C types using ctypes if you want to use them directly. Don’t worry though, PyOpenAL can be used without the need to do that.
I removed the support for ALUT, because it is basically impossible to build nowadays. If you want ALUT support, please use the original PyOpenAL from forrestv
Examples
Playing a wave file
# import PyOpenAL (will require OpenAL32.dll)
from openal import *
# import the time module, for sleeping during playback
import time
# open our wave file
source = oalOpen(“test.wav”)
# and start playback
source.play()
# check if the file is still playing
- while source.get_state() == AL_PLAYING:
# wait until the file is done playing
time.sleep(1)
# release resources (don’t forget this)
oalQuit()
Playing an OGG Opus file (with PyOgg)
from openal import *
# even though we use PyOgg, we don’t have to import it ourselves,
# PyOpenAL does that for us (if it can find it)
import time
source = oalOpen(“test.opus”)
source.play()
- while source.get_state() == AL_PLAYING:
time.sleep(1)
# remember, don’t forget to quit
oalQuit()
Streaming a file
from openal import *
# here we define how much data is supposed to be held at a time (for Vorbis and Opus files), in how many buffers
# this is set automatically, but you can set it yourself, if you can’t update the stream frequently enough
pyoggSetStreamBufferSize(4096*4)
oalSetStreamBufferCount(4)
sourceStream = oalStream(“test.ogg”)
sourceStream.play()
- while sourceStream.get_state() == AL_PLAYING:
# do stuff
[…]
# update the stream (load new data)
# if you don’t do this repeatedly, the stream will suffocate
sourceStream.update()
oalQuit()
Using OpenAL functions
# here we only import OpenAL’s functions
# (in case you don’t need / want PyOpenAL’s functions / classes)
from openal._al import *
from openal._alc import *
[…]
# it’s as simple as that:
alDistanceModel(AL_INVERSE_DISTANCE_CLAMPED)
# or a little more complicated, it really depends:
alSourceUnqueueBuffers(source_id, 1, ctypes.pointer(ctypes.c_uint(buffer_ids[id])))
[…]
To get a reference sheet, please visit PyOpenAL’s GitHub page.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for PyOpenAL-0.6.5a0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4070b4b6ec787e32dd0ffa9de5bdca9d1135626a0d659991ffc5b40b2ac8c1db |
|
MD5 | 8919808c1b6090d885d0f33856ee0d9d |
|
BLAKE2b-256 | 6463b7f5699e6389f29f90d89092ee51bf23a76fa7028bba8f9e8f0dd2377219 |