thumbnail
Nekobot开发心得:Silk4j食用笔记

0x00写在前面

在进行mirai机器人Nekobot的开发过程中,在论坛中发现了大佬写的silk4j—JVM的语音编码组件,觉得用起来挺不错的,于是去对应的仓库进行了一个习的学,感觉收获挺大的

仓库链接奉上:https://github.com/mzdluo123/silk4j

0x01导入依赖

我是kotlin编译的,需要在你的build.gradle.kts里面加上一些东西

// 要使用maven仓库导入,需要先为你的账号生成一个访问token才能正常拉取
repositories {
   maven { 
     url 'https://maven.pkg.github.com/mzdluo123/silk4j'
     credentials {
            username = '你的用户名'
            password = '你的token'
        }
   }
}
dependencies {
    implementation("io.github.mzdluo123:silk4j:版本号")
}

token的获取方式是在github的Settings / Developer settings ,里面的话,会有一个Personal access tokens,点进去,自己取个标识,然后注意一下期限,我是选择永不过期,最后范围我是全勾上了。

好,最后会生成一个token,把它复制粘贴到相应位置(切勿泄露!!!)

0x02食用

其实官方说明已经讲的很清楚了

// 请使用这个类完成编码
// 所有的编码默认都只使用左声道
public class AudioUtils {
//使用之前需要初始化
public static void init() throws IOException {
}
// 初始化时可选指定缓存目录,未指定则使用系统目录
public static void init(File tmpDir) throws IOException {
}
// 以下为编码函数,只可以同时进行一个编码任务,如需pcm文件请看源代码
// 返回的文件在缓存目录内,使用完毕请删除
public static File mp3ToSilk(File mp3File) throws IOException {

}
public static File mp3ToSilk(InputStream mp3FileStream) throws IOException {

}

public static File silkToMp3(File silkFile) throws IOException {

}

public static File silkToMp3(InputStream silkFileStream) throws IOException {

}
}

其实本地很好处理。那就以我最近使用的文字转语音api为例,返回的一条mp3文件的下载链接。与之前返回图片类似,将网络的资源转化为InputStream流,再使用silk4j组件的方法

//获取网络图片
    fun getNetImg(urlstr: String): InputStream? {
        val url = URL(urlstr)
//        return try {  实有异常了再说
        return url.openConnection().getInputStream()
//        }catch(err:java.io.IOException){
//            null
//        }
    }





getNetImg(mp3str).use {
                        if (it != null) {//暂时使用img方法获取流
                            AudioUtils.init()
                            val silk: File = AudioUtils.mp3ToSilk(it)
                            group.sendMessage(silk.toExternalResource().uploadAsVoice(group))
                        }
                    }
上一篇
下一篇