summaryrefslogtreecommitdiff
path: root/portaudio/bindings/java/jportaudio/jtests/com/portaudio/PlaySine.java
diff options
context:
space:
mode:
Diffstat (limited to 'portaudio/bindings/java/jportaudio/jtests/com/portaudio/PlaySine.java')
-rw-r--r--portaudio/bindings/java/jportaudio/jtests/com/portaudio/PlaySine.java89
1 files changed, 89 insertions, 0 deletions
diff --git a/portaudio/bindings/java/jportaudio/jtests/com/portaudio/PlaySine.java b/portaudio/bindings/java/jportaudio/jtests/com/portaudio/PlaySine.java
new file mode 100644
index 0000000..ec2cb97
--- /dev/null
+++ b/portaudio/bindings/java/jportaudio/jtests/com/portaudio/PlaySine.java
@@ -0,0 +1,89 @@
+
+/** @file
+ @ingroup bindings_java
+
+ @brief Example that shows how to play sine waves using JPortAudio.
+*/
+package com.portaudio;
+
+import com.portaudio.TestBasic.SineOscillator;
+
+public class PlaySine
+{
+ /**
+ * Write a sine wave to the stream.
+ * @param stream
+ * @param framesPerBuffer
+ * @param numFrames
+ * @param sampleRate
+ */
+ private void writeSineData( BlockingStream stream, int framesPerBuffer,
+ int numFrames, int sampleRate )
+ {
+ float[] buffer = new float[framesPerBuffer * 2];
+ SineOscillator osc1 = new SineOscillator( 200.0, sampleRate );
+ SineOscillator osc2 = new SineOscillator( 300.0, sampleRate );
+ int framesLeft = numFrames;
+ while( framesLeft > 0 )
+ {
+ int index = 0;
+ int framesToWrite = (framesLeft > framesPerBuffer) ? framesPerBuffer
+ : framesLeft;
+ for( int j = 0; j < framesToWrite; j++ )
+ {
+ buffer[index++] = (float) osc1.next();
+ buffer[index++] = (float) osc2.next();
+ }
+ stream.write( buffer, framesToWrite );
+ framesLeft -= framesToWrite;
+ }
+ }
+
+ /**
+ * Create a stream on the default device then play sine waves.
+ */
+ public void play()
+ {
+ PortAudio.initialize();
+
+ // Get the default device and setup the stream parameters.
+ int deviceId = PortAudio.getDefaultOutputDevice();
+ DeviceInfo deviceInfo = PortAudio.getDeviceInfo( deviceId );
+ double sampleRate = deviceInfo.defaultSampleRate;
+ System.out.println( " deviceId = " + deviceId );
+ System.out.println( " sampleRate = " + sampleRate );
+ System.out.println( " device name = " + deviceInfo.name );
+
+ StreamParameters streamParameters = new StreamParameters();
+ streamParameters.channelCount = 2;
+ streamParameters.device = deviceId;
+ streamParameters.suggestedLatency = deviceInfo.defaultLowOutputLatency;
+ System.out.println( " suggestedLatency = "
+ + streamParameters.suggestedLatency );
+
+ int framesPerBuffer = 256;
+ int flags = 0;
+
+ // Open a stream for output.
+ BlockingStream stream = PortAudio.openStream( null, streamParameters,
+ (int) sampleRate, framesPerBuffer, flags );
+
+ int numFrames = (int) (sampleRate * 4); // enough for 4 seconds
+
+ stream.start();
+
+ writeSineData( stream, framesPerBuffer, numFrames, (int) sampleRate );
+
+ stream.stop();
+ stream.close();
+
+ PortAudio.terminate();
+ System.out.println( "JPortAudio test complete." );
+ }
+
+ public static void main( String[] args )
+ {
+ PlaySine player = new PlaySine();
+ player.play();
+ }
+}