Goto: [ Program Documentation ]
//
// Programmer: Craig Stuart Sapp <craig@ccrma.stanford.edu>
// Creation Date: Wed Mar 25 16:47:34 GMT-0800 1998
// Last Modified: Wed Mar 25 16:52:35 GMT-0800 1998
// Filename: ...sig/doc/examples/sig/sigfile/offset/offset.cpp
// Syntax: C++; sig
//
// Description: adds a DC component to a soundfile. If no
// soundfile is given, then uses 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[]) {
if (argc == 1) exitUsage(argv[0]);
SoundHeader header;
char* infilename = "";
char* outfilename = NULL;
char* offsetEnv = NULL;
float noiseAmp = 0.0;
long numSamples = 0;
if (argc == 2) { // only output file specified
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 and output files specified
infilename = argv[1];
outfilename = argv[2];
header.setHeader(infilename);
numSamples = header.getSamples();
} else if (argc == 4) { // poleEnv file specified
outfilename = argv[3];
infilename = argv[2];
offsetEnv = argv[1];
header.setHeader(infilename);
numSamples = header.getSamples();
} else {
exitUsage(argv[0]);
}
if (offsetEnv == NULL) {
offsetEnv = "c(0 0.5; 1 0.5)";
}
// Elements:
SoundFileIn insound(infilename);
SoundFileOut outsound(outfilename, header);
Add addLeft;
Add addRight;
WhiteNoise noise(noiseAmp);
Envelope envelope(offsetEnv, numSamples);
// Connections:
if (strlen(infilename) == 0) { // use noise
addLeft.connect(noise, 0);
addRight.connect(noise, 0);
} else { // use input file
addLeft.connect(insound, 0);
addRight.connect(insound, 0, 1);
}
addLeft.connect(envelope, 1);
addRight.connect(envelope, 1);
outsound.connect(addLeft, 0);
if (header.getChannels() == 2) {
outsound.connect(addRight, 1);
}
Action action;
action.tick(outsound, numSamples);
return 0;
}
void exitUsage(const char* command) {
cout << endl;
cout <<
"Adds a DC signal. Uses whitenoise if no input soundfile." << endl;
cout << endl;
cout << "Usage: " << command << " [[offsetEnv] insound] outsound" << endl;
cout << endl;
cout << " offsetEnv = offset position envelope [default is 0.5]" << endl;
cout << endl;
cout << "Example offsetEnv string: pairs of time, offset positions" << endl;
cout << " \"(0 0.5; 1 0.5)\" " << endl;
cout << endl;
exit(1);
}
// md5sum: 08b9b520ede5d6c1f9b8fc82c1d5b63d offset.cpp [20050403]