OpenAL aims to provide a standardized API for something called '3D' sound, just like OpenGL does for '3D' video rendering.
The fun part of OpenAL is that it does all the DSP for you, so you don't need to know a lot about audio. Since OpenAL comes from Creative Labs, it supports hardware rendering of audio with most if not all SoundBlaster audio controllers. They come with chips from EMU-systems and are specifically designed to mix down multichannel audio with DSP effects like reverb and chorus, which could consume a lot CPU speed.
The downside of OpenAL is that (at this time of writing) it is focus on games only. It doesn't do MIDI at all, it doesn't record anything, it doesn't work like a synthesizer. The only thing you can do with OpenAL is play sounds in a simulated 3D environment.
It probably doesn't work on the web.
To use OpenAL you need to read the documentation about OpenAL.
Note concerning audio users: there's no such thing as '3D' audio with speakers. Technically, when people have only two ears, they really can't distinguish sound from above or below, even in front or from behind. To achieve this people merely hear volume, the brightness of sound and the phase difference. One should be able to hear more '3D' sound with only two quality-class speakers than with a consumer class 5.1-set.
OpenAL Audio Bindings
Introducción
Platform independent audio bindings. Requires the » OpenAL library.
Instalación
Esta extension » PECL no esta ligada a PHP.
Mas informacion sobre nuevos lanzamientos, descargas ficheros de fuentes, informacion sobre los responsables asi como un 'CHANGELOG', se puede encontrar aqui: » http://pecl.php.net/package/openal.
Podeis descargar esta DLL de las extensiones PECL desde la pagina » PHP Downloads o desde » http://snaps.php.net/.
Configuración en tiempo de ejecución
Esta extensión no tiene directivas de configuración en php.ini.
Tipos de recursos
This extension defines four resource types: Open AL(Device) - Returned by openal_device_open(), Open AL(Context) - Returned by openal_context_create(), Open AL(Buffer) - Returned by openal_buffer_create(), and Open AL(Source) - Returned by openal_source_create().
Constantes predefinidas
Estas constantes están definidas por esta extensión y estarán disponibles solamente cuando la extensión ha sido o bien compilada dentro de PHP o grabada dinámicamente en tiempo de ejecución.
- ALC_FREQUENCY (integer)
- Context Attribute
- ALC_REFRESH (integer)
- Context Attribute
- ALC_SYNC (integer)
- Context Attribute
- AL_FREQUENCY (integer)
- Buffer Setting
- AL_BITS (integer)
- Buffer Setting
- AL_CHANNELS (integer)
- Buffer Setting
- AL_SIZE (integer)
- Buffer Setting
- AL_BUFFER (integer)
- Source/Listener Setting (Integer)
- AL_SOURCE_RELATIVE (integer)
- Source/Listener Setting (Integer)
- AL_SOURCE_STATE (integer)
- Source/Listener Setting (Integer)
- AL_PITCH (integer)
- Source/Listener Setting (Float)
- AL_GAIN (integer)
- Source/Listener Setting (Float)
- AL_MIN_GAIN (integer)
- Source/Listener Setting (Float)
- AL_MAX_GAIN (integer)
- Source/Listener Setting (Float)
- AL_MAX_DISTANCE (integer)
- Source/Listener Setting (Float)
- AL_ROLLOFF_FACTOR (integer)
- Source/Listener Setting (Float)
- AL_CONE_OUTER_GAIN (integer)
- Source/Listener Setting (Float)
- AL_CONE_INNER_ANGLE (integer)
- Source/Listener Setting (Float)
- AL_CONE_OUTER_ANGLE (integer)
- Source/Listener Setting (Float)
- AL_REFERENCE_DISTANCE (integer)
- Source/Listener Setting (Float)
- AL_POSITION (integer)
- Source/Listener Setting (Float Vector)
- AL_VELOCITY (integer)
- Source/Listener Setting (Float Vector)
- AL_DIRECTION (integer)
- Source/Listener Setting (Float Vector)
- AL_ORIENTATION (integer)
- Source/Listener Setting (Float Vector)
- AL_FORMAT_MONO8 (integer)
- PCM Format
- AL_FORMAT_MONO16 (integer)
- PCM Format
- AL_FORMAT_STEREO8 (integer)
- PCM Format
- AL_FORMAT_STEREO16 (integer)
- PCM Format
- AL_INITIAL (integer)
- Source State
- AL_PLAYING (integer)
- Source State
- AL_PAUSED (integer)
- Source State
- AL_STOPPED (integer)
- Source State
- AL_LOOPING (integer)
- Source State
- AL_TRUE (integer)
- Boolean value recognized by OpenAL
- AL_FALSE (integer)
- Boolean value recognized by OpenAL
Table of Contents
- openal_buffer_create — Generate OpenAL buffer
- openal_buffer_data — Load a buffer with data
- openal_buffer_destroy — Destroys an OpenAL buffer
- openal_buffer_get — Retrieve an OpenAL buffer property
- openal_buffer_loadwav — Load a .wav file into a buffer
- openal_context_create — Create an audio processing context
- openal_context_current — Make the specified context current
- openal_context_destroy — Destroys a context
- openal_context_process — Process the specified context
- openal_context_suspend — Suspend the specified context
- openal_device_close — Close an OpenAL device
- openal_device_open — Initialize the OpenAL audio layer
- openal_listener_get — Retrieve a listener property
- openal_listener_set — Set a listener property
- openal_source_create — Generate a source resource
- openal_source_destroy — Destroy a source resource
- openal_source_get — Retrieve an OpenAL source property
- openal_source_pause — Pause the source
- openal_source_play — Start playing the source
- openal_source_rewind — Rewind the source
- openal_source_set — Set source property
- openal_source_stop — Stop playing the source
- openal_stream — Begin streaming on a source
openal
02-Feb-2007 06:37
06-Sep-2006 11:31
I made a PHP-Gtk2 OpenAL demo which allows you to define as many sound sources as you like and position them relative to the listener by drag and drop: http://gnope.org/p/Tools_OpenALdemo
21-Jul-2006 09:29
Playing a wav file:
<?php
function printok($b) {
echo $b ? " ok\n" : " error\n";
}
echo "Opening device";
$device = openal_device_open();
printok($device);
echo "Creating context";
$context = openal_context_create($device);
printok($context);
echo "Making context the current";
printok(openal_context_current($context));
//where we are
//echo "Setting listener position";
//printok(openal_listener_set(AL_POSITION, array(0, 0, 0)));
//echo "Setting listener orientation";
//printok(openal_listener_set(AL_ORIENTATION, array(0=>0,1 => 1, 2=>0, 3=> 0, 4=>4, 5=>5)));
echo "Creating buffer";
$buffer = openal_buffer_create();
echo "Loading wav";
printok(openal_buffer_loadwav($buffer, '/data/shared/vmware/newmessage.wav'));
echo "buffer stats\n";
echo " Frequency: " . openal_buffer_get($buffer, AL_FREQUENCY) . "\n";
echo " Bits : " . openal_buffer_get($buffer, AL_BITS) . "\n";
echo " Channels : " . openal_buffer_get($buffer, AL_CHANNELS) . "\n";
echo " Size : " . openal_buffer_get($buffer, AL_SIZE) . "\n";
echo "Creating source";
$source = openal_source_create();
echo "Setting source buffer";
printok(openal_source_set($source, AL_BUFFER, $buffer));
//echo "Setting source position";
//printok(openal_source_set($source, AL_POSITION, array(1, 0, 0)));
echo "Playing source";
printok(openal_source_play($source));
echo "sleeping\n";
//sleep(1);
//we wait 300msecs beause the sound
// has no time to be played otherwise
//since playing sound is done concurrently
// to the script
usleep(300000);
echo "Destroying source";
printok(openal_source_destroy($source));
echo "Destroying buffer";
printok(openal_buffer_destroy($buffer));
echo "Destroying context";
printok(openal_context_destroy($context));
echo "Closing device";
printok(openal_device_close($device));
?>
01-Feb-2005 03:20
There is no explanation about what OpenAL actually is and you first have to follow quite a lot of links and download an SDK (from the Creative site) to get information about what OpenAL actually is, but here is what I understand it is:
It's a new standard to create a kind of 3D sound landscape in the way that OpenGL creates a visual 3D landscape. It's not a general sound card interface (as I was looking for). It doesn't handle MIDI and it can't handle sound input (yet).
I was hoping that I could experiment with a kind of homebrewed VoIP with this library but that's not the case.
BTW. The "links to the DLL", don't actually lead to an DLL and finding one is very hard and I haven't found one yet, but at least I know now that I don't have to search any further.
For the beautiful people making this excellent PHP site the great resource it is: Feel free to use this email as you seem fit...
