Save current source, update metadata after starting the connection.
[sonitus.git] / src / main / java / net / pterodactylus / sonitus / data / sink / AudioSink.java
index 520be04..f29bde8 100644 (file)
@@ -27,7 +27,7 @@ import javax.sound.sampled.SourceDataLine;
 
 import net.pterodactylus.sonitus.data.ConnectException;
 import net.pterodactylus.sonitus.data.Connection;
-import net.pterodactylus.sonitus.data.Format;
+import net.pterodactylus.sonitus.data.Metadata;
 import net.pterodactylus.sonitus.data.Sink;
 import net.pterodactylus.sonitus.data.Source;
 
@@ -42,13 +42,16 @@ public class AudioSink implements Sink {
        /** The logger. */
        private static final Logger logger = Logger.getLogger(AudioSink.class.getName());
 
+       /** The current source. */
+       private Source source;
+
        @Override
        public void connect(Source source) throws ConnectException {
-               checkNotNull(source, "source must not be null");
-               checkState(source.format().encoding().equalsIgnoreCase("PCM"), "source must be PCM-encoded");
+               this.source = checkNotNull(source, "source must not be null");
+               checkState(source.metadata().encoding().equalsIgnoreCase("PCM"), "source must be PCM-encoded");
 
-               final Format sourceFormat = source.format();
-               AudioFormat audioFormat = new AudioFormat(sourceFormat.frequency(), 16, sourceFormat.channels(), true, false);
+               final Metadata sourceMetadata = source.metadata();
+               AudioFormat audioFormat = new AudioFormat(sourceMetadata.frequency(), 16, sourceMetadata.channels(), true, false);
                try {
                        final SourceDataLine sourceDataLine = AudioSystem.getSourceDataLine(audioFormat);
                        sourceDataLine.open(audioFormat);
@@ -57,7 +60,7 @@ public class AudioSink implements Sink {
 
                                @Override
                                protected int bufferSize() {
-                                       return sourceFormat.channels() * sourceFormat.frequency() * 2;
+                                       return sourceMetadata.channels() * sourceMetadata.frequency() * 2;
                                }
 
                                @Override
@@ -71,6 +74,7 @@ public class AudioSink implements Sink {
                                        sourceDataLine.stop();
                                }
                        }).start();
+                       metadataUpdated();
                } catch (LineUnavailableException lue1) {
                        throw new ConnectException(lue1);
                }