Java -практика использования

        

Проигрывание аудиофайла



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

import javax.sound.sampled.*; 

import j ava.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) ; 

}

Управлять проигрыванием файла можно с помощью событий. Событие класса LineEvent происходит при открытии, OPEN, и закрытии, CLOSE, потока, при начале, START, и окончании, STOP, проигрывания. Характер события отмечается указанными константами. Соответствующий интерфейс LineListener описывает только один метод update ().

В MIDI-файлах хранится последовательность (sequence) команд для секвен-сора (sequencer) — устройства для записи, проигрывания и редактирования MlDI-последовательности, которым может быть физическое устройство или программа. Последовательность состоит из нескольких дорожек (tracks), на которых записаны MIDI-события (events). Каждая дорожка загружается в своем канале (channel). Обычно дорожка содержит звучание одного музыкального инструмента или запись голоса одного исполнителя или запись нескольких исполнителей, микшированную синтезатором (synthesizer).

Для проигрывания MIDI-последовательности в простейшем случае надо создать экземпляр секвенсора, открыть его и направить в него последовательность, извлеченную из файла, как показано в листинге 15.17. После этого следует начать проигрывание методом start (). Закончить проигрывание можно методом stop(), "перемотать" последовательность на начало записи или на указанное время проигрывания — методами setMicrosecondPositionflong mcs) или setTickPosition(long tick).



Содержание раздела