//
// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
// Creation Date: Mon May 26 17:49:13 GMT-0800 1997
// Last Modified: Mon May 26 18:08:48 GMT-0800 1997
// Filename:      ...sig/doc/examples/sig/sigaudio/sine/sine.cpp
// Syntax:        C++; sig
// $Smake:        cc -Wall -DLINUX -O -o %b %f -I../include %
//                -L../lib -lg++ -lsig && strip %b
//
// Description:   play a sinewave live on a LINUX computer with the 
//		  Open Sound System
//


#include "sigAudio.h"


int main(void) {
   Action action;

   // Elements:
   LinuxSoundOut  outsound(44100, 2, 0);     // srate, channels, port
   Envelope       ampEnv("(0 0; 1 0.9; s; 20000 0)");
   Osc            sine;
   Constant       freq;

   // Connections:
   outsound.connect(sine);         // left channel
   outsound.connect(sine);         // right channel
   sine.connect(freq);
   sine.connect(ampEnv);

   action.freezeState(outsound);

   double frequency = 1.0;
   double duration;
   long numSamples;

   while (frequency > 0) {
      cout << "What frequency do you want to hear (<= 0 to quit): ";
      cin  >> frequency;
      if (frequency <= 0) break;
      cout << "How long do you want to hear the sound (in seconds): ";
      cin  >> duration;
      numSamples = (long)(duration * 44100.0);

      ampEnv.setDurationSamples(numSamples);
      ampEnv.trigger();
      freq.setValue(frequency);

      action.tickFrozenState(numSamples);
      outsound.flushBuffer();
   }


   return 0;
}



// md5sum: 51d3ca08ba0a8bde0f367aa15b1f6763 sine.cpp [20050403]