OpenAL学习笔记(一)---播放音频(*.wav)
来源:互联网 发布:windows网络抓包工具 编辑:程序博客网 时间:2024/05/22 09:52
1.简介
OpenAL和OpenGL编码风格很像,跟OpenGL中我们常用的glut类似,OpenAL中也用alut.
2.实现
实现中参考了samples里的loadfile.c;
源码:
TEAudio.h
//! Created 2013/04/22;//! c++;#include <stdlib.h>#include <stdio.h>#include <string>#include <iostream>//! OpenAl;#include "al/alut.h"using namespace std;namespace TE{class TEAudio{private:static TEAudio* m_pAudio;public:TEAudio(void);~TEAudio(void);//! Singleton. Return the single instance;static TEAudio* sharedAudio(void);//! Load file and play the media(only *.wav...now)void loadFile(const char* strFilePath);};}
TEAudio.cpp (main.cpp)
#include "TEAudio.h"using namespace TE;TEAudio* TEAudio::m_pAudio = NULL;TE::TEAudio::TEAudio( void ){int argc = 1;char* argv = "TEApp";if (!alutInit (&argc, &argv)){ALenum error = alutGetError ();fprintf (stderr, "%s\n", alutGetErrorString (error));exit (EXIT_FAILURE);}}TE::TEAudio::~TEAudio( void ){}TEAudio* TE::TEAudio::sharedAudio( void ){if (NULL == m_pAudio){m_pAudio = new TEAudio();}return m_pAudio;}void TE::TEAudio::loadFile( const char* strFilePath ){ALuint buffer;ALuint source;ALenum error;ALint status;/* Create an AL buffer from the given sound file. */buffer = alutCreateBufferFromFile (strFilePath);if (buffer == AL_NONE){error = alutGetError ();fprintf (stderr, "Error loading file: '%s'\n",alutGetErrorString (error));alutExit ();exit (EXIT_FAILURE);}/* Generate a single source, attach the buffer to it and start playing. */alGenSources (1, &source);alSourcei (source, AL_BUFFER, buffer);alSourcePlay (source);/* Normally nothing should go wrong above, but one never knows... */error = alGetError ();if (error != ALUT_ERROR_NO_ERROR){fprintf (stderr, "%s\n", alGetString (error));alutExit ();exit (EXIT_FAILURE);}/* Check every 0.3 seconds if the sound is still playing. */do{alutSleep (0.3f);alGetSourcei (source, AL_SOURCE_STATE, &status);std::cout << ".";}while (status == AL_PLAYING);}int main(int argc, char** argv){//F:\\backup\\c++\\TEGameTest\\Debug\\;TEAudio::sharedAudio()->loadFile("lovesong.wav");return 0;}
3.待续....
①加入播放控制(播放、暂停、恢复、动态加载资源);
②与GL mainloop结合(防止图像和音频单独进入死循环);
4.下载链接
相关库和源码下载
- OpenAL学习笔记(一)---播放音频(*.wav)
- OpenAL学习笔记(二)---播放音频(*.wav)
- 使用openal播放WAV音频
- 使用openal播放WAV音频
- OpenAL播放WAV音频文件
- OpenAL播放pcm或wav数据流-windows/ios/android(一)
- OpenAL播放pcm或wav数据流-windows/ios/android(一)
- OpenAL播放pcm或wav数据流-windows/ios/android(一)
- OpenAL播放音频流
- OpenAl音频播放
- Openal播放音频.
- OpenAL 快速入门(无延迟播放音频)
- 播放WAV音频
- Java-播放WAV音频
- IOS音频1:之采用四种方式播放音频文件(一)AudioToolbox AVFoundation OpenAL AUDIO QUEUE
- 音频播放处理(openal、dsound、waveout)
- 使用OSS播放WAV音频
- Wav 格式音频播放实例
- zoj-1057
- 其它Monitor 注意事项
- <转>理解自旋锁(spin lock)
- Android界面与交互设计原则
- 禁用的Tcl 命令
- OpenAL学习笔记(一)---播放音频(*.wav)
- [go语言]控制语句
- Android Camera CameraHal.cpp 分析
- 韩顺平 PHP视频教程 Ajax技术第05讲-返回XML如何处理
- <转>Linux查看进程的所有子进程和线程
- ClistCtr HDN_BEGINTRACK这个WM_NOTIFY消息
- 术语表
- [go语言]函数
- Android的binder机制分析