PlaySine.java
Go to the documentation of this file.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
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
00068 BlockingStream stream = PortAudio.openStream( null, streamParameters,
00069 (int) sampleRate, framesPerBuffer, flags );
00070
00071 int numFrames = (int) (sampleRate * 4);
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 }