2009-03-17 14 views

答えて

32

は必要最小限のコードです:2つのWAVファイルは波ヘッダーの正確な同じフォーマットを持っていない場合

import java.io.File; 
import java.io.IOException; 
import java.io.SequenceInputStream; 
import javax.sound.sampled.AudioFileFormat; 
import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 

public class WavAppender { 
    public static void main(String[] args) { 
     String wavFile1 = "D:\\wav1.wav"; 
     String wavFile2 = "D:\\wav2.wav"; 

     try { 
      AudioInputStream clip1 = AudioSystem.getAudioInputStream(new File(wavFile1)); 
      AudioInputStream clip2 = AudioSystem.getAudioInputStream(new File(wavFile2)); 

      AudioInputStream appendedFiles = 
          new AudioInputStream(
           new SequenceInputStream(clip1, clip2),  
           clip1.getFormat(), 
           clip1.getFrameLength() + clip2.getFrameLength()); 

      AudioSystem.write(appendedFiles, 
          AudioFileFormat.Type.WAVE, 
          new File("D:\\wavAppended.wav")); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

ありがとう!簡単な方法が必要でした。 – krosenvold

+1

これはもはや機能しません。アンドロイドはjavax.sound.sampled。*パッケージをサポートしていません。彼らの他の方法はそれを行うのですか? –

+18

親愛なるアレックスの質問は、Javaの場合Android用ではない – dhams

4

WAVヘッダを解析するにはあまりにも難しいこと、そうでない場合する必要があります私はthis header descriptionを正しく読んで、2番目のWAVから最初の44バイトを取り除くだけで、最初のバイトに単純にバイトを追加することができます。その後、最初のWAVのヘッダーフィールドのいくつかを変更して、正しい長さにする必要があります。

+1

同じビットレート、サンプルレート、および同じチャンネル数を持つと仮定します。 – dreamlax

+0

もちろん、クロセンボルトはそう言っていました。 – schnaader

+0

私は本当にこれを自分で行う必要がありますか?より単純なソリューションが必要ですか? – krosenvold

4

「コードサンプル&アプリ」リンクherethis(AudioConcat)が見つかりました。ここで

1

あなたの挑戦にもかかわらず発生します。

2つのファイルの波形が同じでない場合は、一致するようにそれらを変形させる方法を見つけなければなりません。

MP3トランスコードやその他の種類のトランスコード(MP3コーデックでエンコードされている場合)が含まれる場合があります。

+0

これを考慮する必要がないのは幸いです。 – krosenvold

関連する問題