语音amr文件转换为mp3文件

2024-06-20 06:18
文章标签 amr mp3 语音 转换

本文主要是介绍语音amr文件转换为mp3文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


1.安卓前端生成amr语音文件,经过base64加密变成加密字符串


2.把加密后的字符串解密成amr文件

生成amr文件目录
  String fileUrl = System.getProperty("user.dir").replace(
                            "bin", "webapps")
                            + File.separator
                            + "wfCloudRes"
                            + File.separator
                            + "image"
                            + File.separator
                            + dateStr
                            + File.separator + "topic" + File.separator + maxId;

public static String base64ToIo(String strBase64,String fileUrl) throws IOException {
        String string = strBase64;
        String fileName = fileUrl+File.separator+"audio.amr";
        String saveDir = fileUrl;
        File dir = new File(saveDir);
        if(!dir.exists()){
            dir.mkdirs();
        }
        try {
            // 解码,然后将字节转换为文件
            byte[] bytes = new BASE64Decoder().decodeBuffer(string); // 将字符串转换为byte数组
            
            FileOutputStream out = new FileOutputStream(fileName);
            out.write(bytes);
            out.close();
            
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }

        return fileName;
    }



3.amr文件转换为MP3文件

这个转化要使用第三方的jar包jave-1.0.2.jar

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



// mp3文件目录
                        String fileTargetUrl = System.getProperty("user.dir")
                                .replace("bin", "webapps")
                                + File.separator
                                + "wfCloudRes"
                                + File.separator
                                + "image"
                                + File.separator
                                + dateStr
                                + File.separator
                                + "topic"
                                + File.separator
                                + maxId
                                + File.separator + "audio.mp3";


public static void changeToMp3(String sourcePath, String targetPath) {
        File source = new File(sourcePath);
        File target = new File(targetPath);
        AudioAttributes audio = new AudioAttributes();
        audio.setCodec("libmp3lame");
//        audio.setBitRate(new Integer(64000));
//        audio.setChannels(new Integer(2));
//        audio.setSamplingRate(new Integer(22050));
        
        EncodingAttributes attrs = new EncodingAttributes();
        attrs.setFormat("mp3");
        attrs.setAudioAttributes(audio);
        
        try {
            Encoder encoder = new Encoder();
            encoder.encode(source, target, attrs);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (InputFormatException e) {
            e.printStackTrace();
        } catch (EncoderException e) {
            e.printStackTrace();
        }
    }

4.删除amr文件

FileUtils.deleteFile(fileUrl, "amr");


public static boolean deleteFile(String path, String suffixType) {
        boolean flag = false;
        if (StringUtils.isEmpty(path)) {
            return flag;
        }
        File file = new File(path);// 里面输入特定目录
        File temp = null;
        File[] filelist = file.listFiles();
        for (int i = 0; i < filelist.length; i++) {
            temp = filelist[i];

            if (temp.getName().endsWith(suffixType)) {// 获得文件名,如果后缀为“”,这个你自己写,就删除文件
                temp.delete();// 删除文件
                flag = true;
            }
        }
        return flag;
    }



Base64加密和解密工具类

mport java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;



public class Base64Utils {

    public static void main(String[] args) throws Exception {
        

//        String strBase64 = Base64Utils.ioToBase64("d:/bubugao.amr"); // 将 io 转换为 base64编码
//        System.out.println(">>> " + strBase64);
//        System.out.println(Base64Utils.base64ToIo(strBase64,"d:/bubugao.mp3")); // 将 base64编码转换为
                                                                // 文件流,生成一幅新图片
        
//        System.out.println(Base64Utils.encodeBase64File("d:/bubugao.amr"));
        
        
    }

    public static String ioToBase64(String path) throws IOException {
//        String fileName = "D:/u18.jpg"; // 源文件
        String source = path;
        String strBase64 = null;
        try {
            InputStream in = new FileInputStream(source);
            // in.available()返回文件的字节长度
            byte[] bytes = new byte[in.available()];
            // 将文件中的内容读入到数组中
            in.read(bytes);
            strBase64 = new BASE64Encoder().encode(bytes); // 将字节流数组转换为字符串
            in.close();
        } catch (FileNotFoundException fe) {
            fe.printStackTrace();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
        return strBase64;
    }

    public static String base64ToIo(String strBase64,String fileUrl) throws IOException {
        String string = strBase64;
        String fileName = fileUrl+File.separator+"audio.amr";
        String saveDir = fileUrl;
        File dir = new File(saveDir);
        if(!dir.exists()){
            dir.mkdirs();
        }
        try {
            // 解码,然后将字节转换为文件
            byte[] bytes = new BASE64Decoder().decodeBuffer(string); // 将字符串转换为byte数组
            
            FileOutputStream out = new FileOutputStream(fileName);
            out.write(bytes);
            out.close();
            
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }

        return fileName;
    }

}
文件转换类的代码如下:

import it.sauronsoftware.jave.AudioAttributes;
import it.sauronsoftware.jave.Encoder;
import it.sauronsoftware.jave.EncoderException;
import it.sauronsoftware.jave.EncodingAttributes;
import it.sauronsoftware.jave.InputFormatException;

import java.io.File;

public class Mp3Convert {

    public static void changeToMp3(String sourcePath, String targetPath) {
        File source = new File(sourcePath);
        File target = new File(targetPath);
        AudioAttributes audio = new AudioAttributes();
        audio.setCodec("libmp3lame");
//        audio.setBitRate(new Integer(64000));
//        audio.setChannels(new Integer(2));
//        audio.setSamplingRate(new Integer(22050));
        
        EncodingAttributes attrs = new EncodingAttributes();
        attrs.setFormat("mp3");
        attrs.setAudioAttributes(audio);
        
        try {
            Encoder encoder = new Encoder();
            encoder.encode(source, target, attrs);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (InputFormatException e) {
            e.printStackTrace();
        } catch (EncoderException e) {
            e.printStackTrace();
        }
    }

    
}



这篇关于语音amr文件转换为mp3文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1077336

相关文章

LangChain转换链:让数据处理更精准

1. 转换链的概念 在开发AI Agent(智能体)时,我们经常需要对输入数据进行预处理,这样可以更好地利用LLM。LangChain提供了一个强大的工具——转换链(TransformChain),它可以帮我们轻松实现这一任务。 转换链(TransformChain)主要是将 给定的数据 按照某个函数进行转换,再将 转换后的结果 输出给LLM。 所以转换链的核心是:根据业务逻辑编写合适的转换函

人工和AI大语言模型成本对比 ai语音模型

这里既有AI,又有生活大道理,无数渺小的思考填满了一生。 上一专题搭建了一套GMM-HMM系统,来识别连续0123456789的英文语音。 但若不是仅针对数字,而是所有普通词汇,可能达到十几万个词,解码过程将非常复杂,识别结果组合太多,识别结果不会理想。因此只有声学模型是完全不够的,需要引入语言模型来约束识别结果。让“今天天气很好”的概率高于“今天天汽很好”的概率,得到声学模型概率高,又符合表达

工程文档CAD转换必备!在 Java 中将 DWG 转换为 JPG

Aspose.CAD 是一个独立的类库,以加强Java应用程序处理和渲染CAD图纸,而不需要AutoCAD或任何其他渲染工作流程。该CAD类库允许将DWG, DWT, DWF, DWFX, IFC, PLT, DGN, OBJ, STL, IGES, CFF2文件、布局和图层高质量地转换为PDF和光栅图像格式。 Aspose API支持流行文件格式处理,并允许将各类文档导出或转换为固定布局文件格

直接得到Json串,转换为字典

0.新创建一个json文件,把json串拷贝到里面 1.先通过MainBundle找到资源对应的路径 2.将文件转换为NSData 3.通过NSJSonSerization得到字典 NSString*fileName=[[NSBundle mainBundle] pathForResource:@"myJson" ofType:@"json"];           NS

关于文章“python+百度语音识别+星火大模型+讯飞语音合成的语音助手”报错的修改

前言 关于我的文章:python+百度语音识别+星火大模型+讯飞语音合成的语音助手,运行不起来的问题 文章地址: https://blog.csdn.net/Phillip_xian/article/details/138195725?spm=1001.2014.3001.5501 1.报错问题 如果运行中报错,且报错位置在Xufi_Voice.py文件中的pcm_2_wav,如下图所示

如何通过示例将旧版 C# 转换为 C# 12

随着 C# 的不断发展,每个新版本都会引入强大的新功能,从而提高语言的功能和可读性。通过从旧版本的 C# 迁移到 C# 12,您可以获得更高效、更易于维护和更具表现力的代码。 由于代码库遗留、公司限制以及对旧语言功能的熟悉,许多开发人员仍在使用旧版本的 C#。升级似乎很困难,但现代版本的 C# 具有显著的优势,例如更好的性能、增强的功能和更高的安全性。 通过增量重构、试点项目和团队培训逐步

将知乎专栏文章转换为 Markdown 文件保存到本地

一、参考内容 参考知乎文章`代码 | 将知乎专栏文章转换为 Markdown 文件保存到本地,利用代码为GitHub:https://github.com/chenluda/zhihu-download。 二、步骤 1.首先安装包flask、flask-cors、markdownify 2. 运行app.py 3.在浏览器中打开链接,并填写URL和Cookies 获取Cookies的步

Linux float int和16进制互相转换

Linux 上float int和16进制互换操作。之前把float转16进制,也就是转成4个字节,方便使用串口传输嘛。使用的方法是: //float 转 16进制float x_pid_p = 15.0;unsigned char * bValue = (unsigned char *)& x_pid_p;printf("%x\t%x\t%x\t%x\n", bValue[0], bVa

Day59 代码随想录打卡|二叉树篇---把二叉搜索树转换为累加树

题目(leecode T538): 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下,二叉搜索树满足下列约束条件: 节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。 方法:本题

金蝶KIS新建账套时 从字符串向DateTime转换时失败 从字符串转换为Datetime类型时发生语法错误

需要修改以下几点 控制面板---区域和语言选项---区域选项---自定义,修改为如下格式