当前位置: 首页 > news >正文

重庆做网站 熊掌号手套网站模板

重庆做网站 熊掌号,手套网站模板,局域网中做网站,湘潭平台公司今天向大家介绍一下如何通过 SDL 实现一个PCM音频播放器。这是一个最简单的播放器#xff0c;它不涉及到音频的解复用#xff0c;解码等工作。我们只需要将音频原始数据喂给 SDL 音频接口就可以听到悦耳的声音了。在下面的列子中我将向你演示#xff0c;使用 SDL 做这样一个…今天向大家介绍一下如何通过 SDL 实现一个PCM音频播放器。这是一个最简单的播放器它不涉及到音频的解复用解码等工作。我们只需要将音频原始数据喂给 SDL 音频接口就可以听到悦耳的声音了。在下面的列子中我将向你演示使用 SDL 做这样一个播放器是何等的简单。 当然这个看似简单的播放器其实是由许多的理论基础在底层支持着的 播放音频的基本原则 如果我们要播放一段声音想当然的认为直接将播放的声音发送给声卡这样扬声器就会将声音播放出来。只要我们不断的送数据声音就会不停的输出。 事实上真的是这样吗当 然 不 是!!! 实际上所有的音频播放都遵守着一个原则就是当声卡将要播放的声音输出到扬声器时它首先会通过回调函数向你要它一部分声频数据然后拿着这部分音频数据去播放。等播放完了它会再向你要下一部分。 至于要的数据的多少什么时候向你要这些都是由声卡决定的。对于我们上层应用来说这些都是由底层 API 决定的。 为什么会出现这种情况呢为什么播放音频与我们一般的逻辑相反呢这是因为声卡会严格按照音频的播放时间进行播放不会多一秒也不会少一秒。正因为它能准确的计算出时间来而应用层是不知道这个时间的所以我们必须按照声卡的要求给它喂数据而不能依据自己的性子来。 那么有人会问为什么声卡可以精准的计算出播放时间来呢这是因为在播放之前我们给它设置了采样率、通道数、采样大小等参数通过这些参数它就可以计算出时间来。 我们来做个计算假设采样率是 48000, 双通道采样大小是 16bit那么一秒种的数据是多少呢 48000*2*161536000. 反过来如果我们有一段 8M 的数据那么声卡就知道它能播放 5秒多的声音。 上面的一大段文字描述实际上只是想说明一个道理就是要播放的声音数据是声卡主动要的不能由上层直接设置。这是通过回调函数来实现的。后面会有具体的例子。 SDL如何处理音频 SDL是一个处理多媒体的开源库我们来看看它是如何播放音频的具体的操作步骤是啥 打开音频设备设置音频参数播放音频向声卡喂数据关闭音频设置 详细API介绍 打开音频设备 int SDL_OpenAudio(SDL_AudioSpec* desired,SDL_AudioSpec* obtained) desired: 设置音频参数。 参数 说明 freq 每秒采频率 SDL_AudioFormat 音频数据存储格式 channels 通道数 silence 静音值 samples 采样个数 size 音频缓冲区大小 SDL_AudioCallback 回调函数 userdata 回调函数参数指针 btained: 返回参数。 关闭音频设备 void SDL_CloseAudio(void) 播放与暂停 void SDL_PauseAudio(int pause_on) pause_on: 0, 暂停播放1, 播放喂数据 void SDL_MixAudio(Uint8* dst,const Uint8* src,Uint32 len,int volume) dst: 目的缓冲区src: 源缓冲区len: 音频数据长度volume: 音量大小0-128 之间的数。SDL_MIX_MAXVOLUME代表最大音量。 例子 这个例子主要为大家展示了一下如何使用 SDL 的音频 API 来播放声音。其基本流程是从 pcm 文件一块一块的读数据。然后通过 read_audio_data 这个回调函数给声卡喂数据。如果一次没用完SDL会再次调用回调函数读数据。 如果audio_buf中的数据用完了则再次从文件中读一块数据直到读到文件尾。 #include stdio.h #include SDL.h#define BLOCK_SIZE 4096000static Uint8 *audio_buf NULL; static Uint8 *audio_pos NULL; static size_t buffer_len 0;//callback function for audio devcie void read_audio_data(void *udata, Uint8 *stream, int len){if(buffer_len 0){return;}SDL_memset(stream, 0, len);len (len buffer_len) ? len : buffer_len;SDL_MixAudio(stream, audio_pos, len, SDL_MIX_MAXVOLUME);audio_pos len;buffer_len - len; }int main(int argc, char *argv[]) {int ret -1;FILE *audio_fd NULL;SDL_AudioSpec spec;char *path ./test.pcm;//SDL initializeif(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER)){fprintf(stderr, Could not initialize SDL - %s\n, SDL_GetError());return ret;}//open pcm fileaudio_fd fopen(path, r);if(!audio_fd){fprintf(stderr, Failed to open pcm file!\n);goto __FAIL;}//SDL_AudioSpecspec.freq 44100;;spec.format AUDIO_S16SYS;spec.channels 2;spec.silence 0;spec.samples 1024;;spec.callback read_audio_data;;spec.userdata NULL;//open audio devcieif(SDL_OpenAudio(spec, NULL)){fprintf(stderr, Failed to open audio device, %s\n, SDL_GetError());goto __FAIL;}//play audioSDL_PauseAudio(0);do{//read data from pcm filebuffer_len fread(audio_buf, 1, BLOCK_SIZE, audio_fd);fprintf(stderr, block size is %zu\n, buffer_len);audio_pos audio_buf;//the main thread wait for a momentwhile(audio_pos (audio_buf buffer_len)) {SDL_Delay(1);}}while(buffer_len !0);//close audio deviceSDL_CloseAudio();ret 0;__FAIL://release some resourcesif(audio_buf){free(audio_buf);}if(audio_fd){fclose(audio_fd);}//quit SDLSDL_Quit();return ret; } 粉丝福利 免费领取C音视频学习资料包学习路线大纲、技术视频/代码内容包括音视频开发面试题FFmpeg webRTC rtmp hls rtsp ffplay 编解码推拉流srs↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓
http://www.w-s-a.com/news/801741/

相关文章:

  • 网站 建设 现状网站推广合同需要缴纳印花税吗
  • 熊猫头表情包制作网站wordpress 缺省目录
  • 网站浏览图片怎么做的群晖wordpress升级5.0
  • 25个优秀个人网站设计模板网站建设定位分析论文
  • 在线网站备案站长seo综合查询工具
  • 网站根 html网站建设行业数据
  • 网站公司做的网站有最字设计说明室内设计
  • 在线网站代码生成我想做个百度网站怎么做
  • 网站的建设费用分为长治市建设厅官方网站
  • 做网站都有哪些费用建设免费手机网站
  • 网站 组成代码做网站图片怎么插
  • 2020中国企业500强榜单南宁seo标准
  • 北美购物网站排名烟台专业的网站建站公司
  • 门户网站设计特点营销策划咨询机构
  • 天津做网站就到徽信xiala5中国营销型网站
  • 外汇网站建设制作深圳三站合一网站建设
  • 深圳坂田网站设计公司有哪些学校网站建设管理办法
  • 太原建设银行网站中山营销型网站设计
  • 广东省建设厅官方网站多少钱江苏省江建集团有限公司建设网站
  • 网站开发主流服装网站开发课程设计
  • 在iis里面创建网站wordpress响应式视频
  • 学设计哪个网站好网页设计音乐网站
  • 可以自己做斗图的网站上海模板建站多少钱
  • 山东川畅信息技术有限公司网站建设网站开发任务书
  • 网站排版设计欣赏搭建公司介绍网站
  • 网站弹窗是怎么做的长沙智优营家
  • 手机网站菜单设计模板菜单网站图片素材
  • 浙江网站推广爱企查企业查询入口
  • 公司网站平台vs2012网站开发课程设计
  • 哪些方法可以建设网站做网站失败