Редактировать: Я использую WAV-файл
Я пытаюсь выяснить, как запустить аудио в определенной позиции (например: 10 секунд в аудиофайл, а не в начале).Прочитав документацию для SourceDataLine , я убедился, что это может быть достигнуто с помощью смещения во время:
line.write(byte[] b, int offset, int length)
, но каждый раз, когда япробовал любое значение, кроме 0 (по умолчанию, я считаю), я получаю java.lang.IndexOutOfBoundsException , который, возможно, еще не прочитал позицию байта x, поэтому не может записать позицию байта x?Я не уверен и ушел почесывая голову.
Я подумал, что это будет достаточно распространенным запросом, но не могу найти ничего онлайн, связанного с этим, только приостановка и возобновление звука.Вероятно, я не ищу должным образом.
В случае, если это имеет значение, вот как я сейчас делаю аудио:
AudioInputStream stream = AudioSystem.getAudioInputStream("...file...");
AudioFormat format = stream.getFormat();
SourceDataLine.Info info = new DataLine.Info(SourceDataLine.class, format,((int)stream.getFrameLength()*format.getFrameSize()));
SourceDataLine line = (SourceDataLine)AudioSystem.getLine(info);
int bufferSize = line.getBufferSize();
byte inBuffer[] = new byte[bufferSize];
byte outBuffer[] = new byte[bufferSize];
int numRead, numWritten;
do {
numRead = audioStream.read(inBuffer, 0, bufferSize);
if(numRead <= 0) {
myAudio.flushStream();
} else {
myAudio.writeBytesToStream(inBuffer, numRead);
}
do {
numWritten = myAudio.readBytesFromStream(outBuffer, bufferSize);
if(numWritten > 0) {
line.write(outBuffer, 0, numWritten);
}
} while(numWritten > 0);
} while(numRead > 0);