#include <iostream>
#include "portaudio.h"
#define SAMPLE_RATE (44100)
#define FRAMES_PER_BUFFER (64)
#define PI (3.14159265)
typedef struct
{
float phase;
} paTestData;
static int paCallback(const void* inputBuffer, void* outputBuffer,
unsigned long framesPerBuffer,
const PaStreamCallbackTimeInfo* timeInfo,
PaStreamCallbackFlags statusFlags,
void* userData)
{
paTestData* data = (paTestData*)userData;
float* out = (float*)outputBuffer;
for (unsigned int i = 0; i < framesPerBuffer; i++)
{
*out++ = static_cast<float>(0.5f * sin(data->phase * 2.0f * PI));
data->phase += 0.01f;
if (data->phase > 1.0f) data->phase -= 1.0f;
}
return paContinue;
}
int main()
{
PaStream* stream;
PaError err;
paTestData data;
err = Pa_Initialize();
if (err != paNoError) goto error;
err = Pa_OpenDefaultStream(&stream,
0, // no input channels
1, // mono output
paFloat32, // 32 bit floating point output
SAMPLE_RATE,
FRAMES_PER_BUFFER,
paCallback,
&data);
if (err != paNoError) goto error;
err = Pa_StartStream(stream);
if (err != paNoError) goto error;
Pa_Sleep(5000); // Run for 5 seconds
err = Pa_StopStream(stream);
if (err != paNoError) goto error;
err = Pa_CloseStream(stream);
if (err != paNoError) goto error;
Pa_Terminate();
return 0;
error:
Pa_Terminate();
fprintf(stderr, "An error occurred while using the PortAudio stream\n");
fprintf(stderr, "Error number: %d\n", err);
fprintf(stderr, "Error message: %s\n", Pa_GetErrorText(err));
return -1;
}