java实现amr转mp3

        由于amr格式的语音,在前端页面一般不能直接播放,需要后台转换,下面实现amr格式的语音转mp3.

       下载jave-1.0.2.jar包,创建一个maven项目,在resources目录下创建一个lib目录,把jave-1.0.2.jar包拷贝到lib目录下,在pom.xml里面依赖jave-1.0.2.jar本地包,maven不能远程下载jave-1.0.2.jar包,需要本地引入,引入代码如下:

<dependency>
            <groupId>jack.jave</groupId>
            <artifactId>jave</artifactId>
            <version>1.0.2</version>
            <scope>system</scope>
            <systemPath>${basedir}/src/main/resources/lib/jave-1.0.2.jar</systemPath>
        </dependency>


groupId和artifactId可以随便填写。


下面是实现的java代码如下:

package com.qwrt.station.websocket.util;

import it.sauronsoftware.jave.*;

import java.io.File;

/**
 * Created by jack on 2017/11/8.
 *
 * http://blog.csdn.net/z313731418/article/details/50218341
 * http://blog.csdn.net/z313731418/article/details/50218341
 * mvn install:install-file -Dfile=D:\programing\apache-maven-3.5.0\jave-1.0.2.jar -DgroupId=jack.jave -DartifactId=jave -Dversion=1.0.2 -Dpackaging=jar
 *
 * http://blog.csdn.net/ricciozhang/article/details/49254605
 *
 *
 */
public class ChangeFormat {
    public static void main(String[] args) throws Exception {
        String path1 = "F:\\mystudy\\pic\\1510123295814.amr";
        String path2 = "F:\\mystudy\\pic\\jack.mp3";
        changeAmrToMp3(path1, path2);
    }

    public static void changeAmrToMp3(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);

        try {
            encoder.encode(source, target, attrs);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (InputFormatException e) {
            e.printStackTrace();
        } catch (EncoderException e) {
            e.printStackTrace();
        }
    }
}


如果出现不是win32程序的错误,查找:C:\Users\(计算机的用户名目录)\AppData\Local\Temp\jave-1 ,

删除jave-1文件夹即可,再次运行就好了,因为换了多个jave版本,导致的缓存吧。 


转换在linux环境下可能存在问题,可以查看网上的资料解决。

public static boolean amrtomp3(String localPath, String targetFilePath){
        try {

            System.out.println("**************  ffmpeg ****************");

            java.lang.Runtime rt = Runtime.getRuntime();
            System.out.println(System.getProperty("user.dir"));
            //System.out.println(Class.class.getClass().getResource("").getPath());
            System.out.println(ChangeFormat.class.getResource("").getPath());
            //String classUrl = ChangeFormat.class.getResource("").getPath();
            String command = "F:/mystudy/jave-1.0.2/it/sauronsoftware/jave/ffmpeg -i " + localPath + " " + targetFilePath;
            //String command = classUrl + "ffmpeg -i " + localPath + " " + targetFilePath;

            System.out.println("ffmpeg exec command = " + command);

            Process proc = rt.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);
            System.out.println("ffmpeg Process errorInfo: " + sb.toString());

            int exitVal = proc.waitFor();
            System.out.println("ffmpeg Process exitValue: " + exitVal);

            return true;
        } catch (Exception e) {
            System.out.println("ffmpeg exec cmd Exception " + e.toString());
        }
        return false;
    }




linux下实现amr格式转mp3,

主要java代码如下:

public static void amrToMP3Linux(String localPath, String targetFilePath){
        System.out.println("执行命令开始");
        String command = "ffmpeg  -i "+localPath+" "+targetFilePath;
        System.out.println("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();
            System.out.println("the exitVal is : "+exitVal);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            System.out.println("ffmpeg exec cmd Exception " + e.toString());
        }
        System.out.println("执行命令结束");
        System.out.println(runtime);
    }



有上面的代码还不行,还需下载ffmpeg,下载地址:http://download.csdn.net/download/wj903829182/10152294,然后解压到linux相应目录下,配置ffmpeg的环境变量,修改/etc/profile,

比如:

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


然后使用命令使配置文件生效:

source /etc/profile













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值