PortAudio 2.0
|
00001 00007 package com.portaudio; 00008 00009 import com.portaudio.TestBasic.SineOscillator; 00010 00011 public class PlaySine 00012 { 00020 private void writeSineData( BlockingStream stream, int framesPerBuffer, 00021 int numFrames, int sampleRate ) 00022 { 00023 float[] buffer = new float[framesPerBuffer * 2]; 00024 SineOscillator osc1 = new SineOscillator( 200.0, sampleRate ); 00025 SineOscillator osc2 = new SineOscillator( 300.0, sampleRate ); 00026 int framesLeft = numFrames; 00027 while( framesLeft > 0 ) 00028 { 00029 int index = 0; 00030 int framesToWrite = (framesLeft > framesPerBuffer) ? framesPerBuffer 00031 : framesLeft; 00032 for( int j = 0; j < framesToWrite; j++ ) 00033 { 00034 buffer[index++] = (float) osc1.next(); 00035 buffer[index++] = (float) osc2.next(); 00036 } 00037 stream.write( buffer, framesToWrite ); 00038 framesLeft -= framesToWrite; 00039 } 00040 } 00041 00045 public void play() 00046 { 00047 PortAudio.initialize(); 00048 00049 // Get the default device and setup the stream parameters. 00050 int deviceId = PortAudio.getDefaultOutputDevice(); 00051 DeviceInfo deviceInfo = PortAudio.getDeviceInfo( deviceId ); 00052 double sampleRate = deviceInfo.defaultSampleRate; 00053 System.out.println( " deviceId = " + deviceId ); 00054 System.out.println( " sampleRate = " + sampleRate ); 00055 System.out.println( " device name = " + deviceInfo.name ); 00056 00057 StreamParameters streamParameters = new StreamParameters(); 00058 streamParameters.channelCount = 2; 00059 streamParameters.device = deviceId; 00060 streamParameters.suggestedLatency = deviceInfo.defaultLowOutputLatency; 00061 System.out.println( " suggestedLatency = " 00062 + streamParameters.suggestedLatency ); 00063 00064 int framesPerBuffer = 256; 00065 int flags = 0; 00066 00067 // Open a stream for output. 00068 BlockingStream stream = PortAudio.openStream( null, streamParameters, 00069 (int) sampleRate, framesPerBuffer, flags ); 00070 00071 int numFrames = (int) (sampleRate * 4); // enough for 4 seconds 00072 00073 stream.start(); 00074 00075 writeSineData( stream, framesPerBuffer, numFrames, (int) sampleRate ); 00076 00077 stream.stop(); 00078 stream.close(); 00079 00080 PortAudio.terminate(); 00081 System.out.println( "JPortAudio test complete." ); 00082 } 00083 00084 public static void main( String[] args ) 00085 { 00086 PlaySine player = new PlaySine(); 00087 player.play(); 00088 } 00089 }