无音频头音频数组,转写成可播放音频文件

前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i

需求:将一段没有音频头的byte数组,转写成可播放的WAV文件

功能实现:

1.获取不包含音频头的音频数组

2.设置所需音频格式信息(.WAV)

2.设置文件存储路径,获取File对象

3.传入音频数组、音频格式、File对象参数生成文件

设置音频格式信息:AudioFormat 对象介绍:

对象可以包括属性的集合。属性是一个键值对:键属于 String 类型,相关属性值可为任意对象。属性指定其他格式规范,如压缩格式的比特率。属性主要用作传送往返于服务提供程序的其他音频格式信息的方法。

 1    /**
 2      * 音频数组生成WAV音频文件
 3      * @param byteAudio 无音频头音频数组
 4      */
 5     public void outAudioFile(byte[] byteAudio){
 6         //设置音频格式
 7         AudioFormat audioFormat = new AudioFormat(
 8                 AudioFormat.Encoding.PCM_SIGNED,//音频编码方式
 9                 8000,//音频采样率
10                 16,//音频采样位数
11                 1,//音频通道数
12                 2 * 2,//字节为单位的帧大小
13                 8000,//每秒为单位的帧速率
14                 false);
15         try {
16             //生成临时文件
17             File srcFile = File.createTempFile("E:\\audionfile" + System.currentTimeMillis(), ".wav");
18             //调用生成音频文件方法
19             encodeDstFile(srcFile, byteAudio, audioFormat);
20         }catch (IOException e){
21             log.debug("文件生成失败");
22         }
23 
24     }

将文件转写到磁盘:AudioSystem介绍:

AudioSystem 类充当取样音频系统资源的入口点。此类允许查询和访问安装在系统上的混频器。AudioSystem 包括许多在不同格式间转换音频数据的方法,以及在音频文件和流之间进行转换的方法。

 /**
     * .
     * 将文件转写到磁盘中
     *
     * @param dstFile  目标文件
     * @param pcmBytes 字符数组
     * @param format   文件格式
     * @throws IOException IO异常
     */
    public static void encodeDstFile(
            final File dstFile,
            final byte[] pcmBytes,
            final AudioFormat format)
            throws IOException {
        AudioInputStream audioInputStream = new AudioInputStream(
                new ByteArrayInputStream(pcmBytes),
                format,
                pcmBytes.length / format.getFrameSize());
        AudioSystem.write(audioInputStream, AudioFileFormat.Type.WAVE, dstFile);
    }

 效果展示:

 

 

本人亲测!!!按照步骤完成以上代码即可生成WAV音频文件,音频文件正常播放!

 

总语

我是南国以南i记录点滴每天成长一点点,学习是永无止境的!转载请附原文链接!!!

posted @ 2020-09-09 18:02  南国以南i  阅读(565)  评论(0编辑  收藏  举报