音频相关处理函数


首先,跟学习任何东西一样,官方的资料永远是最应该看的。传送门:sdl官方网站 http://www.libsdl.org/
好在org后缀的外网还能够上,SDL是开源的,包括源代码在内,都可以从官网上下载到。SDL并不能算作是音频库,更不是解码库,Simple DirectMedia Layer 从名字上来看就可以归结为一个媒体库(囊括了输入、输出、Video、Audio、Opengl、DX相关的多个方法)。

1.SDL_OpenAudio

这个函数很关键,这个函数将获取你设备的Audio并将其打开,无论你在当前的软件中的哪一个进程,都可以访问到这个设备,并对设备进行操作(列如:SDL_PauseAudio,SDL_CloseAudio)。
值得注意的是,设备Audio只能打开一次,我曾经尝试多线程打开多个Audio设备,最后都失败了,返回Error说Audio已经打开,那一瞬间我懵了,既然不能用多线程,如何播放多个音频呢?别急,奥秘在SDL_mixAudio里面,稍后我回提。

2.SDL_PauseAudio

每次调用这个函数,设备都将回调你在打开Audio时预设的回调函数(也就是SDL_AudioSpec.callback)。这样的回调允许你一次次的将PCM buffer填入Audio预设的steam中,使得设备顺利的播放音频文件。而如何将buffer填入steam中呢?则需要使用SDL_mixAudio。

3.PCM
什么是PCM?可以自习搜索PCM看详细的介绍。简单的来说,音频文件解压后的文件格式就是PCM,而SDL仅提供播放PCM和WAV(都是未压缩的文件格式)的播放方法。简单来说,要想播放MP3等通用格式,必须先解码成音频格式文件,再进行播放,当然也可以一边解压一边播放,只是需要使用多线程罢了。使用SDL_Thread来创建并管理线程,蛮方便的。(线程我以后再总结)

4.SDL_mixAudio
我最想说的就是这个,因为我苦苦寻求了半天的“同时播放多个音频文件”,奥秘就在SDL_mixAudio。这个函数其实很傻很简单,无非是把两个buffer内容叠加起来。于是你只需要把希望播放的音频buffer叠加在一起,就可以成功的播放多个音频文件。官方给的例子是这样的
void audio_callback(void *udata, Uint8 *stream, int len)
{
    SDL_MixAudio(stream, audio_pos, len, SDL_MIX_MAXVOLUME);
}
这就是把stream与audio_pos两个buffer叠加到stream当中,其中的使用方式大家多试一试吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值