前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南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记录点滴每天成长一点点,学习是永无止境的!转载请附原文链接!!!