paex_write_sine_nonint.c
Go to the documentation of this file.00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 #include <stdio.h>
00046 #include <math.h>
00047 #include "portaudio.h"
00048
00049 #define NUM_SECONDS (5)
00050 #define SAMPLE_RATE (44100)
00051 #define FRAMES_PER_BUFFER (1024)
00052
00053 #ifndef M_PI
00054 #define M_PI (3.14159265)
00055 #endif
00056
00057 #define TABLE_SIZE (200)
00058
00059
00060 int main(void);
00061 int main(void)
00062 {
00063 PaStreamParameters outputParameters;
00064 PaStream *stream;
00065 PaError err;
00066
00067 float leftBuffer[FRAMES_PER_BUFFER];
00068 float rightBuffer[FRAMES_PER_BUFFER];
00069 void *buffers[2];
00070
00071 float sine[TABLE_SIZE];
00072 int left_phase = 0;
00073 int right_phase = 0;
00074 int left_inc = 1;
00075 int right_inc = 3;
00076 int i, j, k;
00077 int bufferCount;
00078
00079
00080 printf("PortAudio Test: output sine wave NON-INTERLEAVED. SR = %d, BufSize = %d\n", SAMPLE_RATE, FRAMES_PER_BUFFER);
00081
00082
00083 for( i=0; i<TABLE_SIZE; i++ )
00084 {
00085 sine[i] = (float) sin( ((double)i/(double)TABLE_SIZE) * M_PI * 2. );
00086 }
00087
00088
00089 err = Pa_Initialize();
00090 if( err != paNoError ) goto error;
00091
00092 outputParameters.device = Pa_GetDefaultOutputDevice();
00093 if (outputParameters.device == paNoDevice) {
00094 fprintf(stderr,"Error: No default output device.\n");
00095 goto error;
00096 }
00097 outputParameters.channelCount = 2;
00098 outputParameters.sampleFormat = paFloat32 | paNonInterleaved;
00099 outputParameters.suggestedLatency = Pa_GetDeviceInfo( outputParameters.device )->defaultLowOutputLatency;
00100 outputParameters.hostApiSpecificStreamInfo = NULL;
00101
00102 err = Pa_OpenStream(
00103 &stream,
00104 NULL,
00105 &outputParameters,
00106 SAMPLE_RATE,
00107 FRAMES_PER_BUFFER,
00108 paClipOff,
00109 NULL,
00110 NULL );
00111 if( err != paNoError ) goto error;
00112
00113
00114 printf( "Play 3 times, higher each time.\n" );
00115
00116
00117 buffers[0] = leftBuffer;
00118 buffers[1] = rightBuffer;
00119
00120 for( k=0; k < 3; ++k )
00121 {
00122 err = Pa_StartStream( stream );
00123 if( err != paNoError ) goto error;
00124
00125 printf("Play for %d seconds.\n", NUM_SECONDS );
00126
00127 bufferCount = ((NUM_SECONDS * SAMPLE_RATE) / FRAMES_PER_BUFFER);
00128
00129 for( i=0; i < bufferCount; i++ )
00130 {
00131 for( j=0; j < FRAMES_PER_BUFFER; j++ )
00132 {
00133 leftBuffer[j] = sine[left_phase];
00134 rightBuffer[j] = sine[right_phase];
00135 left_phase += left_inc;
00136 if( left_phase >= TABLE_SIZE ) left_phase -= TABLE_SIZE;
00137 right_phase += right_inc;
00138 if( right_phase >= TABLE_SIZE ) right_phase -= TABLE_SIZE;
00139 }
00140
00141 err = Pa_WriteStream( stream, buffers, FRAMES_PER_BUFFER );
00142 if( err != paNoError ) goto error;
00143 }
00144
00145 err = Pa_StopStream( stream );
00146 if( err != paNoError ) goto error;
00147
00148 ++left_inc;
00149 ++right_inc;
00150
00151 Pa_Sleep( 1000 );
00152 }
00153
00154 err = Pa_CloseStream( stream );
00155 if( err != paNoError ) goto error;
00156
00157 Pa_Terminate();
00158 printf("Test finished.\n");
00159
00160 return err;
00161 error:
00162 Pa_Terminate();
00163 fprintf( stderr, "An error occured while using the portaudio stream\n" );
00164 fprintf( stderr, "Error number: %d\n", err );
00165 fprintf( stderr, "Error message: %s\n", Pa_GetErrorText( err ) );
00166 return err;
00167 }