InputStream in = process.getInputStream();
File file = new File(PCMPATH);
FileOutputStream fos = new FileOutputStream(file);
byte[] b = new byte[1024];
int nRead = 0;
while ((nRead = in.read(b)) != -1) {
fos.write(b, 0, nRead);
}
fos.flush();
fos.close();
in.close();
}
这样执行的结果 。pcm文件打开提示********** Silk Decoder (Fixed Point) v 1.0.9.6 ********************
********** Compiled for 32 bit cpu *******************************
Input: ?H:\test\wx-file.silk
Output: H:\test\out.pcm
Error: could not open input file ?H:\test\wx-file.silk
@kn007: 文件存在 确认了 文件存在 权限最高 完全控制 还是
********** Silk Decoder (Fixed Point) v 1.0.9.6 ********************
********** Compiled for 32 bit cpu *******************************
Input: ?H:\test\wx-file.silk
Output: H:\test\out.pcm
Error: could not open input file ?H:\test\wx-file.silk
大神,请问下执行converter.sh的时候返回false,maybe not a silk v3 encoded file是为什么,我的是下载的微信语音,amr格式的
@coder: 信息不是显示得很清楚,不是silk v3编码的。
微信语音?小程序语音?SDK语音?
完全不同的格式。
@kn007: 看了你的好几页博客留言大致找到原因了,微信公众号里面jsdk的多媒体语音是amr格式的,所以应该不能用这个转,直接用ffmpeg转了
@coder: 对的,而且sdk还有个坑人的地方,为了方便,他以某种非常规方式进行编码,会使得正常解码失败,而实际用户环境并不是如此。
这个是最囧的
网站不错,赞一个
求助 kindle 如何提取分期 如 mmcblk0p2.img 这些
@kindle大法: linux系统啊,用dd
@kn007: 可怜我是个小白。。。只能看懂教程 还有您操作的是kindle touch 我这边坏掉的是kindle paperwhite 3 日版32G的。。。我想从别的机子备份镜像出来直接恢复 但是不知道方法
还望您抽空给指导一下
@kindle大法: kpw我没试过。
小白不建议尝试从别的机子备份镜像恢复,你可以找官方拿到原始版本的镜像,然后恢复。
以前kt,就是进入ssh,然后dd备份,后续需要,也是dd恢复。
有官方镜像,那么就是进入ssh,然后dd恢复。
@kn007: 进不去ssh...已经是砖头了
你好大神,请问,可以通过C# 代码 进行silk 转换 wav的操作吗?望指导
@平淡是福: 看github源码
在linux 上面调用converter.sh 是可以的, 但是部署了 war 之后, 用java命令调用 就会出现maybe ffmpeg no format handler for mp3 这个问题, 这是什么原因啊,
@liutaoyxz: 权限问题
我的环境就是 win10 Java 1.8 Tomcat 7 说白了最终是Linux环境
用getruntime.exec(cmd) 其实就是在执行cmd 你就按照cmd 的方法 给指点下吧 什么win10 Java 这些不用管
那只是辅助执行cmd的
@AIguibin: 你的命令并没有错啊。
有错我早已指出来了。
是不支持64位操作系统吗,大神麻烦帮帮忙,搞了好几天 头都大了 需不需要给你发一份声音样本 看看
@AIguibin: 支持的。你用silk2mp3就知道是支持的。
@kn007: 这个在linux怎么执行 能给个试例代码么
@AIguibin: 与32位相同,没有区别
String olddata = lineTxt.toString();
olddata = olddata.replace("data:audio/webm;base64,", "");
System.out.println(olddata);
try {
File webmFile = new File("H:\\TDDownload\\caole.webm");
byte[] bt = Base64.decodeBase64(olddata) ;
FileOutputStream in = new FileOutputStream(webmFile);
之后怎么搞
@AIguibin: 去头->base64 decode->文件,直接用ffmpeg解码。
我靠 接下来 更迷了 这是要解密成webm格式吗? 然后要把webm转为wav或pcm 在转文本 大神求救
你好,我想在Java里怎么转换不了微信小程序传上来的录音文件.silk 命令行不对吗?大神
我的需求是这样的 前端微信小程序录音上传至服务器
把上传上来的.silk 文件转换成wav 格式 在用讯飞的语音识别 转换成文字 然后回传给客户端小程序
Java1.8 Tomcat7.0 win10 大神能帮下忙不 赞赏是必需的
@AIguibin: 小程序语音并不是就是silk,也有webm、AMR等。
你自己做个头部判断,采用不同方法解码。
@kn007: data:audio/webm;base64,那就是这个了,我在查查看,
都说你人好,都愿意帮助,感情真是这样,这个赞是必需的,先给个小的 解决了 在给个大的 赞在哪里
@kn007: 大神 你好 我能获取到silk文件 也在你的工具上成功转码MP3 现在我想在Java里通过执行cmd命令搞成wav格式的 能不能给下cmd命令 网上试了很多都不行 目前测试在本地window下,日后会传到服务器上Linux系统,求大神具体指导一下,具体给个步骤及cmd命令
@AIguibin: 参考shell脚本,代码一样。
@kn007: public static void silkToPcm() throws IOException {
String[] cmd = new String[3];
if (OperatingSystem.isWindows()) {
cmd[0]="cmd.exe";
cmd[1]="/c";
cmd[2]="C:/Users/liuguibin/Desktop/silk_v3_decoder.exe "+SILKPATH+" "+PCMPATH+" -Fs_API 16000";
// cmd[2]="/Users/liuguibin/Desktop/ffmpeg.exe -y -f s16le -ar 8000 -ac 1 -i "+SILKPATH+" -f wav -ar 16000 -b:a 16 -ac 1 "+PCMPATH;
}else {
cmd[0]="";
cmd[1]="";
cmd[2]="";
}
Process process=Runtime.getRuntime().exec(cmd);
InputStream in = process.getInputStream();
File file = new File(PCMPATH);
FileOutputStream fos = new FileOutputStream(file);
byte[] b = new byte[1024];
int nRead = 0;
while ((nRead = in.read(b)) != -1) {
fos.write(b, 0, nRead);
}
fos.flush();
fos.close();
in.close();
}
这样执行的结果 。pcm文件打开提示********** Silk Decoder (Fixed Point) v 1.0.9.6 ********************
********** Compiled for 32 bit cpu *******************************
Input: ?H:\test\wx-file.silk
Output: H:\test\out.pcm
Error: could not open input file ?H:\test\wx-file.silk
@AIguibin: 文件是否存在,看下权限问题
@kn007: 文件存在 确认了 文件存在 权限最高 完全控制 还是
********** Silk Decoder (Fixed Point) v 1.0.9.6 ********************
********** Compiled for 32 bit cpu *******************************
Input: ?H:\test\wx-file.silk
Output: H:\test\out.pcm
Error: could not open input file ?H:\test\wx-file.silk
@AIguibin: 不明白你的环境,而且Java不熟
@AIguibin: https://kn007.net/topics/batch-convert-silk-v3-audio-files-to-mp3-in-windows/comment-page-7/#comment-23783
@kn007: 恩 成功转换成pcm 谢谢大神 接下来再看看FFmpeg转成wav
@kn007: 真是搞不懂 前两天测试的好好的 今天怎么就执行了 没有反应啊
@AIguibin: 自己找原因,自己的代码,自己的环境,只有靠自己
@kn007: 恩 找到原因了 文件名里有其他符号- cmd 认为是语法了
@AIguibin: 嗯嗯,加油
@kn007: String cmd="";
if (OperatingSystem.isWindows()) {
cmd = "cmd.exe /c ";
cmd += "H:\\silkDecoder\\silk_v3_decoder.exe ";
cmd += silkPath+" ";
cmd += pcmPath +" ";
cmd += "-quiet";
}else {
cmd = "/bin/sh -c ";
cmd += "/var/lib/tomcat/webapps/silkDecoder/silk_v3_decoder.exe ";
cmd += silkPath+" ";
cmd += pcmPath +" ";
cmd += "-quiet";
}
大神 我Windows上思路是 用silk_v3_decoder.exe 把silk文件转成pcm 然后再调用
String cmd ="";
if (OperatingSystem.isWindows()) {
cmd = "cmd.exe /c ";
cmd +="H:\\silkDecoder\\ffmpeg.exe ";
cmd +="-f s16le -ar 24k -ac 1 -i ";
cmd +=pcmPath;
cmd +=" -f wav -ar 16k -ac 1 ";
cmd +=wavPath;
} else {
cmd = "/bin/sh -c ";
cmd +="/var/lib/tomcat/webapps/silkDecoder/ffmpeg.exe ";
cmd +="-f s16le -ar 24k -ac 1 -i ";
cmd +=pcmPath;
cmd +=" -f wav -ar 16k -ac 1 ";
cmd +=wavPath;
}
这样把pcm 转成wav 完美运行
Windows环境一切都按大神的方式完美转换,
部署到Linux上 貌似不能直接这样调用可执行文件吧
尝试了下会有cannot execute binary file这个错误
是不是在Linux上直接调用你那个shell脚本文件解码silk 然后安转FFmpeg 在转成wav
@AIguibin: 你exe在linux怎么用?
在linux编译啊
@kn007:
哈哈 见谅
@kn007: 那个问题不用回答了 大神我已经用你的脚本 完美在Linux环境转成wav 就想问下如果是转成16000的是不是改脚本文件的最后一个24000 那个参数
@AIguibin: 嗯,改ffmpeg的输出也是可以的,不要改成输入,至于参数对错,自己查下ffmpeg文档
@kn007: 好的 谢谢 大神的东西果然厉害