openal 基础知识3
四创新科技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名字
alcGetString(NULL, ALC_ALL_DEVICES_SPECIFIER);可获取全部device名字列表。
alcGetString(NULL, ALC_DEFAULT_ALL_DEVICES_SPECIFIER);可获取默认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都会调用失败。
支持的格式:
4通道,16bit数据
6通道(5.1),16bit数据
7通道(6.1),16bit数据
8通道(7.1),16bit数据
在切换不同格式的多通道buffer之前,要用alGetEnumValue来检查格式是否支持。
- ALenum eBufferFormat= alGetEnumValue(“AL_FORMAT_51CHN16”);
- if (!eBufferFormat) {
- printf(“No supportfor 5.1 playback!\n”);
- return 0;
- }
1)AL_FORMAT_QUAD16,16bit采样4通道buffer数据组织
Sample 1, 左前扬声器
Sample 1, 右前扬声器
Sample 1, 左后扬声器
Sample 1, 右后扬声器
Sample 2, 左前扬声器
…
2)AL_FORMAT_51CHN16,16bit采样5.1通道buffer数据组织
Sample 1, 左前扬声器
Sample 1, 右前扬声器
Sample 1, 中央扬声器
Sample 1, 低频扬声器
Sample 1, 左后扬声器
Sample 1, 右后扬声器
Sample 2, 左前扬声器
…
3)AL_FORMAT_61CHN16,16bit采样6.1通道buffer数据组织
Sample 1, 左前扬声器
Sample 1, 右前扬声器
Sample 1, 中前扬声器
Sample 1, 低频扬声器
Sample 1, 左后扬声器
Sample 1, 右后扬声器
Sample 1, 中后扬声器
Sample 2, 左前扬声器
…
4)AL_FORMAT_71CHN16,16bit采样7.1通道buffer数据组织
Sample 1, 左前扬声器
Sample 1, 右前扬声器
Sample 1, 中前扬声器
Sample 1, 低频扬声器
Sample 1, 左后扬声器
Sample 1, 右后扬声器
Sample 1, 左侧扬声器
Sample 1, 右侧扬声器
Sample 2, 左前扬声器
…
4. 音效extension(Effects Extension (EFX))
参见“EffectsExtension Guide”。(我没找到)
openal 基础知识3的更多相关文章
- openal 基础知识4
二函数 1. buffer函数 void alGenBuffers(ALsizei n /* buffer数*/, ALuint * buffers /* buffer ID数组*/); void a ...
- openal 基础知识2
三枚举扩展包(enumeration extension,“ALC_ENUMERATION_EXT”) 开发者可以通过这个extension得到一个字符串列表,区分不同的渲染/捕捉设备.OpenALr ...
- openal 基础知识
原文地址:http://blog.csdn.net/woker/article/details/8687380 一简介 OpenAL抽象出三种基本对象:buffers(缓冲区).sources(源). ...
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- RabbitMQ基础知识
RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- selenium自动化基础知识
什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...
- [SQL] SQL 基础知识梳理(一)- 数据库与 SQL
SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...
- [SQL] SQL 基础知识梳理(二) - 查询基础
SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...
随机推荐
- 基于FPGA的线阵CCD实时图像采集系统
基于FPGA的线阵CCD实时图像采集系统 2015年微型机与应用第13期 作者:章金敏,张 菁,陈梦苇2016/2/8 20:52:00 关键词: 实时采集 电荷耦合器件 现场可编程逻辑器件 信号处理 ...
- Maven学习之(二)Maven插件创建项目
现在这里是已经在eclipse上成功的安装了Maven的插件后的操作,简单的创建一个项目, 同时实现Maven功能. 前提条件: 1.JDK 2.maven安装好 3.eclipse上maven插件安 ...
- C++ - 动态申请数组空间
// 用指针p指向由new动态分配的长度为length*sizeof(int)的内存空间. int * p = new int[length];
- plot sin 04 坐标轴居中
plot sin 04 坐标轴居中 code #!/usr/bin/env python # -*- coding: utf-8 -*- import numpy as np import matpl ...
- 【WPF】ListBox使用DataTemplate 以及默认选中第一项Item
ListBox中DataTemplate的用法如下 . <ListBox x:Name="areaLB" ItemsSource="{Binding AreaNum ...
- C语言 · 用宏求球的体积
算法提高 7-1用宏求球的体积 时间限制:1.0s 内存限制:256.0MB 问题描述 使用宏实现计算球体体积的功能.用户输入半径,系统输出体积.不能使用函数,pi=3.141592 ...
- buildroot 搭建ftpd 服务器记录
vsftpd 搭建失败,应该是buildroot 文件系统还有操作没有理解透,还需要不断的学习. 所以用轻量级的 ftpd 进行替代, 步骤如下: // ---> make busybox-me ...
- [4G]常用AT指令
The GPRS communication module is controlled by terminal (e.g. H50) firmware. The actions are mapped ...
- JavaScript 深入理解作用域链
第一步. 定义后:每个已定义函数,都有一个内在属性[scope],其对应一个对象的列表,列表中的对象仅能内部访问. 例如:建立一个全局函数A,那么A的[Scope]内部属性中只包含一个全局对象(Glo ...
- github搭建个人博客----------绑定域名访问
首先你得有一个Github账号,没有的话去github.com注册一个账号,然后到达仓库信息填写界面: 创建仓库,如下图:(仓库名要以自己的github名作为前缀,后面的夹 .github.io) 后 ...