//
// Programmer: Craig Stuart Sapp <craig@ccrma.stanford.edu>
// Creation Date: Thu Aug 26 00:22:22 PDT 2004
// Last Modified: Thu Aug 26 00:22:25 PDT 2004
// Filename: ...soundfile/examples/extractRange.cpp
// Syntax: C++
//
// Description: Extracts a range of samples from a soundfile
//
#include "soundfile.h"
#ifndef OLDCPP
#include <iostream>
using namespace std;
#else
#include <iostream.h>
#endif
int main(int argc, char** argv) {
Options options;
options.define("b|begin=i:0", "beginning sample inclusive");
options.define("B|Begin=i:0", "beginning sample exclusive");
options.define("e|end=i:0", "ending sample inclusive");
options.define("E|End=i:0", "ending sample exclusive");
options.define("v|verbose=b", "verbose output");
options.process(argc, argv);
if (options.getArgCount() != 2) {
cout << "Usage: " << options.getCommand()
<< " -[b|B] begin_sample -[e|E] end_sample input.wav output.wav\n";
cout << "\n-b = begin sample (offset from 0)\n";
cout << "-B = begin sample excluding specified sample\n";
cout << "-e = end sample including specified sample\n";
cout << "-E = end sample excluding specified sample\n";
cout << "-v = verbose: display calculated range\n";
cout << endl;
exit(1);
}
const char* inputname = options.getArg(1);
const char* outputname = options.getArg(2);
SoundFileRead insound(inputname);
SoundHeader header = insound;
SoundFileWrite outsound(outputname, header);
int startsample = 0;
if (options.getBoolean("begin")) {
startsample = options.getInteger("begin");
} else if (options.getBoolean("Begin")) {
startsample = options.getInteger("Begin") + 1;
}
int stopsample = 0;
if (options.getBoolean("end")) {
stopsample = options.getInteger("end");
} else if (options.getBoolean("End")) {
stopsample = options.getInteger("End") - 1;
}
if (options.getBoolean("verbose")) {
cout << "Input: " << inputname << "\tOutput: " << outputname << endl;
cout << "\tBegin_sample: " << startsample
<< "\tEnd_sample: " << stopsample << endl;
cout << "\tSample_count: " << stopsample - startsample + 1
<< "\tSeconds: "
<< (stopsample - startsample + 1.0) / header.getSrate() << endl;
}
int samplecount = stopsample - startsample + 1;
insound.gotoSample(startsample); // offset by zero
int i, j;
for (i=0; i<samplecount; i++) {
for (j=0; j<header.getChannels(); j++) {
outsound.writeSampleDouble(insound.getCurrentSampleDouble(j));
}
insound.incrementSample();
}
return 0;
}
// md5sum: 4e88b7f680c7e1c46dc2a076b0a8f9e3 extractrange.cpp [20050403]