//
// Programmer: Craig Stuart Sapp <craig@ccrma.stanford.edu>
// Creation Date: Sat Feb 2 10:06:21 PST 2002
// Last Modified: Sun Feb 3 11:08:04 PST 2002 (updated for soundfile 2.0)
// Last Modified: Sun Aug 29 03:32:03 PDT 2004 (updated for compiling in GCC3)
// Filename: ...soundfile/examples/looptest.cpp
// Syntax: C++
//
// Description: Test looping a soundfile using SoundFileRead class.
//
#include "soundfile.h"
#include <stdlib.h>
#ifndef OLDCPP
#include <iostream>
using namespace std;
#else
#include <iostream.h>
#endif
void printSample(SoundFileRead& soundfile);
int main(int argc, char** argv) {
Options options;
options.define("L|no-looping=b", "turn off looping");
options.define("r|reset=b", "use reset to restart looping");
options.process(argc, argv);
if (options.getArgCount() == 0) {
cout << "Usage: " << options.getCommand()
<< " filename"
<< endl;
exit(1);
}
SoundFileRead soundfile(options.getArg(1));
if (!options.getBoolean("no-looping") && !options.getBoolean("reset")) {
soundfile.setLoopOn(); // enable looping
}
int i;
cout << "; Sample count = " << soundfile.getSamples() << "\n";
cout << "; Channels = " << soundfile.getChannels() << "\n";
cout << "; samp\t16-bit\tdouble\n";
cout << "; The first 10 samples:\n";
for (i=0; i<10; i++) {
printSample(soundfile);
soundfile.incrementSample();
}
soundfile.gotoSample(soundfile.getSamples() - 10);
cout << "\n; The last 10 samples:\n";
for (i=0; i<10; i++) {
printSample(soundfile);
soundfile.incrementSample();
}
if (options.getBoolean("reset")) {
soundfile.reset();
}
cout << "\n; The first 10 samples again via looping:\n";
for (i=0; i<10; i++) {
printSample(soundfile);
soundfile.incrementSample();
}
return 0;
}
//////////////////////////////
//
// printSample -- print the samples at the current point in the soundfile.
//
void printSample(SoundFileRead& soundfile) {
cout << soundfile.getCurrentSampleIndex() << ":\t";
int channel;
for (channel=0; channel < soundfile.getChannels(); channel++) {
cout << soundfile.getCurrentSample16Bit(channel);
cout << "\t(";
cout << soundfile.getCurrentSampleDouble(channel) << ")\t";
}
cout << "\n";
}
// md5sum: 95fb9c64f63f367084b461823dc64261 looptest.cpp [20050403]