Multimedia

Podstawy obsługi multimediów w Javie

 

Przykłady do zadań (projekt Eclipse do zaimportowania): JavaSoundAPI.zip

 

Obsługa dźwięku w Javie - Java Sound API

Java zapewnia podstawową obsługę dźwięku (zwykle w formacie .wav) poprzez Java Sound API: https://docs.oracle.com/javase/tutorial/sound/sampled-overview.html

Przykład możliwości Java Sound API: Java Sound Demo, http://www.oracle.com/technetwork/java/index-139508.html

Przykłady implementacji obsług dźwięku w Java Sound API: http://www.codejava.net/coding/how-to-play-back-audio-in-java-with-examples

 

Odtwarzanie dźwięku

  1. Tworzymy strumień audio AudioInputStream powiązany z plikiem dźwiękowym
File audioFile = new File(fullAudiFilePath);

AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(audioFile);

gdzie  fullAudiFilePath – ścieżka do pliku dźwiękowego

  1. Pobieramy informację o formacie pliku audio
AudioFormat format = audioInputStream.getFormat();
  1. Tworzymy obiekt DataLine.Info,
DataLine.Info info = new DataLine.Info(Clip.class, format);
  1. Tworzymy obiekt Clip, który umożliwi obsługę strumienia audio
Clip audioClip = (Clip) AudioSystem.getLine(info);
  1. Otwieramy strumień audio
audioClip.open(audioStream);
  1. Rozpoczęcie odtwarzania:
audioClip.start();
  1. Zatrzymanie odtwarzania:
audioClip.stop();
  1. Zamknięcie strumienia audio:
audioClip.close();

audioStream.close();

 

Zadanie 1 (2 pkt) - Odtwarzanie dźwięku w Javie

Proszę zmodyfikować program ExampleAudioPlayer  z  javapw.sound.zad1 tak, aby;

a) użytkownik miał możliwość wybrania pliku audio do odtwarzania korzystając z JFileChooser- 1 pkt
b) aplikacja miała przyciski, które pozwolą na rozpoczęcie (lub wznowienie) i wstrzymanie odtwarzania pliku audio - 1 pkt

 

Rejestracja dźwięku

Przy użyciu Java Sound API łatwo jest wyłapać dźwięk pochodzący z mikrofonu komputera a następnie zapisać go jako plik WAV. 

  1. Definiujemy format audio źródła które będziemy rejestrować, używając klasy AudioFormat
AudioFormat format = audioInputStream.getFormat();
  1. Tworzymy obiekt DataLine.Info,
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
  1. Uzyskujemy obiekt TargetDataLine , który pozwoli nam na pobieranie dźwięku z mikrofonu:
TargetDataLine line = (TargetDataLine) AudioSystem.getLine(info);
  1.  Rozpoczynamy nagrywanie:
line.open(format);  line.start();
  1. Tworzymy AudioInputStream by móc zapisywać dane:
 AudioInputStream ais = new AudioInputStream(line);
  1.  Zapisujemy dźwięk jako plik WAV używając metody AudioSystem:
AudioSystem.write(AudioInputStream, AudioFileFormat.Type, File)
  1. Zamknięcie strumienia audio:
line.stop();

line.close();

Zadanie 2 (1.5 pkt) - Zapis dźwięku w Javie

Proszę zmodyfikować program ExampleSoundRecorder  z  javapw.sound.zad2 tak, aby;

a) aplikacja miała przycisk START który umożliwi rozpoczęcie nagrywania  oraz slider, który umożliwi ustalenie czasu nagrywania - 1.5 pkt

 

Generacja dźwięku

Przy użyciu Java Sound API  można również programowo wygenerować dźwięk.

  1. Minimalistyczny kod generujący dźwięk w postaci fali sinusoidalnej o częstotliwości 440 Hz:
byte[] buf = new byte[ 1 ];
AudioFormat audioFormat = new AudioFormat( (float)44100, 8, 1, true, false );
SourceDataLine sdl = AudioSystem.getSourceDataLine( audioFormat );
sdl.open();
sdl.start();
for( int i = 0; i < 1000 * (float )44100 / 1000; i++ ) {
    double angle = i / ( (float )44100 / 440 ) * 2.0 * Math.PI;
    buf[ 0 ] = (byte )( Math.sin( angle ) * 100 );
    sdl.write( buf, 0, 1 );
}
sdl.drain();
sdl.stop();

Zadanie 3 (1.5 pkt) - Generacja fal dźwiękowych w Javie

Proszę zmodyfikować program SoundWaveGeneration  z  javapw.sound.zad3 tak, aby;

a) program umożliwiał określenie długości trwania dźwięku oraz częstotliwości generowanej fali dźwiękowej  - 1.5 pkt

 

Więcej informacji o generowaniu fal dźwiękowych: