微信客服开发之语音聊天amr语音文件转换为mp3

一 问题起因

  在做微信客服开发时,遇到了一个问题 就是微信语音的格式是amr格式  一般的浏览器还解析不了这类语音文件,必须要将它转换为mp3格式;

二 问题解决

  我在网上找了一些资料,说的不全,在此总结补充一下;

  1.需要下载第三方jar 下载JAVE 1.0.2

    http://www.sauronsoftware.it/projects/jave/download.php

  2.引入pom依赖

    

        <dependency>
            <groupId>it.sauronsoftware.jave</groupId>
            <artifactId>jave</artifactId>
            <version>1.0.2</version>
        </dependency>

  3.mvn 打包项目 会报错 然后你把 jave-1.0.2.jar放到maven的依赖仓库中 

三 代码

  

package com.hmzj.callcenterim.utils;


import it.sauronsoftware.jave.*;
import lombok.extern.slf4j.Slf4j;

import java.io.*;

@Slf4j
public class ChangeAudioFormat {

    public static void main(String[] args) throws Exception {
        String path1 = "C:\\Users\\pc\\Desktop\\amr.js-master\\assets\\female.amr";
        String path2 = "C:\\Users\\pc\\Desktop\\amr.js-master\\assets\\female.mp3";
        changeToMp3(path1, path2);
    }

    /**
     * windows版 执行此方法
     * 
     * @param sourcePath
     * @param targetPath
     */
    public static void changeToMp3(String sourcePath, String targetPath) {
        File source = new File(sourcePath);
        File target = new File(targetPath);
        AudioAttributes audio = new AudioAttributes();
        Encoder encoder = new Encoder();

        audio.setCodec("libmp3lame");
        EncodingAttributes attrs = new EncodingAttributes();
        attrs.setFormat("mp3");
        attrs.setAudioAttributes(audio);
        log.debug("正在转换微信语音amr");
        try {
            encoder.encode(source, target, attrs);
            log.debug("正在转换微信语音");
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
            log.debug(e.toString());
        } catch (InputFormatException e) {
            e.printStackTrace();
            log.debug(e.toString());
        } catch (EncoderException e) {
            e.printStackTrace();
            log.debug(e.toString());
        }
    }

    /**
     * linux执行此方法
     * 
     * @param localPath
     * @param targetFilePath
     */
    public static void amrToMP3Linux(String localPath, String targetFilePath){
        log.debug("执行命令开始");
        String command = "ffmpeg  -i "+localPath+" "+targetFilePath;
        log.debug("the command is : "+command);
        Runtime runtime = Runtime.getRuntime();
        try {
            Process proc = runtime.exec(command);
            InputStream stderr = proc.getErrorStream();
            InputStreamReader isr = new InputStreamReader(stderr);
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            StringBuffer sb = new StringBuffer();
            while ((line = br.readLine()) != null)
                sb.append(line);
            int exitVal = proc.waitFor();
            log.debug("the exitVal is : "+exitVal);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            log.debug("ffmpeg exec cmd Exception " + e.toString());
        }
        log.debug("执行命令结束");
        log.debug(runtime.toString());
    }

}

 

注意windows上可使用 changeToMp3 这个方法 但linux上此方法不行 必须执行 amrToMP3Linux 此方法

 四  在linux上安装ffmpeg

  下载站点:http://ffmpeg.org/download.html

 因为我的服务器是64位 所以下载解压这个

 

利用ftp将解压后的文件夹放到服务器上

 

 赋予权限  

   # chmod +x /usr/local/ffmpeg-4.0.2-64bit-static/ffmpeg

配置环境变量

  vi etc/profile

  export FFMPEG_HOME=/usr/local/ffmpeg-4.0.2-64bit-static/
  export PATH=$FFMPEG_HOME:$PATH

保存并退出 

  source etc/profile

 然后在服务器上执行上面的linux方法  看有没有文件生成,并且看能不能用

 

posted @ 2018-09-17 17:08  左手程序,右手诗  阅读(2479)  评论(0编辑  收藏  举报