Chris@892: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@892: Chris@892: /* Chris@892: Sonic Visualiser Chris@892: An audio file viewer and annotation editor. Chris@892: Centre for Digital Music, Queen Mary, University of London. Chris@892: Chris@892: This program is free software; you can redistribute it and/or Chris@892: modify it under the terms of the GNU General Public License as Chris@892: published by the Free Software Foundation; either version 2 of the Chris@892: License, or (at your option) any later version. See the file Chris@892: COPYING included with this distribution for more information. Chris@892: */ Chris@892: Chris@892: #ifndef TEST_PITCH_H Chris@892: #define TEST_PITCH_H Chris@892: Chris@892: #include "../Pitch.h" Chris@892: #include "../Preferences.h" Chris@892: Chris@892: #include Chris@892: #include Chris@892: #include Chris@892: Chris@892: #include Chris@892: Chris@892: using namespace std; Chris@892: Chris@892: class TestPitch : public QObject Chris@892: { Chris@892: Q_OBJECT Chris@892: Chris@892: private slots: Chris@892: void init() { Chris@1429: Preferences::getInstance()->setOctaveOfMiddleC(4); Chris@1429: Preferences::getInstance()->setTuningFrequency(440); Chris@892: } Chris@892: Chris@892: void pitchLabel() Chris@892: { Chris@1429: QCOMPARE(Pitch::getPitchLabel(60, 0, false), QString("C4")); Chris@1429: QCOMPARE(Pitch::getPitchLabel(69, 0, false), QString("A4")); Chris@1429: QCOMPARE(Pitch::getPitchLabel(61, 0, false), QString("C#4")); Chris@1429: QCOMPARE(Pitch::getPitchLabel(61, 0, true), QString("Db4")); Chris@1429: QCOMPARE(Pitch::getPitchLabel(59, 0, false), QString("B3")); Chris@1429: QCOMPARE(Pitch::getPitchLabel(59, 0, true), QString("B3")); Chris@1429: QCOMPARE(Pitch::getPitchLabel(0, 0, false), QString("C-1")); Chris@892: Chris@1429: QCOMPARE(Pitch::getPitchLabel(60, -40, false), QString("C4-40c")); Chris@1429: QCOMPARE(Pitch::getPitchLabel(60, 40, false), QString("C4+40c")); Chris@1429: QCOMPARE(Pitch::getPitchLabel(58, 4, false), QString("A#3+4c")); Chris@892: Chris@1429: Preferences::getInstance()->setOctaveOfMiddleC(3); Chris@892: Chris@1429: QCOMPARE(Pitch::getPitchLabel(60, 0, false), QString("C3")); Chris@1429: QCOMPARE(Pitch::getPitchLabel(69, 0, false), QString("A3")); Chris@1429: QCOMPARE(Pitch::getPitchLabel(61, 0, false), QString("C#3")); Chris@1429: QCOMPARE(Pitch::getPitchLabel(61, 0, true), QString("Db3")); Chris@1429: QCOMPARE(Pitch::getPitchLabel(59, 0, false), QString("B2")); Chris@1429: QCOMPARE(Pitch::getPitchLabel(59, 0, true), QString("B2")); Chris@1429: QCOMPARE(Pitch::getPitchLabel(0, 0, false), QString("C-2")); Chris@892: Chris@1429: QCOMPARE(Pitch::getPitchLabel(60, -40, false), QString("C3-40c")); Chris@1429: QCOMPARE(Pitch::getPitchLabel(60, 40, false), QString("C3+40c")); Chris@1429: QCOMPARE(Pitch::getPitchLabel(58, 4, false), QString("A#2+4c")); Chris@892: } Chris@892: Chris@892: void pitchLabelForFrequency() Chris@892: { Chris@1429: QCOMPARE(Pitch::getPitchLabelForFrequency(440, 440, false), QString("A4")); Chris@1429: QCOMPARE(Pitch::getPitchLabelForFrequency(440, 220, false), QString("A5")); Chris@1429: QCOMPARE(Pitch::getPitchLabelForFrequency(261.63, 440, false), QString("C4")); Chris@892: } Chris@892: Chris@1025: #define MIDDLE_C 261.6255653005986 Chris@892: Chris@892: void frequencyForPitch() Chris@892: { Chris@1429: QCOMPARE(Pitch::getFrequencyForPitch(60, 0), MIDDLE_C); Chris@1429: QCOMPARE(Pitch::getFrequencyForPitch(69, 0), 440.0); Chris@1429: QCOMPARE(Pitch::getFrequencyForPitch(60, 0, 220), MIDDLE_C / 2.0); Chris@1429: QCOMPARE(Pitch::getFrequencyForPitch(69, 0, 220), 220.0); Chris@892: } Chris@892: Chris@892: void pitchForFrequency() Chris@892: { Chris@1429: double centsOffset = 0.0; Chris@1429: QCOMPARE(Pitch::getPitchForFrequency(MIDDLE_C, ¢sOffset), 60); Chris@1429: QCOMPARE(centsOffset + 1.0, 1.0); // avoid ineffective fuzzy-compare to 0 Chris@1429: QCOMPARE(Pitch::getPitchForFrequency(261.0, ¢sOffset), 60); Chris@1429: QCOMPARE(int(centsOffset), -4); Chris@1429: QCOMPARE(Pitch::getPitchForFrequency(440.0, ¢sOffset), 69); Chris@1429: QCOMPARE(centsOffset + 1.0, 1.0); Chris@1025: } Chris@1025: Chris@1025: void pitchForFrequencyF() Chris@1025: { Chris@1429: float centsOffset = 0.f; Chris@1429: QCOMPARE(Pitch::getPitchForFrequency(MIDDLE_C, ¢sOffset), 60); Chris@1429: QCOMPARE(centsOffset + 1.f, 1.f); // avoid ineffective fuzzy-compare to 0 Chris@1429: QCOMPARE(Pitch::getPitchForFrequency(261.0, ¢sOffset), 60); Chris@1429: QCOMPARE(int(centsOffset), -4); Chris@1429: QCOMPARE(Pitch::getPitchForFrequency(440.0, ¢sOffset), 69); Chris@1429: QCOMPARE(centsOffset + 1.f, 1.f); Chris@892: } Chris@892: }; Chris@892: Chris@892: #endif