GraphicsApp API
Eine überarbeitete und angepasste Variante der originalen GraphicsApp-Umgebung
AudioClip.java
gehe zur Dokumentation dieser Datei
1package de.ur.mi.oop.audio;
2
3import javax.sound.sampled.*;
4import java.io.File;
5
6/**
7 * Die AudioClip-Klasse repräsentiert eine abspielbare Audiodatei. Die Klasse erlaubt die Wiedergabe von
8 * JAVA-kompatiblen Formaten (WAV oder AU).
9 */
10
11// TODO Implement AudioClipPool for parallel playback of individual sounds
12public class AudioClip implements LineListener {
13
14 private Clip clip;
15 private boolean isReady = false;
16
17 /**
18 * Erzeugt ein neues AudioClip-Objekt und initalisiert den Clip über das Java AudioSystem
19 *
20 * @param filePath Relativer oder absoluter Pfad zur abzuspielenden Audiodatei
21 */
22 public AudioClip(String filePath) {
23 this.clip = getClip(filePath);
24 if(this.clip != null) {
25 isReady = true;
26 this.clip.addLineListener(this);
27 }
28 }
29
30 private Clip getClip(String filePath) {
31 try {
32 Clip clip = AudioSystem.getClip();
33 AudioInputStream in = AudioSystem.getAudioInputStream(new File(filePath));
34 clip.open(in);
35 return clip;
36 } catch (Exception e) {
37 e.printStackTrace();
38 }
39 return null;
40 }
41
42 /**
43 * Startet die Wiedergabe (Nur möglich, wenn der Clip aktuell nicht wiedergegeben wird)
44 */
45 public void play() {
46 if(isReady) {
47 clip.start();
48 isReady = false;
49 }
50 }
51
52 /**
53 * Startet die Wiedergabe als Dauerschleife (Nur möglich, wenn der Clip aktuell nicht wiedergegeben wird)
54 */
55 public void loop() {
56 if(isReady) {
57 clip.loop(Clip.LOOP_CONTINUOUSLY);
58 isReady = false;
59 }
60 }
61
62 /**
63 * Stoppt die aktuelle Wiedergabe oder Wiedergabeschleife.
64 */
65 public void stop() {
66 clip.stop();
67 }
68
69 @Override
70 public void update(LineEvent lineEvent) {
71 // TODO Check if stop events are reliably retrieved on non-windows systems
72 if(lineEvent.getType() == LineEvent.Type.STOP) {
73 clip.setFramePosition(0);
74 isReady = true;
75 }
76 }
77}
AudioClip(String filePath)
Definition: AudioClip.java:22
void update(LineEvent lineEvent)
Definition: AudioClip.java:70