無音頻頭音頻數組,轉寫成可播放音頻文件

前言:請各大網友尊重本人原創知識分享,謹記本人部落格:南國以南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記錄點滴每天成長一點點,學習是永無止境的!轉載請附原文鏈接!!!