OpenAl编程入门:播放一段音频
OpenAl编程入门
关于OpenAl可参考如下两站,本文不再赘述。
http://baike.baidu.com/view/1355367.htm
http://en.wikipedia.org/wiki/OpenAL
相关的开发包可上网搜索"OPENAL SDK DOWNLOAD".
以下是一个非常简单示例,我们将播放一段正弦音频。
int main(int argc, char *argv[])
{
InitOpenAL(); // 初始化openal
LoadData(); // 载入WAV数据
Play(); // 播放
UnloadData(); // 卸载WAV数据
ShutdownOpenAL(); // 关闭openal
return ;
}
以上代码不涉及任何OPENAL的东西,只是想先给个OPENAL的使用流程。
接下来我们实现以上列出的五个函数。
1、全局数据
ALuint Source;// 用于播放声音
ALuint Buffer;// 声音数据
2、InitOpenAL&ShutdownOpenAL
以下就不多作说明,操作都很简单。
bool InitOpenAL()
{
ALCdevice * pDevice = alcOpenDevice(NULL); // 打开默认音频设备
ALCcontext * pContext = alcCreateContext(pDevice, NULL);
alcMakeContextCurrent(pContext);
return true;
// 注意:这里没有进行失败检测,仅用于示例
} void ShutdownOpenAL()
{
ALCcontext *pContext;
ALCdevice *pDevice; pContext = alcGetCurrentContext();
pDevice = alcGetContextsDevice(pContext); alcMakeContextCurrent(NULL);
alcDestroyContext(pContext);
alcCloseDevice(pDevice);
}
2、LoadData & UnloadData
这里我们使用cosf生成一段正弦波作为音频数据。
bool LoadData()
{
// 载入变量.
const ALsizei size = ;
ALsizei freq = ;
ALboolean loop = ; // 循环播放
// 使用一段正弦波作数据
short data[];
alGenBuffers(, &Buffer);
float max = SHRT_MAX / ;
float rad = ;
for(short & e : data)
{
e = (short)(max * cosf(rad));
rad += .f;
}
// 载入WAV数据
alBufferData(Buffer, AL_FORMAT_MONO16, data, size, freq);
alGenSources(, &Source); // 源声音的位置
ALfloat SourcePos[] = { 0.0, 0.0, 0.0 };
// 源声音的速度
ALfloat SourceVel[] = { 0.0, 0.0, 0.0 }; alSourcei (Source, AL_BUFFER, Buffer );
alSourcef (Source, AL_PITCH, 1.0f );
alSourcef (Source, AL_GAIN, 1.0f );
alSourcefv(Source, AL_POSITION, SourcePos);
alSourcefv(Source, AL_VELOCITY, SourceVel);
alSourcei (Source, AL_LOOPING, loop ); return true;
}
void UnloadData()
{
alDeleteBuffers(, &Buffer);
alDeleteSources(, &Source);
}
3、播放
这里你可以自由发挥了,alSourcePlay/alSourceStop/alSourcePause分别是播放、停止、暂停操作。
void Play()
{
// 播放
alSourcePlay(Source);
printf("Press Enter To Stop Sound\n");
getchar();
alSourceStop(Source);
}
4、最后别忘了加上头文件
#include <stdio.h> // for printf
#include <math.h> // for cosf
#include "al.h" // for glXzzz
#include "alc.h" // for glcXzzz
后俩文件需要将OPENAL SDK的 include 目录加入到项目包含路径下。
OpenAl编程入门:播放一段音频的更多相关文章
- DirectShow 最简单的入门 -- 播放一段视频
#include <dshow.h> #pragma comment(lib,"strmbase.lib") #pragma comment(lib,"qua ...
- 转载自~浮云比翼:Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥)
Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥) 介绍:什么是线程,线程的优点是什么 线程在Unix系统下,通常被称为轻量级的进程,线程虽然不是进程,但却可 ...
- android如何播放和录制音频
视频录制功能正在走来,在Androidsdk中有与之相关的类:android.media.MediaRecorder.当然,因为模拟器上没有提供必要的硬件设施,所以在学习过程中并不能实现.Media能 ...
- WinPcap编程入门实践
转自:http://www.cnblogs.com/blacksword/archive/2012/03/19/2406098.html WinPcap可能对大多数人都很陌生,我在这里就先简单介绍一下 ...
- 【浅墨著作】《OpenCV3编程入门》内容简单介绍&勘误&配套源码下载
经过近一年的沉淀和总结,<OpenCV3编程入门>一书最终和大家见面了. 近期有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的文件夹,方便大家更好的了解这本书的内容.事实上近 ...
- S3C2416裸机开发系列19_Fatfs播放录像wav音频文件
S3C2416裸机开发系列19 Fatfs播放录像wav音频文件 国际象棋男孩 1048272975 多媒体资源,一般都是以文件的形式存储在固化存储器中.Fatfs所支持的fat32为windo ...
- Python游戏编程入门
<Python游戏编程入门>这些文章负责整理在这本书中的知识点.注意事项和课后习题的尝试实现.并且对每一个章节给出的最终实例进行分析和注释. 初识pygame:pie游戏pygame游戏库 ...
- 脑残式网络编程入门(三):HTTP协议必知必会的一些知识
本文原作者:“竹千代”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.前言 无论是即时通讯应用还是传统的信息系统,Http协议都是我们最常打交 ...
- 脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手
.引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方 ...
随机推荐
- C#使用二叉树算法设计一个无限分级的树表
效果图: 数据库: 操作树的示意图: 控制器代码: using Dw.Business; using Dw.Entity; using Dw.Utilities; using System; usin ...
- 聚类算法之BIRCH(Java实现)转载
http://www.cnblogs.com/zhangchaoyang/articles/2200800.html http://blog.csdn.net/qll125596718/article ...
- Couchbase学习记录
Couchbase是membase的升级版,membase与memcache是同一家公司出的,Couchbase包含了memcache的功能. 从其官网上下载最新的版本安装即可.安装成功后会弹出设置页 ...
- python核心编程学习记录之面向对象编程
未完待续525
- Codeforces 749D:Leaving Auction(set+二分)
http://codeforces.com/contest/749/problem/D 题意:有几个人在拍卖场竞价,一共有n次喊价,有q个询问,每一个询问有一个num,接下来num个人从这次拍卖中除去 ...
- mysql查询优化器为什么可能会选择错误的执行计划
有可能导致mysql优化器选择错误的执行计划的原因如下: A:统计信息不准确,mysql依赖存储引擎为其提供的统计信息来评估成本,然而有的存储引擎提供的信息是准确的,有的引擎提供的可能就偏差很大,如: ...
- datagridview随窗体的大小而变,表格填满控件
在C#winform布局的时候,我们拖一个datagridview到窗体上面,将datagridview调整为适合窗体的大小,但是我们运行之后,点击最大化按钮的时候,却发现datagridview的大 ...
- [Android Studio] 按钮学习
Android Studio 按钮 1. 添加一个按钮 新建一个 Blank Project 之后, 在 activity_main.xml: 中添加一个按钮, 可以使用design 模式来添加,: ...
- HBase Mac OSX 安装笔记
本次测试安装的机器为Mac Book Pro, 系统为 OS X 10.9.4.hbase版本0.98.6.1. 使用Java版本为Oracle的JDK 1.6.0_65. 1. 下载安装 hbase ...
- CentOS 7 安装、配置、使用 PostgreSQL 9.5及PostGIS2.2
学习CentOS下安装使用PostgreSQL [安装过程] 1.添加RPM yum install https://download.postgresql.org/pub/repos/yum/ ...