[✔️]OpenAL API

简介: [✔️]OpenAL API

下载OpenAL Core SDK


alcOpenDevice


alcCreateContext


OpenAL通常一共只可以申请32个播放器。


alBufferData


将PCM数据填充到OpenAL的bufer里面


void alBufferData( 
 ALuint buffer, // buffer名字
 ALenum format, // 填充格式
    // AL_FORMAT_MONO8 单声道
    // AL_FORMAT_MONO16 
    // AL_FORMAT_STEREO8 
    // AL_FORMAT_STEREO16   16位立体声
 const ALvoid *data, // 指向音频数据的指针
 ALsizei size, // 音频数据的字节大小
 ALsizei freq // 音频的频率,值越大声音越尖锐
); 


alutCreateBufferFromFile


alSourceQueueBuffers


将buffer的音频数据加入的播放队列里面,所有通过alSourceQueueBuffers附加到某个source的buffer,都应该有相同的声音格式。


void alSourceQueueBuffers( 
 ALuint source, 
 ALsizei n, // buffer的数量
 ALuint* buffers // buffer的地址
); 


如果检查到错误码AL_INVALID_OPERATION,大部分原因都是新加的buffer格式不相同导致的,检查下format和freq

There is no current context, an attempt was made to add a new buffer which is not the same format as the buffers already in the queue, or the source already has a static buffer attached.


alSourceUnqueueBuffers


buffer队列用以保证声音的连续播放,不然就会出现一顿一顿的感觉,因为是边解析边播放


用alSourceQueueBuffers入队列的buffer个数,出队用alSourceUnqueueBuffers


format
AL_FORMAT_MONO16 16位单声道
AL_FORMAT_STEREO16 16位立体声


alSourcePlay


播放源的状态将更改为AL_playing。当在 源已在播放,源将在开始时重新启动。当 附加的缓冲区已完成播放,源将进入AL_STOPPED状态。


踩坑


alcOpenDevicealcCreateContext如果检查错误,都会返回

AL_INVALID_OPERATION,这个属于正常现象,在调用alcMakeContextCurrent之前,都会返回这个错误


后来我调用alBufferData也会出现AL_INVALID_OPERATION,是因为我设置alSourcei导致的,暂时先取消了设置


属性设置


需要先设置bufferdata 再进行source的属性设置 才能正常播放声音


source属性


属性 数据类型 描述
AL_PITCH f, fv source的buffer的频率(采样率)倍增器(pitchmultiplier),总是正数
AL_GAIN f, fv source增益,应为正数
AL_MAX_DISTANCE f, fv, i, iv 用于反钳位距离模型(InverseClamped Distance Model),大于次距离,source不再衰减
AL_ROLLOFF_FACTOR f, fv, i, iv source的衰减率,默认为1.0
AL_REFERENCE_DISTANCE f, fv, i, iv 小于此距离时,source的音量减半(在衰减率和AL_MAX_DISTANCE作用之前)
AL_MIN_GAIN f, fv source的最小增益
AL_MAX_GAIN f, fv source的最大增益
AL_CONE_OUTER_GAIN f, fv 外锥(outercone)外的增益
AL_CONE_INNER_ANGLE f, fv, i, iv 内锥覆盖的角度,在此之中,source不会衰减
AL_CONE_OUTER_ANGLE f, fv, i, iv 外锥覆盖的角度,在此之外,source完全衰减。内锥和外锥之间平滑衰减
AL_POSITION fv, 3f 指定聆听者在三维世界的X,Y,Z位置,不能小于0,否则听不见
AL_VELOCITY fv, 3f 速度矢量
AL_DIRECTION fv, 3f, iv, 3i 方向矢量
AL_SOURCE_RELATIVE i, iv 指示position是否是相对于listener
AL_SOURCE_TYPE i, iv source类型,AL_UNDETERMINED,AL_STATIC, AL_STREAMING
AL_LOOPING i, iv 设置循环播放,AL_TURE,AL_FALSE
AL_BUFFER i, iv 附加的buffer的ID
AL_SOURCE_STATE i, iv source的状态,AL_STOPPED,AL_PLAYING, ...
AL_BUFFERS_QUEUED i, iv 【只读】用alSourceQueueBuffers入队列的buffer个数,出队用alSourceUnqueueBuffers
AL_BUFFERS_PROCESSED i, iv 【只读】队列中已经被处理的buffer数
AL_SEC_OFFSET f, fv, i, iv 播放的位置,秒
AL_SAMPLE_OFFSET f, fv, i, iv 播放的位置,Sample数
AL_BYTE_OFFSET f, fv, i, iv 播放的位置,字节数


目录
相关文章
|
10月前
|
XML JSON 监控
API 开发完全指南
本指南将详尽探讨API开发的基本要素,包括涉及的概念、类型和协议,以及可用的最佳实践和工具。我们将从揭示API在现代软件开发中的作用开始,阐明它们如何促进不同软件组件之间的无缝通信。之后,我们将深入研究各种API类型,如RESTful、GraphQL和SOAP,并分析它们独特的特点和理想用例。 接下来将讨论API设计的关键方面,重点关注API安全性、可扩展性和可维护性。我们将讨论常见的身份验证和授权机制、速率限制以及API版本控制等其他基本主题。最后,我们将介绍领先的API开发工具和框架以及文档和测试的价值,确保你具备开发高质量、高效且安全API所需的知识和资源。
726 0
|
7月前
|
XML 安全 API
Rest API 开发分享
Rest API 开发分享
|
9月前
|
XML 缓存 API
常见API架构介绍
两个服务间进行接口调用,通过调用API的形式进行交互,这是常见CS架构实现的模式,客户端通过调用API即可使用服务端提供的服务。相较于SPI这种模式,就是服务端只规定服务接口,但具体实现交由第三方或者自身来实现,API这种模式是具体的实现和API接口都是服务端来实现的。
320 1
常见API架构介绍
|
9月前
|
缓存 JSON 程序员
良好的 API 设计指南
当用户请求获取一组对象列表时,你就需要对结果进行过滤并返回一组严格符合用户要求的对象。有时返回结果的数量可能非常大,但是你也不能随意对此进行约束,因为这种服务端的随意约束会造成第三方开发人员的困惑。如果用户请求了一个集合,并对返回结果进行遍历,然后只要前100个对象
|
10月前
|
SQL 搜索推荐 Java
REST API 设计规范(下)
REST API 设计规范(下)
147 0
|
10月前
|
XML 存储 SQL
REST API 设计规范(上)
REST API 设计规范
182 0
|
11月前
|
XML JSON 网络协议
API与API管理,需要注意什么?
API全称为应用程序编程接口,通俗来讲就是不需要访问程序的源代码,也不需要理解程序实现的方式,只需要通过访问相应接口的URL并填写需要获得的数据的参数名,来获取需要的参数信息。 一个接口可以是一个简单的应用程序,例如电商平台、快递查询、手机归属地查询等等,这些都可以是接口,并且可以直接填写参数取值。
|
12月前
|
Oracle 架构师 关系型数据库
【API架构】REST API 行业辩论:OData vs GraphQL vs ORDS
【API架构】REST API 行业辩论:OData vs GraphQL vs ORDS
|
SQL 存储 搜索推荐
【布道API】关于 API 分页
随着消费者期望的提高,API 性能从未像今天这样重要。众所周知,如果网页加载时间超过 3 秒,超过半数的网络用户会放弃继续浏览网页。
220 0
|
存储 JSON 安全
REST API 安全基础
REST API 安全基础
128 0
REST API 安全基础