Goto: [ Program Documentation ]
//
// Programmer: Craig Stuart Sapp <craig@ccrma.stanford.edu>
// Creation Date: Tue May 27 18:59:27 GMT-0800 1997
// Last Modified: Tue May 27 18:59:31 GMT-0800 1997
// Filename: ...sig/doc/examples/sig/sigfile/karplus/karplus.cpp
// Syntax: C++; sig
//
// Description: example of the Karplus-String Plucked String
//
#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 != 2) exitUsage(argv[0]);
int delayLength;
cout << "How many samples of delay (44.1 kHz sample rate): ";
cin >> delayLength;
float duration = 0;
int numSamples;
cout << "How long for output sound in seconds: ";
cin >> duration;
numSamples = (int)(duration * 44100);
float amplitude;
cout << "What amplitude for input noise: [0 .. 1] ";
cin >> amplitude;
SoundHeader header;
header.setHighMono();
// Elements:
WhiteNoise noise(amplitude);
SoundFileOut outsound(argv[1], header);
Delayline delay(delayLength);
Switch noiseGate(delayLength);
Delayline unitDelay(2);
unitDelay.setDelay(1);
Add add;
Add add2;
Scale scale(0.5);
// Connections:
outsound.connect(delay);
delay.connect(add2);
add2.connect(noiseGate);
add2.connect(scale);
scale.connect(add);
noiseGate.connect(noise);
add.connect(delay);
add.connect(unitDelay);
unitDelay.connect(delay);
Action action;
action.tick(outsound, numSamples);
return 0;
}
void exitUsage(const char* command) {
cout << endl;
cout << "Generates a plucked string sound." << endl;
cout << endl;
cout << "Usage: " << command << " outsound" << endl;
cout << endl;
cout << "Program input: " << endl;
cout << " (a) sample length of delayline" << endl;
cout << " (b) length of output soundfile in seconds" << endl;
cout << " (c) amplitude of input noise [0 .. 1]" << endl;
cout << endl;
exit(1);
}
// md5sum: 65d864e3c5bd5123e00c2e91d5425b94 karplus.cpp [20050403]