- * Farben bestehen entweder aus einem Grauwert (zwischen 0 und
- * 255) oder einem Rot-, Grün- und Blauanteil (jeweils zwischen
- * 0 und 255).
+ * Farben bestehen entweder aus einem Grauwert (zwischen 0 und
+ * 255) oder einem Rot-, Grün- und Blauanteil (jeweils zwischen
+ * 0 und 255).
*
- * Eine Farbe hat außerdem einen Transparenzwert zwischen 0
- * (unsichtbar) und 255 (deckend).
+ * Eine Farbe hat außerdem einen Transparenzwert zwischen 0
+ * (unsichtbar) und 255 (deckend).
*/
public class Color {
@@ -106,7 +106,7 @@ public class Color {
/**
* Erstellt eine graue Farbe entsprechend des Grauwertes gray.
*
- * @param gray Ein Grauwert zwischen 0 und 255.
+ * @param gray Ein Grauwert zwischen 0 und 255.
*/
public Color( int gray ) {
this(gray, gray, gray, 255);
@@ -116,7 +116,7 @@ public class Color {
* Erstellt eine graue Farbe entsprechend des Grauwertes gray und
* des Transparentwertes alpha.
*
- * @param gray Ein Grauwert zwischen 0 und 255.
+ * @param gray Ein Grauwert zwischen 0 und 255.
*/
public Color( int gray, int alpha ) {
this(gray, gray, gray, alpha);
@@ -125,12 +125,11 @@ public class Color {
/**
* Erstellt eine Farbe. Die Parameter red, green und
* blue geben die Rot-, Grün- und Blauanteile der Farbe. Die Werte
- * liegen zwischen 0 und 255.
+ * liegen zwischen 0 und 255.
*
- * @param red Rotwert zwischen 0 und 255.
- * @param green Grünwert zwischen 0 und 255.
- * @param blue Blauwert zwischen 0 und 255.
- * @return Ein passendes Farbobjekt.
+ * @param red Rotwert zwischen 0 und 255.
+ * @param green Grünwert zwischen 0 und 255.
+ * @param blue Blauwert zwischen 0 und 255.
*/
public Color( int red, int green, int blue ) {
this(red, green, blue, 255);
@@ -139,17 +138,16 @@ public class Color {
/**
* Erstellt eine Farbe. Die Parameter red, green und
* blue geben die Rot-, Grün- und Blauanteile der Farbe. Die Werte
- * liegen zwischen 0 und 255.
+ * liegen zwischen 0 und 255.
* alpha gibt den den Transparentwert an (auch zwischen
- * code>0 und 255), wobei
- * 0 komplett durchsichtig ist und 255 komplett
+ * 0 und 255), wobei
+ * 0 komplett durchsichtig ist und 255 komplett
* deckend.
*
- * @param red Rotwert zwischen 0 und 255.
- * @param green Grünwert zwischen 0 und 255.
- * @param blue Blauwert zwischen 0 und 255.
- * @param alpha Transparentwert zwischen 0 und 255.
- * @return Ein passendes Farbobjekt.
+ * @param red Rotwert zwischen 0 und 255.
+ * @param green Grünwert zwischen 0 und 255.
+ * @param blue Blauwert zwischen 0 und 255.
+ * @param alpha Transparentwert zwischen 0 und 255.
*/
public Color( int red, int green, int blue, int alpha ) {
rgba = (alpha << 24) | (red << 16) | (green << 8) | blue;
@@ -239,7 +237,7 @@ public class Color {
/**
* Erzeugt eine Farbe aus einem hexadezimalen Code. Der Hexcode kann
* sechs- oder achtstellig sein (wenn ein Transparentwert vorhanden ist).
- * Dem Code kann ein # Zeichen vorangestellt sein.
+ * Dem Code kann ein {@code #} Zeichen vorangestellt sein.
*
* @param hexcode
* @return
diff --git a/src/schule/ngb/zm/ColorLayer.java b/src/main/java/schule/ngb/zm/ColorLayer.java
similarity index 100%
rename from src/schule/ngb/zm/ColorLayer.java
rename to src/main/java/schule/ngb/zm/ColorLayer.java
diff --git a/src/schule/ngb/zm/Constants.java b/src/main/java/schule/ngb/zm/Constants.java
similarity index 93%
rename from src/schule/ngb/zm/Constants.java
rename to src/main/java/schule/ngb/zm/Constants.java
index bde0492..561b3aa 100644
--- a/src/schule/ngb/zm/Constants.java
+++ b/src/main/java/schule/ngb/zm/Constants.java
@@ -387,10 +387,10 @@ public class Constants {
/**
* Erstellt eine graue Farbe. Der Parameter {@code gray} gibt einen Grauwert
- * zwischen 0 und 255 an, wobei
- * 0 schwarz und 255 weiß ist.
+ * zwischen 0 und 255 an, wobei
+ * 0 schwarz und 255 weiß ist.
*
- * @param gray Grauwert zwischen 0 und 255.
+ * @param gray Grauwert zwischen 0 und 255.
* @return Ein passendes Farbobjekt.
*/
public static final Color color( int gray ) {
@@ -399,16 +399,16 @@ public class Constants {
/**
* Erstellt eine graue Farbe. Der Parameter {@code gray} gibt einen Grauwert
- * zwischen 0 und 255 an, wobei
- * 0 schwarz und 255 weiß ist.
+ * zwischen 0 und 255 an, wobei
+ * 0 schwarz und 255 weiß ist.
* {@code alpha} gibt den den Transparentwert an (auch zwischen
- * 0 und 255), wobei
- * 0 komplett durchsichtig ist und 255 komplett
+ * 0 und 255), wobei
+ * 0 komplett durchsichtig ist und 255 komplett
* deckend.
*
- * @param gray Grauwert zwischen 0 und 255.
- * @param alpha Transparentwert zwischen 0 und
- * 255.
+ * @param gray Grauwert zwischen 0 und 255.
+ * @param alpha Transparentwert zwischen 0 und
+ * 255.
* @return Ein passendes Farbobjekt.
*/
public static final Color color( int gray, int alpha ) {
@@ -418,11 +418,11 @@ public class Constants {
/**
* Erstellt eine Farbe. Die Parameter {@code red}, {@code green} und
* {@code blue} geben die Rot-, Grün- und Blauanteile der Farbe. Die Werte
- * liegen zwischen 0 und 255.
+ * liegen zwischen 0 und 255.
*
- * @param red Rotwert zwischen 0 und 255.
- * @param green Grünwert zwischen 0 und 255.
- * @param blue Blauwert zwischen 0 und 255.
+ * @param red Rotwert zwischen 0 und 255.
+ * @param green Grünwert zwischen 0 und 255.
+ * @param blue Blauwert zwischen 0 und 255.
* @return Ein passendes Farbobjekt.
*/
public static final Color color( int red, int green, int blue ) {
@@ -432,17 +432,17 @@ public class Constants {
/**
* Erstellt eine Farbe. Die Parameter {@code red}, {@code green} und
* {@code blue} geben die Rot-, Grün- und Blauanteile der Farbe. Die Werte
- * liegen zwischen 0 und 255. {@code alpha} gibt
- * den den Transparentwert an (auch zwischen code>0 und
- * 255), wobei
- * 0 komplett durchsichtig ist und 255 komplett
+ * liegen zwischen 0 und 255. {@code alpha} gibt
+ * den den Transparentwert an (auch zwischen 0 und
+ * 255), wobei
+ * 0 komplett durchsichtig ist und 255 komplett
* deckend.
*
- * @param red Rotwert zwischen 0 und 255.
- * @param green Grünwert zwischen 0 und 255.
- * @param blue Blauwert zwischen 0 und 255.
- * @param alpha Transparenzwert zwischen 0 und
- * 255.
+ * @param red Rotwert zwischen 0 und 255.
+ * @param green Grünwert zwischen 0 und 255.
+ * @param blue Blauwert zwischen 0 und 255.
+ * @param alpha Transparenzwert zwischen 0 und
+ * 255.
* @return Ein passendes Farbobjekt.
*/
public static final Color color( int red, int green, int blue, int alpha ) {
@@ -589,7 +589,7 @@ public class Constants {
* Ermittelt das Vorzeichen der Zahl {@code x}.
*
* @param x Eine Zahl.
- * @return -1, 1 oder 0.
+ * @return -1, 1 oder 0.
*/
public static final double sign( double x ) {
return Math.signum(x);
@@ -670,7 +670,7 @@ public class Constants {
* Ermittelt den Sinus der Zahl {@code x}.
*
* @param x Eine Zahl.
- * @return sin(x).
+ * @return {@code sin(x)}.
*/
public static final double sin( double x ) {
return Math.sin(x);
@@ -680,7 +680,7 @@ public class Constants {
* Ermittelt den Kosinus der Zahl {@code x}.
*
* @param x Eine Zahl.
- * @return cos(x).
+ * @return {@code cos(x)}.
*/
public static final double cos( double x ) {
return Math.cos(x);
@@ -690,7 +690,7 @@ public class Constants {
* Ermittelt den Tangens der Zahl {@code x}.
*
* @param x Eine Zahl.
- * @return tan(x).
+ * @return {@code tan(x)}.
*/
public static final double tan( double x ) {
return Math.tan(x);
@@ -700,7 +700,7 @@ public class Constants {
* Ermittelt den Arkussinus der Zahl {@code x}.
*
* @param x Eine Zahl.
- * @return asin(x).
+ * @return {@code asin(x)}.
*/
public static final double arcsin( double x ) {
return Math.asin(x);
@@ -710,7 +710,7 @@ public class Constants {
* Ermittelt den Arkuskosinus der Zahl {@code x}.
*
* @param x Eine Zahl.
- * @return acos(x).
+ * @return {@code acos(x)}.
*/
public static final double arccos( double x ) {
return Math.acos(x);
@@ -720,20 +720,20 @@ public class Constants {
* Ermittelt den Arkusktangens der Zahl {@code x}.
*
* @param x Eine Zahl.
- * @return atan(x).
+ * @return {@code atan(x)}.
*/
public static final double arctan( double x ) {
return Math.atan(x);
}
/**
- * Beschränkt die Zahl {@code x} auf das Intervall [min, max].
+ * Beschränkt die Zahl {@code x} auf das Intervall {@code [min, max]}.
* Liegt {@code x} außerhalb des Intervalls, wird eine der Grenzen
* zurückgegeben.
*
* @param x Eine Zahl.
* @param max Das Maximum des Intervalls.
- * @return Eine Zahl im Intervall [min, max].
+ * @return Eine Zahl im Intervall {@code [min, max]}.
*/
public static final double limit( double x, double min, double max ) {
if( x > max ) {
@@ -746,13 +746,13 @@ public class Constants {
}
/**
- * Beschränkt die Zahl {@code x} auf das Intervall [min, max].
+ * Beschränkt die Zahl {@code x} auf das Intervall {@code [min, max]}.
* Liegt {@code x} außerhalb des Intervalls, wird eine der Grenzen
* zurückgegeben.
*
* @param x Eine Zahl.
* @param max Das Maximum des Intervalls.
- * @return Eine Zahl im Intervall [min, max].
+ * @return Eine Zahl im Intervall {@code [min, max]}.
*/
public static final int limit( int x, int min, int max ) {
if( x > max ) {
@@ -774,7 +774,7 @@ public class Constants {
*
* @param from Startwert
* @param to Zielwert
- * @param t Wert zwischen 0 und 1.
+ * @param t Wert zwischen 0 und 1.
* @return Das Ergebnis der linearen Interpolation.
*/
public static final double interpolate( double from, double to, double t ) {
@@ -885,8 +885,8 @@ public class Constants {
* Erzeugt einen zufälligen Wahrheitswert. {@code true} wird mit der
* Wahrscheinlichkeit {@code percent} Prozent erzeugt.
*
- * @param percent Eine Prozentzahl zwischen 0 und
- * 100.
+ * @param percent Eine Prozentzahl zwischen 0 und
+ * 100.
* @return Ein Wahrheitswert.
*/
public static final boolean randomBool( int percent ) {
diff --git a/src/schule/ngb/zm/Drawable.java b/src/main/java/schule/ngb/zm/Drawable.java
similarity index 92%
rename from src/schule/ngb/zm/Drawable.java
rename to src/main/java/schule/ngb/zm/Drawable.java
index 3511f73..0b93f88 100644
--- a/src/schule/ngb/zm/Drawable.java
+++ b/src/main/java/schule/ngb/zm/Drawable.java
@@ -12,7 +12,7 @@ public interface Drawable {
* Gibt an, ob das Objekt derzeit sichtbar ist (also gezeichnet werden
* muss).
*
- * @return true, wenn das Objekt sichtbar ist.
+ * @return {@code true}, wenn das Objekt sichtbar ist.
*/
boolean isVisible();
diff --git a/src/schule/ngb/zm/DrawableLayer.java b/src/main/java/schule/ngb/zm/DrawableLayer.java
similarity index 100%
rename from src/schule/ngb/zm/DrawableLayer.java
rename to src/main/java/schule/ngb/zm/DrawableLayer.java
diff --git a/src/schule/ngb/zm/DrawingLayer.java b/src/main/java/schule/ngb/zm/DrawingLayer.java
similarity index 100%
rename from src/schule/ngb/zm/DrawingLayer.java
rename to src/main/java/schule/ngb/zm/DrawingLayer.java
diff --git a/src/schule/ngb/zm/GraphicsLayer.java b/src/main/java/schule/ngb/zm/GraphicsLayer.java
similarity index 100%
rename from src/schule/ngb/zm/GraphicsLayer.java
rename to src/main/java/schule/ngb/zm/GraphicsLayer.java
diff --git a/src/schule/ngb/zm/ImageLayer.java b/src/main/java/schule/ngb/zm/ImageLayer.java
similarity index 100%
rename from src/schule/ngb/zm/ImageLayer.java
rename to src/main/java/schule/ngb/zm/ImageLayer.java
diff --git a/src/schule/ngb/zm/Layer.java b/src/main/java/schule/ngb/zm/Layer.java
similarity index 100%
rename from src/schule/ngb/zm/Layer.java
rename to src/main/java/schule/ngb/zm/Layer.java
diff --git a/src/schule/ngb/zm/Options.java b/src/main/java/schule/ngb/zm/Options.java
similarity index 100%
rename from src/schule/ngb/zm/Options.java
rename to src/main/java/schule/ngb/zm/Options.java
diff --git a/src/schule/ngb/zm/Shape2DLayer.java b/src/main/java/schule/ngb/zm/Shape2DLayer.java
similarity index 100%
rename from src/schule/ngb/zm/Shape2DLayer.java
rename to src/main/java/schule/ngb/zm/Shape2DLayer.java
diff --git a/src/schule/ngb/zm/Spielemaschine.java b/src/main/java/schule/ngb/zm/Spielemaschine.java
similarity index 100%
rename from src/schule/ngb/zm/Spielemaschine.java
rename to src/main/java/schule/ngb/zm/Spielemaschine.java
diff --git a/src/schule/ngb/zm/Updatable.java b/src/main/java/schule/ngb/zm/Updatable.java
similarity index 91%
rename from src/schule/ngb/zm/Updatable.java
rename to src/main/java/schule/ngb/zm/Updatable.java
index 0a60447..0998e1c 100644
--- a/src/schule/ngb/zm/Updatable.java
+++ b/src/main/java/schule/ngb/zm/Updatable.java
@@ -9,7 +9,7 @@ public interface Updatable {
/**
* Gibt an, ob das Objekt gerade auf Aktualisierungen reagiert.
- * @return true, wenn das Objekt aktiv ist.
+ * @return {@code true}, wenn das Objekt aktiv ist.
*/
public boolean isActive();
diff --git a/src/schule/ngb/zm/Vector.java b/src/main/java/schule/ngb/zm/Vector.java
similarity index 100%
rename from src/schule/ngb/zm/Vector.java
rename to src/main/java/schule/ngb/zm/Vector.java
diff --git a/src/schule/ngb/zm/Zeichenfenster.java b/src/main/java/schule/ngb/zm/Zeichenfenster.java
similarity index 100%
rename from src/schule/ngb/zm/Zeichenfenster.java
rename to src/main/java/schule/ngb/zm/Zeichenfenster.java
diff --git a/src/schule/ngb/zm/Zeichenleinwand.java b/src/main/java/schule/ngb/zm/Zeichenleinwand.java
similarity index 95%
rename from src/schule/ngb/zm/Zeichenleinwand.java
rename to src/main/java/schule/ngb/zm/Zeichenleinwand.java
index 73b9bae..232b688 100644
--- a/src/schule/ngb/zm/Zeichenleinwand.java
+++ b/src/main/java/schule/ngb/zm/Zeichenleinwand.java
@@ -90,7 +90,7 @@ public class Zeichenleinwand extends Canvas {
* als letzte eingefügt. Die aufrufende Methode kann also nicht sicher sein,
* dass die neue Ebene am Ende wirklich am Index {@code i} steht.
*
- * @param i Index der Ebene, beginnend mit 0.
+ * @param i Index der Ebene, beginnend mit 0.
* @param layer Die neue Ebene.
*/
public void addLayer( int i, Layer layer ) {
@@ -125,10 +125,10 @@ public class Zeichenleinwand extends Canvas {
}
/**
- * Holt die Ebene am Index i (beginnend bei 0).
+ * Holt die Ebene am Index i (beginnend bei 0).
*
- * @param i Index der Ebene (beginnend bei 0).
- * @return Die Ebene am Index i oder null.
+ * @param i Index der Ebene (beginnend bei 0).
+ * @return Die Ebene am Index i oder {@code null}.
* @throws IndexOutOfBoundsException Falls der Index nicht existiert.
*/
public Layer getLayer( int i ) {
@@ -141,7 +141,7 @@ public class Zeichenleinwand extends Canvas {
/**
* Sucht die erste Ebene des angegebenen Typs aus der Liste der Ebenen.
- * Existiert keine solche Ebene, wird null zurückgegeben.
+ * Existiert keine solche Ebene, wird {@code null} zurückgegeben.
*
* @param clazz Typ der Ebene.
* @param
diff --git a/src/schule/ngb/zm/Zeichenmaschine.java b/src/main/java/schule/ngb/zm/Zeichenmaschine.java
similarity index 99%
rename from src/schule/ngb/zm/Zeichenmaschine.java
rename to src/main/java/schule/ngb/zm/Zeichenmaschine.java
index 151de10..f5849cb 100644
--- a/src/schule/ngb/zm/Zeichenmaschine.java
+++ b/src/main/java/schule/ngb/zm/Zeichenmaschine.java
@@ -531,6 +531,7 @@ public class Zeichenmaschine extends Constants {
* vor {@code cleanup()} aufgerufen wird.
*/
private void cleanup() {
+ LOG.debug("%s shutting down.", APP_NAME);
// Alle noch nicht ausgelösten Events werden entfernt
eventQueue.clear();
// Alle noch nicht ausgeführten Tasks werden entfernt
diff --git a/src/schule/ngb/zm/charts/BarChart.java b/src/main/java/schule/ngb/zm/charts/BarChart.java
similarity index 100%
rename from src/schule/ngb/zm/charts/BarChart.java
rename to src/main/java/schule/ngb/zm/charts/BarChart.java
diff --git a/src/schule/ngb/zm/charts/BasicChartValue.java b/src/main/java/schule/ngb/zm/charts/BasicChartValue.java
similarity index 100%
rename from src/schule/ngb/zm/charts/BasicChartValue.java
rename to src/main/java/schule/ngb/zm/charts/BasicChartValue.java
diff --git a/src/schule/ngb/zm/charts/ChartAxes.java b/src/main/java/schule/ngb/zm/charts/ChartAxes.java
similarity index 100%
rename from src/schule/ngb/zm/charts/ChartAxes.java
rename to src/main/java/schule/ngb/zm/charts/ChartAxes.java
diff --git a/src/schule/ngb/zm/charts/ChartValue.java b/src/main/java/schule/ngb/zm/charts/ChartValue.java
similarity index 100%
rename from src/schule/ngb/zm/charts/ChartValue.java
rename to src/main/java/schule/ngb/zm/charts/ChartValue.java
diff --git a/src/schule/ngb/zm/charts/LineChart.java b/src/main/java/schule/ngb/zm/charts/LineChart.java
similarity index 100%
rename from src/schule/ngb/zm/charts/LineChart.java
rename to src/main/java/schule/ngb/zm/charts/LineChart.java
diff --git a/src/schule/ngb/zm/charts/PieChart.java b/src/main/java/schule/ngb/zm/charts/PieChart.java
similarity index 100%
rename from src/schule/ngb/zm/charts/PieChart.java
rename to src/main/java/schule/ngb/zm/charts/PieChart.java
diff --git a/src/schule/ngb/zm/charts/RingChart.java b/src/main/java/schule/ngb/zm/charts/RingChart.java
similarity index 100%
rename from src/schule/ngb/zm/charts/RingChart.java
rename to src/main/java/schule/ngb/zm/charts/RingChart.java
diff --git a/src/schule/ngb/zm/media/Audio.java b/src/main/java/schule/ngb/zm/media/Audio.java
similarity index 78%
rename from src/schule/ngb/zm/media/Audio.java
rename to src/main/java/schule/ngb/zm/media/Audio.java
index 0292df6..6e8640b 100644
--- a/src/schule/ngb/zm/media/Audio.java
+++ b/src/main/java/schule/ngb/zm/media/Audio.java
@@ -20,8 +20,8 @@ public interface Audio {
* {@code isLooping() == true}, dann muss auch immer
* {@code isPlaying() == true} gelten.
*
- * @return @return {@code true}, wenn das Medium in einer Schleife
- * abgespielt wird, {@code false} sonst.
+ * @return {@code true}, wenn das Medium in einer Schleife abgespielt wird,
+ * {@code false} sonst.
*/
boolean isLooping();
@@ -38,17 +38,28 @@ public interface Audio {
*/
void setVolume( double volume );
+ /**
+ * Gibt die aktuelle Lautstärkeeinstellung dieses Mediums zurück.
+ *
+ * Die Lautstärke wird auf einer linearen Skale angegeben, wobei 0 kein Ton
+ * und 1 volle Lautstärke bedeutet. Werte über 1 verstärken den Ton des
+ * Mediums.
+ *
+ * @return Die Lautstärke als linear skalierter Wert.
+ */
+ double getVolume();
+
/**
* Startet die Wiedergabe des Mediums und beendet die Methode. Das
* Audio-Medium wird einmal abgespielt und stoppt dann.
*/
- void playOnce();
+ void play();
/**
* Startet die Wiedergabe des Mediums und blockiert das Programm, bis die
* Wiedergabe beendet ist.
*/
- void playOnceAndWait();
+ void playAndWait();
/**
* Spielt das Medium in einer kontinuierlichen Schleife ab. Die Methode
diff --git a/src/schule/ngb/zm/media/AudioListener.java b/src/main/java/schule/ngb/zm/media/AudioListener.java
similarity index 100%
rename from src/schule/ngb/zm/media/AudioListener.java
rename to src/main/java/schule/ngb/zm/media/AudioListener.java
diff --git a/src/schule/ngb/zm/media/Mixer.java b/src/main/java/schule/ngb/zm/media/Mixer.java
similarity index 73%
rename from src/schule/ngb/zm/media/Mixer.java
rename to src/main/java/schule/ngb/zm/media/Mixer.java
index fa68ca8..1696be1 100644
--- a/src/schule/ngb/zm/media/Mixer.java
+++ b/src/main/java/schule/ngb/zm/media/Mixer.java
@@ -61,30 +61,53 @@ public class Mixer implements Audio {
audios.clear();
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public boolean isPlaying() {
return audios.stream().anyMatch(aw -> aw.audio.isPlaying());
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public boolean isLooping() {
return audios.stream().anyMatch(aw -> aw.audio.isLooping());
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public void setVolume( double pVolume ) {
volume = (float) pVolume;
audios.stream().forEach(aw -> aw.audio.setVolume(aw.volumeFactor * pVolume));
}
+ /**
+ * {@inheritDoc}
+ */
@Override
- public void playOnce() {
- audios.stream().forEach(aw -> aw.audio.playOnce());
+ public double getVolume() {
+ return volume;
}
+ /**
+ * {@inheritDoc}
+ */
@Override
- public void playOnceAndWait() {
- audios.stream().forEach(aw -> aw.audio.playOnce());
+ public void play() {
+ audios.stream().forEach(aw -> aw.audio.play());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void playAndWait() {
+ audios.stream().forEach(aw -> aw.audio.play());
while( audios.stream().anyMatch(aw -> aw.audio.isPlaying()) ) {
try {
Thread.sleep(10);
@@ -94,16 +117,25 @@ public class Mixer implements Audio {
}
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public void loop() {
audios.stream().forEach(aw -> aw.audio.loop());
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public void stop() {
audios.stream().forEach(aw -> aw.audio.stop());
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public void dispose() {
if( isPlaying() ) {
@@ -112,6 +144,18 @@ public class Mixer implements Audio {
audios.stream().forEach(aw -> aw.audio.dispose());
}
+ /**
+ * Ändert die Lautstärke aller hinzugefügten Audiomedien in der angegebenen
+ * Zeit schrittweise, bis die angegebene Lautstärke erreicht ist.
+ *
+ * Zu beachten ist, dass die Lautstärke des Mixers angepasst wird. Das
+ * bedeutet, dass die Lautstärke der hinzugefügten Medien mit ihrem
+ * Lautstärkefaktor multipliziert werden. Die Medien haben am Ende also
+ * nicht unbedingt die Lautstärke {@code to}.
+ *
+ * @param to Der Zielwert für die Lautstärke.
+ * @param time Die Zeit, nach der die Änderung abgeschlossen sein soll.
+ */
public void fade( final double to, final int time ) {
TaskRunner.run(new Runnable() {
@Override
@@ -119,9 +163,6 @@ public class Mixer implements Audio {
final long start = System.currentTimeMillis();
double t = 0.0;
double from = volume;
- if( !isPlaying() ) {
- playOnce();
- }
do {
setVolume(Constants.interpolate(from, to, t));
t = (double) (System.currentTimeMillis() - start) / (double) time;
diff --git a/src/schule/ngb/zm/media/Music.java b/src/main/java/schule/ngb/zm/media/Music.java
similarity index 62%
rename from src/schule/ngb/zm/media/Music.java
rename to src/main/java/schule/ngb/zm/media/Music.java
index 592a27e..7b2fb73 100644
--- a/src/schule/ngb/zm/media/Music.java
+++ b/src/main/java/schule/ngb/zm/media/Music.java
@@ -2,30 +2,58 @@ package schule.ngb.zm.media;
import schule.ngb.zm.events.EventDispatcher;
import schule.ngb.zm.tasks.TaskRunner;
+import schule.ngb.zm.util.Log;
import schule.ngb.zm.util.ResourceStreamProvider;
+import schule.ngb.zm.util.Validator;
import javax.sound.sampled.*;
import java.io.IOException;
-import java.io.InputStream;
-import java.util.logging.Level;
-import java.util.logging.Logger;
+import java.net.URL;
+/**
+ * Ein Musikstück, dass im Projekt abgespielt werden soll.
+ *
+ * Im gegensatz zu einem {@link Sound} sind Musikstücke längere Audiodateien,
+ * die zum Beispiel als Hintergrundmusik ablaufen sollen. Die Musik wird daher
+ * nicht komplett in den Speicher geladen, sondern direkt aus der Audioquelle
+ * gestreamt und wiedergegeben.
+ */
public class Music implements Audio {
// size of the byte buffer used to read/write the audio stream
private static final int BUFFER_SIZE = 4096;
+ /**
+ * Ob der Sound gerade abgespielt wird.
+ */
private boolean playing = false;
+ /**
+ * Ob der Sound gerade in einer Schleife abgespielt wird.
+ */
private boolean looping = false;
+ /**
+ * Die Quelle des Musikstücks.
+ */
private String audioSource;
+ /**
+ * Der AudioStream, um die AUdiosdaten zulsen, falls dieser schon geöffnet
+ * wurde. Sonst {@code null}.
+ */
private AudioInputStream audioStream;
+ /**
+ * Die Line für die Ausgabe, falls diese schon geöffnet wurde. Sonst
+ * {@code null}.
+ */
private SourceDataLine audioLine;
+ /**
+ * Die Lautstärke der Musik.
+ */
private float volume = 0.8f;
EventDispatcher