1

オーディオをオーディオストリームに変換してから、Java を使用してオーディオに戻そうとしています。wav ファイルをバイト配列に読み込むと、約 30000 バイトが表示されますが、新しいファイルに書き込むと、44 バイトしか書き込まれません。どこが間違っているのか教えてください。コード スニペットは次のとおりです。

    File src = new File("C:\\test.wav");
    AudioInputStream ais = AudioSystem.getAudioInputStream(src);  
    byte[] data = new byte[ais.available()];
    int x = ais.read(data);

    int n = AudioSystem.write(ais, AudioFileFormat.Type.WAVE, new File("C:\\test2.wav"));
    System.out.println("x="+x+"  n="+n);

n の出力は 44 です。

4

1 に答える 1

0

問題は、AudioInputStreamの内容全体をバイト配列に読み込んだことだと思います。これは、AudioInputStreamインスタンスをAudioSystem.write()メソッドに渡すと、すでにファイルの最後にあることを意味します。(書き込み中の44バイトは、おそらく単なるヘッダー情報などです。)

診断する簡単な方法は、ais.read(data)の呼び出しをコメントアウトして、ファイルの書き込みが正しく開始されるかどうかを確認することです。

考えられる解決策は、AudioInputStreamのmark()メソッドとreset()メソッドを使用して、ファイルをバイト配列に読み込んだ後、ファイルの先頭に戻ることです。

于 2013-03-06T01:20:48.510 に答える