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); //啟動捕捉,數據存入一個內部環形buffer,buffer大小是opendevice時候傳入。通過alcGetIntegerv和ALC_CAPTURE_SAMPLES可以獲得當前有效采樣數,然后可用alcCaptureSamples獲得已經采樣的樣本。
void alcCaptureStop(ALCdevice *device);
void alcCaptureSamples(ALCdevice *device, ALCvoid *buffer, ALCsizei samples);
轉載于:https://www.cnblogs.com/dragon2012/p/3229048.html
總結
以上是生活随笔為你收集整理的openal 基础知识4的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spoj 247
- 下一篇: OFFICE OUTLOOK 2007