📄 openal.pas
字号:
(* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is OpenAL1.0 - Headertranslation to Object Pascal.
*
* The Initial Developer of the Original Code is
* Delphi OpenAL Translation Team.
* Portions created by the Initial Developer are Copyright (C) 2001-2004
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Tom Nuydens (delphi3d@gamedeveloper.org)
* Dean Ellis (dean.ellis@sxmedia.co.uk)
* Amresh Ramachandran (amreshr@hotmail.com)
* Pranav Joshi (pranavjosh@yahoo.com)
* Marten van der Honing (mvdhoning@noeska.com)
* Benjamin Rosseaux (BeRo)
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*)
unit openal;
{$IFDEF FPC}
// Added by bero
{$MODE Delphi}
{$IFDEF CPUI386}
{$DEFINE CPU386}
{$ASMMODE INTEL}
{$ENDIF}
{$IFNDEF WIN32}
{$LINKLIB c}
{$ENDIF}
{$ENDIF}
interface
uses
SysUtils{$IFDEF Win32},Windows{$ENDIF};
{ $ DEFINE ALUT} //define ALUT to use alut.dll
const
{$IFDEF Win32}
callibname='OpenAL32.dll';
calutlibname='Alut.dll';
{$ENDIF}
{$IFDEF Linux}
callibname='libopenal.so';
calutlibname='libalut.so';
{$ENDIF}
type
// OpenAL boolean type.
TALboolean = Boolean;
PALboolean = ^TALboolean;
// OpenAL 8bit signed byte.
TALbyte = ShortInt;
PALbyte = ^TALbyte;
// OpenAL 8bit unsigned byte.
TALuByte = Char;
PALuByte = PChar;
// OpenAL 16bit signed short integer type.
TALshort = SmallInt;
PALshort = ^TALshort;
// OpenAL 16bit unsigned short integer type.
TALushort = Word;
PALushort = ^TALushort;
// OpenAL 32bit unsigned integer type.
TALuint = Cardinal;
PALuint = ^TALuint;
// OpenAL 32bit signed integer type.
TALint = Integer;
PALint = ^TALint;
// OpenAL 32bit floating point type.
TALfloat = Single;
PALfloat = ^TALfloat;
// OpenAL 64bit double point type.
TALdouble = Double;
PALdouble = ^TALdouble;
// OpenAL 32bit type.
TALsizei = Cardinal;
PALsizei = ^TALsizei;
// OpenAL void type
TALvoid = Pointer;
PALvoid = ^TALvoid;
PPALvoid = ^PALvoid;
// OpenAL enumerations.
TALenum = Integer;
PALenum = ^TALenum;
// OpenAL bitfields.
TALbitfield = Cardinal;
PALbitfield = ^TALbitfield;
// OpenAL clamped float.
TALclampf = TALfloat;
PALclampf = ^TALclampf;
// Openal clamped double.
TALclampd = TALdouble;
PALclampd = ^TALclampd;
// ALC enumerations.
TALCenum = integer;
PALCenum = ^TALCenum;
// ALC boolean type.
TALCboolean = boolean;
PALCboolean = ^TALCboolean;
// ALC 8bit signed byte.
TALCbyte = ShortInt;
PALCbyte = ^TALCbyte;
// ALC 8bit unsigned byte.
TALCubyte = Char;
PALCubyte = PChar;
// ALC 16bit signed short integer type.
TALCshort = smallint;
PALCshort = ^TALCshort;
// ALC 16bit unsigned short integer type.
TALCushort = Word;
PALCushort = ^TALCushort;
// ALC 32bit unsigned integer type.
TALCuint = Cardinal;
PALCuint = ^TALCuint;
// ALC 32bit signed integer type.
TALCint = integer;
PALCint = ^TALCint;
// ALC 32bit floating point type.
TALCfloat = single;
PALCfloat = ^TALCfloat;
// ALC 64bit double point type.
TALCdouble = double;
PALCdouble = ^TALCdouble;
// ALC 32bit type.
TALCsizei = integer;
PALCsizei = ^TALCsizei;
// ALC void type
TALCvoid = Pointer;
PALCvoid = ^TALCvoid;
// ALC device
TALCdevice = TALCvoid;
PALCdevice = ^TALCdevice;
// ALC context
TALCcontext = TALCvoid;
PALCcontext = ^TALCcontext;
//EAX extension
DSPROPERTY_EAX_LISTENERPROPERTY = LongWORD;
DSPROPERTY_EAX_BUFFERPROPERTY = LongWORD;
// Use this structure for DSPROPERTY_EAXLISTENER_ALLPARAMETERS
// - all levels are hundredths of decibels
// - all times are in seconds
// - the reference for high frequency controls is 5 kHz
//
// NOTE: This structure may change in future EAX versions.
// It is recommended to initialize fields by name:
// myListener.lRoom = -1000;
// myListener.lRoomHF = -100;
// ...
// myListener.dwFlags = myFlags /* see EAXLISTENERFLAGS below */ ;
// instead of:
// myListener = { -1000, -100, ... , 0x00000009 };
// If you want to save and load presets in binary form, you
// should define your own structure to insure future compatibility.
//
TEaxListenerProperties = packed record
lRoom: integer; // room effect level at low frequencies
lRoomHF: integer;
// room effect high-frequency level re. low frequency levelimplementation
flRoomRolloffFactor: double; // like DS3D flRolloffFactor but for room effect
flDecayTime: double; // reverberation decay time at low frequenciesend.
flDecayHFRatio: double; // high-frequency to low-frequency decay time ratio
lReflections: integer; // early reflections level relative to room effect
flReflectionsDelay: double; // initial reflection delay time
lReverb: integer; // late reverberation level relative to room effect
flReverbDelay: double;
// late reverberation delay time relative to initial reflection
dwEnvironment: cardinal; // sets all listener properties
flEnvironmentSize: double; // environment size in meters
flEnvironmentDiffusion: double; // environment diffusion
flAirAbsorptionHF: double; // change in level per meter at 5 kHz
dwFlags: cardinal; // modifies the behavior of properties
end;
PEaxListenerProperties = ^TEaxListenerProperties;
// Use this structure for DSPROPERTY_EAXBUFFER_ALLPARAMETERS
// - all levels are hundredths of decibels
//
// NOTE: This structure may change in future EAX versions.
// It is recommended to initialize fields by name:
// myBuffer.lDirect = 0;
// myBuffer.lDirectHF = -200;
// ...
// myBuffer.dwFlags = myFlags /* see EAXBUFFERFLAGS below */ ;
// instead of:
// myBuffer = { 0, -200, ... , 0x00000003 };
//
TEaxBufferProperties = packed record
lDirect: integer; // direct path level
lDirectHF: integer; // direct path level at high frequencies
lRoom: integer; // room effect level
lRoomHF: integer; // room effect level at high frequencies
flRoomRolloffFactor: double; // like DS3D flRolloffFactor but for room effect
lObstruction: integer;
// main obstruction control (attenuation at high frequencies)
flObstructionLFRatio: double;
// obstruction low-frequency level re. main control
lOcclusion: integer;
// main occlusion control (attenuation at high frequencies)
flOcclusionLFRatio: double; // occlusion low-frequency level re. main control
flOcclusionRoomRatio: double; // occlusion room effect level re. main control
lOutsideVolumeHF: integer; // outside sound cone level at high frequencies
flAirAbsorptionFactor: double;
// multiplies DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF
dwFlags: Cardinal; // modifies the behavior of properties
end;
PEaxBufferProperties = ^TEaxBufferProperties;
const
//bad value
AL_INVALID = -1;
AL_NONE = 0;
//Boolean False.
AL_FALSE = 0;
//Boolean True.
AL_TRUE = 1;
//Indicate the type of AL_SOURCE.
//Sources can be spatialized
AL_SOURCE_TYPE = $200;
//Indicate source has absolute coordinates.
AL_SOURCE_ABSOLUTE = $201;
//Indicate Source has relative coordinates.
AL_SOURCE_RELATIVE = $202;
//Directional source, inner cone angle, in degrees.
//Range: [0-360]
//Default: 360
AL_CONE_INNER_ANGLE = $1001;
//Directional source, outer cone angle, in degrees.
//Range: [0-360]
//Default: 360
AL_CONE_OUTER_ANGLE = $1002;
//Specify the pitch to be applied, either at source,
//or on mixer results, at listener.
//Range: [0.5-2.0]
//Default: 1.0
AL_PITCH =$1003;
//Specify the current location in three dimensional space.
//OpenAL, like OpenGL, uses a right handed coordinate system,
//where in a frontal default view X (thumb) points right,
//Y points up (index finger), and Z points towards the
//viewer/camera (middle finger).
//To switch from a left handed coordinate system, flip the
//sign on the Z coordinate.
//Listener position is always in the world coordinate system.
AL_POSITION =$1004;
//Specify the current direction.
AL_DIRECTION =$1005;
// Specify the current velocity in three dimensional space.
AL_VELOCITY =$1006;
//Indicate whether source is looping.
//Type: ALboolean?
//Range: [AL_TRUE, AL_FALSE]
//Default: FALSE.
AL_LOOPING =$1007;
//Indicate the buffer to provide sound samples.
//Type: ALuint.
//Range: any valid Buffer id.
AL_BUFFER =$1009;
//Indicate the gain (volume amplification) applied.
//Type: ALfloat.
//Range: ]0.0- ]
//A value of 1.0 means un-attenuated/unchanged.
//Each division by 2 equals an attenuation of -6dB.
//Each multiplicaton with 2 equals an amplification of +6dB.
//A value of 0.0 is meaningless with respect to a logarithmic
//scale; it is interpreted as zero volume - the channel
//is effectively disabled.
AL_GAIN =$100A;
//Indicate minimum source attenuation
//Type: ALfloat
//Range: [0.0 - 1.0]
//Logarthmic
AL_MIN_GAIN =$100D;
//Indicate maximum source attenuation
//Type: ALfloat
//Range: [0.0 - 1.0]
//Logarthmic
AL_MAX_GAIN =$100E;
//Indicate listener orientation.
//at/up
AL_ORIENTATION =$100F;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -