0x00写在前面
在进行mirai机器人Nekobot的开发过程中,在论坛中发现了大佬写的silk4j–JVM的语音编码组件,觉得用起来挺不错的,于是去对应的仓库进行了一个习的学,感觉收获挺大的
仓库链接奉上:https://github.com/mzdluo123/silk4j
0x01导入依赖
我是kotlin编译的,需要在你的build.gradle.kts里面加上一些东西
1 2 3 4 5 6 7 8 9 10 11 12 13
| // 要使用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食用
其实官方说明已经讲的很清楚了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| // 请使用这个类完成编码 // 所有的编码默认都只使用左声道 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组件的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| //获取网络图片 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)) } }
|