四创新科技extension (Creative Labs'Extensions)
创新科技为OpenAL添加了多个extensions,许多都利用了他们声卡的特性。
“Enumerate All”extension 类似于“EnumerationExtension”,但是扩展到可以覆盖所有可用声卡(包括WindowsVista里面的声音end-points)。
“X-RAM” extension允许开发者使用板上声音RAM用来存储OpenALbuffers。
“Multi-ChannelBuffers” extension 允许开发者播放多通道buffers。
“Effects Extension(EFX)” 允许应用程序通过音效(如混音、低通滤波)来创建一个逼真的3D听觉世界。
1. “EnumerateAll” extension, “ALC_ENUMERATE_ALL_EXT”
“EnumerationExtension”相同,但是额外检测其它的音频路径。若你不需要这样完全控制输出路径的选择,则应该使用标准EnumerationExtension。
1) 检测EnumerateAll Extension
alcIsExtensionPresent (NULL, “ALC_ENUMERATE_ALL_EXT”) == AL_TRUE
2) 获取device名字
可获取全部device名字列表。
可获取默认device的名字。
2. X-RAM
声卡特性。
3. 多通道buffers(Multi-Channel Buffers)
此extension提供了播放多通道数据的功能,支持多种格式。多通道buffers可以附加(attach)或者入队(queue)到某个source上。当使用“GenericSoftware” device时,多通道buffers混合成双通道输出。在硬件device(比如“GenericHardware” device或本地device)上,buffer的每个通道都需要一个硬件发声器(hardwarevoice)。例如播放一个AL_FORMAT_511CHN16格式的buffer,需要6个独立的硬件发声器。若硬件资源不可用,则alSourceQueueBuffers和alSourcei都会调用失败。
支持的格式:
通道,16bit数据
通道(5.1),16bit数据
通道(6.1),16bit数据
通道(7.1),16bit数据
在切换不同格式的多通道buffer之前,要用alGetEnumValue来检查格式是否支持。
[cpp] view plain copy
1. ALenum eBufferFormat= alGetEnumValue(“AL_FORMAT_51CHN16”);
2.
3. if (!eBufferFormat) {
4. printf(“No supportfor 5.1 playback!\n”);
5. return 0;
6. }
1)AL_FORMAT_QUAD16,16bit采样4通道buffer数据组织
左前扬声器
右前扬声器
左后扬声器
右后扬声器
左前扬声器
…
2)AL_FORMAT_51CHN16,16bit采样5.1通道buffer数据组织
左前扬声器
右前扬声器
中央扬声器
低频扬声器
左后扬声器
右后扬声器
左前扬声器
…
3)AL_FORMAT_61CHN16,16bit采样6.1通道buffer数据组织
左前扬声器
右前扬声器
中前扬声器
低频扬声器
左后扬声器
右后扬声器
中后扬声器
左前扬声器
…
4)AL_FORMAT_71CHN16,16bit采样7.1通道buffer数据组织
左前扬声器
右前扬声器
中前扬声器
低频扬声器
左后扬声器
右后扬声器
左侧扬声器
右侧扬声器
左前扬声器
…
4. 音效extension(Effects Extension (EFX))
参见“EffectsExtension Guide”。(我没找到)