SDL编程三(音频)
来源:互联网 发布:天锐绿盾加密软件破解 编辑:程序博客网 时间:2024/05/16 19:40
SDL播放声音的基本流程如下:
(1)创建一个回调函数用于混合音频数据,并放入音频流;
(2)设置音频参数,调用SDL_OpenAudio,打开音频设备;
(3)调用SDL_PauseAudio(0),进行音频回放;
(4)回放结束后,调用SDL_CloseAudio() 关闭音频设备。
下面是用SDL播放PCM音频数据的代码。
全局数据:
SDL_AudioSpec wanted;//用于配置音频参数
static Uint8 *audio_chunk;//音频数据缓冲
static Uint32 audio_len;//要播放的音频数据长度(字节)
static Uint8 *audio_pos;//当前播放的位置(字节位置)
步骤(1);
void fill_audio(void *udata, Uint8 *stream, int len)
{
if (audio_len == 0)
{
printf("audio_len=0\n");
return;
}
len = (len>audio_len?audio_len:len);
SDL_MixAudio(stream,audio_pos,len,SDL_MIX_MAXVOLUME);//对音频数据进行混音
audio_pos+=len;//更新播放位置
audio_len-=len;//更新数据长度
}
步骤(2)(3)(4);
void AudioPlay(const unsigned char *chunk, int len)
{
//set audio paras
wanted.freq = 44100;//音频的频率
wanted.format = AUDIO_S16;//数据格式为有符号16位
wanted.channels = 2;//双声道
wanted.samples = 1024;//采样数
wanted.callback = fill_audio;//设置回调函数
wanted.userdata = NULL;
if (SDL_OpenAudio(&wanted, NULL)<0)//步骤(2)打开音频设备
{
printf("can't open audio.\n");
return;
}
printf("begin....\n");
audio_chunk = (Uint8*)chunk; //设置音频数据缓冲
audio_len = len;//设置音频数据长度
audio_pos = audio_chunk;//设置初始播放位置
SDL_PauseAudio(0);//步骤(3)回放音频数据
printf("don't close, audio playing...\n");
while(audio_len>0)//等待直到音频数据播放完毕!
SDL_Delay(100);
SDL_CloseAudio();//步骤(4)关闭音频设备
}
- SDL编程三(音频)
- SDL编程三(音频)
- SDL编程三(音频)
- SDL学习(三)事件驱动编程
- SDL 2 游戏编程(三)事件驱动程序
- SDL学习(三)
- Linux音频编程指南 三
- SDL音频播放
- SDL音频播放
- SDL音频播放
- SDL编程二(视频)
- SDL编程二(视频)
- SDL编程四(事件)
- SDL编程
- SDL系列讲解(三) 工具安装
- FFMPEG + SDL音频播放分析
- FFMPEG + SDL音频播放分析
- FFMPEG + SDL音频播放分析
- cygwin编译mplayer
- 巧妙证明点到直线距离公式
- 马上又是新的一年了
- SDL编程一(环境配置)
- SDL编程二(视频)
- SDL编程三(音频)
- 充满梦想和不确定的的2012
- SDL编程四(事件)
- 定点数转换
- 函数原型的声明不可小视
- C#实现3DES加密
- Union和Union All到底有什么区别
- 三角形填充
- char*、WCHAR*、vc8中的CString