基于androidapi16的音频裁剪代码分享
【资料图】
若有朋友需要WAV 音频裁剪,可以参考我的另外一篇博文——wav 音频裁剪在android开发中,一说到音视频,程序员第一反应肯定是FFMpeg,但是FFMpeg这个库,又复杂,又性能差,如果只想简单的要个音频裁剪的功能,就要去引入这么大的库,完全不值得。然而自从android api 16之后谷歌就开始在音视频方面进行布局,android 18之后继续丰富音视频编码库,让很多android app在不依赖于繁琐jni就能进行一些基础的音视频开发。下面将是基于android api16的对mp3文件进行裁剪的代码例子。当前由于时间问题,先分享最主流的mp3格式的音频裁剪,以后有时间会分享更多其他音频方面的经验。
//适当的调整SAMPLE_SIZE可以更加精确的裁剪音乐 private static final int SAMPLE_SIZE = 1024 * 200; @TargetApi(Build.VERSION_CODES.JELLY_BEAN) public static boolean clip(String inputPath, String outputPath, int start, int end){ MediaExtractor extractor = null; BufferedOutputStream outputStream = null; try { extractor = new MediaExtractor(); extractor.setDataSource(inputPath); int track = getAudioTrack(extractor); if(track < 0){ return false; } //选择音频轨道 extractor.selectTrack(track); outputStream = new BufferedOutputStream( new FileOutputStream(outputPath), SAMPLE_SIZE); start = start * 1000; end = end * 1000; //跳至开始裁剪位置 extractor.seekTo(start, MediaExtractor.SEEK_TO_PREVIOUS_SYNC); while (true){ ByteBuffer buffer = ByteBuffer.allocate(SAMPLE_SIZE); int sampleSize = extractor.readSampleData(buffer, 0); long timeStamp = extractor.getSampleTime(); // >= 1000000是要裁剪停止和指定的裁剪结尾不小于1秒,否则可能产生需要9秒音频 //裁剪到只有8.6秒,大多数音乐播放器是向下取整,这样对于播放器变成了8秒, // 所以要裁剪比9秒多一秒的边界 if(timeStamp > end && timeStamp - end >= 1000000){ break; } if(sampleSize <= 0){ break; } byte[] buf = new byte[sampleSize]; buffer.get(buf, 0, sampleSize); //写入文件 outputStream.write(buf); //音轨数据往前读 extractor.advance(); } } catch (IOException e) { e.printStackTrace(); }finally { if(extractor != null){ extractor.release(); } if(outputStream != null){ try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return true; } /** * 获取音频数据轨道 * @param extractor * @return */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN) private static int getAudioTrack(MediaExtractor extractor) { for(int i = 0; i < extractor.getTrackCount(); i++){ MediaFormat format = extractor.getTrackFormat(i); String mime = format.getString(MediaFormat.KEY_MIME); if(mime.startsWith("audio")){ return i; } } return -1; }
裁剪音乐的步骤在注释中已经写得很明白了,其实用上面简单的代码就能实现音频裁剪了,而且裁剪的音频经过多项硬指标测试是没有问题的。但可能还是有人会怀疑用上述方法是否得到一个“真正”mp3文件。绝大部分情况下,产品经理的需求都是希望裁剪后的音乐除了长度之外,其他的都和原始音频一样,以防不同的播放器由于编解码库的差异,导致播放失败的情况。下面的代码是用来提取音频的关键数据,来比较裁剪之后的音频和原始音频的关键数据是否一样。
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)private static void printMusicFormat(String musicPath){ try { MediaExtractor extractor = new MediaExtractor(); extractor.setDataSource(musicPath); MediaFormat format = extractor.getTrackFormat(getAudioTrack(extractor)); Log.i("music", "码率:" + format.getInteger(MediaFormat.KEY_BIT_RATE)); Log.i("music", "轨道数:" + format.getInteger(MediaFormat.KEY_CHANNEL_COUNT)); Log.i("music", "采样率:" + format.getInteger(MediaFormat.KEY_SAMPLE_RATE)); } catch (IOException e) { e.printStackTrace(); }}
通过反复验证,通过以上方法裁剪的音频除了时间长度之外,其他格式数据都和原始音频一样,裁剪的音频在各种平台(android, IOS, windows,mac)都能正常的播放和使用。
标签:
相关推荐:
最新新闻:
- 电脑屏幕护眼最佳设置 推荐几个Windows上的护眼工具
- 世界视点!如何判断一个数是不是4的倍数?判断技巧
- 当前最新:可编程的温湿度表系统有哪些?温湿度表系统功能介绍
- 一个开源的DRM解决方案——Media-S
- 世界头条:mysql中select是什么意思?如何用各种操作符来设定select语句?
- 轻量级微服务计算框架Pulsar——下一代的消息系统_环球聚看点
- Route66用的四维地图2007Q3 怎么设置速度?
- LAMP架构介绍及配置 编译安装Apache httpd服务_焦点观察
- 今日热搜:Windows操作系统安全模式怎么设置?通用方法有哪些?
- 中国联通156号段开始全国规模放号 吉祥号码是天价?
- 《原子之心》总监讨论超长延期 暂无多人模式计划 焦点快播
- 全球即时看!漫改动画《放学后失眠的你》PV2公布 今年4月播出
- 《最后的生还者》剧集主演写真 乔尔和艾莉深情合影
- 【全球聚看点】《黑暗之魂3》大型Mod远古王座新演示 大战怪物Boss
- 《釜山行》导演科幻新作《静_E》正式预告 1月20上线网飞 关注
- 域名选择与老域名质量评分——域名挖掘笔记|全球动态
- 基于androidapi16的音频裁剪代码分享
- PS VR2首发将有超30款游戏 《GT7》可免费升级VR版 每日热点
- 环球速讯:消息透露宝可梦新作动向 10代宝可梦面向任天堂下代主机开发启动
- 什么是edi许可证?edi许可证介绍
- 尼尔谈《最后的生还者3》:有更多的故事要讲述
- 什么是IaaS?IaaS应用程序
- 主板BIOS怎么设置?主板BIOS常用设置教程
- 什么是MySQL插入意向锁?为什么需要插入意向锁?
- 什么是VPN?使用VPN违法吗?
- 如何禁止数据写入移动存储设备(U盘)?
- 如何修复DNS服务器无响应问题?DNS服务器无响应修复方法
- 天天动态:确定了!漫威新片《黑豹2:瓦坎达万岁》2月1号正式上线流媒体
- DNS服务器怎么配置?DNS服务器配置方法
- 天天信息:《吸血鬼幸存者》开发者:没有良心手游公司只能亲自开发
- 一行JAVA代码如何运行起来?JAVA代码运行方法
- 传闻:卡普空团队动作游戏《原始袭变》或将登陆XGP
- SQL Server使用脚本实现自动备份
- 北交所单月逾八成破发,打新热情下滑,市场怎么了?
- NodeJS堆溢出的原因 NodeJS堆溢出解决办法
- 什么是PMI指数?PMI如何影响股市?
- 华硕电脑键盘驱动怎么重新安装?电脑键盘驱动安装方法
- SecureCRT安装及破解 SecureCRT简介
- SecureCRT知识介绍 SecureCRT怎么修改会话缓存大小?
- 热议:全面开放两个多月后,日本旅游恢复得如何?
- 怎么修改hosts文件?系统Hosts文件原理和应用
- 如何修改hosts文件?hosts文件修改方法
- Netflix出品韩国科幻《Jung_E》1月20日发布 克隆英雄之战-当前简讯
- 环球时讯:剧版《最后生还者》主演拍写真:乔尔艾莉温情合影
- 什么是Minio?如何搭建Minio集群?
- 中国版《魔兽》?MMO《塔瑞斯世界》首曝预告
- 谷歌GMS是什么?谷歌GMS概述
- 去中心化是什么意思?去中心化理由有哪些?
- 新能源汽车成为焦点!CES 2023展前新品盘点
- 环球时讯:微信红包升级:红包封面动起来了
- 首发499元 限量2000套 仙剑官方竟然推出复刻版Windows 98电脑
- 观天下!LG新款Gram Ulstraslim 笔记本发布 轻至998克
- 四大系列 一分钟带来你全方位了解移动版13代酷睿|即时焦点
- 权游二丫本是电影版《最后的生还者》艾莉人选
- 【世界报资讯】Meta在欧洲再遇挫!“定向广告”被罚款超4亿美元,勒令业务模式整改
- 外星人推出M18笔记本:高配24核心i9 可塞9TB硬盘|动态焦点
- 《原子之心》导演称游戏优化好 三核设备也能玩
- CES 2023:雷蛇预告灵刃系列推出16/18英寸游戏本_当前热议
- 环球今日讯!苹果被爆新一代Apple Watch Ultra将配备micro-LED显示屏,或2024年推出
- CES 2023:外星人推出24.5寸500Hz IPS电竞显示器
- 微软对Win7、Win8.1停止安全更新 你受影响了吗? 天天播报
- Win11 22H2又出新Bug:文件管理器随机“突然出现”-全球热门
- CES:ROG发布全系新品笔记本 i9处理器+4090显卡旗舰配置问鼎性能巅峰
- 分析师:任天堂新款主机将于2024年发布:环球观焦点
- 【环球新视野】第三人称卡通风冒险《WHALIEN》1月24日登陆PC 新预告发布
- 《潜行者:切尔诺贝利阴影》虚幻5自制测试版推出 环球今头条
- 天天速读:最高正收益5%,银行权益理财去年业绩比肩百亿私募?方法出人意料
- 为了多赚几个点,这批百亿私募“开年”忙出海 简讯
- 郭明錤:京东方将成为iPhone 15屏幕最大供应商
- 快看:商务部:每人每年仅可出售两辆二手车
- 猛男紫?戴尔新G15配色非常吸睛_世界观热点
- 今日上午10:00首销 摩托罗拉moto G53官网正式开售
- 6K超高分!戴尔CES展出32寸全新显示器 每日讯息
- 《守望》商城DJ皮肤引争议 玩家称其本该在通行证中_天天快消息
- 《浩劫前夕》PC配置公开 推荐GTX 1060