diff options
author | Sven Gothel <[email protected]> | 2013-07-17 16:18:27 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2013-07-17 16:18:27 +0200 |
commit | f26d591b484c7516e6addaaff0b6b40cb4138da9 (patch) | |
tree | 297529ecdb4bd9d7a3d265d2194df6994a635b93 /src/jogl/classes/jogamp/opengl/util/av/JavaSoundAudioSink.java | |
parent | 5a1bd0c70ffce4a0530de4f3902050a87c669343 (diff) | |
parent | 5c8699690ac907882615ba8f01eebb9e39699f50 (diff) |
Merge remote-tracking branch 'xranby/FFMPEGMediaPlayer'
Diffstat (limited to 'src/jogl/classes/jogamp/opengl/util/av/JavaSoundAudioSink.java')
-rw-r--r-- | src/jogl/classes/jogamp/opengl/util/av/JavaSoundAudioSink.java | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/jogl/classes/jogamp/opengl/util/av/JavaSoundAudioSink.java b/src/jogl/classes/jogamp/opengl/util/av/JavaSoundAudioSink.java new file mode 100644 index 000000000..653a02111 --- /dev/null +++ b/src/jogl/classes/jogamp/opengl/util/av/JavaSoundAudioSink.java @@ -0,0 +1,79 @@ +package jogamp.opengl.util.av; + +import java.util.Arrays; + +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.DataLine; +import javax.sound.sampled.SourceDataLine; + +public class JavaSoundAudioSink implements AudioSink { + + // AudioFormat parameters + public static final int SAMPLE_RATE = 44100; + private static final int SAMPLE_SIZE = 16; + private static final int CHANNELS = 2; + private static final boolean SIGNED = true; + private static final boolean BIG_ENDIAN = false; + + // Chunk of audio processed at one time + public static final int BUFFER_SIZE = 1000; + public static final int SAMPLES_PER_BUFFER = BUFFER_SIZE / 2; + + // Sample time values + public static final double SAMPLE_TIME_IN_SECS = 1.0 / SAMPLE_RATE; + public static final double BUFFER_TIME_IN_SECS = SAMPLE_TIME_IN_SECS * SAMPLES_PER_BUFFER; + + private static AudioFormat format; + private static DataLine.Info info; + private static SourceDataLine auline; + private static int bufferCount; + private static byte [] sampleData = new byte[BUFFER_SIZE]; + + private static boolean available; + + static { + // Create the audio format we wish to use + format = new AudioFormat(SAMPLE_RATE, SAMPLE_SIZE, CHANNELS, SIGNED, BIG_ENDIAN); + + // Create dataline info object describing line format + info = new DataLine.Info(SourceDataLine.class, format); + + // Clear buffer initially + Arrays.fill(sampleData, (byte) 0); + try{ + // Get line to write data to + auline = (SourceDataLine) AudioSystem.getLine(info); + auline.open(format); + auline.start(); + System.out.println("JavaSound audio sink"); + available=true; + } catch (Exception e) { + available=false; + } + } + + public void writeData(byte[] sampleData, int data_size) { + int written = 0; + int len; + while (data_size > 0) { + len = auline.write(sampleData, written, data_size); + data_size -= len; + written += len; + } + } + + public int getDataAvailable() { + return auline.available(); + } + + public boolean isDataAvailable(int data_size) { + return auline.available()>=data_size; + } + + @Override + public boolean isAudioSinkAvailable() { + return available; + } + +} |