XCVI. OpenAL Audio Bindings

简介

Platform independent audio bindings. Requires the OpenAL library.

安装

PECL 扩展未绑定于 PHP 中。

进一步信息例如新版本,下载,源程序,维护者信息以及更新日志可以在此找到: http://pecl.php.net/package/openal.

可以从 PHP 下载页面或者 http://snaps.php.net/ 下载此 PECL 扩展的 DLL 文件。

运行时配置

本扩展模块在 php.ini 中未定义任何配置选项。

资源类型

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().

预定义常量

以下常量由本扩展模块定义,因此只有在本扩展模块被编译到 PHP 中,或者在运行时被动态加载后才有效。

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

目录
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

add a note add a note User Contributed Notes
cweiske at cweiske dot de
06-Sep-2006 04: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
cweiske at cweiske dot de
22-Jul-2006 02: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));
?>
ganswijk at xs4all dot nl
01-Feb-2005 09: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...