| robert@464 | 1 /* | 
| robert@464 | 2  ____  _____ _        _ | 
| robert@464 | 3 | __ )| ____| |      / \ | 
| robert@464 | 4 |  _ \|  _| | |     / _ \ | 
| robert@464 | 5 | |_) | |___| |___ / ___ \ | 
| robert@464 | 6 |____/|_____|_____/_/   \_\ | 
| robert@464 | 7 | 
| robert@464 | 8 The platform for ultra-low latency audio and sensor processing | 
| robert@464 | 9 | 
| robert@464 | 10 http://bela.io | 
| robert@464 | 11 | 
| robert@464 | 12 A project of the Augmented Instruments Laboratory within the | 
| robert@464 | 13 Centre for Digital Music at Queen Mary University of London. | 
| robert@464 | 14 http://www.eecs.qmul.ac.uk/~andrewm | 
| robert@464 | 15 | 
| robert@464 | 16 (c) 2016 Augmented Instruments Laboratory: Andrew McPherson, | 
| robert@464 | 17 	Astrid Bin, Liam Donovan, Christian Heinrichs, Robert Jack, | 
| robert@464 | 18 	Giulio Moro, Laurel Pardue, Victor Zappi. All rights reserved. | 
| robert@464 | 19 | 
| robert@464 | 20 The Bela software is distributed under the GNU Lesser General Public License | 
| robert@464 | 21 (LGPL 3.0), available here: https://www.gnu.org/licenses/lgpl-3.0.txt | 
| robert@464 | 22 */ | 
| robert@464 | 23 | 
| robert@464 | 24 #include <iostream> | 
| robert@464 | 25 #include <cstdlib> | 
| robert@464 | 26 #include <libgen.h> | 
| robert@464 | 27 #include <signal.h> | 
| robert@464 | 28 #include <getopt.h> | 
| robert@464 | 29 #include <Bela.h> | 
| robert@464 | 30 | 
| robert@464 | 31 using namespace std; | 
| robert@464 | 32 | 
| robert@464 | 33 // Handle Ctrl-C by requesting that the audio rendering stop | 
| robert@464 | 34 void interrupt_handler(int var) | 
| robert@464 | 35 { | 
| robert@464 | 36 	gShouldStop = true; | 
| robert@464 | 37 } | 
| robert@464 | 38 | 
| robert@464 | 39 // Print usage information | 
| robert@464 | 40 void usage(const char * processName) | 
| robert@464 | 41 { | 
| robert@464 | 42 	cerr << "Usage: " << processName << " [options]" << endl; | 
| robert@464 | 43 | 
| robert@464 | 44 	Bela_usage(); | 
| robert@464 | 45 | 
| robert@464 | 46 	cerr << "   --help [-h]:             Print this menu\n"; | 
| robert@464 | 47 } | 
| robert@464 | 48 | 
| robert@464 | 49 int main(int argc, char *argv[]) | 
| robert@464 | 50 { | 
| robert@464 | 51 	BelaInitSettings settings;	// Standard audio settings | 
| robert@464 | 52 | 
| robert@464 | 53 	struct option customOptions[] = | 
| robert@464 | 54 	{ | 
| robert@464 | 55 		{"help", 0, NULL, 'h'}, | 
| robert@464 | 56 		{NULL, 0, NULL, 0} | 
| robert@464 | 57 	}; | 
| robert@464 | 58 | 
| robert@464 | 59 	// Set default settings | 
| robert@464 | 60 	Bela_defaultSettings(&settings); | 
| robert@464 | 61 | 
| robert@464 | 62 	// Parse command-line arguments | 
| robert@464 | 63 	while (1) { | 
| robert@464 | 64 		int c; | 
| robert@464 | 65 		if ((c = Bela_getopt_long(argc, argv, "h", customOptions, &settings)) < 0) | 
| robert@464 | 66 				break; | 
| robert@464 | 67 		switch (c) { | 
| robert@464 | 68 		case 'h': | 
| robert@464 | 69 				usage(basename(argv[0])); | 
| robert@464 | 70 				exit(0); | 
| robert@464 | 71 		case '?': | 
| robert@464 | 72 		default: | 
| robert@464 | 73 				usage(basename(argv[0])); | 
| robert@464 | 74 				exit(1); | 
| robert@464 | 75 		} | 
| robert@464 | 76 	} | 
| robert@464 | 77 | 
| robert@464 | 78 	// Initialise the PRU audio device | 
| robert@464 | 79 	if(Bela_initAudio(&settings, 0) != 0) { | 
| robert@464 | 80 		cout << "Error: unable to initialise audio" << endl; | 
| robert@464 | 81 		return -1; | 
| robert@464 | 82 	} | 
| robert@464 | 83 | 
| robert@464 | 84 	// Start the audio device running | 
| robert@464 | 85 	if(Bela_startAudio()) { | 
| robert@464 | 86 		cout << "Error: unable to start real-time audio" << endl; | 
| robert@464 | 87 		return -1; | 
| robert@464 | 88 	} | 
| robert@464 | 89 | 
| robert@464 | 90 	// Set up interrupt handler to catch Control-C and SIGTERM | 
| robert@464 | 91 	signal(SIGINT, interrupt_handler); | 
| robert@464 | 92 	signal(SIGTERM, interrupt_handler); | 
| robert@464 | 93 | 
| robert@464 | 94 	// Run until told to stop | 
| robert@464 | 95 	while(!gShouldStop) { | 
| robert@464 | 96 		usleep(100000); | 
| robert@464 | 97 	} | 
| robert@464 | 98 | 
| robert@464 | 99 	// Stop the audio device | 
| robert@464 | 100 	Bela_stopAudio(); | 
| robert@464 | 101 | 
| robert@464 | 102 	// Clean up any resources allocated for audio | 
| robert@464 | 103 	Bela_cleanupAudio(); | 
| robert@464 | 104 | 
| robert@464 | 105 	// All done! | 
| robert@464 | 106 	return 0; | 
| robert@464 | 107 } |