From ae301d0f1288b31841e91be8d63a2ab024c2158f Mon Sep 17 00:00:00 2001
From: Sven Gothel
* The preferred sample-rate is guaranteed to be supported
* and shall reflect this sinks most native format,
* i.e. best performance w/o data conversion.
*
+ * Latency might be the reciprocal mixer-refresh-interval [Hz], e.g. 50 Hz refresh-rate = 20ms minimum latency.
+ *
@@ -170,7 +177,7 @@ public interface AudioSink {
*
+ * Latency might be the reciprocal mixer-refresh-interval [Hz], e.g. 50 Hz refresh-rate = 20ms minimum latency. + *
+ * @see #init(AudioFormat, float, int, int, int) + */ + public float getLatency(); + /** * Returns true, if {@link #play()} has been requested and the sink is still playing, * otherwise false. @@ -244,6 +260,7 @@ public interface AudioSink { * @see #play() * @see #pause() * @see #enqueueData(AudioFrame) + * @see #init(AudioFormat, float, int, int, int) */ public void flush(); @@ -253,10 +270,14 @@ public interface AudioSink { /** * Returns the number of allocated buffers as requested by * {@link #init(AudioFormat, float, int, int, int)}. + * @see #init(AudioFormat, float, int, int, int) */ public int getFrameCount(); - /** @return the current enqueued frames count since {@link #init(AudioFormat, float, int, int, int)}. */ + /** + * Returns the current enqueued frames count since {@link #init(AudioFormat, float, int, int, int)}. + * @see #init(AudioFormat, float, int, int, int) + */ public int getEnqueuedFrameCount(); /** @@ -264,6 +285,7 @@ public interface AudioSink { ** {@link #init(AudioFormat, float, int, int, int)} must be called first. *
+ * @see #init(AudioFormat, float, int, int, int) */ public int getQueuedFrameCount(); @@ -272,6 +294,7 @@ public interface AudioSink { ** {@link #init(AudioFormat, float, int, int, int)} must be called first. *
+ * @see #init(AudioFormat, float, int, int, int) */ public int getQueuedByteCount(); @@ -280,6 +303,7 @@ public interface AudioSink { ** {@link #init(AudioFormat, float, int, int, int)} must be called first. *
+ * @see #init(AudioFormat, float, int, int, int) */ public int getQueuedTime(); @@ -293,18 +317,20 @@ public interface AudioSink { ** {@link #init(AudioFormat, float, int, int, int)} must be called first. *
+ * @see #init(AudioFormat, float, int, int, int) */ public int getFreeFrameCount(); /** * EnqueuebyteCount
bytes of the remaining bytes of the given NIO {@link ByteBuffer} to this sink.
* - * The data must comply with the chosen {@link AudioFormat} as returned by {@link #initSink(AudioFormat)}. + * The data must comply with the chosen {@link AudioFormat} as set via {@link #init(AudioFormat, float, int, int, int)}. *
** {@link #init(AudioFormat, float, int, int, int)} must be called first. *
* @returns the enqueued internal {@link AudioFrame}. + * @see #init(AudioFormat, float, int, int, int) */ public AudioFrame enqueueData(int pts, ByteBuffer bytes, int byteCount); } diff --git a/src/java/jogamp/common/av/JavaSoundAudioSink.java b/src/java/jogamp/common/av/JavaSoundAudioSink.java index f5f9eb8..4d89c4d 100644 --- a/src/java/jogamp/common/av/JavaSoundAudioSink.java +++ b/src/java/jogamp/common/av/JavaSoundAudioSink.java @@ -122,6 +122,16 @@ public class JavaSoundAudioSink implements AudioSink { return DefaultFormat.sampleRate; } + @Override + public float getDefaultLatency() { + return 20f/1000f; // fake 20ms + } + + @Override + public float getLatency() { + return 20f/1000f; // fake 20ms + } + @Override public AudioFormat getPreferredFormat() { return DefaultFormat; @@ -138,7 +148,7 @@ public class JavaSoundAudioSink implements AudioSink { } @Override - public boolean init(final AudioFormat requestedFormat, final float frameDuration, final int initialQueueSize, final int queueGrowAmount, final int queueLimit) { + public boolean init(final AudioFormat requestedFormat, final int frameDuration, final int initialQueueSize, final int queueGrowAmount, final int queueLimit) { if( !staticAvailable ) { return false; } @@ -271,4 +281,5 @@ public class JavaSoundAudioSink implements AudioSink { @Override public final int getPTS() { return 0; } // FIXME + } diff --git a/src/java/jogamp/common/av/NullAudioSink.java b/src/java/jogamp/common/av/NullAudioSink.java index 36681bb..7a02af9 100644 --- a/src/java/jogamp/common/av/NullAudioSink.java +++ b/src/java/jogamp/common/av/NullAudioSink.java @@ -88,6 +88,16 @@ public class NullAudioSink implements AudioSink { return DefaultFormat.sampleRate; } + @Override + public float getDefaultLatency() { + return 0; + } + + @Override + public float getLatency() { + return 0; + } + @Override public AudioFormat getPreferredFormat() { return DefaultFormat; @@ -114,7 +124,7 @@ public class NullAudioSink implements AudioSink { } @Override - public boolean init(final AudioFormat requestedFormat, final float frameDuration, final int initialQueueSize, final int queueGrowAmount, final int queueLimit) { + public boolean init(final AudioFormat requestedFormat, final int frameDuration, final int initialQueueSize, final int queueGrowAmount, final int queueLimit) { chosenFormat = requestedFormat; return true; } -- cgit v1.2.3