3

私はアンドロイドで働いています。2 つの wave ファイルをマージして、3 つ目のファイルを作成したいと考えています。このために、2 つの入力ストリームを作成し、それらの入力ストリームを 1 つの出力ストリーム ファイルに書き込もうとしています。

これは私のコードです:-

 File file = new File("/sdcard/z.wav");
        File file1 = new File("/sdcard/zz.wav");
        InputStream is = new FileInputStream(file);
        InputStream is1 = new FileInputStream(file1);

        // Get the size of the file
        long length = file.length();
        long length1 = file1.length();


        // Create the byte array to hold the data
        byte[] bytes = new byte[(int)length];
        byte[] bytes1 = new byte[(int)length1];

        // Read in the bytes
        int offset = 0;
        int numRead = 0;
        while (offset < (int)length &&( numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
            offset += numRead;
        }

        int offset1 = 0;
        int numRead1 = 0;
        while (offset1 < (int)length1 &&( numRead1=is1.read(bytes1, offset1, bytes1.length-offset1)) >= 0) {
            offset1 += numRead1;
        }





        FileOutputStream fos=new FileOutputStream("sdcard/guruu.wav");
        Log.v("Trying Activity","before first write");
        fos.write(bytes);

        fos.write(bytes1,0,bytes1.length);
        fos.write(bytes);
        fos.close();

        is.close();
        is1.close();

出力ファイル guruu.wav を再生すると、これはfile1の唯一の再生ファイルであり、file2 のコンテンツは再生されません。私が犯した間違いを教えてください。これを行う他の方法はありますか?

私はこれに非常に慣れていないので、反対票を投じないでください。

前もって感謝します。

4

1 に答える 1

0

データをマージしているのではなく、単に連結しているだけです。

したがって、次を含む1つのファイルになります。

  • ファイル 1 の WAV ファイル ヘッダー
  • ファイル 1 の音声データ
  • ファイル 2 の WAV ファイル ヘッダー
  • ファイル 2 の音声データ

当然のことながら、誰かがこのファイルを再生するために読み返すと、次のように表示されます。

  • WAV ファイルのヘッダー
  • 音声データ
  • ファイルの最後にあるガベージ データを考慮することさえできません。

これらのファイルを真にマージするには、WAV ファイルの内部構造を適切に考慮する必要があります。

于 2014-03-31T10:50:00.760 に答える