// // Programmer: Craig Stuart Sapp <craig@ccrma.stanford.edu> // Creation Date: Wed Jan 23 21:10:32 PST 2002 // Last Modified: Sun Feb 3 11:08:04 PST 2002 (updated for soundfile 2.0) // Filename: ...soundfile/examples/multi2mono.cpp // Syntax: C++ // // Description: Adds all channels in the input sound file and writes // a sound file with the summation of all channels. // Amplitude scaling factor can be given to prevent // clipping if necessary. // #include "soundfile.h" #include <stdlib.h> #ifndef OLDCPP #include <iostream> using namespace std; #else #include <iostream.h> #endif int main(int argc, char** argv) { Options options; options.define("a|amp=d:1.0", "amplitude scaling factor"); options.process(argc, argv); double amp = options.getDouble("amp"); const char* inputname = options.getArg(1); const char* outputname = options.getArg(2); SoundFileRead insound(inputname); SoundHeader header = insound; header.setChannels(1); SoundFileWrite outsound(outputname, header); int i, channel; double newsample; for (i=0; i<insound.getSamples(); i++) { newsample = 0.0; for (channel = 0; channel < insound.getChannels(); channel++) { newsample += insound.getCurrentSampleDouble(channel); } outsound.writeSampleDouble(amp * newsample/insound.getChannels()); insound.incrementSample(); } return 0; } // md5sum: f71df8766a321be0c049c80d6b8a8e39 multi2mono.cpp [20050403]