音视频倍速播放之sonic
播放器中有个重要的功能就是倍速播放,比如现在有很多在线教育,或者看电影,据说现在的年轻人几乎都是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相关推荐
- FFmpeg音视频倍速控制
本文除了会讲到通过命令行处理倍速,还会讲到通过FFmpeg api的方式去处理音频倍速和视频倍速,进而合并成支持倍速的音视频发布成rtmp或者存成flv文件. 介绍FFmpeg的filter工具 音视 ...
- 【工具】JS脚本|网页任意视频倍速播放(包括MOOC、本地视频、其他的视频)
只要浏览器播放视频时用的是<video>,而且当前页面只有这一个视频,就可以用这个脚本. 刚好也是世界杯 CSDN 博客的活动了,虽然对活动没什么兴趣但是还是写一句和活动相关的话吧 ...
- 百度网盘视频倍速播放
百度网盘视频倍速播放 (更新一下,插件叫"百度云盘HTML5视频倍速播放",原来那个好像没用了) 因为考研需要刷网课,但是百度云倍速放视频需要svip,30元/月还是挺贵的,于是去 ...
- FFmpeg 音视频倍速控制
网上关于FFmpeg音视频倍速控制的资料不多,大部分都是讲通过FFmpeg命令去做音视频文件的倍速处理,通过FFmpeg api去 处理倍速的资料少之又少. 本文除了会讲到通过命令行处理倍速,还会讲到 ...
- vue西瓜播放器xgplayer-vue实现视频倍速播放,自定义进度条样式
介绍 npm网站:https://www.npmjs.com/package/xgplayer-vue 西瓜播放器官网:https://v2.h5player.bytedance.com/gettin ...
- 百度网盘百度云视频倍速播放方法 亲测有用 共6种,总有一个适合你
百度网盘百度云视频倍速播放方法 共6种,总有一个适合你 电脑 方法1: 火狐浏览器,登录百度网盘,播放视频,右键,倍速 方法2: microsoft edge 浏览器 方法同上 方法3: 谷歌浏览器 ...
- [技巧] 网页视频倍速播放(以百度云盘为例)
[百度云盘视频倍速播放] 打开浏览器的控制台(Chrome浏览器为F12) 输入:videojs.getPlayers("video-player").html5player.te ...
- android b站倍速播放器,哔哩哔哩怎么加速播放?B站网页版和手机版视频倍速播放的方法介绍...
bilibili简称B站是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主.那么,爱逛b站的朋友们都知道,加速播放效果更佳!那么,哔哩哔哩怎么加速播放呢?接下来小编就 ...
- 记录--浏览器插件分享(视频倍速播放插件)
记录–浏览器插件分享(视频倍速播放插件) 最近看视频的时候偶然有发现视频倍速播放的几个方法,跟大家分享一下. 第一种 这种是最简单的,我们直接使用火狐浏览器就可以倍速播放视频. 如下图,在视频加载好后 ...
最新文章
- 2022-2028年中国冶金工业节能减排投资分析及前景预测报告
- silverlight,WPF动画终极攻略之阳光灿烂篇(Blend 4开发)
- disconf-自动注入属性变化
- pythonui自动化测试脚本实战_Python UI自动化测试实战 Zero to Hero Se
- 现代软件工程 作业 3 团队作业
- 运动会成绩管理系统python_基于Eclipse+Mysql+Tomcat+MVC开发得大学运动会管理系统
- 使用Jackson将一个对象转换成一个JSON字符串
- Navicat过期问题的解决
- STM32F0xx_TIM基本延时配置详细过程
- matlab2012b安装教程
- 微信小程序服务商接入流程
- 低成本的电流检测电路
- 腾讯云HiFlow场景连接器7月最受欢迎新应用模版推荐
- 通过图新地球把大疆L1激光雷达点云成果和影像地形等其他GIS数据进行融合
- ubuntu16.04安装rtems
- 什么是TXT记录?如何设置、检测TXT记录是否生效
- python爬取微博热门消息(三)—— 爬取微博热门信息的功能函数
- Python推荐几个很不错的学习资源
- Linux下的磁盘加密方法
- A Neural Conversational Model
热门文章
- rk3399-7.1 MediaPlayer播放在线mp3失败
- 对同一个三相逆变器使用FCS-MPC的延迟补偿的两种方法
- 信息工程学院的毕业晚会
- 父游标与子游标--------摘自vage的解释
- 临床预测模型评鉴(PMID32982965)
- 专为Windows电脑和服务器设计的磁盘管理软件
- 【优化求解】基于缎蓝园丁鸟优化算法 (SBO)求解单目标问题附matlab代码
- linux wifi管理工具下载,(Linux无线网卡WIFI上网 二 )WPA_SUPPLICANT——Linux下的wifi管理工具移植-Go语言中文社区...
- [信息化]信息系统规划
- 基于java酒店管理系统_课内资源 - 基于JAVA实现的互联网酒店管理系统