void Audio::closeInputDevice() { if (!adc.isStreamOpen()) return; adc.stopStream(); while (adc.isStreamRunning()); adc.closeStream(); }
void av_audio_start() { av_audio_get(); if (rta.isStreamRunning()) { rta.stopStream(); } if (rta.isStreamOpen()) { // close it: rta.closeStream(); } unsigned int devices = rta.getDeviceCount(); if (devices < 1) { printf("No audio devices found\n"); return; } RtAudio::DeviceInfo info; RtAudio::StreamParameters iParams, oParams; printf("Available audio devices (%d):\n", devices); for (unsigned int i=0; i<devices; i++) { info = rta.getDeviceInfo(i); printf("Device %d: %dx%d (%d) %s\n", i, info.inputChannels, info.outputChannels, info.duplexChannels, info.name.c_str()); } printf("device %d\n", audio.indevice); info = rta.getDeviceInfo(audio.indevice); printf("Using audio input %d: %dx%d (%d) %s\n", audio.indevice, info.inputChannels, info.outputChannels, info.duplexChannels, info.name.c_str()); audio.inchannels = info.inputChannels; iParams.deviceId = audio.indevice; iParams.nChannels = audio.inchannels; iParams.firstChannel = 0; info = rta.getDeviceInfo(audio.outdevice); printf("Using audio output %d: %dx%d (%d) %s\n", audio.outdevice, info.inputChannels, info.outputChannels, info.duplexChannels, info.name.c_str()); audio.outchannels = info.outputChannels; oParams.deviceId = audio.outdevice; oParams.nChannels = audio.outchannels; oParams.firstChannel = 0; RtAudio::StreamOptions options; //options.flags |= RTAUDIO_NONINTERLEAVED; options.streamName = "av"; try { rta.openStream( &oParams, &iParams, RTAUDIO_FLOAT32, audio.samplerate, &audio.blocksize, &av_rtaudio_callback, NULL, &options ); rta.startStream(); printf("Audio started\n"); } catch ( RtError& e ) { fprintf(stderr, "%s\n", e.getMessage().c_str()); } }
void Audio::closeOutputDevice() { if (!dac.isStreamOpen()) return; dac.stopStream(); while (dac.isStreamRunning()); dac.closeStream(); outIsOpened = false; }
void stop() { try { // Stop the stream dac.stopStream(); } catch (RtAudioError &e) { e.printMessage(); } if (dac.isStreamOpen()) dac.closeStream(); }
void stop_audio(void) { try { audio.stopStream(); } catch(RtError& e) { e.printMessage(); } if(audio.isStreamOpen()) audio.closeStream(); }
int main() { RtAudio dac; //std::cout << dac.getDeviceCount() << std::endl; //2 if (dac.getDeviceCount() < 1) { std::cout << "\nNo audio devices found!\n"; exit(0); } RtAudio::StreamParameters parameters; //std::cout << dac.getDefaultOutputDevice() << std::endl; parameters.deviceId = dac.getDefaultOutputDevice(); //0 parameters.nChannels = 2; parameters.firstChannel = 0; unsigned int sampleRate = 44100; unsigned int bufferFrames = 256; // 256 sample frames RtAudio::StreamParameters input; input.deviceId = dac.getDefaultInputDevice(); input.nChannels = 2; input.firstChannel = 0; double data[2]; try { dac.openStream(¶meters, &input, RTAUDIO_SINT16, sampleRate, &bufferFrames, &saw, (void *)&data); dac.startStream(); } catch (RtAudioError& e) { e.printMessage(); exit(0); } char input1; std::cout << "\nPlaying ... press <enter> to quit.\n"; std::cin.get(input1); try { // Stop the stream dac.stopStream(); } catch (RtAudioError& e) { e.printMessage(); } if (dac.isStreamOpen()) dac.closeStream(); system("pause"); return 0; }
static void close_output(va_list args) { try { // Stop the stream vessl_out.stopStream(); if ( vessl_out.isStreamOpen() ) { vessl_out.closeStream(); printf("[vessl] output was closed.\n"); } } catch (RtAudioError& e) { e.printMessage(); } }
void keyboard (unsigned char key, int x, int y) { switch (key) { case 'a': autorotate = ! autorotate; break; case 't' : theString->Ktension *= 1.05946; theString->Ktension = fmin ( 1.0, theString->Ktension ); break; case 'l' : theString->Ktension *= 0.943876; break; case 'P' : theString->pluck(); break; case 'p' : theString->pluckvel(); break; case 'r' : theString->reset(); break; case 'd' : theString->print(); break; case 'v' : theString->toggleVibrator(); break; case 'f' : theString->vibratorFreq *= 0.943875; std::cout << "vib freq = " << theString->vibratorFreq << std::endl; break; case 'F' : theString->vibratorFreq /= 0.943875; std::cout << "vib freq = " << theString->vibratorFreq << std::endl; break; case 27: /* ESC */ try { // Stop the stream dac.stopStream(); } catch (RtError& e) { e.printMessage(); } if (dac.isStreamOpen()) dac.closeStream(); exit(0); break; default: break; } }
static void open_output(va_list args) { RtAudio::StreamParameters parameters; parameters.deviceId = vessl_out.getDefaultOutputDevice(); parameters.nChannels = 2; parameters.firstChannel = 0; RtAudio::StreamOptions options; if ( vessl_out_bufferFrames == 0 ) { options.flags |= RTAUDIO_MINIMIZE_LATENCY; } options.numberOfBuffers = 2; parameters.deviceId = vessl_out.getDefaultOutputDevice(); try { vessl_out.openStream( ¶meters, NULL, RTAUDIO_FLOAT32, vessl_out_sampleRate, &vessl_out_bufferFrames, &output_render_callback, (void*)0, &options ); } catch( RtAudioError& e ) { printf("[vessl] FAILED TO OPEN OUTPUT: %s\n", e.getMessage().c_str()); } if ( vessl_out.isStreamOpen() ) { try { vessl_out.startStream(); } catch( RtAudioError& e ) { printf("[vessl] FAILED TO START OUTPUT: %s\n", e.getMessage().c_str()); } } }
int main(int argc, char ** argv) { if ( argc==1 ) { std::cerr << "f " << freq << "\t frequency" << std::endl; std::cerr << "s " << scale << "\t scale" << std::endl; std::cerr << "t " << steps << "\t steps" << std::endl; std::cerr << "r " << rthresh << "\t right thresh" << std::endl; std::cerr << "f " << lthresh << "\t left thresh" << std::endl; std::cerr << "i " << inp_audio << "\t inp_audio device id" << std::endl; std::cerr << "o " << out_audio << "\t out_audio device id" << std::endl; } for ( int i = 1; i<argc-1; i++ ) { if ( !strcmp(argv[i],"f") ) { freq=atoi(argv[++i]); continue; } if ( !strcmp(argv[i],"l") ) { lthresh=atoi(argv[++i]); continue; } if ( !strcmp(argv[i],"r") ) { rthresh=atoi(argv[++i]); continue; } if ( !strcmp(argv[i],"s") ) { scale=atoi(argv[++i]); continue; } if ( !strcmp(argv[i],"t") ) { steps=atoi(argv[++i]); continue; } if ( !strcmp(argv[i],"i") ) { inp_audio=atoi(argv[++i]); continue; } if ( !strcmp(argv[i],"o") ) { out_audio=atoi(argv[++i]); continue; } } unsigned int bufferFrames = NUM_FREQ*2; Data data; data.fft.Init(bufferFrames, NUM_FREQ, 1, 2.5f); RtAudio adac; if ( adac.getDeviceCount() < 1 ) { std::cout << "\nNo audio devices found!\n"; exit( 0 ); } RtAudio::StreamParameters iParams, oParams; iParams.deviceId = inp_audio; // <----------- put them on iParams.nChannels = 1; // different devices oParams.deviceId = out_audio; // <----------- for duplex mode oParams.nChannels = 1; // try { adac.openStream( &oParams, &iParams, RTAUDIO_FLOAT32, 44100, &bufferFrames, &inout, &data ); } catch ( RtError& e ) { e.printMessage(); exit( 0 ); } try { adac.startStream(); main_init(); int k = 0; int kcen = 658; int lmean=0,rmean=0; while(true) { // find the global max: float m = 0; int mi=-1; for ( int i=64; i<NUM_FREQ; i++ ) // skip low freq { if ( data.freqs[i] > m ) { m = data.freqs[i]; mi = i; } } kcen = ipol(kcen,mi,4); // get the mean of the lower and the higher neighbours int lsum=0,rsum=0; for( int i=-steps; i<-2; i++ ) { lsum += data.value(kcen+i,scale); } for( int i=2; i<steps; i++ ) { rsum += data.value(kcen+i,scale); } rsum /= (steps-2); lsum /= (steps-2); int rd = rsum-rmean; int ld = lsum-lmean; lmean=ipol(lmean,lsum,256); rmean=ipol(rmean,rsum,256); int lc=' ',rc=' '; if ( rd>rthresh ) rc='r'; if ( ld>lthresh ) lc='l'; //if ( ld>lthresh || ld>lthresh ) std::cerr << char(lc) << " " << char(rc) << std::endl; main_idle(data,kcen); } // Stop the stream. adac.stopStream(); } catch ( RtError& e ) { e.printMessage(); goto cleanup; } cleanup: if ( adac.isStreamOpen() ) adac.closeStream(); return 0; }
int main( int argc, char *argv[]) { // COMMAND LINE ARG HANDLING map<string, ugen> ugens; ugens["--sine"] = &sine; ugens["--saw"] = &saw; ugens["--pulse"] = &pulse; ugens["--noise"] = &noise; ugens["--impulse"] = &impulse; if (argc < 4 || argc > 10 ) usage(); string type_arg = argv[1]; g_active_ugen = ugens[type_arg]; if (g_active_ugen == NULL) usage(); double freq_arg = atof(argv[2]); if (freq_arg <= 0) usage(); g_frequency = freq_arg; double width_arg = atof(argv[3]); if (width_arg < 0 || width_arg > 1) usage(); g_width = width_arg; if (argc > 4) { // modulation parameters present for (int i = 4; i < argc;) { if (string(argv[i]).compare("--input") == 0) { g_modulate_input = true; i++; } else if (string(argv[i]).compare("--fm") == 0) { g_fm_on = true; string fm_type_arg = argv[++i]; g_active_fm_ugen = ugens[fm_type_arg]; if (g_active_fm_ugen == NULL) usage(); double fm_freq_arg = atof(argv[++i]); if (fm_freq_arg <= 0) usage(); g_fm_frequency = fm_freq_arg; double fm_width_arg = atof(argv[++i]); if (fm_width_arg < 0 || fm_width_arg > 1) usage(); g_fm_width = fm_width_arg; double fm_index_arg = atoi(argv[++i]); g_fm_index = fm_index_arg; i++; } else usage(); } } // AUDIO SETUP RtAudio audio; audio.showWarnings( true ); RtAudio::StreamParameters output_params; RtAudio::StreamParameters input_params; // Choose an audio device and a sample rate unsigned int sample_rate; unsigned int devices = audio.getDeviceCount(); if ( devices < 1 ) { cerr << "No audio device found!" << endl; exit(1); } RtAudio::DeviceInfo info; for (unsigned int i = 0; i < devices; i++ ) { info = audio.getDeviceInfo(i); if ( info.isDefaultOutput ) { output_params.deviceId = i; output_params.nChannels = 2; if (info.sampleRates.size() < 1) { cerr << "No supported sample rates found!" << endl; exit(1); } for (int i = 0; i < info.sampleRates.size(); i++) { sample_rate = info.sampleRates[i]; if (sample_rate == 44100 || sample_rate == 48000) { // Found a nice sample rate, stop looking break; } } cout << "Using sample rate: " << sample_rate << endl; } if ( info.isDefaultInput ) { input_params.deviceId = i; input_params.nChannels = 1; } } cout << "Using output device ID " << output_params.deviceId << " which has " << output_params.nChannels << " output channels." << endl; cout << "Using input device ID " << input_params.deviceId << " which has " << input_params.nChannels << " input channels." << endl; RtAudio::StreamOptions options; options.flags |= RTAUDIO_HOG_DEVICE; options.flags |= RTAUDIO_SCHEDULE_REALTIME; unsigned int buffer_frames = 256; try { audio.openStream( &output_params, // output params &input_params, // input params RTAUDIO_FLOAT64, // audio format sample_rate, // sample rate &buffer_frames, // num frames per buffer (mutable by rtaudio) &callback, // audio callback &audio, // user data pointer HACK HACK :D &options); // stream options audio.startStream(); } catch ( RtError &e ) { e.printMessage(); goto cleanup; } char input; cout << "Playing, press enter to quit (buffer frames = " << buffer_frames << ")." << endl; cin.get( input ); try { audio.stopStream(); } catch ( RtError &e ) { e.printMessage(); } cleanup: if ( audio.isStreamOpen() ) { audio.closeStream(); } return 0; }
int main( int argc, char *argv[] ) { unsigned int bufferFrames, fs, oDevice = 0, iDevice = 0, iOffset = 0, oOffset = 0; char input; // minimal command-line checking if (argc < 3 || argc > 7 ) usage(); RtAudio dac; if ( dac.getDeviceCount() < 1 ) { std::cout << "\nNo audio devices found!\n"; exit( 1 ); } channels = (unsigned int) atoi( argv[1] ); fs = (unsigned int) atoi( argv[2] ); if ( argc > 3 ) iDevice = (unsigned int) atoi( argv[3] ); if ( argc > 4 ) oDevice = (unsigned int) atoi(argv[4]); if ( argc > 5 ) iOffset = (unsigned int) atoi(argv[5]); if ( argc > 6 ) oOffset = (unsigned int) atoi(argv[6]); double *data = (double *) calloc( channels, sizeof( double ) ); // Let RtAudio print messages to stderr. dac.showWarnings( true ); // Set our stream parameters for output only. bufferFrames = 256; RtAudio::StreamParameters oParams, iParams; oParams.deviceId = oDevice; oParams.nChannels = channels; oParams.firstChannel = oOffset; RtAudio::StreamOptions options; options.flags = RTAUDIO_HOG_DEVICE; try { dac.openStream( &oParams, NULL, RTAUDIO_FLOAT64, fs, &bufferFrames, &sawi, (void *)data, &options ); std::cout << "\nStream latency = " << dac.getStreamLatency() << std::endl; // Start the stream dac.startStream(); std::cout << "\nPlaying ... press <enter> to stop.\n"; std::cin.get( input ); // Stop the stream dac.stopStream(); // Restart again std::cout << "Press <enter> to restart.\n"; std::cin.get( input ); dac.startStream(); // Test abort function std::cout << "Playing again ... press <enter> to abort.\n"; std::cin.get( input ); dac.abortStream(); // Restart another time std::cout << "Press <enter> to restart again.\n"; std::cin.get( input ); dac.startStream(); std::cout << "Playing again ... press <enter> to close the stream.\n"; std::cin.get( input ); } catch ( RtError& e ) { e.printMessage(); goto cleanup; } if ( dac.isStreamOpen() ) dac.closeStream(); // Test non-interleaved functionality options.flags = RTAUDIO_NONINTERLEAVED; try { dac.openStream( &oParams, NULL, RTAUDIO_FLOAT64, fs, &bufferFrames, &sawni, (void *)data, &options ); std::cout << "Press <enter> to start non-interleaved playback.\n"; std::cin.get( input ); // Start the stream dac.startStream(); std::cout << "\nPlaying ... press <enter> to stop.\n"; std::cin.get( input ); } catch ( RtError& e ) { e.printMessage(); goto cleanup; } if ( dac.isStreamOpen() ) dac.closeStream(); // Now open a duplex stream. unsigned int bufferBytes; iParams.deviceId = iDevice; iParams.nChannels = channels; iParams.firstChannel = iOffset; options.flags = RTAUDIO_NONINTERLEAVED; try { dac.openStream( &oParams, &iParams, RTAUDIO_SINT32, fs, &bufferFrames, &inout, (void *)&bufferBytes, &options ); bufferBytes = bufferFrames * channels * 4; std::cout << "Press <enter> to start duplex operation.\n"; std::cin.get( input ); // Start the stream dac.startStream(); std::cout << "\nRunning ... press <enter> to stop.\n"; std::cin.get( input ); // Stop the stream dac.stopStream(); std::cout << "\nStopped ... press <enter> to restart.\n"; std::cin.get( input ); // Restart the stream dac.startStream(); std::cout << "\nRunning ... press <enter> to stop.\n"; std::cin.get( input ); } catch ( RtError& e ) { e.printMessage(); } cleanup: if ( dac.isStreamOpen() ) dac.closeStream(); free( data ); return 0; }
int main( int argc, char *argv[] ) { unsigned int bufferFrames, fs, device = 0, offset = 0; // minimal command-line checking if (argc < 3 || argc > 6 ) usage(); RtAudio dac; if ( dac.getDeviceCount() < 1 ) { std::cout << "\nNo audio devices found!\n"; exit( 1 ); } channels = (unsigned int) atoi( argv[1] ); fs = (unsigned int) atoi( argv[2] ); if ( argc > 3 ) device = (unsigned int) atoi( argv[3] ); if ( argc > 4 ) offset = (unsigned int) atoi( argv[4] ); if ( argc > 5 ) nFrames = (unsigned int) (fs * atof( argv[5] )); if ( nFrames > 0 ) checkCount = true; double *data = (double *) calloc( channels, sizeof( double ) ); // Let RtAudio print messages to stderr. dac.showWarnings( true ); // Set our stream parameters for output only. bufferFrames = 256; RtAudio::StreamParameters oParams; oParams.deviceId = device; oParams.nChannels = channels; oParams.firstChannel = offset; options.flags |= RTAUDIO_HOG_DEVICE; options.flags |= RTAUDIO_SCHEDULE_REALTIME; #if !defined( USE_INTERLEAVED ) options.flags |= RTAUDIO_NONINTERLEAVED; #endif try { dac.openStream( &oParams, NULL, FORMAT, fs, &bufferFrames, &saw, (void *)data, &options ); dac.startStream(); } catch ( RtError& e ) { e.printMessage(); goto cleanup; } if ( checkCount ) { while ( dac.isStreamRunning() == true ) SLEEP( 100 ); } else { char input; //std::cout << "Stream latency = " << dac.getStreamLatency() << "\n" << std::endl; std::cout << "\nPlaying ... press <enter> to quit (buffer size = " << bufferFrames << ").\n"; std::cin.get( input ); try { // Stop the stream dac.stopStream(); } catch ( RtError& e ) { e.printMessage(); } } cleanup: if ( dac.isStreamOpen() ) dac.closeStream(); free( data ); return 0; }
int main( int argc, char *argv[] ) { unsigned int channels, fs, bufferFrames, device = 0, offset = 0; double time = 2.0; FILE *fd; // minimal command-line checking if ( argc < 3 || argc > 6 ) usage(); RtAudio adc; if ( adc.getDeviceCount() < 1 ) { std::cout << "\nNo audio devices found!\n"; exit( 1 ); } channels = (unsigned int) atoi( argv[1] ); fs = (unsigned int) atoi( argv[2] ); if ( argc > 3 ) time = (double) atof( argv[3] ); if ( argc > 4 ) device = (unsigned int) atoi( argv[4] ); if ( argc > 5 ) offset = (unsigned int) atoi( argv[5] ); // Let RtAudio print messages to stderr. adc.showWarnings( true ); // Set our stream parameters for input only. bufferFrames = 512; RtAudio::StreamParameters iParams; iParams.deviceId = device; iParams.nChannels = channels; iParams.firstChannel = offset; InputData data; data.buffer = 0; try { adc.openStream( NULL, &iParams, FORMAT, fs, &bufferFrames, &input, (void *)&data ); } catch ( RtError& e ) { std::cout << '\n' << e.getMessage() << '\n' << std::endl; goto cleanup; } data.bufferBytes = bufferFrames * channels * sizeof( MY_TYPE ); data.totalFrames = (unsigned long) (fs * time); data.frameCounter = 0; data.channels = channels; unsigned long totalBytes; totalBytes = data.totalFrames * channels * sizeof( MY_TYPE ); // Allocate the entire data buffer before starting stream. data.buffer = (MY_TYPE*) malloc( totalBytes ); if ( data.buffer == 0 ) { std::cout << "Memory allocation error ... quitting!\n"; goto cleanup; } try { adc.startStream(); } catch ( RtError& e ) { std::cout << '\n' << e.getMessage() << '\n' << std::endl; goto cleanup; } std::cout << "\nRecording for " << time << " seconds ... writing file 'record.raw' (buffer frames = " << bufferFrames << ")." << std::endl; while ( adc.isStreamRunning() ) { SLEEP( 100 ); // wake every 100 ms to check if we're done } // Now write the entire data to the file. fd = fopen( "record.raw", "wb" ); fwrite( data.buffer, sizeof( MY_TYPE ), data.totalFrames * channels, fd ); fclose( fd ); cleanup: if ( adc.isStreamOpen() ) adc.closeStream(); if ( data.buffer ) free( data.buffer ); return 0; }
int main () { // Damit das Programm funktioniert, muss eine 16Bit PCM Wave-Datei im // gleichen Ordner liegen ! const char * fname = "test.flac" ; // Soundfile-Handle aus der libsndfile-Bibliothek SndfileHandle file = SndfileHandle (fname) ; // Alle möglichen Infos über die Audio-Datei ausgeben ! std::cout << "Reading file: " << fname << std::endl; std::cout << "File format: " << file.format() << std::endl; std::cout << "PCM 16 BIT: " << (SF_FORMAT_WAV | SF_FORMAT_PCM_16) << std::endl; std::cout << "Samples in file: " << file.frames() << std::endl; std::cout << "Samplerate " << file.samplerate() << std::endl; std::cout << "Channels: " << file.channels() << std::endl; // Die RtAudio-Klasse ist gleichermassen dac und adc, wird hier aber nur als dac verwendet ! RtAudio dac; if ( dac.getDeviceCount() < 1 ) { std::cout << "\nNo audio devices found!\n"; return 0; } // Output params ... RtAudio::StreamParameters parameters; parameters.deviceId = dac.getDefaultOutputDevice(); parameters.nChannels = 2; parameters.firstChannel = 0; unsigned int sampleRate = 44100; // ACHTUNG! Frames != Samples // ein Frame = Samples für alle Kanäle // d.h. |Samples| = Kanäle*Frames ! unsigned int bufferFrames = 1024; // Da wir 16 Bit PCM-Daten lesen, sollte als Datenformat RTAUDIO_SINT16 genutzt // werden. // Als Daten wird der Callback-Struktur hier das Soundfile-Handle übergeben. // Sollte man in einer "ernsthaften" Lösung anders machen ! // Inkompatible Formate können übrigens "interessante" Effekte ergeben ! try { dac.openStream( ¶meters, NULL, RTAUDIO_SINT16, sampleRate, &bufferFrames, &fplay, (void *)&file); dac.startStream(); } catch ( RtAudioError& e ) { e.printMessage(); return 0; } char input; std::cout << "\nPlaying ... press <enter> to quit.\n"; std::cin.get( input ); try { // Stop the stream dac.stopStream(); } catch (RtAudioError& e) { e.printMessage(); } if ( dac.isStreamOpen() ) dac.closeStream(); return 0 ; }
//----------------------------------------------------------------------------- // name: main() // desc: entry point //----------------------------------------------------------------------------- int main( int argc, char ** argv ) { callbackData data; // global for frequency data.g_freq=440; // global sample number variable data.g_t = 0; // global for width; data.g_width = 0; //global for input data.g_input=0; //check parameters and parse input if (!parse(argc,argv,data)) { exit(0); } // instantiate RtAudio object RtAudio adac; // variables unsigned int bufferBytes = 0; // frame size unsigned int bufferFrames = 512; // check for audio devices if( adac.getDeviceCount() < 1 ) { // nopes cout << "no audio devices found!" << endl; exit( 1 ); } // let RtAudio print messages to stderr. adac.showWarnings( true ); // set input and output parameters RtAudio::StreamParameters iParams, oParams; iParams.deviceId = adac.getDefaultInputDevice(); iParams.nChannels = MY_CHANNELS; iParams.firstChannel = 0; oParams.deviceId = adac.getDefaultOutputDevice(); oParams.nChannels = MY_CHANNELS; oParams.firstChannel = 0; // create stream options RtAudio::StreamOptions options; // go for it try { // open a stream adac.openStream( &oParams, &iParams, MY_FORMAT, MY_SRATE, &bufferFrames, &callme, (void *)&data, &options ); } catch( RtError& e ) { // error! cout << e.getMessage() << endl; exit( 1 ); } // compute bufferBytes = bufferFrames * MY_CHANNELS * sizeof(SAMPLE); // test RtAudio functionality for reporting latency. cout << "stream latency: " << adac.getStreamLatency() << " frames" << endl; // go for it try { // start stream adac.startStream(); // get input char input; std::cout << "running... press <enter> to quit (buffer frames: " << bufferFrames << ")" << endl; std::cin.get(input); // stop the stream. adac.stopStream(); } catch( RtError& e ) { // print error message cout << e.getMessage() << endl; goto cleanup; } cleanup: // close if open if( adac.isStreamOpen() ) adac.closeStream(); // done outfile<<"];\nplot(x)"; return 0; }
int main(const int argc, const char *argv[]) { RtAudio adc; unsigned int deviceCount = adc.getDeviceCount(); if (deviceCount < 1) { cout << endl << "No audio devices found!" << endl; exit(0); } unsigned int inputDevice = adc.getDefaultInputDevice(); unsigned int outputDevice = adc.getDefaultOutputDevice(); for (int i=0; i<argc; i++) { if (strcmp(argv[i], "-devices") == 0) { // Scan through devices for various capabilities showDevices(deviceCount, adc); exit(0); } if (strcmp(argv[i], "-input") == 0) { if (i == argc-1) { usage(); exit(0); } inputDevice=atoi(argv[++i]); validateDevice(inputDevice, deviceCount, adc, true); } if (strcmp(argv[i], "-output") == 0) { if (i == argc-1) { usage(); exit(0); } outputDevice=atoi(argv[++i]); validateDevice(outputDevice, deviceCount, adc, false); } } // Initialise DSP thread // Initialise GUI unsigned int sampleRate = 44100; unsigned int bufferFrames = 512; unsigned int bufferBytes = 0; RtAudio::StreamParameters inputParameters; inputParameters.deviceId = inputDevice; inputParameters.nChannels = 2; inputParameters.firstChannel = 0; RtAudio::StreamParameters outputParameters; outputParameters.deviceId = outputDevice; outputParameters.nChannels = 2; outputParameters.firstChannel = 0; try { adc.openStream(&outputParameters, &inputParameters, RTAUDIO_SINT16, sampleRate, &bufferFrames, &inout, &bufferBytes); adc.startStream(); } catch (RtAudioError& e) { e.printMessage(); exit(0); } // adc.openStream could have adjusted the bufferFrames. // Set the user data buffer to the sample buffer size in bytes, so that the // inout callback function knows how much data to copy. The example code // uses this - 2 is Stereo, 4 is signed int (4 bytes on OSX) bufferBytes = bufferFrames * 2 * 4; // Can now initialise buffer management. inout could have been asking for // buffers but buffer management won't give them until it has been // initialised. cout << "buffer size in bytes is " << bufferBytes << endl; // TODO protect with mutex bufferManager = new BufferManager(bufferBytes, maxBuffers); char input; cout << endl << "Recording ... press <enter> to quit." << endl; cin.get(input); cout << "Terminating" << endl; try { // Stop the stream adc.stopStream(); } catch (RtAudioError& e) { e.printMessage(); } if (adc.isStreamOpen()) adc.closeStream(); // TODO shut down DSP chain, release all buffers // TODO shut down Display chain, release all buffers delete bufferManager; cout << "Terminated" << endl; return 0; }
//----------------------------------------------------------------------------- // name: main() // desc: entry point //----------------------------------------------------------------------------- int main( int argc, char ** argv ) { // instantiate RtAudio object RtAudio audio; // variables unsigned int bufferBytes = 0; // frame size unsigned int bufferFrames = 512; // check for audio devices if( audio.getDeviceCount() < 1 ) { // nopes cout << "no audio devices found!" << endl; exit( 1 ); } // initialize GLUT glutInit( &argc, argv ); // init gfx initGfx(); // let RtAudio print messages to stderr. audio.showWarnings( true ); // set input and output parameters RtAudio::StreamParameters iParams, oParams; iParams.deviceId = audio.getDefaultInputDevice(); iParams.nChannels = MY_CHANNELS; iParams.firstChannel = 0; oParams.deviceId = audio.getDefaultOutputDevice(); oParams.nChannels = MY_CHANNELS; oParams.firstChannel = 0; // create stream options RtAudio::StreamOptions options; // go for it try { // open a stream audio.openStream( &oParams, &iParams, MY_FORMAT, MY_SRATE, &bufferFrames, &callme, (void *)&bufferBytes, &options ); } catch( RtError& e ) { // error! cout << e.getMessage() << endl; exit( 1 ); } // compute bufferBytes = bufferFrames * MY_CHANNELS * sizeof(SAMPLE); // allocate global buffer g_bufferSize = bufferFrames; g_buffer = new SAMPLE[g_bufferSize]; memset( g_buffer, 0, sizeof(SAMPLE)*g_bufferSize ); // go for it try { // start stream audio.startStream(); // let GLUT handle the current thread from here glutMainLoop(); // stop the stream. audio.stopStream(); } catch( RtError& e ) { // print error message cout << e.getMessage() << endl; goto cleanup; } cleanup: // close if open if( audio.isStreamOpen() ) audio.closeStream(); // done return 0; }
//----------------------------------------------------------------------------- // name: main() // desc: entry point //----------------------------------------------------------------------------- int main( int argc, char ** argv ) { RtMidiIn *midiin = new RtMidiIn(); // Check available ports. unsigned int nPorts = midiin->getPortCount(); if ( nPorts == 0 ) { std::cout << "No ports available!\n"; //goto cleanup; } midiin->openPort( 0 ); // Set our callback function. This should be done immediately after // opening the port to avoid having incoming messages written to the // queue. midiin->setCallback( &mycallback ); // Don't ignore sysex, timing, or active sensing messages. midiin->ignoreTypes( false, false, false ); std::cout << "\nReading MIDI input ... press <enter> to quit.\n"; char input; std::cin.get(input); // instantiate RtAudio object RtAudio audio; // variables unsigned int bufferBytes = 0; // frame size unsigned int numFrames = 512; // check for audio devices if( audio.getDeviceCount() < 1 ) { // nopes cout << "no audio devices found!" << endl; exit( 1 ); } // let RtAudio print messages to stderr. audio.showWarnings( true ); // set input and output parameters RtAudio::StreamParameters iParams, oParams; iParams.deviceId = audio.getDefaultInputDevice(); iParams.nChannels = MY_CHANNELS; iParams.firstChannel = 0; oParams.deviceId = audio.getDefaultOutputDevice(); oParams.nChannels = MY_CHANNELS; oParams.firstChannel = 0; // create stream options RtAudio::StreamOptions options; // go for it try { // open a stream audio.openStream( &oParams, &iParams, MY_FORMAT, MY_SRATE, &numFrames, &callme, NULL, &options ); } catch( RtError& e ) { // error! cout << e.getMessage() << endl; exit( 1 ); } // compute bufferBytes = numFrames * MY_CHANNELS * sizeof(SAMPLE); // test RtAudio functionality for reporting latency. cout << "stream latency: " << audio.getStreamLatency() << " frames" << endl; for( int i = 0; i < MY_NUMSTRINGS; i++ ) { // intialize g_ks[i].init( MY_SRATE*2, 440, MY_SRATE ); } // go for it try { // start stream audio.startStream(); char input; std::cout << "Press any key to quit "; std::cin.get(input); // stop the stream. audio.stopStream(); } catch( RtError& e ) { // print error message cout << e.getMessage() << endl; goto cleanup; } cleanup: // close if open if( audio.isStreamOpen() ) audio.closeStream(); delete midiin; // done return 0; }