// // Programmer: Craig Stuart Sapp // Creation Date: Sat Jul 26 16:39:36 GMT-0800 1997 // Last Modified: Sat Jul 26 16:39:39 GMT-0800 1997 // Filename: ...sig/doc/examples/sig/sigfile/disperse/disperse.cpp // Syntax: C++; sig // // Description: Disperses frequencies with a cascade of Allpass1 filters // #include "sigAudio.h" #ifndef OLDCPP #include using namespace std; #else #include #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 == 2) { // no input sound header.setHighMono(); outfilename = argv[1]; 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 == 3) { // input file specified header.setHeader(argv[1]); header.setChannels(1); numSamples = header.getSamples() + 10; outfilename = argv[2]; infilename = argv[1]; } else { exitUsage(argv[0]); } double gain; cout << "Enter the gain of the allpass filters [-1 .. 1]: "; cin >> gain; int numFilters; cout << "Enter the number of first-order allpass filters to use: "; cin >> numFilters; if (numFilters <= 0) { cerr << "Error: must use a positive number of filters." << endl; exitUsage(argv[0]); } // Elements: SoundFileIn insound(infilename); SoundFileOut outsound(outfilename, header); WhiteNoise noise(noiseAmp); Allpass1 *filters; filters = new Allpass1[numFilters]; // Connections: if (strlen(infilename) == 0) { // use noise filters[0].setInput(noise); } else { // use input file filters[0].setInput(insound); } for (int i=1; i> addSamples; int disconnectSample = numSamples; numSamples += addSamples; for (int j=0; j