123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- "use strict";
- var pitch_1 = require("../../../src/Common/DataObjects/pitch");
- describe("Pitch Unit Tests:", function () {
- describe("transpose Pitch", function () {
- var pitch = new pitch_1.Pitch(pitch_1.NoteEnum.A, 1, pitch_1.AccidentalEnum.NONE);
- var transposedFundamentalAndOctave = pitch_1.Pitch.CalculateTransposedHalfTone(pitch, 12);
- var higherTransposedFundamentalAndOctave = pitch_1.Pitch.CalculateTransposedHalfTone(pitch, 26);
- it("should be 1 octave higher and same fundamental", function (done) {
- chai.expect(transposedFundamentalAndOctave.overflow).to.equal(1);
- chai.expect(transposedFundamentalAndOctave.value).to.equal(pitch.FundamentalNote);
- chai.expect(higherTransposedFundamentalAndOctave.overflow).to.equal(2);
- chai.expect(higherTransposedFundamentalAndOctave.value).to.equal(pitch.FundamentalNote + 2);
- done();
- });
- });
- describe("calculate Frequency from Pitch", function () {
- var pitch1 = new pitch_1.Pitch(pitch_1.NoteEnum.A, 1, pitch_1.AccidentalEnum.NONE);
- var pitch2 = new pitch_1.Pitch(pitch_1.NoteEnum.B, 1, pitch_1.AccidentalEnum.DOUBLEFLAT);
- var pitch3 = new pitch_1.Pitch(pitch_1.NoteEnum.G, 1, pitch_1.AccidentalEnum.DOUBLESHARP);
- var frequency1 = pitch_1.Pitch.calcFrequency(pitch_1.Pitch.calcFractionalKey(pitch1.Frequency));
- var frequency2 = pitch_1.Pitch.calcFrequency(pitch_1.Pitch.calcFractionalKey(pitch2.Frequency));
- var frequency3 = pitch_1.Pitch.calcFrequency(pitch_1.Pitch.calcFractionalKey(pitch3.Frequency));
- it("should be 440Hz", function (done) {
- chai.expect(pitch1.Frequency).to.equal(440);
- chai.expect(pitch2.Frequency).to.equal(440);
- chai.expect(pitch3.Frequency).to.equal(440);
- chai.expect(frequency1).to.equal(440);
- chai.expect(frequency2).to.equal(440);
- chai.expect(frequency3).to.equal(440);
- done();
- });
- });
- describe("calculate fractional key", function () {
- // the values are validated against the C# output. TODO: ask mauz about the shift
- var pitch1 = new pitch_1.Pitch(pitch_1.NoteEnum.C, 6, pitch_1.AccidentalEnum.SHARP); // C#6 -> 109
- var pitch2 = new pitch_1.Pitch(pitch_1.NoteEnum.B, 1, pitch_1.AccidentalEnum.NONE); // B1 -> 59
- var pitch3 = new pitch_1.Pitch(pitch_1.NoteEnum.F, 4, pitch_1.AccidentalEnum.DOUBLEFLAT); // Fbb4 -> 87
- var pitch4 = new pitch_1.Pitch(pitch_1.NoteEnum.E, -1, pitch_1.AccidentalEnum.DOUBLESHARP); // E##-1 -> 30
- var pitch5 = new pitch_1.Pitch(pitch_1.NoteEnum.A, 1, pitch_1.AccidentalEnum.NONE); // A1 -> 57
- var key1 = pitch_1.Pitch.calcFractionalKey(pitch1.Frequency);
- var key2 = pitch_1.Pitch.calcFractionalKey(pitch2.Frequency);
- var key3 = pitch_1.Pitch.calcFractionalKey(pitch3.Frequency);
- var key4 = pitch_1.Pitch.calcFractionalKey(pitch4.Frequency);
- var key5 = pitch_1.Pitch.calcFractionalKey(pitch5.Frequency);
- it("pitch key should equal midi key", function (done) {
- chai.expect(key1).to.equal(109);
- chai.expect(key2).to.equal(59);
- chai.expect(key3).to.equal(87);
- chai.expect(key4).to.equal(30);
- chai.expect(key5).to.equal(57);
- done();
- });
- });
- describe("calculate Pitch from Frequency", function () {
- var octave = 1;
- var accidentals = [pitch_1.AccidentalEnum.DOUBLEFLAT,
- pitch_1.AccidentalEnum.FLAT,
- pitch_1.AccidentalEnum.NONE,
- pitch_1.AccidentalEnum.SHARP,
- pitch_1.AccidentalEnum.DOUBLESHARP,
- ];
- var pitch;
- var calcedPitch;
- for (var i = 0; i < pitch_1.Pitch.pitchEnumValues.length; i++) {
- for (var j = 0; j < accidentals.length; j++) {
- pitch = new pitch_1.Pitch(pitch_1.Pitch.pitchEnumValues[i], octave, accidentals[j]);
- calcedPitch = pitch_1.Pitch.fromFrequency(pitch.Frequency);
- it("calcedPitch equals original, " +
- ("note: " + pitch.FundamentalNote + ", octave: " + pitch.Octave + ", accidental; " + pitch.Accidental), function (done) {
- // compare the frequencies here -> only AccidentalEnum None and Sharp will lead to same note, octave and accidental
- chai.expect(pitch.Frequency).to.equal(calcedPitch.Frequency);
- done();
- });
- }
- }
- });
- describe("get Pitch from fractional key", function () {
- var octave = 5;
- var accidentals = [pitch_1.AccidentalEnum.DOUBLEFLAT,
- pitch_1.AccidentalEnum.FLAT,
- pitch_1.AccidentalEnum.NONE,
- pitch_1.AccidentalEnum.SHARP,
- pitch_1.AccidentalEnum.DOUBLESHARP,
- ];
- var pitch;
- var calcedPitch;
- for (var i = 0; i < pitch_1.Pitch.pitchEnumValues.length; i++) {
- for (var j = 0; j < accidentals.length; j++) {
- pitch = new pitch_1.Pitch(pitch_1.Pitch.pitchEnumValues[i], octave, accidentals[j]);
- var halftone = pitch.getHalfTone();
- calcedPitch = pitch_1.Pitch.fromHalftone(halftone);
- it("calcedPitch equals original, " +
- ("note: " + pitch.FundamentalNote + ", octave: " + pitch.Octave + ", accidental; " + pitch.Accidental), function (done) {
- chai.expect(pitch.getHalfTone()).to.equal(calcedPitch.getHalfTone());
- done();
- });
- }
- }
- });
- // TODO: test ceiling and floor (needed for the music sheet transpose)
- // TODO: test getTransposedPitch (or delete it -> seems to be a less powerful implementation of CalculateTransposedHalfTone)
- // TODO: test DoEnharmonicEnchange (needed for the midi reader)
- });
|