Voicelead.hpp

Go to the documentation of this file.
00001 
00022 #ifndef CSOUND_VOICELEAD_HPP
00023 #define CSOUND_VOICELEAD_HPP
00024 
00025 #include "Platform.hpp"
00026 #ifdef SWIG
00027 %module CsoundAC
00028 %{
00029 #ifndef TEST
00030 #include "Event.hpp"
00031 #endif
00032 #include <vector>
00033 #include <algorithm>
00034 #include <cmath>
00035   %}
00036 %include "std_vector.i"
00037 %template(ChordVector) std::vector< std::vector<double> >;
00038 #else
00039 #ifndef TEST
00040 #include "Event.hpp"
00041 #endif
00042 #include <vector>
00043 #endif
00044 
00045 namespace csound
00046 {
00054   class Voicelead
00055   {
00056   public:
00067     static double pc(double pitch, size_t divisionsPerOctave = 12);
00068 
00069 
00074     static std::vector<double> voiceleading(const std::vector<double> &chord1,
00075                                             const std::vector<double> &chord2);
00076 
00082     static const std::vector<double> &simpler(const std::vector<double> &source,
00083                                               const std::vector<double> &destination1,
00084                                               const std::vector<double> &destination2,
00085                                               bool avoidParallels);
00086 
00091     static double smoothness(const std::vector<double> &chord1,
00092                              const std::vector<double> &chord2);
00093 
00098     static double euclideanDistance(const std::vector<double> &chord1,
00099                                     const std::vector<double> &chord2);
00100 
00101     /*
00102      * Return whether the progression between chord1 and chord2
00103      * contains a parallel fifth.
00104      */
00105     static bool areParallel(const std::vector<double> &chord1,
00106                             const std::vector<double> &chord2);
00107 
00114     static const std::vector<double> &closer(const std::vector<double> &source,
00115                                              const std::vector<double> &destination1,
00116                                              const std::vector<double> &destination2,
00117                                              bool avoidParallels);
00118 
00122     static std::vector<double> rotate(const std::vector<double> &chord);
00123 
00127     static std::vector< std::vector<double> > rotations(const std::vector<double> &chord);
00128 
00135     static std::vector<double> pcs(const std::vector<double> &chord, size_t divisionsPerOctave = 12);
00136 
00143     static std::vector<double> uniquePcs(const std::vector<double> &chord, size_t divisionsPerOctave = 12);
00144 
00152     static double pitchClassSetToM(const std::vector<double> &chord, size_t divisionsPerOctave = 12);
00153 
00158     static std::vector<double> mToPitchClassSet(double pcn, size_t divisionsPerOctave = 12);
00159 
00164     static std::vector<double> pitchClassSetToPandT(const std::vector<double> &pcs, 
00165                             size_t divisionsPerOctave = 12);
00166 
00170     static std::vector<double> pAndTtoPitchClassSet(double prime, 
00171                             double transposition, 
00172                             size_t divisionsPerOctave = 12);
00173 
00180     static const std::vector<double> closest(const std::vector<double> &source,
00181                                              const std::vector< std::vector<double> > &destinations,
00182                                              bool avoidParallels);
00183 
00196     static std::vector<double> voicelead(const std::vector<double> &source,
00197                                          const std::vector<double> &targetPitchClassSet,
00198                                          double lowest,
00199                                          double range,
00200                                          bool avoidParallels,
00201                                          size_t divisionsPerOctave = 12);
00202 
00215     static std::vector<double> recursiveVoicelead(const std::vector<double> &source,
00216                                                   const std::vector<double> &targetPitchClassSet,
00217                                                   double lowest,
00218                                                   double range,
00219                                                   bool avoidParallels,
00220                                                   size_t divisionsPerOctave = 12);
00221 
00225     static double closestPitch(double pitch, const std::vector<double> &pitches);
00226 
00234     static double conformToPitchClassSet(double pitch, const std::vector<double> &pcs, size_t divisionsPerOctave = 12);
00235 
00239     static std::vector<double> invert(const std::vector<double> &chord);
00240 
00245     static std::vector< std::vector<double> > inversions(const std::vector<double> &chord);
00246 
00250     static std::vector<double> toOrigin(const std::vector<double> &chord);
00251 
00257     static std::vector<double> normalChord(const std::vector<double> &chord);
00258 
00265     static std::vector<double> primeChord(const std::vector<double> &chord);
00266 
00272     static double nameToC(std::string name, size_t divisionsPerOctave_);
00273     
00280     static double mToC(double M, size_t divisionsPerOctave);
00281 
00288     static double cToM(double C, size_t divisionsPerOctaven = 12);
00289 
00296     static double cToP(double C, size_t divisionsPerOctave = 12);
00297 
00304     static double pToC(double Z, size_t divisionsPerOctave = 12);
00305 
00310     static std::vector<double> orderedPcs(const std::vector<double> &chord, size_t divisionsPerOctave = 12);
00311 
00315     static std::vector<double> sortByAscendingDistance(const std::vector<double> &chord, size_t divisionsPerOctave = 12);
00316 
00328     static std::vector< std::vector<double> > nonBijectiveVoicelead(const std::vector<double> &sourceChord, 
00329                                     const std::vector<double> &targetPitchClassSet,
00330                                     size_t divisionsPerOctave = 12);
00331     
00335     static std::vector<double> pToPrimeChord(double P, size_t divisionsPerOctave = 12);
00336 
00337     static void initializePrimeChordsForDivisionsPerOctave(size_t divisionsPerOctave);
00338     
00356     static std::vector<double> ptvToChord(size_t P, size_t T, size_t V_, size_t lowest, size_t range, size_t divisionsPerOctave = 12);
00357    
00374     static std::vector<double> chordToPTV(const std::vector<double> &chord, size_t lowestPitch, size_t highestPitch, size_t divisionsPerOctave = 12);
00375 
00388     static std::vector< std::vector<double> > voicings(const std::vector<double> &chord,
00389                                double lowest,
00390                                double highest,
00391                                size_t divisionsPerOctave);
00402     static bool addOctave(const std::vector<double> &lowestVoicing, std::vector<double> &newVoicing, size_t maximumPitch, size_t divisionsPerOctave);
00403 
00407     static std::vector<double> wrap(const std::vector<double> &chord, size_t lowestPitch, size_t highestPitch, size_t divisionsPerOctave = 12);
00408 
00412     static std::vector<double> transpose(const std::vector<double> &chord, double semitones);
00413   };
00414 }
00415 #endif
00416 

Generated on Tue Apr 14 11:00:49 2009 for Csound and CsoundAC by  doxygen 1.5.8