播放器中有个重要的功能就是倍速播放,比如现在有很多在线教育,或者看电影,据说现在的年轻人几乎都是1.2,1.5倍速的播放了,我个人是1.2和1.5倍速使用较多。

比如有的课程老师的语速比较慢,就调快点比较好。

因为我的播放器同步策略是是使用的视频去跟着音频播放,比如音频播放到了12s的位置,那么视频只能播放到12s的位置,音频播放速度快了,那么只要视频解码跟得上那么就播放快了。

最开始我想的是音频的采样率是44100,就是一秒钟采样了44100次,播放的时候也是1秒钟播放44100个sample就是1.0的正常速度,如果播放的时候是1秒播放44100 * 2,不就是两倍速?或者44100 / 2不就是0.5倍速,我实验了一波确实可以,但是声音变了,我擦,比如林志玲姐姐的声音就变成了郭德纲的声音了,或者郭德纲的声音就变成张靓颖的了,这肯定不行,要是小朋友听在线课程还不得打击学习积极性。

后面查询得知有两个库可以做到一个是soundtouch,一个是sonic,因为sonic直接是一个c文件,引入简单我就使用的这个。

它对应的api就这么多。

本质上就是音频解码后的pcm音频流直接放入sonic中处理,得到的新的pcm流,再拿来播放就可以了。

下面就简单说下倍速相关的使用

先创建一个sonicStream,把采样率和声道传递进去

tempoStream = sonicCreateStream(samplerate, channel);

然后初始化一些速度或者音调等(其实这就可以做一个tom猫那个小游戏软件了)

sonicSetSpeed(tempoStream, speed);
sonicSetPitch(tempoStream, 1.0);
sonicSetRate(tempoStream, 1.0);

好了这就可以处理pcm音频数据了,把pcm的具体数据放入进去,然后把sample的个数也传入进去。

sonicWriteShortToStream(tempoStream, buf, samples);

放进去后我们就可以取出来了,但是不是放进去多少个sample我们就要取出多少个sample,所以需要判断下,比如我们放入了1024个sample,我们取出来可能就只有998个sample,毕竟可能有丢弃sample的可能吧。

sonicSamplesAvailable(tempoStream)

好了我们就可以来读取了,返回的具体pcm数据放入samples中,maxSamples就是能返回的最大sample数,方法return的是真实得到的sample数

int sonicReadShortFromStream(sonicStream stream, short samples,int maxSamples)

好了,读取到的pcm直接放入android中的audioTrack,或者opensl es中播放就可以听到效果了。
我们在处理的过程中可以随时改变播放速度,或者音调等,都是可以的。

使用完最后一定要记得

sonicDestroyStream(tempoStream)
释放

对应使用方法在工程中的

sonicread.cpp

sonic.c 下载

下载链接

音视频倍速播放之sonic相关推荐

  1. FFmpeg音视频倍速控制

    本文除了会讲到通过命令行处理倍速,还会讲到通过FFmpeg api的方式去处理音频倍速和视频倍速,进而合并成支持倍速的音视频发布成rtmp或者存成flv文件. 介绍FFmpeg的filter工具 音视 ...

  2. 【工具】JS脚本|网页任意视频倍速播放(包括MOOC、本地视频、其他的视频)

      只要浏览器播放视频时用的是<video>,而且当前页面只有这一个视频,就可以用这个脚本.   刚好也是世界杯 CSDN 博客的活动了,虽然对活动没什么兴趣但是还是写一句和活动相关的话吧 ...

  3. 百度网盘视频倍速播放

    百度网盘视频倍速播放 (更新一下,插件叫"百度云盘HTML5视频倍速播放",原来那个好像没用了) 因为考研需要刷网课,但是百度云倍速放视频需要svip,30元/月还是挺贵的,于是去 ...

  4. FFmpeg 音视频倍速控制

    网上关于FFmpeg音视频倍速控制的资料不多,大部分都是讲通过FFmpeg命令去做音视频文件的倍速处理,通过FFmpeg api去 处理倍速的资料少之又少. 本文除了会讲到通过命令行处理倍速,还会讲到 ...

  5. vue西瓜播放器xgplayer-vue实现视频倍速播放,自定义进度条样式

    介绍 npm网站:https://www.npmjs.com/package/xgplayer-vue 西瓜播放器官网:https://v2.h5player.bytedance.com/gettin ...

  6. 百度网盘百度云视频倍速播放方法 亲测有用 共6种,总有一个适合你

    百度网盘百度云视频倍速播放方法 共6种,总有一个适合你 电脑 方法1: 火狐浏览器,登录百度网盘,播放视频,右键,倍速 方法2: microsoft edge 浏览器 方法同上 方法3: 谷歌浏览器 ...

  7. [技巧] 网页视频倍速播放(以百度云盘为例)

    [百度云盘视频倍速播放] 打开浏览器的控制台(Chrome浏览器为F12) 输入:videojs.getPlayers("video-player").html5player.te ...

  8. android b站倍速播放器,哔哩哔哩怎么加速播放?B站网页版和手机版视频倍速播放的方法介绍...

    bilibili简称B站是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主.那么,爱逛b站的朋友们都知道,加速播放效果更佳!那么,哔哩哔哩怎么加速播放呢?接下来小编就 ...

  9. 记录--浏览器插件分享(视频倍速播放插件)

    记录–浏览器插件分享(视频倍速播放插件) 最近看视频的时候偶然有发现视频倍速播放的几个方法,跟大家分享一下. 第一种 这种是最简单的,我们直接使用火狐浏览器就可以倍速播放视频. 如下图,在视频加载好后 ...

最新文章

  1. 2022-2028年中国冶金工业节能减排投资分析及前景预测报告
  2. silverlight,WPF动画终极攻略之阳光灿烂篇(Blend 4开发)
  3. disconf-自动注入属性变化
  4. pythonui自动化测试脚本实战_Python UI自动化测试实战 Zero to Hero Se
  5. 现代软件工程 作业 3 团队作业
  6. 运动会成绩管理系统python_基于Eclipse+Mysql+Tomcat+MVC开发得大学运动会管理系统
  7. 使用Jackson将一个对象转换成一个JSON字符串
  8. Navicat过期问题的解决
  9. STM32F0xx_TIM基本延时配置详细过程
  10. matlab2012b安装教程
  11. 微信小程序服务商接入流程
  12. 低成本的电流检测电路
  13. 腾讯云HiFlow场景连接器7月最受欢迎新应用模版推荐
  14. 通过图新地球把大疆L1激光雷达点云成果和影像地形等其他GIS数据进行融合
  15. ubuntu16.04安装rtems
  16. 什么是TXT记录?如何设置、检测TXT记录是否生效
  17. python爬取微博热门消息(三)—— 爬取微博热门信息的功能函数
  18. Python推荐几个很不错的学习资源
  19. Linux下的磁盘加密方法
  20. A Neural Conversational Model

热门文章

  1. rk3399-7.1 MediaPlayer播放在线mp3失败
  2. 对同一个三相逆变器使用FCS-MPC的延迟补偿的两种方法
  3. 信息工程学院的毕业晚会
  4. 父游标与子游标--------摘自vage的解释
  5. 临床预测模型评鉴(PMID32982965)
  6. 专为Windows电脑和服务器设计的磁盘管理软件
  7. 【优化求解】基于缎蓝园丁鸟优化算法 (SBO)求解单目标问题附matlab代码
  8. linux wifi管理工具下载,(Linux无线网卡WIFI上网 二 )WPA_SUPPLICANT——Linux下的wifi管理工具移植-Go语言中文社区...
  9. [信息化]信息系统规划
  10. 基于java酒店管理系统_课内资源 - 基于JAVA实现的互联网酒店管理系统