簡體   English   中英

如何在 Java 中合並兩個 MP3 文件並在 Windows Media Player 中播放結果?

[英]How To Merge Two MP3 Files in Java and Play the result in Windows Media Player?

在下面的代碼中,合並了兩個 mp3 文件,但合並的音頻文件只能在 VLC 媒體播放器中播放,而不能在 Windows 媒體播放器中播放。

import java.io.*;
public class TwoFiles
{
    public static void main(String args[]) throws IOException
    {
        FileInputStream fistream1 = new FileInputStream("C:\\Temp\\1.mp3"); 
        FileInputStream fistream2 = new FileInputStream("C:\\Temp\\2.mp3");//second source file
        SequenceInputStream sistream = new SequenceInputStream(fistream1, fistream2);
        FileOutputStream fostream = new FileOutputStream("C:\\Temp\\final.mp3");
        int temp;
        while( ( temp = sistream.read() ) != -1)
        {
            fostream.write(temp);   // to write to file
        }
        fostream.close();
        sistream.close();
        fistream1.close();
        fistream2.close();
    }
}

值得檢查輸出文件是否是預期的長度,以便兩個文件實際上已經連接起來。 然而,許多媒體播放器不會接受這樣的 MP3 文件——有各種各樣的幀頭最終出現在錯誤的位置,更不用說 ID3 標簽等了。這是對像 VLC 和mplayer,他們實際上可以處理結構如此糟糕的 MP3 文件。

處理這種情況的“正確”方法是輸出實際的音頻數據,然后根據需要重新添加標簽等。 坦率地說,這是一種負擔,我發現一種快速而骯臟的方法是對連接的文件運行mp3val mp3val可以(通常)修復粗略加入兩個文件導致的錯誤,並且適用於許多平台。

使用 Java Zoom 庫將 MP3 文件轉換為 WAVE 文件,然后合並兩個 WAVE 文件,然后使用 jave-1.0.2.jar 將合並的 WAVE 文件轉換為 MP3 文件。

//將 Mp3 轉換為 Wavw

Converter myConverter = new Converter();
myConverter.convert("D://1476501067.2281665_0.mp3","D://1476501067.2281665_0.mp3"+".wav");

//合並兩個波形文件

 File sample1 = new File("F://StaticVoice.wav");
                                        File sample2 = new File("F://ChangeVoice");
                                           File fileOut = new File("F://MyTest.wav");//WAVEFiles

                                         AudioInputStream audio1 = AudioSystem.getAudioInputStream(sample1);
                                           AudioInputStream audio2 = AudioSystem.getAudioInputStream(sample2);

                                           AudioInputStream audioBuild = new AudioInputStream(new SequenceInputStream(audio1, audio2), audio1.getFormat(), audio1.getFrameLength() + audio2.getFrameLength());

                                           for(int i = 0; i < 5; i++){
                                               audioBuild = new AudioInputStream(new SequenceInputStream(audioBuild, audio2), audioBuild.getFormat(), audioBuild.getFrameLength() + audio2.getFrameLength());

                                           }

                                           AudioSystem.write(audioBuild, AudioFileFormat.Type.WAVE, fileOut);

//將 WAVE 文件轉換為 MP3

File source = new File("F://Merge.wav");
                             File target = new File("F://Merge.mp3"); 
                                 AudioAttributes audio = new AudioAttributes();
                                 audio.setCodec("libmp3lame");
                                 audio.setBitRate(new Integer(128000));
                                 audio.setChannels(new Integer(1));
                                 audio.setSamplingRate(new Integer(44100));
                                 EncodingAttributes attrs = new EncodingAttributes();
                                 attrs.setFormat("mp3");
                                 attrs.setAudioAttributes(audio);
                                 Encoder encoder = new Encoder();
                                 encoder.encode(source, target, attrs);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM