X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsonitus%2Fdata%2Fsink%2FAudioSink.java;h=fda40fdf7a996e0586d950761b3a7590dca11655;hb=3a12209e82233cd79677a0d847321f41b41aa9a5;hp=34092805728d70598973c2d258ef9eda08e820c4;hpb=cbeadf6d9eea57ab98cacd60e2419dd3c18bef89;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 3409280..fda40fd 100644 --- a/src/main/java/net/pterodactylus/sonitus/data/sink/AudioSink.java +++ b/src/main/java/net/pterodactylus/sonitus/data/sink/AudioSink.java @@ -34,11 +34,11 @@ 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.DataPacket; +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.io.IntegralWriteOutputStream; @@ -46,12 +46,12 @@ import net.pterodactylus.sonitus.io.IntegralWriteOutputStream; import com.google.common.base.Preconditions; /** - * {@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()); @@ -135,7 +135,7 @@ public class AudioSink extends AbstractControlledComponent implements Sink { } // - // CONTROLLED METHODS + // FILTER METHODS // @Override @@ -143,13 +143,10 @@ public class AudioSink extends AbstractControlledComponent implements Sink { 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); @@ -176,9 +173,10 @@ public class AudioSink extends AbstractControlledComponent implements Sink { } @Override - public void process(byte[] buffer) throws IOException { - sourceDataLineOutputStream.write(buffer); - logger.finest(String.format("AudioSink: Wrote %d Bytes.", buffer.length)); + public void process(DataPacket dataPacket) throws IOException { + sourceDataLineOutputStream.write(dataPacket.buffer()); + super.process(dataPacket); + logger.finest(String.format("AudioSink: Wrote %d Bytes.", dataPacket.buffer().length)); } // @@ -186,7 +184,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 @@ -197,7 +195,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