Goto: [ Program Documentation ]
//
// Programmer: Craig Stuart Sapp <craig@ccrma.stanford.edu>
// Creation Date: Wed May 28 20:07:37 GMT-0800 1997
// Last Modified: Fri Apr 17 10:15:02 PDT 1998
// Filename: ...sig/doc/examples/sig/sigfile/collapse/collapse.cpp
// Syntax: C++; sig
//
// Description: mixes stereo channels into a mono output soundfile
//
#include "sigAudio.h"
#include <stdlib.h>
#ifndef OLDCPP
#include <iostream>
#else
#include <iostream.h>
#endif
void checkOptions(Options& opts);
void example(void);
void usage(const char* command);
///////////////////////////////////////////////////////////////////////////
int main(int argc, char* argv[]) {
Options options(argc, argv);
checkOptions(options);
SoundHeader header(options.getArg(1));
header.setChannels(1);
// Elements:
SoundFileIn insound(options.getArg(1));
SoundFileOut outsound(options.getArg(2), header);
Envelope ampEnv(options.getString("amp-env"));
Add add;
Multiply mul;
// Connections:
outsound.connect(mul);
mul.connect(ampEnv);
mul.connect(add);
for (int i=0; i<insound.getChannels(); i++) {
add.connect(insound, i, i);
}
Action action;
action.tick(outsound, insound.getSamples());
return 0;
}
///////////////////////////////////////////////////////////////////////////
//////////////////////////////
//
// checkOptions -- handle command-line options.
//
void checkOptions(Options& opts) {
opts.define("a|amp|amp-env=s:0 1 1 1");
opts.define("author=b");
opts.define("version=b");
opts.define("example=b");
opts.define("help=b");
opts.process();
if (opts.getBoolean("author")) {
cout << "Written by Craig Stuart Sapp, "
<< "craig@ccrma.stanford.edu, May 1997" << endl;
exit(0);
}
if (opts.getBoolean("version")) {
cout << "compiled: " << __DATE__ << endl;
cout << SIG_VERSION << endl;
exit(0);
}
if (opts.getBoolean("help")) {
usage(opts.getCommand());
exit(0);
}
if (opts.getBoolean("example")) {
example();
exit(0);
}
// must have one input and one output filename
if (opts.getArgCount() != 2) {
cout << "Error: need one input sound and one output sound name" << endl;
usage(opts.getCommand());
exit(1);
}
}
//////////////////////////////
//
// example -- gives example calls to the osc program.
//
void example(void) {
cout <<
"# collapse examples: \n"
"# mix channels from a stereo file into a mono file. \n"
" collapse stereo.snd mono.snd \n"
<< endl;
}
//////////////////////////////
//
// usage -- how to run the osc program on the command line.
//
void usage(const char* command) {
cout <<
" \n"
"Adds input file channels into a monophonic output soundfile. Input \n"
"soundfile can have any number of channels. \n"
" \n"
"Usage: " << command << " [-a ampEnv] insound outsound \n"
" \n"
"Options: \n"
" -a = amplitude envelope applied to output channel \n"
" (default \"0 1, 1 1\"). \n"
" --options = list of all options, aliases and default values. \n"
" \n"
" \n"
<< endl;
}
// md5sum: a282511cf1ef5fdc4a2fd7e12304b6c9 collapse.cpp [20050403]