也是踩了很多坑。主要的坑有两个,一个是引入jar包的问题,另一个就是jar包的使用问题(这个还得看包的文档 :@(吐血倒地) )
下载jar包
我要用的是jaudiotagger
包,引来实现对音乐标签信息的修改,包下载地址:https://central.sonatype.com/artifact/net.jthink/jaudiotagger/versions
我用的是最新的3.0.1版本,下载图中这个
创建插件
下面是步骤:
创建插件参考官方教程步骤,这个很详细
地址:
https://doc.dcloud.net.cn/uni-app-x/plugin/uts-plugin.html#%E5%88%9B%E5%BB%BAuts%E6%8F%92%E4%BB%B6
引入jar包
- 将你下载的jar包移动到libs目录下,如图
导入包中的方法
java导入的方法
import org.jaudiotagger.audio.flac.FlacFile;
import org.jaudiotagger.audio.generic.AudioFile;
import org.jaudiotagger.audio.generic.AudioFileIO;
import org.jaudiotagger.tag.FieldKey;
import org.jaudiotagger.tag.Tag;
import org.jaudiotagger.tag.images.Artwork;
ts导入的方法
import FlacFile from "org.jaudiotagger.audio.flac.FlacFile";
import AudioFile from "org.jaudiotagger.audio.generic.AudioFile";
import AudioFileIO from "org.jaudiotagger.audio.generic.AudioFileIO";
import FieldKey from "org.jaudiotagger.tag.FieldKey";
import Tag from "org.jaudiotagger.tag.Tag";
import Artwork from "org.jaudiotagger.tag.images.Artwork";
就这样导入就可以了,在Hbuilderx
中,有代码提示,也可以不自己导入,写完代码,点击代码提示,又自动修复功能,当然,自动修复导入的不完全正确。
使用方法
测试的时候要打包自定义基座进行测试
使用的话,导入后就当ts方法写就行
有些报错是编译器bug不用管
// 引入java文件类
import File from "java.io.File";
import Files from "java.nio.file.Files";
// 引入jaudiotagger包
import AudioFile from "org.jaudiotagger.audio.AudioFile";
import AudioFileIO from "org.jaudiotagger.audio.AudioFileIO";
// import { Tag, FieldKey } from "org.jaudiotagger.tag";
import Tag from "org.jaudiotagger.tag.Tag";
import FieldKey from "org.jaudiotagger.tag.FieldKey";
// mp3封面相关
import StandardArtwork from "org.jaudiotagger.tag.images.StandardArtwork";
// falc封面相关
import FlacTag from "org.jaudiotagger.tag.flac.FlacTag";
import FileInputStream from "java.io.FileInputStream";
import PictureTypes from "org.jaudiotagger.tag.reference.PictureTypes";
/**
* MusicInfo
* 音乐信息类型
*
*/
type Tags = {
audio: string;
title: string;
artist: string;
album: string;
cover: string;
}
export class KhMusicTag {
/**
* 私有变量
* tags { Tags } 标签信息
* action { boolean[] } 封面图片路径
*
*/
/**
* writeMp3Tag
* 写入mp3的封面图
* @param { string } cover 封面图路径
*
* @returns { Boolean} 返回写入结果
*/
public writeMp3Tag(info: Tags): boolean {
try {
// 读取音频文件
const audioFile = AudioFileIO.read(new File(info.audio));
const mp3Tag: Tag = audioFile.getTagOrCreateAndSetDefault();
// 设置歌曲名,歌手名,专辑名
mp3Tag.setField(FieldKey.TITLE, info.title);
mp3Tag.setField(FieldKey.ARTIST, info.artist);
mp3Tag.setField(FieldKey.ALBUM, info.album);
// 创建封面图实例
const coverImage: File = new File(info.cover);
// 创建Artwork对象
const artwork: StandardArtwork = new StandardArtwork();
artwork.setBinaryData(Files.readAllBytes(coverImage.toPath()));
artwork.setMimeType("image/jpg"); // 根据实际封面图片类型设置
artwork.setPictureType(3);
// 删除旧的封面图
mp3Tag.deleteArtworkField();
// 写入封面图
mp3Tag.setField(artwork);
// 写回文件
audioFile.commit();
return true;
} catch(e) {
return false;
}
}
/**
* writeFlacCover
* 写入flac的封面图
* @param { Tags } info 标签信息
*
* @returns { Boolean} 返回写入结果
*/
public writeFlacTag(info: Tags): boolean {
try {
// 读取flac文件,并强制申明为FlacTag类型
const audioFile = AudioFileIO.read(new File(info.audio));
const flacTag = audioFile.getTag() as FlacTag;
// 设置歌曲名,歌flac手名,专辑名
flacTag.setField(FieldKey.TITLE, info.title);
flacTag.setField(FieldKey.ARTIST, info.artist);
flacTag.setField(FieldKey.ALBUM, info.album);
// 读取封面图为字节流
const imageFile: FileInputStream = new FileInputStream(info.cover);
const imagedata: ByteArray = new ByteArray(imageFile.available());
imageFile.read(imagedata);
// 写入封面图
flacTag.setField(flacTag.createArtworkField(imagedata, PictureTypes.DEFAULT_ID, "image/jpg", "KHMD", 200, 200, 24, 0));
// 写回文件
audioFile.commit();
return true;
} catch (e) {
return false;
}
}
}
相关内容:
依据于开源的java库jaudiotagger
地址:https://bitbucket.org/ijabz/jaudiotagger/src/master/
文档:http://jthink.net/jaudiotagger/index.jsp
成品jar包下载地址:https://central.sonatype.com/artifact/net.jthink/jaudiotagger/versions
说明:建议查看源码中的testsrc中的示例,个人觉得比文档中的示例详细和有用
这个官方说支持很多格式的音频文件的::(呵呵)
确实,极其强大:@(便便)