X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsonitus%2Fdata%2Fsink%2FAudioSink.java;h=6cace627ec200a4fb3e8e05eb73e80f2a30bbaf6;hb=633a841142f978235ed9f745b6ba16c278963e62;hp=7c28f2c620544c3fd802fe2683726dbd1a435c31;hpb=87436ac0b103a112722c1df835e11ec928e57d38;p=sonitus.git diff --git a/src/main/java/net/pterodactylus/sonitus/data/sink/AudioSink.java b/src/main/java/net/pterodactylus/sonitus/data/sink/AudioSink.java index 7c28f2c..6cace62 100644 --- a/src/main/java/net/pterodactylus/sonitus/data/sink/AudioSink.java +++ b/src/main/java/net/pterodactylus/sonitus/data/sink/AudioSink.java @@ -34,42 +34,33 @@ import javax.sound.sampled.FloatControl; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.SourceDataLine; -import net.pterodactylus.sonitus.data.AbstractControlledComponent; +import net.pterodactylus.sonitus.data.AbstractFilter; import net.pterodactylus.sonitus.data.Controller; +import net.pterodactylus.sonitus.data.Filter; import net.pterodactylus.sonitus.data.Metadata; -import net.pterodactylus.sonitus.data.Sink; -import net.pterodactylus.sonitus.data.Source; import net.pterodactylus.sonitus.data.controller.Fader; import net.pterodactylus.sonitus.data.controller.Switch; -import net.pterodactylus.sonitus.data.event.MetadataUpdated; import net.pterodactylus.sonitus.io.IntegralWriteOutputStream; import com.google.common.base.Preconditions; -import com.google.common.eventbus.EventBus; /** - * {@link Sink} implementation that uses the JDK’s {@link AudioSystem} to play - * all {@link Source}s. + * {@link Filter} implementation that uses the JDK’s {@link AudioSystem} to play + * all the audio signal. * * @author David ‘Bombe’ Roden */ -public class AudioSink extends AbstractControlledComponent implements Sink { +public class AudioSink extends AbstractFilter { /** The logger. */ private static final Logger logger = Logger.getLogger(AudioSink.class.getName()); - /** The event bus. */ - private final EventBus eventBus; - /** The volume fader. */ private final Fader volumeFader; /** The “mute” switch. */ private final Switch muteSwitch; - /** The current metadata. */ - private Metadata metadata; - /** The audio output. */ private SourceDataLine sourceDataLine; @@ -93,14 +84,9 @@ public class AudioSink extends AbstractControlledComponent implements Sink { } }, 1024); - /** - * Creates a new audio sink. - * - * @param eventBus - * The event bus - */ - public AudioSink(EventBus eventBus) { - this.eventBus = eventBus; + /** Creates a new audio sink. */ + public AudioSink() { + super("Audio Output"); volumeFader = new Fader("Volume") { @Override @@ -148,31 +134,18 @@ public class AudioSink extends AbstractControlledComponent implements Sink { } // - // CONTROLLED METHODS + // FILTER METHODS // @Override - public String name() { - return "Audio Output"; - } - - @Override - public Metadata metadata() { - return metadata; - } - - @Override public List> controllers() { return Arrays.>asList(volumeFader, muteSwitch); } - // - // SINK METHODS - // - @Override public void open(Metadata metadata) throws IOException { Preconditions.checkArgument(metadata.encoding().equalsIgnoreCase("PCM"), "source must be PCM-encoded"); + super.open(metadata); AudioFormat audioFormat = new AudioFormat(metadata.frequency(), 16, metadata.channels(), true, false); try { sourceDataLine = AudioSystem.getSourceDataLine(audioFormat); @@ -194,15 +167,14 @@ public class AudioSink extends AbstractControlledComponent implements Sink { @Override public void metadataUpdated(Metadata metadata) { - logger.info(String.format("Now playing %s.", metadata)); - this.metadata = metadata; - fireMetadataUpdated(metadata); - eventBus.post(new MetadataUpdated(this, metadata)); + super.metadataUpdated(metadata); + logger.fine(String.format("Now playing %s.", metadata)); } @Override public void process(byte[] buffer) throws IOException { sourceDataLineOutputStream.write(buffer); + super.process(buffer); logger.finest(String.format("AudioSink: Wrote %d Bytes.", buffer.length)); } @@ -211,7 +183,7 @@ public class AudioSink extends AbstractControlledComponent implements Sink { // /** - * Returns the {@link FloatControl.Type.VOLUME} control. + * Returns the {@link FloatControl.Type#VOLUME} control. * * @param dataLine * The data line to search for the control @@ -222,7 +194,7 @@ public class AudioSink extends AbstractControlledComponent implements Sink { } /** - * Returns the {@link BooleanControl.Type.MUTE} control. + * Returns the {@link BooleanControl.Type#MUTE} control. * * @param dataLine * The data line to search for the control