kn007的个人博客

留言板

Comments
1,945 Comments立即评论
  1. coder回复

    大神,请问下执行converter.sh的时候返回false,maybe not a silk v3 encoded file是为什么,我的是下载的微信语音,amr格式的 :cry:

    1. kn007
      MOD
      回复

      @coder: 信息不是显示得很清楚,不是silk v3编码的。
      微信语音?小程序语音?SDK语音?
      完全不同的格式。

    2. coder回复

      @kn007: 看了你的好几页博客留言大致找到原因了,微信公众号里面jsdk的多媒体语音是amr格式的,所以应该不能用这个转,直接用ffmpeg转了

    3. kn007
      MOD
      回复

      @coder: 对的,而且sdk还有个坑人的地方,为了方便,他以某种非常规方式进行编码,会使得正常解码失败,而实际用户环境并不是如此。
      这个是最囧的

  2. lostar回复

    网站不错,赞一个

  3. kindle大法回复

    求助 kindle 如何提取分期 如 mmcblk0p2.img 这些

    1. kn007
      MOD
      回复

      @kindle大法: linux系统啊,用dd

    2. kindle大法回复

      @kn007: 可怜我是个小白。。。只能看懂教程 还有您操作的是kindle touch 我这边坏掉的是kindle paperwhite 3 日版32G的。。。我想从别的机子备份镜像出来直接恢复 但是不知道方法
      还望您抽空给指导一下 :cry:

    3. kn007
      MOD
      回复

      @kindle大法: kpw我没试过。
      小白不建议尝试从别的机子备份镜像恢复,你可以找官方拿到原始版本的镜像,然后恢复。

      以前kt,就是进入ssh,然后dd备份,后续需要,也是dd恢复。

      有官方镜像,那么就是进入ssh,然后dd恢复。

    4. kindle大法回复

      @kn007: 进不去ssh...已经是砖头了 :o

  4. 平淡是福回复

    你好大神,请问,可以通过C# 代码 进行silk 转换 wav的操作吗?望指导

    1. kn007
      MOD
      回复

      @平淡是福: 看github源码

  5. liutaoyxz回复

    在linux 上面调用converter.sh 是可以的, 但是部署了 war 之后, 用java命令调用 就会出现maybe ffmpeg no format handler for mp3 这个问题, 这是什么原因啊,

    1. kn007
      MOD
      回复

      @liutaoyxz: 权限问题

  6. AIguibin
    LV1
    回复

    我的环境就是 win10 Java 1.8 Tomcat 7 说白了最终是Linux环境
    用getruntime.exec(cmd) 其实就是在执行cmd 你就按照cmd 的方法 给指点下吧 什么win10 Java 这些不用管
    那只是辅助执行cmd的

    1. kn007
      MOD
      回复

      @AIguibin: 你的命令并没有错啊。
      有错我早已指出来了。

  7. AIguibin
    LV1
    回复

    是不支持64位操作系统吗,大神麻烦帮帮忙,搞了好几天 头都大了 需不需要给你发一份声音样本 看看

    1. kn007
      MOD
      回复

      @AIguibin: 支持的。你用silk2mp3就知道是支持的。

    2. AIguibin
      LV1
      回复

      @kn007: 这个在linux怎么执行 能给个试例代码么

    3. kn007
      MOD
      回复

      @AIguibin: 与32位相同,没有区别

  8. AIguibin
    LV1
    回复

    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);
    之后怎么搞

    1. kn007
      MOD
      回复

      @AIguibin: 去头->base64 decode->文件,直接用ffmpeg解码。

  9. AIguibin
    LV1
    回复

    我靠 接下来 更迷了 这是要解密成webm格式吗? 然后要把webm转为wav或pcm 在转文本 大神求救

  10. AIguibin
    LV1
    回复

    你好,我想在Java里怎么转换不了微信小程序传上来的录音文件.silk 命令行不对吗?大神
    我的需求是这样的 前端微信小程序录音上传至服务器
    把上传上来的.silk 文件转换成wav 格式 在用讯飞的语音识别 转换成文字 然后回传给客户端小程序
    Java1.8 Tomcat7.0 win10 大神能帮下忙不 赞赏是必需的

    1. kn007
      MOD
      回复

      @AIguibin: 小程序语音并不是就是silk,也有webm、AMR等。
      你自己做个头部判断,采用不同方法解码。

    2. AIguibin
      LV1
      回复

      @kn007: data:audio/webm;base64,那就是这个了,我在查查看,
      都说你人好,都愿意帮助,感情真是这样,这个赞是必需的,先给个小的 解决了 在给个大的 赞在哪里

    3. AIguibin
      LV1
      回复

      @kn007: 大神 你好 我能获取到silk文件 也在你的工具上成功转码MP3 现在我想在Java里通过执行cmd命令搞成wav格式的 能不能给下cmd命令 网上试了很多都不行 目前测试在本地window下,日后会传到服务器上Linux系统,求大神具体指导一下,具体给个步骤及cmd命令

    4. kn007
      MOD
      回复

      @AIguibin: 参考shell脚本,代码一样。

    5. AIguibin
      LV1
      回复

      @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

    6. kn007
      MOD
      回复

      @AIguibin: 文件是否存在,看下权限问题

    7. AIguibin
      LV1
      回复

      @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

    8. kn007
      MOD
      回复

      @AIguibin: 不明白你的环境,而且Java不熟

    9. kn007
      MOD
      回复

      @AIguibin: https://kn007.net/topics/batch-convert-silk-v3-audio-files-to-mp3-in-windows/comment-page-7/#comment-23783

    10. AIguibin
      LV1
      回复

      @kn007: 恩 成功转换成pcm 谢谢大神 接下来再看看FFmpeg转成wav

    11. AIguibin
      LV1
      回复

      @kn007: 真是搞不懂 前两天测试的好好的 今天怎么就执行了 没有反应啊

    12. kn007
      MOD
      回复

      @AIguibin: 自己找原因,自己的代码,自己的环境,只有靠自己

    13. AIguibin
      LV1
      回复

      @kn007: 恩 找到原因了 文件名里有其他符号- cmd 认为是语法了

    14. kn007
      MOD
      回复

      @AIguibin: 嗯嗯,加油

    15. AIguibin
      LV1
      回复

      @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

    16. kn007
      MOD
      回复

      @AIguibin: 你exe在linux怎么用?
      在linux编译啊

    17. AIguibin
      LV1
      回复

      @kn007: ;-) 哈哈 见谅

    18. AIguibin
      LV1
      回复

      @kn007: 那个问题不用回答了 大神我已经用你的脚本 完美在Linux环境转成wav 就想问下如果是转成16000的是不是改脚本文件的最后一个24000 那个参数

    19. kn007
      MOD
      回复

      @AIguibin: 嗯,改ffmpeg的输出也是可以的,不要改成输入,至于参数对错,自己查下ffmpeg文档

    20. AIguibin
      LV1
      回复

      @kn007: 好的 谢谢 大神的东西果然厉害

;-):|:x:twisted::smile::shock::sad::roll::razz::oops::o:mrgreen::lol::idea::grin::evil::cry::cool::arrow::???::?::!: