Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* g++ -std=c++11 -l portaudio -o port-dsp-callback port-dsp-callback.cpp */
- #include <cstdint>
- #include <cstring>
- #include <iostream>
- #include <portaudio.h>
- /*
- * Log a PaError to console.
- */
- static void log_pa (PaError err) {
- std::cout << "PortAudio: " << Pa_GetErrorText(err) << std::endl;
- }
- /*
- * Callback for PortAudio.
- */
- static int callback (const void* input_buffer, void* output_buffer,
- unsigned long frames_per_buffer, const PaStreamCallbackTimeInfo* time_info,
- PaStreamCallbackFlags status_flags, void* user_data) {
- /* Since we only use memcpy, these casts are not strictly neccessary. */
- std::int32_t* out = (std::int32_t*)output_buffer;
- std::int32_t* in = (std::int32_t*)input_buffer;
- (void)user_data;
- std::memcpy(out, in, sizeof(std::int32_t) * frames_per_buffer);
- return paContinue;
- }
- /*
- * Program entry point.
- */
- int main (int argc, char** argv) {
- /* Initialize. */
- log_pa(Pa_Initialize());
- PaStreamParameters input_parameters, output_parameters;
- /* Set input parameters. */
- input_parameters.device = Pa_GetDefaultInputDevice();
- input_parameters.channelCount = 1;
- input_parameters.sampleFormat = paInt32;
- const PaDeviceInfo* input_info = Pa_GetDeviceInfo(input_parameters.device);
- input_parameters.suggestedLatency = input_info->defaultLowInputLatency;
- input_parameters.hostApiSpecificStreamInfo = NULL;
- /* Set output parameters. */
- output_parameters.device = Pa_GetDefaultOutputDevice();
- output_parameters.channelCount = 1;
- output_parameters.sampleFormat = paInt32;
- const PaDeviceInfo* output_info = Pa_GetDeviceInfo(output_parameters.device);
- output_parameters.suggestedLatency = output_info->defaultLowOutputLatency;
- output_parameters.hostApiSpecificStreamInfo = NULL;
- /* Create and start stream, let it run for 5 seconds, then close it again. */
- PaStream* stream = NULL;
- log_pa(Pa_OpenStream(&stream, &input_parameters, &output_parameters, 96000, paFramesPerBufferUnspecified, paNoFlag, callback, NULL));
- log_pa(Pa_StartStream(stream));
- Pa_Sleep(5000);
- log_pa(Pa_StopStream(stream));
- log_pa(Pa_CloseStream(stream));
- log_pa(Pa_Terminate());
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement