android mp3 乱码,android MediaScanner 扫出来的ID3 MP3文件演唱者信息 乱码
0、首先得理解MP3格式文件的结构
简单的就是
MP3 文件大体分为三部分:TAG_V2(ID3V2),音频数据,TAG_V1(ID3V1)
参考此博客:点击打开链接
ID3V1的结构是:
表1:ID3V1结构 -------------------------------------------------------------------- 名称 字节 说明 -------------------------------------------------------------------- Tag 3 ID3V1标识符“TAG”的Ascii码 Title 30 歌曲名 Artist 30 歌手名 Album 30 专辑名 Year 4 日期信息 Comment 28 注释信息,有时为30字节 Reserved 1 =0说明有音轨,下一字节就是音轨;≠0表示注释是30个字节 Track 1 音轨(字节型数值),歌曲在专辑里的序号 Genre 1 歌曲风格(字节型数值) --------------------------------------------------------------------
参考博客链接:点击打开链接
1、为什么会乱码?
看起来是MediaScaner 原生的Flow的缺陷,非中文地区设置,如果编码是GBK格式的则会乱码.
2、乱码了怎么解决?
1中的链接是在MediaScanner的源码解决的,我要说的是apk的解决方法
手动读取ID3V1的数据,从而读取出演唱者信息 ,下面看代码:
private synchronized BaseData dealWithMp3Messy(BaseData currentMusic){
String contry = Locale.getDefault().getCountry() ;
if((!contry.equalsIgnoreCase("CN"))
&&(!contry.equalsIgnoreCase("HK"))
&&(!contry.equalsIgnoreCase("TW"))){
return currentMusic;
}
String currentMp3Path = currentMusic.getPath() ;
if(!currentMp3Path.toLowerCase().trim().endsWith("mp3")){
return currentMusic;
}
RandomAccessFile raf = null ;
try{
raf = new RandomAccessFile(currentMp3Path, "r") ;
raf.seek(raf.length() - 128) ;
byte[] buff = new byte[128] ;
raf.read(buff) ;
String Tag = new String(buff,0,3,"GBK") ;
if(buff.length == 128 && "TAG".equals(Tag)){
String artist = new String(buff,30,33,"GBK").trim() ;
Log.i(TAG, "deal with mp3 messy,mp3 artist=******"+artist+"****** and currentMp3Path="+currentMp3Path) ;
if(!TextUtils.isEmpty(artist)){
currentMusic.setArtist(artist) ;
return currentMusic ;
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(raf != null){
try{
raf.close() ;
}catch(Exception e){
}finally{
raf = null ;
}
}
}
return currentMusic ;
}
这段code的意思是:在非中文地区的设置下,MP3的ID3V1的编码格式如果是GBK的话,
RamdomAccessFile 可以随意seek到某个字节处来读取文件
读取30到33的演唱者信息出来。就大功告成了。
以上解决了MediaScanner 读取MP3 ID3文件乱码问题
android mp3 乱码,android MediaScanner 扫出来的ID3 MP3文件演唱者信息 乱码相关推荐
- linux 解压文件乱码,云服务器:解决linux下zip文件解压乱码问题
云服务器:解决linux下zip文件解压乱码问题 原因 由于zip格式并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,因此,导致这些zip文件在Linux下解压时 ...
- js java 中文乱码_编码问题(.java/.jsp/.js等文件的中文乱码)
乱码的出现是因为编码与解码的不一致造成的,假如你对"中文"两个字进行了gbk格式的保存,却用utf-8格式的解读,是肯定会出现乱码的. 如何避免中文乱码:应用上下统一用一种编码格式 ...
- java写出文本文档乱码_对象流如何写出到文件以及为什么乱码
在写入对象文件的过程中,采用了txt文件,发现文件乱码,引发了思考. 首先需要理解好IO流是如何处理文件的. 1.ObjectOutputStream 对Java对象进行序列化处理,处理后的数据,不是 ...
- linux top p 乱码,将Linux top命令输入到指定文件时的乱码问题
根据需求,项目需要读取linux系统环境参数,所以需要将top命令的输出结果输入到文件中.用重定向命令如下:top > result.txt .用vi打开文件: vi result.txt .显 ...
- Android实现mp3分析,Android编程实现播放MP3功能示例
本文实例讲述了Android编程实现播放MP3功能.分享给大家供大家参考,具体如下: 在android中播放mp3非常简单,也是项目中经常使用的,比如说要做项目的背景音乐,应用中某些功能的提示音等的. ...
- android audiotrack mp3,播放mp3数据压缩由JLayer和Audiotrack latin mp3在android
我跟着这个example转换来自AudioRecord原始音频数据为MP3,并且它成功发生,如果我将这个数据存储在一个文件的MP3文件和播放与音乐播放器,然后它是可以听到的.播放mp3数据压缩由JLa ...
- 用Android和node.js实现扫码登录
实现思路 step 1: 网页端提供二维码 step 2: 手机端登录,并保存token,手机扫码后向网页端发送token step 3: 网页端通过jstoken解析token,向后端服务器获取用户 ...
- android播放mp3功能,Android编程实现播放MP3功能示例
本文实例讲述了android编程实现播放mp3功能.分享给大家供大家参考,具体如下: 在android中播放mp3非常简单,也是项目中经常使用的,比如说要做项目的背景音乐,应用中某些功能的提示音等的. ...
- Android JNI开发之使用Lame将录音转MP3
写在前面 开发环境 前言 Lame 源码下载 写在前面 由于在写之前在网上搜了搜,发现GIthub上已经有AndroidStudio版使用Lame转Mp3的了,所以这篇博客写的例子是Eclipse版本 ...
最新文章
- Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2)
- python matplotlib.pyplot.imshow() (在2D常规栅格上显示图像(数据))
- 成大事必备9种能力、9种手段、9种心态
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- python几乎无所不能 只有你不知道的,如何通过Python玩转小视频
- 音视频技术开发周刊(第122期)
- 数据列表的分页实现————分页敏捷开发
- ZooKeeper 典型应用场景有哪些?
- [bzoj 1452] [JSOI2009]Count
- Gitblit Git 无密码 clone pull SSH Key 生成
- linux的I/O多路转接select的fd_set数据结构和相应FD_宏的实现分析
- Python-Cartopy制图学习02-中国2010年5月干旱情况空间制图
- 学习C语言未来的发展方向
- 怎么把多个excel内容汇总到一个excel里面
- SPEA2算法原理及应用方向
- python英语词汇读音_Python 将英语单词列表,转换为听写使用的MP3格式(每个单词朗读两遍)...
- 美通企业日报 | 网龙互动白板获德国红点设计奖;芬美意在华开设全球最大食用香精厂...
- 【电气专业知识问答】问:WXJ-11B微机蓄电池巡检装置的功能、特点和工作原理是什么?
- R语言 关于h2o深度学习的一些心得
- SpringBoot+Vue项目漫画网站
热门文章
- CSS水平、垂直布局、盒子
- HJS-DE1/2时间继电器
- $forceUpdate()函数
- Matlab三维折线图绘制–surf 函数的使用
- 论vbs----从vbs基础语法 到 用VBS搞怪
- 浙江省计算机二级高级技术,浙江省计算机二级办公软件高级的应用技术上机考试的技巧解析.doc...
- 安装mrt时怎么安装java_科学网—MODIS Reprojection Tool (MRT)安装及使用说明(转载) - 孙晓芳的博文...
- FL Studio 2023最新发布的21版本新功能介绍/主题包/下载安装激活教程
- 为12306点赞!高铁动车买票正式上线选座功能
- SpringBoot实战教程(3.1)——失败重试机制