UTS引用原生jar包进行原生插件开发

UTS引用原生jar包进行原生插件开发

KongHen02
2024-04-29 / 2 评论 / 68 阅读 / 正在检测是否收录...

也是踩了很多坑。主要的坑有两个,一个是引入jar包的问题,另一个就是jar包的使用问题(这个还得看包的文档 表情 )

下载jar包

我要用的是jaudiotagger包,引来实现对音乐标签信息的修改,包下载地址:https://central.sonatype.com/artifact/net.jthink/jaudiotagger/versions

我用的是最新的3.0.1版本,下载图中这个
lvkwkzpv.png

创建插件

下面是步骤:
创建插件参考官方教程步骤,这个很详细
地址:
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包

  1. 将你下载的jar包移动到libs目录下,如图
    lvkwqa8k.png

导入包中的方法

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中的示例,个人觉得比文档中的示例详细和有用

0

评论 (2)

取消
  1. 头像
    对对对
    Windows 10 · Google Chrome

    这个官方说支持很多格式的音频文件的表情

    回复
    1. 头像
      KongHen02 作者
      Windows 10 · Google Chrome
      @ 对对对

      确实,极其强大表情

      回复