//
// 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/sigaudio/.../karplus-strong.cpp
// Syntax: C++; sig
//
// Description: example of the Karplus-Strong Plucked String
//
#include "sigAudio.h"
int main(void) {
Action action;
int delayLength;
float duration = 0;
int numSamples;
// Elements:
WhiteNoise noise;
LinuxSoundOut outsound(44100, 2, 0); // srate, channels, port
Delayline delay(4);
Switch noiseGate(2);
Delayline unitDelay(2);
unitDelay.setDelay(1);
Add add;
Add add2;
Scale scale(0.5);
// Connections:
outsound.connect(delay);
outsound.connect(delay); // stereo
delay.connect(add2);
add2.connect(noiseGate);
add2.connect(scale);
scale.connect(add);
noiseGate.connect(noise);
add.connect(delay);
add.connect(unitDelay);
unitDelay.connect(delay);
while (1) {
cout << "How many samples of delay (negative to quit): ";
cin >> delayLength;
if (delayLength <= 1) break;
delay.setDelay(delayLength);
noiseGate.setDurationSamples(delayLength);
noiseGate.trigger();
cout << "How long for output sound in seconds: ";
cin >> duration;
numSamples = (int)(duration * 44100);
float amplitude;
cout << "What amplitude for input noise: ";
cin >> amplitude;
noise.setAmplitude(amplitude);
action.tick(outsound, numSamples);
}
return 0;
}
// md5sum: 30b5a7a677c20c1d610d504f8197fbfb karplus-strong.cpp [20050403]