Goto: [ Program Documentation ]
//
// Programmer: Craig Stuart Sapp <craig@ccrma.stanford.edu>
// Creation Date: Mon May 19 22:45:43 GMT-0800 1997
// Last Modified: Mon May 19 22:45:47 GMT-0800 1997
// Filename: ...sig/doc/examples/sig/sigfile/precedence/precedence.cpp
// Syntax: C++; sig
//
// Description: for demonstration of the precedence effect.
//
#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[]) {
if (argc == 1) exitUsage(argv[0]);
SoundHeader header;
char* infilename = "";
char* infilename2 = "";
char* outfilename = NULL;
float impulseAmp = 0.9;
long numSamples = 0;
if (argc == 2) { // no input sound
header.setHighStereo();
outfilename = argv[1];
cout << "What is the duration of the output file in seconds: ";
float temp;
cin >> temp;
numSamples = (long)(temp * 44100);
} else if (argc == 3) { // input file specified
header.setHeader(argv[1]);
numSamples = header.getSamples();
outfilename = argv[2];
infilename = argv[1];
} else if (argc == 4) { // two input files specified
header.setHeader(argv[1]);
numSamples = header.getSamples();
outfilename = argv[3];
infilename = argv[1];
infilename2 = argv[2];
} else {
exitUsage(argv[0]);
}
int sampleDelay;
cout << "Enter the number of samples to offset the sound by: ";
cin >> sampleDelay;
cout << "That is a delay of " << (double)sampleDelay /
header.getSrate() * 1000 << " milliseconds." << endl;
numSamples += sampleDelay;
header.setChannels(2);
// Elements:
SoundFileIn insound(infilename);
SoundFileIn insound2(infilename2);
SoundFileOut outsound(outfilename, header);
Delayline delay(sampleDelay);
Impulse impulse(20000, impulseAmp);
// Connections:
if (strlen(infilename2) != 0) { // use two input files
outsound.connect(insound, 0);
outsound.connect(delay, 1);
delay.connect(insound2, 0);
} else if (strlen(infilename) == 0) { // use impulse
outsound.connect(impulse, 0);
outsound.connect(delay, 1);
delay.connect(impulse);
} else { // use input file
outsound.connect(insound, 0);
outsound.connect(delay, 1);
delay.connect(insound, 0);
}
Action action;
action.tick(outsound, numSamples);
return 0;
}
void exitUsage(const char* command) {
cout << endl;
cout <<
"Generates precedence effect examples by delaying a sound by the" << endl;
cout <<
"specified number of samples. Try 1-30 samples at 44.1 kHz." << endl;
cout << endl;
cout << "Usage: " << command << " [insound1] [insound2] outsound"<< endl;
cout << endl;
cout << "Program input: " << endl;
cout << " (a) duration of the output sound (if no input soundfile)"<< endl;
cout << " (b) sample delay between channels" << endl;
cout << endl;
exit(1);
}
// md5sum: bd05759d7e4e52824b9188c0085f5cd5 precedence.cpp [20050403]