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
- 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
- Pobieramy informację o formacie pliku audio
AudioFormat format = audioInputStream.getFormat();
- Tworzymy obiekt DataLine.Info,
DataLine.Info info = new DataLine.Info(Clip.class, format);
- Tworzymy obiekt Clip, który umożliwi obsługę strumienia audio
Clip audioClip = (Clip) AudioSystem.getLine(info);
- Otwieramy strumień audio
audioClip.open(audioStream);
- Rozpoczęcie odtwarzania:
audioClip.start();
- Zatrzymanie odtwarzania:
audioClip.stop();
- 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.
- Definiujemy format audio źródła które będziemy rejestrować, używając klasy
AudioFormat
.
AudioFormat format = audioInputStream.getFormat();
- Tworzymy obiekt
DataLine.Info
,
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
- Uzyskujemy obiekt
TargetDataLine
, który pozwoli nam na pobieranie dźwięku z mikrofonu:
TargetDataLine line = (TargetDataLine) AudioSystem.getLine(info);
- Rozpoczynamy nagrywanie:
line.open(format); line.start();
- Tworzymy
AudioInputStream
by móc zapisywać dane:
AudioInputStream ais = new AudioInputStream(line);
- Zapisujemy dźwięk jako plik WAV używając metody
AudioSystem
:
AudioSystem.write(AudioInputStream, AudioFileFormat.Type, File)
- 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.
- 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: