Goto: [ Program Documentation ]

//
// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
// Creation Date: Tue May 13 23:58:24 GMT-0800 1997
// Last Modified: Sun May 25 01:21:24 GMT-0800 1997
// Filename:      ...sig/doc/examples/sig/sigfile/onepole/onepole.cpp
// Syntax:        C++; sig
//
// Description:   a one-pole filter.  If no input, then use whitenoise
//

#include "sigAudio.h"

#ifndef OLDCPP
   #include <iostream>
   using namespace std;
#else
   #include <iostream.h>
#endif

void exitUsage(const char* command);


int main(int argc, char* argv[]) {
   SoundHeader header;
   long numSamples = 0;
   char* infilename = "";
   char* outfilename = NULL;
   float noiseAmp = 0.0;

   if (argc == 3) {            // no input sound
      header.setHighMono();
      outfilename = argv[2];
      cout << "What amplitude for the noise: [0 .. 1] ";
      cin  >> noiseAmp;
      cout << "How many seconds of noise to use: ";
      float temp;
      cin >> temp;
      numSamples = (long)(temp * 44100);
   } else if (argc == 4) {     // input file specified
      header.setHeader(argv[2]);
      numSamples = header.getSamples() + 10;
      outfilename = argv[3];
      infilename = argv[2];
   } else {
      exitUsage(argv[0]); 
   }

   // Elements:
   SoundFileIn  insound(infilename);
   SoundFileOut outsound(outfilename, header);
   OnePole      onepole;
   WhiteNoise   noise(noiseAmp);
   Envelope     feedbackEnv(argv[1], numSamples);

   // Connections:
   outsound.connect(onepole);
   if (strlen(infilename) == 0) {         // use noise
      onepole.connect(noise, 0);      
   } else {                               // use input file
      onepole.connect(insound, 0);
   }
   onepole.connect(feedbackEnv, 1);

   Action action;
   action.tick(outsound, numSamples);

 
   return 0;
}



void exitUsage(const char* command) {
   cout << endl;
   cout << "A onepole filter.  Uses white noise If no input sound." << endl;
   cout << "feedback should be in the range (-1 .. 1)." << endl;
   cout << endl;
   cout << "Usage: " << command << " feedbackEnv [insound] outsound"<< endl;
   cout << endl;
   cout << "Program input: " << endl;
   cout << "   (a) amplitude of input noise (if no input sound)" << endl;
   cout << "   (b) duration of noise in samples (if no input sound)" << endl;
   cout << endl;
   cout << "Example filter strings: pairs of time, filter points" << endl;
   cout << "   constant env of 0.5: \"(0 0.5; 100 0.5)\"  " << endl;
   cout << "   triangle env:        \"(0 0; 1 -0.5; 2 0)\" " << endl;
   cout << endl;

   exit(1);
}



// md5sum: a36f56389f00b9d2bd8e8dcde5339e2e onepole.cpp [20050403]