Mercurial > hg > beaglert
diff projects/audio_in_FFT/main.cpp @ 5:09f03ac40fcc
API improvements and cleanups. Now all common audio command-line options can be parsed automatically.
author | andrewm |
---|---|
date | Sat, 08 Nov 2014 16:16:55 +0100 |
parents | f34c63568523 |
children | 901d205d1a3c |
line wrap: on
line diff
--- a/projects/audio_in_FFT/main.cpp Thu Nov 06 19:02:48 2014 +0000 +++ b/projects/audio_in_FFT/main.cpp Sat Nov 08 16:16:55 2014 +0100 @@ -9,6 +9,7 @@ #include <cstdlib> #include <libgen.h> #include <signal.h> +#include <getopt.h> #include "../../include/RTAudio.h" using namespace std; @@ -22,44 +23,43 @@ // Print usage information void usage(const char * processName) { - cerr << "Usage: " << processName << " [-h] [-v] [-p period] [-f frequency]" << endl; - cerr << " -h: Print this menu\n"; - cerr << " -v: Enable verbose messages\n"; - cerr << " -p period: Set the period (hardware buffer) size in sensor frames\n"; - cerr << " -s fftsize: Set the fSize of the FFT, in samples\n"; - cerr << " -m: Enable the matrix (ADC and DAC) as well as audio\n"; + cerr << "Usage: " << processName << " [options]" << endl; + + BeagleRT_usage(); + + cerr << " --fftsize [-s] size: Set the fSize of the FFT, in samples\n"; + cerr << " --help [-h]: Print this menu\n"; } int main(int argc, char *argv[]) { - int periodSize = 8; // Period size in sensor frames - int verbose = 0; // Verbose printing level + RTAudioSettings settings; // Standard audio settings int fftSize = 64; // Size of the FFT, in samples - int useMatrix = 0; // Whether to use the matrix or just audio + + struct option customOptions[] = + { + {"help", 0, NULL, 'h'}, + {"fftsize", 1, NULL, 's'}, + {NULL, 0, NULL, 0} + }; + + // Set default settings + BeagleRT_defaultSettings(&settings); + + settings.useMatrix = 0; // No matrix usage by default // Parse command-line arguments while (1) { int c; - if ((c = getopt(argc, argv, "hp:vf:m")) < 0) + if ((c = BeagleRT_getopt_long(argc, argv, "hs:", customOptions, &settings)) < 0) break; switch (c) { case 'h': usage(basename(argv[0])); exit(0); - case 'p': - periodSize = atoi(optarg); - if(periodSize < 1) - periodSize = 1; - break; - case 'v': - verbose = 1; - break; case 's': fftSize = atof(optarg); break; - case 'm': - useMatrix = 1; - break; case '?': default: usage(basename(argv[0])); @@ -67,26 +67,14 @@ } } - - // Set verbose logging information (optional by using value > 0; default is 0) - setVerboseLevel(verbose); - - if(verbose) { - cout << "Starting with period size " << periodSize << " and FFT size " << fftSize << endl; - if(useMatrix) - cout << "Matrix enabled\n"; - else - cout << "Matrix disabled\n"; - } - // Initialise the PRU audio device - if(initAudio(periodSize, useMatrix, &fftSize) != 0) { + if(BeagleRT_initAudio(&settings, &fftSize) != 0) { cout << "Error: unable to initialise audio" << endl; return -1; } // Start the audio device running - if(startAudio()) { + if(BeagleRT_startAudio()) { cout << "Error: unable to start real-time audio" << endl; return -1; } @@ -100,15 +88,12 @@ } // Stop the audio device - stopAudio(); - - if(verbose) { - cout << "Cleaning up..." << endl; - } + BeagleRT_stopAudio(); // Clean up any resources allocated for audio - cleanupAudio(); + BeagleRT_cleanupAudio(); // All done! return 0; } +