All pastes #395903 Raw Edit

Someone

public text v1 · immutable
·published 2007-03-15 11:29 UTC
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, &param_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, &param_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;
}