Goto: [ Program Documentation ]
// // Programmer: Craig Stuart Sapp <craig@ccrma.stanford.edu> // Creation Date: Sat Jun 7 08:17:09 GMT-0800 1997 // Last Modified: Sat Jun 7 08:17:13 GMT-0800 1997 // Filename: ...sig/doc/examples/sig/sigfile/panprec/panprec.cpp // Syntax: C++; sig // // Description: cross fade a monofile between two stereo channels // #include "sigAudio.h" #include <stdlib.h> void exitUsage(const char *command); // Elements: Envelope panEnv; Resonator leftEar(1000); Resonator rightEar(1000); Delayline leftDelay(30); Delayline rightDelay(30); static sampleType updatingFunction(double input) { static sampleType leftValue; static sampleType rightValue; panEnv.action(); rightValue = panEnv.output(0); leftValue = 1.0 - rightValue; leftEar.setBandwidth(leftValue*1000+1000); rightEar.setBandwidth(rightValue*1000+1000); leftDelay.setDelay((int)(leftValue*30)); rightDelay.setDelay((int)(rightValue*30)); return 0.0; } int main(int argc, char* argv[]) { if (argc != 4) { cerr << "Usage: " << argv[0] << " ChannelPositionString input.snd output.snd\n"; exitUsage(argv[0]); } SoundHeader header(argv[2]); header.setChannels(2); SoundFileIn insound(argv[2]); SoundFileOut outsound(argv[3], header); Function processEnvelope(updatingFunction); panEnv.setEnvelope(argv[1]); panEnv.setDurationSamples(header.getSamples()); // Connections: processEnvelope.setFunction(updatingFunction); leftDelay.connect(leftEar); rightDelay.connect(rightEar); leftEar.connect(insound); rightEar.connect(insound); outsound.connect(leftDelay); outsound.connect(rightDelay); for (int i=0; i<header.getSamples(); i++) { Tick(processEnvelope); Tick(outsound); } return 0; } void exitUsage(const char* command) { cout << endl; cout << "Mixes two soundfiles together. You can adjust the amplitude" << endl; cout << "of each input and the starting time of the second file in" << endl; cout << "the output. If either of the soundfiles is stereo, then the" << endl; cout << "the output will be stereo, and the mono channel will become" << endl; cout << "the left channel." << endl; cout << endl; cout << "Usage: " << command << " insound1 insound2 outsound" << endl; cout << endl; cout << "Program input: " << endl; cout << " (a) amplitude scaling of file 1" << endl; cout << " (b) amplitude scaling of file 2" << endl; cout << " (c) offset time in seconds of second sound file" << endl; cout << endl; exit(1); } // md5sum: b8b2ec2d078fdb3c40519be7e344307f panprec.cpp [20050403]