SDL编程三(音频)
SDL编程三(音频)
来来叔叔 发表于2个月前
SDL编程三(音频)
  • 发表于 2个月前
  • 阅读 0
  • 收藏 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
×
来来叔叔
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: