rendered paste body#include <stdio.h>
#include <portaudio.h>
PaStreamParameters param_in;
PaStreamParameters param_out;
static int cb_input(const void *in, void *out, unsigned long frames,
const PaStreamCallbackTimeInfo *ti,
PaStreamCallbackFlags flags, void *data)
{
float *pi = (float *) in;
float *po = (float *) out;
return 0;
}
static int cb_output(const void *in, void *out, unsigned long frames,
const PaStreamCallbackTimeInfo *ti,
PaStreamCallbackFlags flags, void *data)
{
float *pi = (float *) in;
float *po = (float *) out;
return 0;
}
int main(void)
{
const PaDeviceInfo *dev_info;
PaStream *in_s;
PaStream *out_s;
PaError err;
int num_devices;
unsigned int ind;
err = Pa_Initialize();
if (err != paNoError)
printf("error: init: %s\n", Pa_GetErrorText(err));
printf("info: init\n");
num_devices = Pa_GetDeviceCount();
if (num_devices < 0) {
printf("error: devicecount: %s\n", Pa_GetErrorText(num_devices));
goto END;
}
for (ind = 0; ind < num_devices; ++ind) {
dev_info = Pa_GetDeviceInfo(ind);
printf("info: device %u %s %u %u %f\n",
ind,
dev_info->name,
dev_info->maxInputChannels,
dev_info->maxOutputChannels,
dev_info->defaultSampleRate);
}
param_in.channelCount = 2;
param_in.device = 0;
param_in.sampleFormat = paFloat32;
param_in.suggestedLatency = Pa_GetDeviceInfo(0)->defaultLowInputLatency;
printf("info: opening input stream\n");
err = Pa_OpenStream(&in_s, ¶m_in, 0, 44000.0, 1024, paNoFlag, cb_input, 0);
if (err != paNoError) {
printf("error: openstream: %s\n", Pa_GetErrorText(err));
goto END;
}
param_out.channelCount = 2;
param_out.device = 0;
param_out.sampleFormat = paFloat32;
param_out.suggestedLatency = Pa_GetDeviceInfo(0)->defaultLowOutputLatency;
printf("info: opening output stream\n");
err = Pa_OpenStream(&out_s, ¶m_out, 0, 44000.0, 1024, paNoFlag, cb_output, 0);
if (err != paNoError) {
printf("error: openstream: %s\n", Pa_GetErrorText(err));
goto END;
}
printf("info: starting input stream\n");
err = Pa_StartStream(in_s);
if (err != paNoError) {
printf("error: startstream: %s\n", Pa_GetErrorText(err));
goto END;
}
printf("info: starting output stream\n");
err = Pa_StartStream(out_s);
if (err != paNoError) {
printf("error: startstream: %s\n", Pa_GetErrorText(err));
goto END;
}
printf("info: running for two seconds\n");
Pa_Sleep(2 * 1000);
printf("info: stopping input stream\n");
err = Pa_StopStream(in_s);
if (err != paNoError) {
printf("error: stopstream: %s\n", Pa_GetErrorText(err));
goto END;
}
printf("info: stopping output stream\n");
err = Pa_StopStream(out_s);
if (err != paNoError) {
printf("error: stopstream: %s\n", Pa_GetErrorText(err));
goto END;
}
END:
err = Pa_Terminate();
if (err != paNoError)
printf("error: terminate: %s\n", Pa_GetErrorText(err));
printf("info: terminated\n");
return 0;
}