| 
    PortAudio
    2.0
    
   | 
 
#include <stdio.h>#include <stdlib.h>#include <memory.h>#include <math.h>#include <string.h>#include "portaudio.h"#include "qa_tools.h"#include "paqa_tools.h"#include "audio_analyzer.h"#include "test_audio_analyzer.h"Data Structures | |
| struct | TestParameters_s | 
| struct | LoopbackContext_s | 
| struct | UserOptions_s | 
Macros | |
| #define | MAX_NUM_GENERATORS (8) | 
| #define | MAX_NUM_RECORDINGS (8) | 
| #define | MAX_BACKGROUND_NOISE_RMS (0.0004) | 
| #define | LOOPBACK_DETECTION_DURATION_SECONDS (0.8) | 
| #define | DEFAULT_FRAMES_PER_BUFFER (0) | 
| #define | PAQA_WAIT_STREAM_MSEC (100) | 
| #define | PAQA_TEST_DURATION (1.2) | 
| #define | PAQA_FLAG_TWO_STREAMS (1<<0) | 
| #define | PAQA_FLAG_USE_BLOCKING_IO (1<<1) | 
| #define | BIG_BUFFER_SIZE (sizeof(float) * 2 * 2 * 1024) | 
| #define | MAX_CONVERSION_SAMPLES (2 * 32 * 1024) | 
| #define | CONVERSION_BUFFER_SIZE (sizeof(float) * 2 * MAX_CONVERSION_SAMPLES) | 
Typedefs | |
| typedef struct TestParameters_s | TestParameters | 
| typedef struct LoopbackContext_s | LoopbackContext | 
| typedef struct UserOptions_s | UserOptions | 
Functions | |
| int | PaQa_RunLoopbackFullDuplex (LoopbackContext *loopbackContext) | 
| int | PaQa_WaitForStream (LoopbackContext *loopbackContext) | 
| int | PaQa_RunLoopbackHalfDuplex (LoopbackContext *loopbackContext) | 
| int | PaQa_RunInputOnly (LoopbackContext *loopbackContext) | 
| int | PaQa_RunLoopbackHalfDuplexBlockingIO (LoopbackContext *loopbackContext) | 
| int | PaQa_RunLoopbackFullDuplexBlockingIO (LoopbackContext *loopbackContext) | 
| int | PaQa_RunLoopback (LoopbackContext *loopbackContext) | 
| int | PaQa_CheckForClippedLoopback (LoopbackContext *loopbackContextPtr) | 
| int | PaQa_MeasureBackgroundNoise (LoopbackContext *loopbackContextPtr, double *rmsPtr) | 
| int | PaQa_CheckForLoopBack (UserOptions *userOptions, PaDeviceIndex inputDevice, PaDeviceIndex outputDevice) | 
| int | TestSampleFormatConversion (void) | 
| void | usage (const char *name) | 
| int | main (int argc, char **argv) | 
Variables | |
| int | g_testsPassed = 0 | 
| int | g_testsFailed = 0 | 
| const char * | s_FlagOnNames [] | 
| const char * | s_FlagOffNames [] | 
| #define BIG_BUFFER_SIZE (sizeof(float) * 2 * 2 * 1024) | 
| #define CONVERSION_BUFFER_SIZE (sizeof(float) * 2 * MAX_CONVERSION_SAMPLES) | 
| #define DEFAULT_FRAMES_PER_BUFFER (0) | 
| #define LOOPBACK_DETECTION_DURATION_SECONDS (0.8) | 
Referenced by PaQa_CheckForLoopBack().
| #define MAX_BACKGROUND_NOISE_RMS (0.0004) | 
Referenced by PaQa_CheckForLoopBack().
| #define MAX_CONVERSION_SAMPLES (2 * 32 * 1024) | 
| #define MAX_NUM_GENERATORS (8) | 
| #define MAX_NUM_RECORDINGS (8) | 
| #define PAQA_FLAG_TWO_STREAMS (1<<0) | 
Referenced by PaQa_CheckForLoopBack(), and PaQa_RunLoopback().
| #define PAQA_FLAG_USE_BLOCKING_IO (1<<1) | 
Referenced by PaQa_RunLoopback().
| #define PAQA_TEST_DURATION (1.2) | 
Referenced by PaQa_WaitForStream().
| #define PAQA_WAIT_STREAM_MSEC (100) | 
Referenced by PaQa_RunLoopbackFullDuplex(), and PaQa_WaitForStream().
| typedef struct LoopbackContext_s LoopbackContext | 
| typedef struct TestParameters_s TestParameters | 
Parameters that describe a single test run.
| typedef struct UserOptions_s UserOptions | 
| int main | ( | int | argc, | 
| char ** | argv | ||
| ) | 
References UserOptions_s::framesPerBuffer, g_testsFailed, g_testsPassed, UserOptions_s::inputDevice, UserOptions_s::inputLatency, UserOptions_s::outputDevice, UserOptions_s::outputLatency, Pa_GetDeviceCount(), Pa_GetVersion(), Pa_GetVersionText(), Pa_Initialize(), Pa_Terminate(), paNoDevice, PaQa_ListAudioDevices(), PaQa_TestAnalyzer(), UserOptions_s::sampleRate, UserOptions_s::saveBadWaves, TestSampleFormatConversion(), usage(), UserOptions_s::verbose, and UserOptions_s::waveFilePath.
| int PaQa_CheckForClippedLoopback | ( | LoopbackContext * | loopbackContextPtr | ) | 
| int PaQa_CheckForLoopBack | ( | UserOptions * | userOptions, | 
| PaDeviceIndex | inputDevice, | ||
| PaDeviceIndex | outputDevice | ||
| ) | 
Output a sine wave then try to detect it on input.
References TestParameters_s::amplitude, LoopbackContext_s::callbackCount, PaDeviceInfo::defaultHighInputLatency, PaDeviceInfo::defaultHighOutputLatency, PaDeviceInfo::defaultLowInputLatency, PaDeviceInfo::defaultLowOutputLatency, TestParameters_s::flags, PaQaSineGenerator_s::frequency, LoopbackContext_s::generators, TestParameters_s::inputParameters, LOOPBACK_DETECTION_DURATION_SECONDS, MAX_BACKGROUND_NOISE_RMS, TestParameters_s::maxFrames, PaDeviceInfo::maxInputChannels, PaDeviceInfo::maxOutputChannels, PaDeviceInfo::name, TestParameters_s::outputParameters, Pa_GetDeviceInfo(), Pa_IsFormatSupported(), paFormatIsSupported, paInvalidDevice, paNoError, PaQa_CheckForClippedLoopback(), PaQa_CorrelateSine(), PAQA_FLAG_TWO_STREAMS, PaQa_MeasureBackgroundNoise(), PaQa_RunLoopback(), QA_ASSERT_TRUE, LoopbackContext_s::recordings, and TestParameters_s::sampleRate.
| int PaQa_MeasureBackgroundNoise | ( | LoopbackContext * | loopbackContextPtr, | 
| double * | rmsPtr | ||
| ) | 
References PaQaRecording_s::buffer, PaQaRecording_s::numFrames, PaQa_MeasureRootMeanSquare(), PaQa_RunInputOnly(), and LoopbackContext_s::recordings.
Referenced by PaQa_CheckForLoopBack().
| int PaQa_RunInputOnly | ( | LoopbackContext * | loopbackContext | ) | 
Open one audio streams, just for input. Record background level. Then close the stream.
References LoopbackContext_s::done, TestParameters_s::framesPerBuffer, TestParameters_s::inputParameters, Pa_CloseStream(), Pa_OpenStream(), Pa_StartStream(), Pa_StopStream(), paClipOff, paNoError, PaQa_WaitForStream(), TestParameters_s::sampleRate, test(), and LoopbackContext_s::test.
Referenced by PaQa_MeasureBackgroundNoise().
| int PaQa_RunLoopback | ( | LoopbackContext * | loopbackContext | ) | 
Run some kind of loopback test.
References TestParameters_s::flags, Pa_GetErrorText(), paNoError, PAQA_FLAG_TWO_STREAMS, PAQA_FLAG_USE_BLOCKING_IO, PaQa_RunLoopbackFullDuplex(), PaQa_RunLoopbackFullDuplexBlockingIO(), PaQa_RunLoopbackHalfDuplex(), PaQa_RunLoopbackHalfDuplexBlockingIO(), and LoopbackContext_s::test.
Referenced by PaQa_CheckForLoopBack().
| int PaQa_RunLoopbackFullDuplex | ( | LoopbackContext * | loopbackContext | ) | 
Open a full duplex audio stream. Generate sine waves on the output channels and record the input channels. Then close the stream.
References LoopbackContext_s::done, TestParameters_s::framesPerBuffer, TestParameters_s::inputParameters, TestParameters_s::outputParameters, Pa_CloseStream(), Pa_OpenStream(), Pa_Sleep(), Pa_StartStream(), Pa_StopStream(), paClipOff, paNoError, PAQA_WAIT_STREAM_MSEC, TestParameters_s::sampleRate, test(), and LoopbackContext_s::test.
Referenced by PaQa_RunLoopback().
| int PaQa_RunLoopbackFullDuplexBlockingIO | ( | LoopbackContext * | loopbackContext | ) | 
Open one audio stream with non-blocking IO. Generate sine waves on the output channels and record the input channels. Then close the stream.
References TestParameters_s::framesPerBuffer, TestParameters_s::inputParameters, TestParameters_s::outputParameters, Pa_CloseStream(), Pa_OpenStream(), Pa_StartStream(), Pa_StopStream(), paClipOff, paNoError, TestParameters_s::sampleRate, and LoopbackContext_s::test.
Referenced by PaQa_RunLoopback().
| int PaQa_RunLoopbackHalfDuplex | ( | LoopbackContext * | loopbackContext | ) | 
Open two audio streams, one for input and one for output. Generate sine waves on the output channels and record the input channels. Then close the stream.
References LoopbackContext_s::done, TestParameters_s::framesPerBuffer, TestParameters_s::inputParameters, TestParameters_s::outputParameters, Pa_CloseStream(), Pa_OpenStream(), Pa_StartStream(), Pa_StopStream(), paNoError, PaQa_WaitForStream(), TestParameters_s::sampleRate, TestParameters_s::streamFlags, test(), and LoopbackContext_s::test.
Referenced by PaQa_RunLoopback().
| int PaQa_RunLoopbackHalfDuplexBlockingIO | ( | LoopbackContext * | loopbackContext | ) | 
Open two audio streams with non-blocking IO. Generate sine waves on the output channels and record the input channels. Then close the stream.
References TestParameters_s::framesPerBuffer, TestParameters_s::inputParameters, TestParameters_s::outputParameters, Pa_CloseStream(), Pa_OpenStream(), Pa_StartStream(), Pa_StopStream(), paClipOff, paNoError, TestParameters_s::sampleRate, and LoopbackContext_s::test.
Referenced by PaQa_RunLoopback().
| int PaQa_WaitForStream | ( | LoopbackContext * | loopbackContext | ) | 
Open two audio streams, one for input and one for output. Generate sine waves on the output channels and record the input channels. Then close the stream.
References LoopbackContext_s::done, Pa_Sleep(), PAQA_TEST_DURATION, PAQA_WAIT_STREAM_MSEC, and paTimedOut.
Referenced by PaQa_RunInputOnly(), and PaQa_RunLoopbackHalfDuplex().
| int TestSampleFormatConversion | ( | void | ) | 
References paInt16, paInt32, paInt8, PaQa_ConvertFromFloat(), PaQa_ConvertToFloat(), paUInt8, QA_ASSERT_CLOSE, QA_ASSERT_CLOSE_INT, and QA_ASSERT_EQUALS.
Referenced by main().
| void usage | ( | const char * | name | ) | 
Referenced by main().
| int g_testsFailed = 0 | 
Referenced by main().
| int g_testsPassed = 0 | 
Accumulate counts for how many tests pass or fail.
Referenced by main().
| const char* s_FlagOffNames[] | 
| const char* s_FlagOnNames[] | 
 1.8.5