Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab11_Java_Vkazivky_2010_Mutimedia in Java_ Ima....doc
Скачиваний:
1
Добавлен:
17.04.2019
Размер:
863.23 Кб
Скачать

Import javax.Sound.Sampled.*;

Import java.Io.*;

class PlayAudio{

PlayAudio(String s){

play(s);

}

public void play(String file){

Clip line = null;

try{

// Створюємо обєкт, представляючий файл

File f = new File (file);

// Отримуємо інформацию про спосіб запису файла

AudioFileFormat aff = AudioSystem.getAudioFileFormat(f);

// Отримуємо інформацию про спосіб запису звуку

AudioFormat af = aff.getFormat();

// Збираємо всю інформацію вмісті, додаючи дані про клас

DataLine.Info info = new DataLine.Info(Clip.class, af) ;

// Перевіряємо, чи можна програвати такий формат

If (!AudioSystem.IsLineSupported(info)){

System.err.println("Line is not supported");

System.exit(0);

}

// Отримуємо лінію звязку з файлом

line = (Clip)AudioSystem.getLine(info);

// Створюємо потік байтів із файла

AudioInputStream ais = AudioSystem.getAudioInputStream(f);

// Відкриваємо лінію

line.open(ais);

}catch(Exception e){

System.err.println(e);

}

// Начинаємо програвання

line.start();

// Тут треба зробити затримку до закінчення програвання або зупинити його наступним //методом:

try{ // Затримка в 0.1 сек

Thread.sleep(60000);

}catch(InterruptedException e){ }

line.stop();

//По закінченні програвання закриваємо лінію

line.close();

}

public static void main(String[] args){

if (args.length != 1)

System.out.println("Usage: Java PlayAudio filename");

new PlayAudio(args[0]);

}

}

Як бачите, методи Java Sound API виконують елементарні дії, які треба повторяти із програми в программу. Як говорять, це методи "низького рівня" (low level). Другий спосіб, використовуючий методи інтерфейса 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.Info info = new DataLine.Info(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);

try{

Thread.sleep(1000);

}catch(InterruptedException e){}

// Починаємо програвання

int num = 0 ;

line.start(); // Чекаємо появи даних в буфері

// Раз за разом заповняємо буфер

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 = "bark.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).

Лістинг 15.17. Програвання MIDI-послідовності

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]