OpenAL 使用基本流程
来源:互联网 发布:pdz文件阅读器 mac 编辑:程序博客网 时间:2024/05/21 00:45
1. 初始化
ALCcontext* p_context; ALCdevice* p_device; ALuint ui_source; ALuint m_buffers[MAX_CACHE]; std::list<ALuint> m_buffer_queue; p_device = alcOpenDevice(NULL); p_context = alcCreate(p_device, NULL); alcMakeContextCurrent(p_context); alGenBuffers(MAX_SIZE, m_buffers); alGenSource(1, &p_source); for(auto buf : m_buffers) { m_buffer_queue.push_back(buf); }
2. 设置音效
alListenerf(AL_GAIN, 1.45f);
3. 播放
播放最简单的流程就是:
- 加载音频数据(PS:必须是Raw Data)
- 把数据写入buffer: alBufferData
- alSourcePlay
支持缓冲区的播放:
- 加载音频数据
- 回收Buffer : alSourceUnqueueBuffers
- 把数据写入buffer: alBufferData
- 将buffer放回缓冲区:alSourceQueueBuffers
- 播放: alSourcePlay
具体流程如下:
PS:下面代码是摘出来的,不一定可以运行,看看即可
while(b_break){ //Read Data int size= ReadData(buffer); //recycle buffers ALint i_num; alGetSourcei(m_source, AL_BUFFERS_PROCESSED, &i_num); ALuint buffers[MAX_SIZE]; alSourceUnqueueBuffers(ui_source, i_num, buffers); for(int i = 0; i <= i_num; ++i) { m_bufferQueue.push_back(buffers[i]); } //push data to al buffers alBuf = m_buffer_queue.front(); alBufferData(alBuf, AL_FORMAT_MONO16, buffer, size * kByte, header->samplesPerSec); alSourceQueueBuffers(ui_source, 1, &alBuf); //play ALint bufferQueued; alGetSourcei(ui_source, AL_BUFFERS_QUEUED, &bufferQueued); if(bufferQueued != 0) alSourcePlay(m_source);}
3. 退出
//stop alSourceStop(ui_source); //release alcMakeContextCurrent(p_context) alDeleteSources(1, &ui_source); m_source = 0; alDeleteBuffers(MAX_CACHE, m_buffer); memset(m_buffer, 0, sizeof(m_buffer)); alcMakeContextCurrent(nullptr); alcDestroyContext(p_context); m_context = nullptr; alcCloseDevice(p_device); p_device = nullptr; m_buffer_queue.clear();
0 0
- OpenAL 使用基本流程
- openal 基本接口介绍
- OpenAL基本介绍
- OpenAL播放器使用
- openal
- OpenAL
- 使用openal播放WAV音频
- OpenAL alDistanceModel函数使用详解
- IOS使用OpenAL播放PCM
- IOS使用OpenAL播放音频文件
- 使用openal播放WAV音频
- NUnit基本使用流程
- git使用基本流程
- ARKit基本使用流程
- FFmepg基本使用流程
- Git基本使用流程
- 使用OpenFOAM的基本流程
- 使用ALM的基本流程
- Vbs-Js_Vir
- LuaJIT通过ffi调用win32 API完成窗口版HelloWorld示例
- 安卓的SQLite的使用
- jsp基础、指令、9个内置隐含对象、jsp标签、el表达式
- HDU-4003-树形dp
- OpenAL 使用基本流程
- shmem
- 运用ViewPager实现图片简单滑屏效果【转自http://blog.csdn.net/harvic880925/article/details/38453725 】
- 第十二周项目3
- Hadoop2.6.0伪分布式xml配置文件
- [课堂笔记]VMware Workstation上的linux系统中终端操作
- iptables详解
- JZOJ 4915. 【GDOI2017模拟12.9】最长不下降子序列
- linux下忘记密码后重新配置nexus