2017-10-10 13 views
-1

以下のコードでは、2つのmp3ファイルがマージされますが、マージされたオーディオファイルはVLCメディアプレーヤーでのみ再生され、Windows Media Playerでは再生されません。2つのMP3ファイルをJavaでマージしてWindows Media Playerで再生する方法

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(); 
    } 
} 
+1

TO WAVEファイルの変換?マージされたファイルを私たちのマシンで試してみることができますか? MP3は圧縮された形式なので、VLCでファイルを再生できることに感心しています。これは、両方のファイルの内容を連結するだけです。ファイルのすべてのメタデータが壊れている可能性があります。 – Zabuza

+1

私はこの "合併"はMP3フォーマットが何であるかを考慮していないと思います。 –

+0

各MP3フレームは自己完結しているので、それは圧縮ではないので、それが問題です。実際に生のMP3データストリームを連結することができます。しかし、現在、ほとんどのMP3ファイルは可変ビットレートでエンコードされているため、ファイルの圧縮されていない長さを示すヘッダーを書き込むのが一般的になっています。このようなヘッダーが存在する場合、一部のプレーヤーはそれを尊重し、さらに多くのデータがあってもそれだけを再生します。ヘッダーがファイルサイズに大きな不一致がある場合は、何かを再生することを拒否する人もいます。 –

答えて

1

2つのファイルが実際に連結されるように、出力ファイルが予想される長さかどうかを確認することをお勧めします。しかし、多くのメディアプレイヤーは、このようなMP3ファイルを受け付けないでしょう - ID3タグはもちろんのこと、間違った場所にあるあらゆる種類のフレームヘッダーがあります。これはVLCのようなプレーヤーの頑強さと、彼らは実際には構造が貧弱なMP3ファイルを扱うことができます。

この状況を処理する「適切な」方法は、実際のオーディオデータをストリーミングして、必要に応じてタグなどを追加することです。これはクマであり、率直であり、私が非常にうまく動作することが判明した迅速かつ汚れたアプローチは、連結されたファイルに対してmp3valを実行することです。 mp3valは、2つのファイルを粗雑に結合することによって発生したエラーを(通常は)修復でき、多くのプラットフォームで使用できます。

+0

2つのmp3ファイルをマージする方法はありますか? –

+0

各ファイルからすべてのヘッダーとタグ情報を取り除き、2つのファイルを連結して、いくつかのヘッダーとタグを戻します。それは効果的に 'mp3val'がすることです。それはプログラミングの一般的な問題ですね。 - 誰かのコードを使うか、あなた自身で書く –

0

Javaズームライブラリを使用してMP3ファイルをWAVEファイルに変換してから、WAVEファイルと次にjave-1.0.2.jarを使用して結合します。WAVEファイルをMP3ファイルに変換します。

// Convrertエム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); 

// WMPのエラーメッセージは何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); 
関連する問題