// ex11.cpp / Music 120 / Lecture 3 // Pitch-controllable "BeeThree" instrument. Stops when pitch is set "zero". // // Mac OS X with StkX: // g++ -g -o ex11 ex11.cpp -framework StkX -D__STKX__ // // CCRMA Linux machines: // g++ -g -o ex11 ex11.cpp -I/usr/include/stk -lstk -lasound -ljack // // Usage: ./ex11 // Example: ./ex11 // // Created by Woon Seung Yeo on 10/9/06. // Based on the callback sample code by Gary Scavone and Perry Cook. // Copyright 2006 CCRMA, Stanford University. All rights reserved. #include #ifdef __STKX__ #include #else #include "BeeThree.h" #include "RtAudio.h" #endif int tick_c(char *buffer, int bufferSize, void *dataPointer) { // Pointer to "BeeThree" from main BeeThree *beethree = (BeeThree *) dataPointer; StkFloat *samples = (StkFloat *) buffer; // Filling buffer with "tick"s of beethree for ( int i=0; itick(); return 0; } int main (int argc, char* const argv[]) { Stk::setSampleRate( 44100.0 ); float frequency = 440.0; // Initial frequency value BeeThree* beethree = new BeeThree(); // BeeThree beethree->noteOn( frequency, 0.7 ); // "noteOn" RtAudio* dac; RtAudioFormat format = ( sizeof(StkFloat) == 8 ) ? RTAUDIO_FLOAT64 : RTAUDIO_FLOAT32; int bufferSize = RT_BUFFER_SIZE; dac = new RtAudio(0, 1, 0, 0, format, (int)Stk::sampleRate(), &bufferSize, 0); dac->setStreamCallback(&tick_c, (void *)beethree); dac->startStream(); // Loop to take frequency value. Enter "0" to exit. while ( frequency != 0 ) { std::cout << "\nEnter new frequency (0 to quit): "; std::cin >> frequency; beethree->setFrequency( frequency ); } dac->cancelStreamCallback(); dac->closeStream(); delete dac; delete beethree; return 0; }