11 #define USE_TEST_MAIN // use the main() function in test_support.h
25 logMsg(
"playing quiet white noise...");
27 logMsg(
"quiet white noise done.");
32 logMsg(
"playing quiet pink noise with seed...");
34 logMsg(
"quiet pink noise with seed done.");
45 logMsg(
"playing plucked string...");
55 unsigned numStrings = 64;
60 for (
int i = 0; i < numStrings; i++) {
62 plk->
setScale(40.0 / (
float) numStrings);
63 strings.push_back(plk);
69 logMsg(
"playing 64-string chorus...");
84 float posX = (pos1 > 0)
85 ? ((0.0f - ((pos1 + 1.0f) / (
float)numN)))
86 : ((1.0f - pos1) / (float)numN);
87 float dela =
fRandM(0.08, 0.25);
88 logMsg(
"n: %d p: %d/%d \tx: %5.2f/%5.2f \td:%5.2f", numN, pit1, pitX, pos1, posX, dela);
90 for (
int i = 0; i < numN; i++) {
96 ((
Panner *)pans[cnt])->setPosition(pos1);
103 if (cnt == numStrings)
110 for (
int i = 0; i < numStrings; i++) {
122 SoundFile sfile(CGestalt::dataFolder() +
"MKG1a1b.aiff");
132 logMsg(
"Playing sound file...");
140 SoundFile sfile(CGestalt::dataFolder() +
"piano-tones.aiff");
148 logMsg(
"Playing sound file...");
154 #ifdef USE_MP3 // uses libsndfile for now
158 void testMP3FilePlayer() {
159 MP3File sfile(CGestalt::dataFolder(),
"Piano_B4_096.mp3",
true);
162 logMsg(
"Playing sound file...");
173 SoundFile * sfile =
new SoundFile(CGestalt::dataFolder() +
"whistle_mono.aiff");
176 logMsg(
"playing sound file...");
179 for (
int i = 0; i < 4; i++) {
180 sfile->setRate(rate);
195 ADSR adsr(3.0, 1, 1, 0.7, 1);
197 logMsg(
"Playing WaveShaper 1");
202 ADSR ads2(3.0, 1, 1, 0.7, 1);
204 logMsg(
"Playing WaveShaper 2");
209 ADSR ads3(3.0, 1, 1, 0.7, 1);
211 logMsg(
"Playing WaveShaper 3");
225 logMsg(
"Playing simple fm instrument...");
227 float * dPtr = & dur;
243 logMsg(
"Playing 3 SOS instruments...");
264 logMsg(
"Playing fancy fm instrument...");
266 float * dPtr = & dur;
268 float * fPtr = & freq;
283 logMsg(
"Playing sound file instrument...");
292 SoundFile * sfile =
new SoundFile(CGestalt::dataFolder() + nam);
293 snds.push_back(sfile);
303 unsigned numSounds = 64;
308 for (
int i = 0; i < numSounds / 4; i++) {
316 theIO->setRoot(reverb);
317 logMsg(
"playing sound file forest...");
322 int base = which * numSounds / 4;
324 SoundFile * snd = ((SoundFile *)snds[base]);
325 int startp =
iRandV(snd->duration());
326 float dela =
fRandM(0.05, 0.15);
327 int dur = (int)(
fRandM(dela, dela * 4.0f) * (float)CGestalt::frameRate());
329 logMsg(
"n: %d s: %d fr: %d \tdu: %d", numN, which, startp, dur);
331 for (
int i = 0; i < numN; i++) {
332 snd = ((SoundFile *)snds[which + numN]);
333 snd->setStart(startp);
334 snd->setStop(startp + dur);
344 for (
int i = 0; i < numSounds; i++) {
358 SoundFile sndFile(CGestalt::dataFolder() +
"MKG1a1b.aiff");
361 cloud.
mSamples = sndFile.mWavetable.buffer(0);
377 logMsg(
"playing Granular cloud.");
394 logMsg(
"playing IFFT...");
408 MulOp mul1(vox1, env1);
413 MulOp mul2(vox2, env2);
415 AddOp add(mul1, mul2);
417 logMsg(
"playing IFFT crossfade...");
419 logMsg(
"IFFT crossfade done.");
445 "Noise tests",
testNoises,
"Test noise generators",
446 "Plucked string",
testString,
"Waves of string arpeggii, stereo with reverb",
451 "MP3 Snd file player", testMP3FilePlayer,
"Play an MP3 file",
454 "Sample file bank",
testSndFileBank,
"Play a large sample bank from sound files",
457 "SumOfSines instrument",
testSOSInstrument,
"Demonstrate the SumOfSines instrument",
459 "WaveShaping synthesis",
testWaveShaper,
"Play 2 wave-shaper notes with envelopes",
460 "IFFT synthesis",
test_ifft,
"Make a sound with IFFT synthesis",
462 "Soundfile granulation",
testGrainCloud,
"Random sound file granulation example",