`
kevin_hust
  • 浏览: 12300 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

SDL编程三(音频)

阅读更多
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)关闭音频设备
}
分享到:
评论

相关推荐

    linux下V4L2+SDL摄像头采集显示程序

    使用video4linux2编程接口,获得笔记本摄像头影像后,用SDL显示在X Window下。 关键点有二:其一,从video4linux2的编程接口笔者了解到其笔记本摄像头支持YUYV视频帧格式,显示在 SDL上需要将YUYV格式转换成SDL支持...

    SDL中文教程 - 游戏编程入门

    SDL是一个跨平台的多媒体库,它通过OpenGL和2D视频帧缓冲,提供了针对音频、视频、键盘、鼠标、控制杆及3D硬件的低级别的访问接口。它在MPEG播放软件、模拟器以及许多游戏中得到广泛的应用,其中包含了获得大奖的...

    SDL入门教程.pdf

    这些多媒体功能包括了音频、键盘和鼠标 (事件)、游戏摇杆等。当然,最为重要的是提供了 2D图形帧缓冲(framebuffer)的接口, 以及为 OpenGL 与各种操作系统之间提供了统一的标准接口以实现 3D图形。从这些属性我 ...

    mpg123 linux MP3播放器源码

    mpg123是优秀的mp3播放器,这是源码包,在嵌入式开发声卡中,可以利用该源码进行交叉编译实现MP3播放。

    4-FFmpeg-SDL视频播放器-音视频播放.zip

    【FFmpeg编程实战】(4)实现FFmpeg4.3 + SDL2视频播放器(音频+视频播放)(C++) https://ciellee.blog.csdn.net/article/details/109034360

    FFMpeg基础库编程开发

    《ffmpeg基础库编程开发》482页 ...2 MFC中使用SDL播放音频没有声音的解决方法 465 附录B:经典代码示例 466 附录C:ffmpeg参数中文详细解释 477 附录D:ffplay的快捷键以及选项 479 附录E: ffmpeg处理rtmp流媒体 481

    SDL (Simple DirectMedia Layer) 2 开发包

    简易多媒体编程层,同时支持Visual C++和MinGW进行开发

    FFmpeg4.3开发系列之八:SDL2.0小白入门

    3.扩展库的应用:SDL2_image,SDL2_mixer,SDL2_ttf(图像、音频、字库) 4.官方案例实战:亲手练习官方推荐的几个案例,认真分析总结。     梅老师从事音视频与流媒体行业18年;曾在永新视博、中科大洋、百度、美国...

    FFmpeg基础库编程开发

    目录 第一章 多媒体概念介绍 6 ...2 MFC中使用SDL播放音频没有声音的解决方法 465 附录B:经典代码示例 466 附录C:ffmpeg参数中文详细解释 477 附录D:ffplay的快捷键以及选项 479 附录E: ffmpeg处理rtmp流媒体 481

    4-FFmpeg-SDL视频播放器-音视频播放-更新.zip

    【FFmpeg编程实战】(4)实现FFmpeg4.3 + SDL2视频播放器(音频+视频播放)(C++) https://ciellee.blog.csdn.net/article/details/109034360

    从零开始学习音视频编程技术(二十二) FFMPEG Qt视频播放器之BUG修复最终完善版

    从零开始学习音视频编程技术(二十二) FFMPEG Qt视频播放器之BUG修复 Qt的版本是5.6.2(vs2013) FFMPEG的版本是2.5.2 SDL的版本是2.04 更新日志: 【V1.8.0】2019-03-22 1.代码结构调整(将底层播放器和Qt界面...

    AudioTutorial:thebennybox音频编程教程代码

    thebennybox音频编程教程代码 此处找到了教程: : PLEETnX-uPtBVpZvp-R2daNfy9k3-L- ##建立依赖关系## 生成工具链(可以是以下任意一种,不需要全部使用) Linux make,gcc,g ++(与软件包管理器一起安装) ...

    sdl-space-shooter:使用SDL2用C ++编写的2D空间射击游戏

    注意:该项目当前处于暂停状态,因为我想探索编程的其他领域。 我可能会也可能不会回到这个特定项目,但是将来我肯定会回到游戏开发中。 在撰写本文时,该游戏可以在一个级别上进行,并且可以与老板打架。 sdl-space...

    XMusic:FFmpeg4 + SDL2 + OpenSLes跨平台音乐播放器

    18年采用ffmpeg4解码,SDL2播放,支持更多音频格式。优化媒体库模型和用户界面,开发多种实用功能。 19年做跨平台适应,安卓采用OpenSL ES播放音频流。用Qt开新的UI,开始产品化。 系统功能 文件系统 系统可挂载多...

    从零开始学习音视频编程技术(43) AAC播放器.zip

    ffmpeg4.1解码AAC,并使用SDL/RtAuido播放,同时显示音频波形图的例子 这是Qt的工程,建议使用Qt Creator 打开 Qt5.6.2(vs2013/mingw) + ffmpeg4.1 1.程序可以在windows/linux下直接编译使用。 2.windows...

    RetroGear:基于SDL的通用2D游戏引擎-开源

    该项目旨在基于已知的最常见的游戏编程和设计实践,为2D游戏的快速开发创建通用组件,从而使程序员能够使用标准组件,并易于与自己的项目集成。 该游戏引擎提供的一些功能包括:基本但实用的游戏状态管理(屏幕标题...

    跨平台 RTS 遊戲引擎,提供帝國時代的遊戲機制 可以體驗成吉思汗在草原打拼的過程

    openage 是一個免費的(與自由一樣)跨平台 RTS 遊戲引擎,提供帝國時代的機制。 使用 C++17、OpenGL/GLSL、Python、Qt5 和 CMake ...SDL2用于跨平台音频/输入/窗口处理 Opus用于音频编解码器 nyan用于内容配置和修改

    如何用 FFmpeg 编写一个简单播放器详 细步骤介绍--FFmpeg中文版

    在写播放器的过程中,我们将使用 SDL 来输出音频和视频。SDL 是一个优秀的跨 平台的多媒体库,被用在 MPEG 播放、模拟器和很多视频游戏中。你将需要下载 并安装 SDL 开发库到你的系统中,以便于编译这个指导中的程序...

    ffmpeg基础开发资料自总结

    适合fresh man上手 ...2 MFC 中使用SDL 播放音频没有声音的解决方法 444 附录B:经典代码示例 445 附录 c:ffmpeg 参数中文详细解释 456 附录D:ffplay 的快捷键以及选项 458 附录E: ffmpeg 处理 rtmp 流媒体 459

    keysound:keysound是Linux的键盘声音软件

    我之前写过一次,当时只写了全局按键音效,依赖SDL2播放音频,存在很多很多的问题,例如cpu占用高,无法检测键盘的热插拔,没有混音等,体验感极差。我一直想完善一下该项目,正好最近学习c++,可以通过完善该项目...

Global site tag (gtag.js) - Google Analytics