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))
}
}