// // Copyright 1998-2000 by Craig Stuart Sapp, All Rights Reserved. // Programmer: Craig Stuart Sapp // Creation Date: Sun Jun 7 16:24:06 PDT 1998 // Last Modified: Sun Jun 11 12:39:40 PDT 2000 // Last Modified: Thu May 14 21:53:43 PDT 2009 (modified output display) // Last Modified: Fri Jun 12 22:58:34 PDT 2009 (renamed SigCollection class) // Filename: ...sig/src/sig/ChordQuality.cpp // Web Address: http://sig.sapp.org/src/sigInfo/ChordQuality.cpp // Syntax: C++ // // Description: Data class for storing the description of a chord. // The ChordQuality class has three properties: // 1) Root (the root note of the chord) // 2) Inversion (the inversion number of the chord) // 3) The chord type (E.g., major, minor, etc.) // #include "Convert.h" #include "ChordQuality.h" #include "HumdrumEnumerations.h" #include #include using namespace std; char* ChordQuality::displayString = NULL; ////////////////////////////// // // ChordQuality::ChordQuality -- // ChordQuality::ChordQuality(void) { chordType = E_unknown; chordInversion = E_unknown; chordRoot = E_unknown; if (getDisplay() == NULL) { setDisplay("t:i:r"); } chordNotes.setSize(0); } ChordQuality::ChordQuality(const ChordQuality& aChordQuality) { chordType = aChordQuality.getType();; chordInversion = aChordQuality.getInversion();; chordRoot = aChordQuality.getRoot(); chordNotes.setSize(0); } ChordQuality::ChordQuality(int aType, int anInversion, int aRoot) { chordType = aType; chordInversion = anInversion; chordRoot = aRoot; chordNotes.setSize(0); } ////////////////////////////// // // ChordQuality::~ChordQuality -- // ChordQuality::~ChordQuality() { chordType = E_unknown; chordInversion = E_unknown; chordRoot = E_unknown; chordNotes.setSize(0); } ////////////////////////////// // // ChordQuality::getBassNote -- // int ChordQuality::getBassNote(void) const { return Convert::chordQualityToBaseNote(*this); } ////////////////////////////// // // ChordQuality::getDisplay -- // const char* ChordQuality::getDisplay(void) { return displayString; } ////////////////////////////// // // ChordQuality::getInversion -- // int ChordQuality::getInversion(void) const { return chordInversion; } ////////////////////////////// // // ChordQuality::getInversionName -- // const char* ChordQuality::getInversionName(void) const { return Convert::chordInversion.getName(getInversion()); } ////////////////////////////// // // ChordQuality::getNotesInChord -- // SigCollection ChordQuality::getNotesInChord(void) const { SigCollection* output; output = new SigCollection; Convert::chordQualityToNoteSet(*output, *this); return *output; } void ChordQuality::getNotesInChord(SigCollection& notes) const { notes.setSize(0); if ((chordType != E_chord_unknown) && (chordNotes.getSize() > 0)) { notes.setSize(chordNotes.getSize()); for (int i=0; i& notes) const { SigCollection temp; getNotesInChord(temp); notes.resize(temp.getSize()); for (int i=0; i<(int)notes.size(); i++) { notes[i] = temp[i]; } } ////////////////////////////// // // ChordQuality::getRoot -- // int ChordQuality::getRoot(void) const { return chordRoot; } ////////////////////////////// // // ChordQuality::getRootName -- // const char* ChordQuality::getRootName(void) const { return Convert::kernPitchClass.getName(getRoot()); } ////////////////////////////// // // ChordQuality::getType -- // int ChordQuality::getType(void) const { return chordType; } ////////////////////////////// // // ChordQuality::getTypeName -- // const char* ChordQuality::getTypeName(void) const { return Convert::chordType.getName(getType()); } ////////////////////////////// // // ChordQuality::makeString -- // Default value: pcsQ = 0 // void ChordQuality::makeString(char* space, int pcsQ) { stringstream temp; temp << *this; if (pcsQ) { printPitchClasses(temp); } temp << ends; strcpy(space, temp.str().c_str()); } ////////////////////////////// // // printPitchClasses -- Only works for unknown pitches at the moment. // ostream& ChordQuality::printPitchClasses(ostream& out) { char buffer[128] = {0}; if (chordNotes.getSize() == 0) { return out; } out << '['; int i; for (i=0; i& notes) { int i; chordNotes.setSize(notes.getSize()); for (i=0; i& notes) { int i; chordNotes.setSize(notes.getSize()); for (i=0; i