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)关闭音频设备
}
分享到:
相关推荐
使用video4linux2编程接口,获得笔记本摄像头影像后,用SDL显示在X Window下。 关键点有二:其一,从video4linux2的编程接口笔者了解到其笔记本摄像头支持YUYV视频帧格式,显示在 SDL上需要将YUYV格式转换成SDL支持...
SDL是一个跨平台的多媒体库,它通过OpenGL和2D视频帧缓冲,提供了针对音频、视频、键盘、鼠标、控制杆及3D硬件的低级别的访问接口。它在MPEG播放软件、模拟器以及许多游戏中得到广泛的应用,其中包含了获得大奖的...
这些多媒体功能包括了音频、键盘和鼠标 (事件)、游戏摇杆等。当然,最为重要的是提供了 2D图形帧缓冲(framebuffer)的接口, 以及为 OpenGL 与各种操作系统之间提供了统一的标准接口以实现 3D图形。从这些属性我 ...
mpg123是优秀的mp3播放器,这是源码包,在嵌入式开发声卡中,可以利用该源码进行交叉编译实现MP3播放。
【FFmpeg编程实战】(4)实现FFmpeg4.3 + SDL2视频播放器(音频+视频播放)(C++) https://ciellee.blog.csdn.net/article/details/109034360
《ffmpeg基础库编程开发》482页 ...2 MFC中使用SDL播放音频没有声音的解决方法 465 附录B:经典代码示例 466 附录C:ffmpeg参数中文详细解释 477 附录D:ffplay的快捷键以及选项 479 附录E: ffmpeg处理rtmp流媒体 481
简易多媒体编程层,同时支持Visual C++和MinGW进行开发
3.扩展库的应用:SDL2_image,SDL2_mixer,SDL2_ttf(图像、音频、字库) 4.官方案例实战:亲手练习官方推荐的几个案例,认真分析总结。 梅老师从事音视频与流媒体行业18年;曾在永新视博、中科大洋、百度、美国...
目录 第一章 多媒体概念介绍 6 ...2 MFC中使用SDL播放音频没有声音的解决方法 465 附录B:经典代码示例 466 附录C:ffmpeg参数中文详细解释 477 附录D:ffplay的快捷键以及选项 479 附录E: ffmpeg处理rtmp流媒体 481
【FFmpeg编程实战】(4)实现FFmpeg4.3 + SDL2视频播放器(音频+视频播放)(C++) https://ciellee.blog.csdn.net/article/details/109034360
从零开始学习音视频编程技术(二十二) FFMPEG Qt视频播放器之BUG修复 Qt的版本是5.6.2(vs2013) FFMPEG的版本是2.5.2 SDL的版本是2.04 更新日志: 【V1.8.0】2019-03-22 1.代码结构调整(将底层播放器和Qt界面...
thebennybox音频编程教程代码 此处找到了教程: : PLEETnX-uPtBVpZvp-R2daNfy9k3-L- ##建立依赖关系## 生成工具链(可以是以下任意一种,不需要全部使用) Linux make,gcc,g ++(与软件包管理器一起安装) ...
注意:该项目当前处于暂停状态,因为我想探索编程的其他领域。 我可能会也可能不会回到这个特定项目,但是将来我肯定会回到游戏开发中。 在撰写本文时,该游戏可以在一个级别上进行,并且可以与老板打架。 sdl-space...
18年采用ffmpeg4解码,SDL2播放,支持更多音频格式。优化媒体库模型和用户界面,开发多种实用功能。 19年做跨平台适应,安卓采用OpenSL ES播放音频流。用Qt开新的UI,开始产品化。 系统功能 文件系统 系统可挂载多...
ffmpeg4.1解码AAC,并使用SDL/RtAuido播放,同时显示音频波形图的例子 这是Qt的工程,建议使用Qt Creator 打开 Qt5.6.2(vs2013/mingw) + ffmpeg4.1 1.程序可以在windows/linux下直接编译使用。 2.windows...
该项目旨在基于已知的最常见的游戏编程和设计实践,为2D游戏的快速开发创建通用组件,从而使程序员能够使用标准组件,并易于与自己的项目集成。 该游戏引擎提供的一些功能包括:基本但实用的游戏状态管理(屏幕标题...
openage 是一個免費的(與自由一樣)跨平台 RTS 遊戲引擎,提供帝國時代的機制。 使用 C++17、OpenGL/GLSL、Python、Qt5 和 CMake ...SDL2用于跨平台音频/输入/窗口处理 Opus用于音频编解码器 nyan用于内容配置和修改
在写播放器的过程中,我们将使用 SDL 来输出音频和视频。SDL 是一个优秀的跨 平台的多媒体库,被用在 MPEG 播放、模拟器和很多视频游戏中。你将需要下载 并安装 SDL 开发库到你的系统中,以便于编译这个指导中的程序...
适合fresh man上手 ...2 MFC 中使用SDL 播放音频没有声音的解决方法 444 附录B:经典代码示例 445 附录 c:ffmpeg 参数中文详细解释 456 附录D:ffplay 的快捷键以及选项 458 附录E: ffmpeg 处理 rtmp 流媒体 459
我之前写过一次,当时只写了全局按键音效,依赖SDL2播放音频,存在很多很多的问题,例如cpu占用高,无法检测键盘的热插拔,没有混音等,体验感极差。我一直想完善一下该项目,正好最近学习c++,可以通过完善该项目...