3

AudioInputStream特定のバイト数/マイクロ秒の位置まで読み取るにはどうすればよいですか?例えば ​​:

AudioInputStream ais = AudioSystem.getAudioInputStream( new File("file.wav") );
// let the file.wav be of y bytes

ここで、最大数バイトAudioInputStreamのデータを持つを取得したいと思います。xx < y

どうやってやるの ?

私は一生懸命考えてきましたが、それを行う方法がありませんか?

4

2 に答える 2

12

以下のコードは、オーディオ ストリームの一部をコピーし、あるファイルから読み取り、別のファイルに書き込む方法を示しています。

import java.io.*;
import javax.sound.sampled.*;

class AudioFileProcessor {

  public static void main(String[] args) {
    copyAudio("/tmp/uke.wav", "/tmp/uke-shortened.wav", 2, 1);
  }

  public static void copyAudio(String sourceFileName, String destinationFileName, int startSecond, int secondsToCopy) {
    AudioInputStream inputStream = null;
    AudioInputStream shortenedStream = null;
    try {
      File file = new File(sourceFileName);
      AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(file);
      AudioFormat format = fileFormat.getFormat();
      inputStream = AudioSystem.getAudioInputStream(file);
      int bytesPerSecond = format.getFrameSize() * (int)format.getFrameRate();
      inputStream.skip(startSecond * bytesPerSecond);
      long framesOfAudioToCopy = secondsToCopy * (int)format.getFrameRate();
      shortenedStream = new AudioInputStream(inputStream, format, framesOfAudioToCopy);
      File destinationFile = new File(destinationFileName);
      AudioSystem.write(shortenedStream, fileFormat.getType(), destinationFile);
    } catch (Exception e) {
      println(e);
    } finally {
      if (inputStream != null) try { inputStream.close(); } catch (Exception e) { println(e); }
      if (shortenedStream != null) try { shortenedStream.close(); } catch (Exception e) { println(e); }
    }
  }

  public static void println(Object o) {
    System.out.println(o);
  }

  public static void print(Object o) {
    System.out.print(o);
  }

}
于 2011-09-25T17:11:41.960 に答える
0

ストリームを取得したので、一度に 1 バイトずつ、 を使用して必要な ob バイトの最大数までread()読み取るか、 を使用して固定数のバイトを読み取ることができますread(byte[] b)

于 2011-09-25T14:50:01.417 に答える