Иллюстрированный самоучитель по Java

Проигрывание звука в Java 2

Второй способ, использующий методы интерфейса SourceDataLine, требует предварительного создания буфера произвольного размера.

Листинг 15.16. Проигрывание аудиофайла.

import javax.sound.sampled.*;
import java.io.*;
class PlayAudioLine(
PlayAudioLine(String s){
play(s);
}
public void play(String file){
SourceDataLine line = null;
AudioInputStream ais = null;
byte[] b = new byte[2048]; // Буфер данных
try{
File f = new File(file);
// Создаем входной поток байтов из файла f
ais = AudioSystem.getAudioInputStream(f);
// Извлекаем из потока информацию о способе записи звука
AudioFormat af = ais.getFormat ();
// Заносим эту информацию в объект info
DataLine.Infо info = new DataLine.Infо(SourceDataLine.class, af);
// Проверяем, приемлем ли такой способ записи звука
if (!AudioSystem.isLineSupported(info)){
System.err.println("Line is not supported");
System.exit(0);
}
// Получаем входную линию
line = (SourceDataLine)AudioSystem.getLine(info);
// Открываем линию
line.open(af);
// Начинаем проигрывание
line.start(); // Ждем появления данных в буфере int num = 0;
// Раз за разом заполняем буфер
while((num = ais.read(b))!= -1)
line.write(b, 0, num);
// "Сливаем" буфер, проигрывая остаток файла
line.drain();
// Закрываем поток
ais.close();
} catch (Exception e) {
System, err.println (e);
}
// Останавливаем проигрывание
line.stop();
// Закрываем линию
line.close();
}
public static void main(String[] args){
String s = "mrmba.aif";
if (args.length > 0) s = args[0];
new PlayAudioLine(s);
}
}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.