操作MP3文件的元数据

参见:http://jingyan.baidu.com/article/03b2f78c4d5eae5ea237aee7.html

 

一、MP3文件的元数据

一个规则的MP3文件大致含有3个部分:

  • TAG_V2(ID3V2)
  • Frame
  • TAG_V1(ID3V1)

其中,

  • TAG_V1的长度是固定的,128byte.期中包含MP3文件的基本信息.
  • TAG_V2扩展了TAG_V1,TAG_V2的长度不是固定的,包含了众多关于MP3文件信息

TAG_V1中包含的信息
TAG_V1部分是MP3文件的最后128byte的内容.期中包括的信息有:

  • 标签头"TAG" 3字节
  • 标题 30字节
  • 作者 30字节
  • 专辑 30字节
  • 出品年份 4字节
  • 备注信息 28字节
  • 保留 1字节
  • 音轨 1字节
  • 类型 1字节

常见到有人说获取不到MP3信息,或者获取到的信息是一堆乱码.

解决办法将TAG_V1中的字节信息转换成字符串时没有指定字符编码(一般用"utf-8")而出现的;

如果想获取关于MP3文件的更多信息,可以通过解析TAG_V2中的字节来获取.

二、读取MP3文件的元数据

1、基本实现思路

    1.以随机读写方式打开一个MP3文件

    2.将文件指针偏移量移动到文件长度倒数128位

    3.判断标签头"TAG"是否存在

    3.读取TAG_V1中的各个内容

    4.关闭文件

2、一个MP3文件的TAG_V1部分信息

byte buf = new byte[128];//初始化标签信息的byte数组
RandomAccessFile raf = new RandomAccessFile(mp3, "r");//随机读写方式打开MP3文件
raf.seek(raf.length() - 128);//移动到文件MP3末尾
raf.read(buf);//读取标签信息
raf.close();//关闭文件
if(buf.length != 128){//数据长度是否合法
throw new Exception("MP3标签信息数据长度不合法!");
}
if(!"TAG".equalsIgnoreCase(new String(buf,0,3))){//标签头是否存在
throw new Exception("MP3标签信息数据格式不正确!");
}

3、获得TAG_V1中的各个内容

String SongName = new String(buf,3,30,"utf-8").trim();//歌曲名称
String Artist = new String(buf,33,30,"utf-8").trim();//歌手名字
String Album = new String(buf,63,30,"utf-8").trim();//专辑名称
String Year = new String(buf,93,4,"utf-8").trim();//出品年份
String Comment = new String(buf,97,28,"utf-8").trim();//备注信息

三、修改MP3文件的元数据

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您好,关于如何获取安卓设备上的MP3文件的歌曲信息,您可以使用Android内置的MediaMetadataRetriever类来实现。您可以按照以下步骤进行操作: 1. 创建一个MediaMetadataRetriever对象。 2. 使用setDataSource方法设置要检索信息的MP3文件的路径。 3. 使用extractMetadata方法来获取MP3文件的元数据信息,例如歌曲名称、艺术家、专辑名称等。 4. 最后,记得在使用完MediaMetadataRetriever对象后,调用其release方法来释放资源。 以下是一个简单的示例代码: ``` MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setDataSource(filePath); String title = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE); String artist = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST); String album = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM); retriever.release(); ``` 其中,filePath是MP3文件的路径,title、artist和album分别是歌曲名称、艺术家和专辑名称。 希望这个回答能够帮助到您! ### 回答2: 在安卓系统中,可以使用多种方法获取MP3文件的歌曲信息。下面是一种常用的方法: 首先,需要使用MediaMetadataRetriever类来获取MP3文件的元数据信息。这个类可以提取音乐文件的标题、专辑、艺术家、时长等信息。 首先,需要创建一个MediaMetadataRetriever的实例对象: MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 然后,通过设置数据源来指定要获取信息的MP3文件路径: retriever.setDataSource(filePath); 接下来,可以使用retriever提供的方法来获取MP3文件的各种信息,例如: - 获取歌曲标题: String title = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE); - 获取歌曲专辑: String album = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM); - 获取歌曲艺术家: String artist = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST); - 获取歌曲时长: String duration = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); 最后,记得在使用完MediaMetadataRetriever后释放资源: retriever.release(); 除了使用MediaMetadataRetriever,还可以通过其他的方法获取MP3文件的歌曲信息,比如使用MediaPlayer类、第三方音乐库等。不同的方法具体操作可能有所不同,但基本思路都是通过获取MP3文件的元数据来获取歌曲信息。 总结起来,安卓系统中获取MP3文件的歌曲信息可以通过使用MediaMetadataRetriever类来提取元数据,然后使用相应的方法获取歌曲的标题、专辑、艺术家、时长等信息。 ### 回答3: 安卓系统提供了一些方法来获取MP3文件的歌曲信息。首先,可以通过媒体库提供的API来获取音频文件的基本信息。以下是一种实现方式: 1. 首先,需要使用ContentResolver类打开媒体库: ContentResolver resolver = context.getContentResolver(); 2. 然后,通过创建一个游标对象来查询音频文件的信息: Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; String[] projection = {MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media.DURATION}; String selection = MediaStore.Audio.Media.MIME_TYPE + "=?"; String[] selectionArgs = {"audio/mpeg"}; Cursor cursor = resolver.query(uri, projection, selection, selectionArgs, null); 3. 使用游标对象遍历查询到的歌曲信息并存储: while (cursor.moveToNext()) { String filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)); String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)); String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)); String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM)); long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)); // 在这里可以对获取到的信息做进一步的处理 } 4. 最后,记得关闭游标对象: cursor.close(); 通过这种方式,可以获取MP3文件的路径、歌曲标题、艺术家、专辑以及时长等基本信息。当然,还可以根据需要获取更多的信息,如歌曲的封面图像等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值