1 2 /** @file 3 @ingroup bindings_java 4 5 @brief Example that shows how to play sine waves using JPortAudio. 6 */ 7 package com.portaudio; 8 9 import com.portaudio.TestBasic.SineOscillator; 10 11 public class PlaySine 12 { 13 /** 14 * Write a sine wave to the stream. 15 * @param stream 16 * @param framesPerBuffer 17 * @param numFrames 18 * @param sampleRate 19 */ writeSineData( BlockingStream stream, int framesPerBuffer, int numFrames, int sampleRate )20 private void writeSineData( BlockingStream stream, int framesPerBuffer, 21 int numFrames, int sampleRate ) 22 { 23 float[] buffer = new float[framesPerBuffer * 2]; 24 SineOscillator osc1 = new SineOscillator( 200.0, sampleRate ); 25 SineOscillator osc2 = new SineOscillator( 300.0, sampleRate ); 26 int framesLeft = numFrames; 27 while( framesLeft > 0 ) 28 { 29 int index = 0; 30 int framesToWrite = (framesLeft > framesPerBuffer) ? framesPerBuffer 31 : framesLeft; 32 for( int j = 0; j < framesToWrite; j++ ) 33 { 34 buffer[index++] = (float) osc1.next(); 35 buffer[index++] = (float) osc2.next(); 36 } 37 stream.write( buffer, framesToWrite ); 38 framesLeft -= framesToWrite; 39 } 40 } 41 42 /** 43 * Create a stream on the default device then play sine waves. 44 */ play()45 public void play() 46 { 47 PortAudio.initialize(); 48 49 // Get the default device and setup the stream parameters. 50 int deviceId = PortAudio.getDefaultOutputDevice(); 51 DeviceInfo deviceInfo = PortAudio.getDeviceInfo( deviceId ); 52 double sampleRate = deviceInfo.defaultSampleRate; 53 System.out.println( " deviceId = " + deviceId ); 54 System.out.println( " sampleRate = " + sampleRate ); 55 System.out.println( " device name = " + deviceInfo.name ); 56 57 StreamParameters streamParameters = new StreamParameters(); 58 streamParameters.channelCount = 2; 59 streamParameters.device = deviceId; 60 streamParameters.suggestedLatency = deviceInfo.defaultLowOutputLatency; 61 System.out.println( " suggestedLatency = " 62 + streamParameters.suggestedLatency ); 63 64 int framesPerBuffer = 256; 65 int flags = 0; 66 67 // Open a stream for output. 68 BlockingStream stream = PortAudio.openStream( null, streamParameters, 69 (int) sampleRate, framesPerBuffer, flags ); 70 71 int numFrames = (int) (sampleRate * 4); // enough for 4 seconds 72 73 stream.start(); 74 75 writeSineData( stream, framesPerBuffer, numFrames, (int) sampleRate ); 76 77 stream.stop(); 78 stream.close(); 79 80 PortAudio.terminate(); 81 System.out.println( "JPortAudio test complete." ); 82 } 83 main( String[] args )84 public static void main( String[] args ) 85 { 86 PlaySine player = new PlaySine(); 87 player.play(); 88 } 89 } 90