文档章节

SDL编程三(音频)

来来叔叔
 来来叔叔
发布于 2017/08/04 23:56
字数 357
阅读 1
收藏 0
点赞 0
评论 0
 

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)关闭音频设备
}


© 著作权归作者所有

共有 人打赏支持
来来叔叔
粉丝 0
博文 100
码字总数 55732
作品 0
广州
高级程序员
最简单的基于FFMPEG+SDL的音频播放器:拆分-解码器和播放器

===================================================== 最简单的基于FFmpeg的音频播放器系列文章列表: 《最简单的基于FFMPEG+SDL的音频播放器》 《最简单的基于FFMPEG+SDL的音频播放器 ve...

leixiaohua1020 ⋅ 2015/07/17 ⋅ 0

「SDL第七篇」PCM音频播放器的实现

前言 今天向大家介绍一下如何通过 SDL 实现一个PCM音频播放器。这是一个最简单的播放器,它不涉及到音频的解复用,解码等工作。我们只需要将音频原始数据喂给 SDL 音频接口就可以听到悦耳的声...

音视频直播技术专家 ⋅ 04/12 ⋅ 0

SDL2源代码分析1:初始化(SDL_Init())

===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDLInit()) SDL2源代码分析2:窗口(SDLWindow) SDL2源代码分析3:渲染器...

leixiaohua1020 ⋅ 2014/11/01 ⋅ 0

《基于 FFmpeg + SDL 的视频播放器的制作》课程的视频

这两天开始带广播电视工程大二的暑假小学期的课程设计了。本次小学期课程内容为《基于 FFmpeg + SDL 的视频播放器的制作》,其中主要讲述了视音频开发的入门知识。由于感觉本课程的内容不但适...

leixiaohua1020 ⋅ 2015/07/26 ⋅ 0

Hi3516a移植SDL+FreeType+SDL_ttf

SDL+FreeType+SDL_ttf库编译过程 freeType编译过程 解压: 进入freeType目录: 1 SDL编译过程 解压: 进入SDL目录: 1 出现问题1: 1 解决方法1: 加上,这个错误好像是音频相关的错误,这里...

qq_26671365 ⋅ 01/04 ⋅ 0

6 个免费的 C++ 图形和游戏开发包

今天我们将分享一些 C++ 在图形和游戏开发方面的库,相信这些库可以帮到开发者节省开发的时间。 1) Antigrain AGG,全名:Anti-Grain Geometry,是一个开源的、高效的2D图形库。AGG的功能与G...

oschina ⋅ 2012/06/13 ⋅ 11

ffmpeg解码视频并输出到屏幕

学习自雷神的博客和视频,图片来自他的课件,雷神博客: http://blog.csdn.NET/leixiaohua1020/ ffmpeg基础知识 ffmpeg的库 avdecoc: 编解码 avformat: 封装格式的处理(mkv,mp4,avi) swscal...

曾经花田错 ⋅ 2016/12/07 ⋅ 0

FFmepg中文例子—指导2:加入音频

#include "libavformat/avformat.h" include "libswscale/swscale.h" include <windows.h> include <stdlib.h> include <stdio.h> include <string.h> include <math.h> include <SDL/SDL.h>......

霄霄月月 ⋅ 2012/05/08 ⋅ 1

我的开源视音频项目汇总

本文汇总一下自己视音频编解码学习方面的开源项目。这些开源项目大体上可以分成专业领域程序,FFmpeg示例程序,FFmpeg移植程序,多媒体项目示例程序,视音频编解码原理学习工程几个类别。这些...

leixiaohua1020 ⋅ 2015/01/13 ⋅ 0

「SDL第八篇」支持倍速与慢放的YUV视频播放器

前言 今天向大家介绍一下如何通过 SDL 实现一个YUV视频播放器。它与上次介绍的音频播放器一样,也是一个简单的不能再简单的播放器了。只不过一个是播放的音频PCM数据,另一个播放的时视频YUV...

音视频直播技术专家 ⋅ 04/14 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Cube、Cuboid 和 Cube Segment

1.Cube (或Data Cube),即数据立方体,是一种常用于数据分析与索引的技术;它可以对原始数据建立多维度索引。通过 Cube 对数据进行分析,可以大大加快数据的查询效率 2.Cuboid 在 Kylin 中特...

无精疯 ⋅ 29分钟前 ⋅ 0

github太慢

1:用浏览器访问 IPAddress.com or http://tool.chinaz.com 使用 IP Lookup 工具获得github.com和github.global.ssl.fastly.net域名的ip地址 2:/etc/hosts文件中添加如下格式(IP最好自己查一...

whoisliang ⋅ 31分钟前 ⋅ 0

非阻塞同步之 CAS

为解决线程安全问题,互斥同步相当于以时间换空间。多线程情况下,只有一个线程可以访问同步代码。这种同步也叫阻塞同步(Blocking Synchronization). 这种同步属于一种悲观并发策略。认为只...

长安一梦 ⋅ 41分钟前 ⋅ 0

云计算的选择悖论如何对待?

人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云计算为...

linux-tao ⋅ 44分钟前 ⋅ 0

我的第一篇个人博客

虽然这是个技术博客,但是,我总是想写一些自己的东西,所有就大胆的在这里写下了第一篇非技术博客。技术博客也很久没有更新,个人原因。 以后自己打算在这里写一些非技术博客,可能个人观点...

Mrs_CoCo ⋅ 45分钟前 ⋅ 0

Redis 注册为 Windows 服务

Redis 注册为 Windows 服务 redis 注册为 windows 服务相关命令 注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 启动服务 re......

Os_yxguang ⋅ 45分钟前 ⋅ 0

世界那么大,语言那么多,为什么选择Micropython,它的优势在哪?

最近国内MicroPython风靡程序界,是什么原因导致它这么火呢?是因为他功能强大,遵循Mit协议开源么? 错!因为使用它真的是太舒服了!!! Micropython的由来,这得益于Damien George这位伟大...

bodasisiter ⋅ 49分钟前 ⋅ 0

docker 清理总结

杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有已经停止的容器(docker rm没有加-f参数,运行中的容器不会删掉) docker rm $(docker ps -a -q) 删除所有未打 dangling 标...

vvx1024 ⋅ 59分钟前 ⋅ 0

关于学习

以前学车的时候,教练说了这样的一句话:如果一个人坐在车上一直学,一直学,反而不如大家轮流着学。因为一个人一直学,就没有给自己留空间来反思和改进。而轮流着学的时候大家下来之后思考上...

mskk ⋅ 今天 ⋅ 0

压缩工具之gzip-bzip2-xz

win下常见压缩工具:rar zip 7z linux下常见压缩工具:zip gz bz2 xz tar.gz tar.bz2 tar.xz gzip 不支持目录压缩 gzip 1.txt #压缩。执行后1.txt消失,生成1.txt.gz压缩文件 gzip -d 1.txt....

ZHENG-JY ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部