// // Programmer: Craig Stuart Sapp <craig@ccrma.stanford.edu> // Creation Date: Wed Mar 8 20:28:55 PST 2000 // Last Modified: Wed Mar 8 21:14:28 PST 2000 // Filename: ...sig/doc/examples/all/wiggle.cpp // Syntax: C++; batonImprov 2.0; sig 1.0 // // Description: Program that converts baton position information // into a soundfile. // #include "batonImprov.h" #include "sig.h" /*----------------- beginning of improvization algorithms ---------------*/ SoundFileOut *outsound = NULL; // sound file writing object int writingQ = 0; // 0=off, 1=on int channels = 1; // 1=monophonic, 2=stereo /*--------------------- maintenance algorithms --------------------------*/ ////////////////////////////// // // description -- this function is called by the improv interface // whenever a capital "D" is pressed on the computer keyboard. // Put a description of the program and how to use it here. // void description(void) { cout << "Wiggle: a program that creates a sound file from positions\n" "from the radio batons.\n" "\n" "Commands: \n" " Space: turn sound file writing on/off\n" " 1: monophonic sound with x-axis of baton1 only\n" " 2: stereo sound with x-axis and y-axis of baton1\n" "\n" << endl; } ////////////////////////////// // // initialization -- this function is called by the improv // interface once at the start of the program. Put items // here which need to be initialized at the beginning of // the program. // void initialization(void) { } ////////////////////////////// // // finishup -- this function is called by the improv interface // whenever the program is exited. Put items here which // need to be taken care of when the program is finished. // void finishup(void) { if (outsound != NULL) { delete outsound; outsound = NULL; } } /*-------------------- main loop algorithms -----------------------------*/ ////////////////////////////// // // mainloopalgorithms -- this function is called by the improv interface // continuously while the program is running. The global variable t_time // which stores the current time is set just before this function is // called and remains constant while in this functions. // void mainloopalgorithms(void) { if (outsound != NULL && baton.t1pb.getCount() > 0) { baton.t1pb.extract(); outsound->connect(baton.x1pb.extract()/64.0 - 1.0, 0); outsound->connect(baton.y1pb.extract()/64.0 - 1.0, 1); outsound->action(); } } /*-------------------- triggered algorithms -----------------------------*/ ////////////////////////////// // // stick1trig -- this function is called automatically whenever // a baton stick #1 trigger is received. // void stick1trig(void) { } ////////////////////////////// // // stick2trig -- this function is called automatically whenever // a baton stick #2 trigger is received. // void stick2trig(void) { } ////////////////////////////// // // b14plustrig -- this function is called automatically whenever // the b14+ button is pressed. // void b14plustrig(void) { } ////////////////////////////// // // b15plustrig -- this function is called automatically whenever // the b15+ button is pressed. // void b15plustrig(void) { } ////////////////////////////// // // b14minusuptrig -- this function is called automatically whenever // the b14- foot trigger is pressed. // void b14minusuptrig(void) { } ////////////////////////////// // // b14minusdowntrig -- this function is called automatically whenever // the b14- foot trigger is released. // void b14minusdowntrig(void) { } ////////////////////////////// // // b15minusuptrig -- this function is called automatically whenever // the b15- foot trigger is pressed. // void b15minusuptrig(void) { } ////////////////////////////// // // b15minusdowntrig -- this function is called automatically whenever // the b15- foot trigger is released. // void b15minusdowntrig(void) { } /////////////////////////////// // // keyboardchar -- this function is called by the improv interface // whenever a key is pressed on the computer keyboard. // Put commands here which will be executed when a key is // pressed on the computer keyboard. // void keyboardchar(int key) { switch (key) { case ' ': // toggle writing of soundfile if (writingQ) { delete outsound; outsound = NULL; writingQ = 0; } else { cout << "Going to write a " << channels << " channel" << " sound file." << endl; cout << "Enter an output soundfile name " "(ending in .wav , .au or .snd) :"; char* buffer = new char[1000]; echoKeysOn(); cin >> buffer; echoKeysOff(); if (outsound != NULL) { delete outsound; outsound = NULL; } SoundHeader header; header.setHighMono(); header.setChannels(channels); outsound = new SoundFileOut(buffer, header); delete buffer; // flush the baton position buffers baton.t1pb.reset(); baton.x1pb.reset(); baton.y1pb.reset(); writingQ = 1; } break; case '1': // set channels to mono if (writingQ) { cout << "Error: Cannot change channel settings while" << " writing a soundfile." << endl; } else { cout << "Setting channel count to 1." << endl; channels = 1; } break; case '2': // set channels to stereo if (writingQ) { cout << "Error: Cannot change channel settings while" << " writing a soundfile." << endl; } else { cout << "Setting channel count to 2." << endl; channels = 2; } break; } } /*------------------ end improvization algorithms -----------------------*/ // md5sum: 1471d8ad91704217dbb027466c7fde43 wiggle.cpp [20050403]