openal 基礎知識4


函數

1. buffer函數

void alGenBuffers(ALsizei n /* buffer*/, ALuint * buffers /* buffer ID數組*/);

void alDeleteBuffers(ALsizei n /* buffer*/, ALuint * buffers /* buffer ID 數組*/);

ALboolean alIsBuffer(ALuint buffer);

// buffer填充數據

void alBufferData(ALuint buffer, ALenum format/*聲音格式*/,const ALvoid *data/*數據地址*/

                        , ALsizei size/*數據字節數*/,ALsizei freq/*聲音頻率*/);

                聲音格式:AL_FORMAT_[MONO8, MONO16, STEREO8, STEREO16]

// 設置buffer的浮點數屬性

void alBufferf (ALuintbuffer, ALenum param/*屬性名*/,ALfloat value/*屬性值*/);

void alBuffer3f (ALuintbuffer, ALenum param, ALfloat v1, ALfloat v2, ALfloat v3);

void alBufferfv (ALuintbuffer, ALenum param, ALfloat *values);

// 設置buffer的整數屬性

void alBufferi (ALuintbuffer, ALenum param, ALint value);

void alBuffer3i (ALuintbuffer, ALenum param, ALint v1, ALint v2, ALint v3);

void alBufferiv (ALuintbuffer, ALenum param, ALint *values);

// 獲取buffer屬性值

void alGetBufferf(ALuint buffer, ALenum param, ALfloat *value);

void alGetBuffer3f(ALuint buffer, ALenum param, ALfloat *v1, ALfloat *v2, ALfloat *v3);

void alGetBufferfv(ALuint buffer, ALenum param, ALfloat *values);

void alGetBufferi(ALuint buffer, ALenum param, ALint *value);

void alGetBuffer3i(ALuint buffer, ALenum param, ALint *v1, ALint *v2, ALint *v3);

void alGetBufferiv(ALuint buffer, ALenum param, ALint *values);

 

2. source函數

void alGenSources(ALsizei n, ALuint *sources);

void alDeleteSources(ALsizei n, ALuint *sources);

ALboolean alIsSource(ALuint source);

 

void alSourcef (ALuintsource, ALenum param, ALfloat value);

void alSource3f (ALuintsource, ALenum param, ALfloat v1, ALfloat v2, ALfloat v3);

void alSourcefv (ALuintsource, ALenum param, ALfloat *values);

void alSourcei (ALuintsource, ALenum param, ALint value);

void alSource3i (ALuintsource, ALenum param, ALint v1, ALint v2, ALint v3);

void alSourceiv (ALuintsource, ALenum param, ALint *values);

 

void alGetSourcef(ALuint source, ALenum param, ALfloat *value);

void alGetSource3f(ALuint source, ALenum param, ALfloat *v1, ALfloat *v2, ALfloat *v3);

void alGetSourcefv(ALuint source, ALenum param, ALfloat *values);

void alGetSourcei(ALuint source, ALenum param, ALint *value);

void alGetSource3i(ALuint source, ALenum param, ALint *v1, ALint *v2, ALint *v3);

void alGetSourceiv(ALuint source, ALenum param, ALint *values);

 

void alSourcePlay(ALuint source);

void alSourcePause(ALuint source);

void alSourceStop(ALuint source);

void alSourceRewind(ALuint source); //停止source並將其狀態設置為AL_INITIAL

void alSourcePlayv(ALsizei n, ALuint *sources); //播放一系列source

void alSourcePausev(ALsizei n, ALuint *sources);

void alSourceStopv(ALsizei n, ALuint *sources);

void alSourceRewindv(ALsizei n, ALuint *sources);

 

voidalSourceQueueBuffers (ALuint source, ALsizei n, ALuint *buffers); //alGetSourcei(source,

                AL_BUFFERS_PROCESSED,&x)獲取已經處理了的buffer

voidalSourceUnqueueBuffers (ALuint source, ALsizei n, ALuint *buffers);

 

3. listener函數

void alListenerf(ALenum param, ALfloat value);

void alListener3f(ALenum param, ALfloat v1, ALfloat v2, ALfloat v3);

void alListenerfv(ALenum param, ALfloat *values);

void alListeneri(ALenum param, ALint value);

void alListener3i(ALenum param, ALint v1, ALint v2, ALint v3);

void alListeneriv(ALenum param, ALint *values);

void alGetListenerf(ALenum param, ALfloat *value);

void alGetListener3f(ALenum param, ALfloat *v1, ALfloat *v2, ALfloat *v3);

void alGetListenerfv(ALenum param, ALfloat *values);

void alGetListeneri(ALenum param, ALint *value);

void alGetListener3i(ALenum param, ALint *v1, ALint *v2, ALint *v3);

void alGetListeneriv(ALenum param, ALint *values);

 

4. 狀態函數

        AL_DOPPLER_FACTOR f 全局多普勒系數

        AL_SPEED_OF_SOUND f 聲音的每秒傳播速度

        AL_DISTANCE_MODEL i 距離模型枚舉值

void alEnable (ALenumcapability); //使能某項功能

void alDisable (ALenumcapability);

ALboolean alIsEnabled(ALenum capability);

 

// FIXME:這一堆不知道是干嗎的。。。

ALboolean alGetBoolean(ALenum param);

ALdouble alGetDouble(ALenum param);

ALfloat alGetFloat(ALenum param);

ALint alGetInteger(ALenum param);

void alGetBooleanv(ALenum param, ALboolean *data);

void alGetDoublev(ALenum param, ALdouble *data);

void alGetFloatv(ALenum param, ALfloat *data);

void alGetIntegerv(ALenum param, ALint *data);

 

const Alchar *alGetString (ALenum param); // param

                AL_VENDOR,AL_VERSION, AL_RENDERER, AL_EXTENSIONS

 

void alDopplerFactor(ALfloat value); //設置多普勒因子,默認1.0

void alSpeedOfSound(ALfloat value); //默認343.3

void alDistanceModel(ALenum value); //設置OpenAL的距離模型

                AL_INVERSE_DISTANCE//倒數距離

                AL_INVERSE_DISTANCE_CLAMPED//默認值

                AL_LINEAR_DISTANCE //線性距離

                AL_LINEAR_DISTANCE_CLAMPED

                AL_EXPONENT_DISTANCE//指數距離

                AL_EXPONENT_DISTANCE_CLAMPED

                AL_NONE

                //這兩個參數是計算距離中用的,公式參考原版文檔,總之越近增益越大

                AL_REFERENCE_DISTANCE//參考距離

                AL_ROLLOFF_FACTOR //衰減因子

 

5. 錯誤函數

ALenum alGetError(ALvoid);

 

6. extension函數

ALbooleanalIsExtensionPresent (const ALchar *extname); //extension有效時返回AL_TRUE

void * alGetProcAddress(const ALchar *fname); //返回指定的函數指針或者NULL

ALenum alGetEnumValue(const ALchar *ename); //返回ename描述的ALenum或者NULL

 

7. context函數

ALC_FREQUENCY l 輸出頻率

ALC_MONO_SOURCES l 請求的單聲道source

ALC_STEREO_SOURCES l 請求的雙聲道source

ALC_REFRESH l context運行的刷新率

ALC_SYNC i 同步context的標志位

ALContext *alcCreateContext (ALCdevice *device, ALCint *attrlist);

                attrlist:上述屬性集的指針,可以是NULL或以0結尾的列表,列表中每一項是屬性名和屬性值組成的數對

ALCbooleanalcMakeContextCurrent (ALCcontext *context);

void alcProcessContext(ALCcontext *context); //通知指定context開始運行

void alcSuspendContext(ALCcontext *context); //這兩個組合使用可以使狀態的改變迅速生效

void alcDestroyContext(ALCcontext *context); //關閉非當前的context

ALCcontext*alcGetCurrentContext (ALCvoid);

ALCdevice*alcGetContextDevice (ALCcontext *context);

 

 

8. context錯誤函數

ALCenum alcGetError(ALCdevice *device);

 

9. contextdevice函數

ALCdevice*alcOpenDevice (const ALCchar *devicename);

ALCbooleanalcCloseDevice (ALCdevice *device);

 

10. contextextension函數

ALCbooleanalcIsExtensionPresent (ALCdevice *device, const ALCchar *extName);

void* alcGetProcAddress(ALCdevice *device, const ALCchar *funcName);

ALCenum alcGetEnumValue(ALCdevice *device, const ALCchar *enumName);

 

11. context狀態函數

const ALCchar *alcGetString (ALCdevice *device, ALenum param);

                屬性: ALC_DEFAULT_DEVICE_SPECIFIER

                        ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER

                        ALC_DEVICE_SPECIFIER

                        ALC_CAPTURE_DEVICE_SPECIFIER

                        ALC_EXTENSIONS

void alcGetIntegerv(ALCdevice *device, ALCenum param, ALCsizei size, ALCint *data);

                param: ALC_MAJOR_VERSION,ALC_MINOR_VERSION,

                        ALC_ATTRIBUTES_SIZE,ALC_ALL_ATTRIBUTES

                size: 傳入的目標buffer的大小

 

12. context 捕捉函數

ALCdevice*alcCaptureOpenDevice (const ALCchar *devicename, ALCuint frequency, ALCenum format,ALCsizei buffersize);

                  frequency: 捕捉的頻率

ALCbooleanalcCaptureCloseDevice (ALCdevice *device);

void alcCaptureStart(ALCdevice *device); //啟動捕捉,數據存入一個內部環形bufferbuffer大小是opendevice時候傳入。通過alcGetIntegervALC_CAPTURE_SAMPLES可以獲得當前有效采樣數,然后可用alcCaptureSamples獲得已經采樣的樣本。

void alcCaptureStop(ALCdevice *device);

void alcCaptureSamples(ALCdevice *device, ALCvoid *buffer, ALCsizei samples);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM