Skip to content

Commit 7b12621

Browse files
committed
fix regression with pitch class
1 parent 48f92b2 commit 7b12621

File tree

2 files changed

+75
-33
lines changed

2 files changed

+75
-33
lines changed

js/blocks/PitchBlocks.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
INVALIDPITCH, pitchToNumber, LeftBlock, SHARP, FLAT, DOUBLEFLAT,
1818
DOUBLESHARP, NATURAL, FIXEDSOLFEGE, SOLFEGENAMES, SOLFEGENAMES1,
1919
NOTENAMES, NOTENAMES1, getPitchInfo, YSTAFFOCTAVEHEIGHT,
20-
YSTAFFNOTEHEIGHT, MUSICALMODES, keySignatureToMode,
20+
YSTAFFNOTEHEIGHT, MUSICALMODES, keySignatureToMode, ALLNOTENAMES,
2121
nthDegreeToPitch, A0, C8, calcOctave, SOLFEGECONVERSIONTABLE,
2222
NOTESFLAT, NOTESSHARP, NOTESTEP, scaleDegreeToPitchMapping
2323
*/
@@ -546,7 +546,16 @@ function setupPitchBlocks(activity) {
546546
} else {
547547
notePlayed += foundOctave;
548548
}
549-
} else if (NOTENAMES.indexOf(arg1) !== -1) {
549+
} else if (NOTENAMES1.indexOf(arg1) !== -1) {
550+
if (foundOctave.length === 0) {
551+
notePlayed =
552+
arg1 +
553+
(tur.singer.currentOctave ? tur.singer.currentOctave : 4);
554+
} else {
555+
notePlayed = arg1 + foundOctave;
556+
}
557+
} else if (ALLNOTENAMES.indexOf(arg1) !== -1) {
558+
// Why would the accidental be "b or #"?
550559
if (foundOctave.length === 0) {
551560
notePlayed =
552561
arg1 +

js/utils/musicutils.js

Lines changed: 64 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@
2828
/*
2929
exported
3030
31-
SYNTHSVG, RSYMBOLS, NOTENAMES, NOTENAMES1, WESTERN2EISOLFEGENAMES,
32-
PITCHES1, PITCHES3, SCALENOTES, EASTINDIANSOLFNOTES, DRUMS,
33-
GRAPHICS, SOLFATTRS, DEGREES, RHYTHMRULERHEIGHT, SLIDERHEIGHT,
34-
SLIDERWIDTH, MATRIXLABELCOLOR, MATRIXNOTECELLCOLOR,
35-
MATRIXTUPLETCELLCOLOR, MATRIXRHYTHMCELLCOLOR,
31+
SYNTHSVG, RSYMBOLS, NOTENAMES, ALLNOTENAMES, NOTENAMES1,
32+
WESTERN2EISOLFEGENAMES, PITCHES1, PITCHES3, SCALENOTES,
33+
EASTINDIANSOLFNOTES, DRUMS, GRAPHICS, SOLFATTRS, DEGREES,
34+
RHYTHMRULERHEIGHT, SLIDERHEIGHT, SLIDERWIDTH, MATRIXLABELCOLOR,
35+
MATRIXNOTECELLCOLOR, MATRIXTUPLETCELLCOLOR, MATRIXRHYTHMCELLCOLOR,
3636
MATRIXBUTTONCOLORHOVER, MATRIXNOTECELLCOLORHOVER, MATRIXSOLFEWIDTH,
3737
EIGHTHNOTEWIDTH, MATRIXBUTTONHEIGHT, MATRIXBUTTONHEIGHT2,
3838
MATRIXSOLFEHEIGHT, NOTESYMBOLS, SELECTORSTRINGS, ACCIDENTALLABELS,
@@ -228,6 +228,43 @@ const SOLFEGENAMES1 = [
228228
"ti"
229229
];
230230
const NOTENAMES = ["C", "D", "E", "F", "G", "A", "B"];
231+
const ALLNOTENAMES = [
232+
"C",
233+
"C#",
234+
"Cx",
235+
"Dbb",
236+
"Db",
237+
"D",
238+
"D#",
239+
"Dx",
240+
"Ebb",
241+
"Eb",
242+
"E",
243+
"E#",
244+
"Ex",
245+
"Fbb",
246+
"Fb",
247+
"F",
248+
"F#",
249+
"Fx",
250+
"Gbb",
251+
"Gb",
252+
"G",
253+
"G#",
254+
"Gx",
255+
"Abb",
256+
"Ab",
257+
"A",
258+
"A#",
259+
"Ax",
260+
"Bbb",
261+
"Bb",
262+
"B",
263+
"B#",
264+
"Bx",
265+
"Cbb",
266+
"Cb"
267+
];
231268
const NOTENAMES1 = [
232269
"C",
233270
"C" + SHARP,
@@ -1200,20 +1237,20 @@ const TEMPERAMENT = {
12001237
]
12011238
},
12021239
"custom": {
1203-
"0": Math.pow(2, 0 / 12),
1204-
"1": Math.pow(2, 1 / 12),
1205-
"2": Math.pow(2, 2 / 12),
1206-
"3": Math.pow(2, 3 / 12),
1207-
"4": Math.pow(2, 4 / 12),
1208-
"5": Math.pow(2, 5 / 12),
1209-
"6": Math.pow(2, 6 / 12),
1210-
"7": Math.pow(2, 7 / 12),
1211-
"8": Math.pow(2, 8 / 12),
1212-
"9": Math.pow(2, 9 / 12),
1213-
"10": Math.pow(2, 10 / 12),
1214-
"11": Math.pow(2, 11 / 12),
1215-
"pitchNumber": 12,
1216-
"interval": [
1240+
0: Math.pow(2, 0 / 12),
1241+
1: Math.pow(2, 1 / 12),
1242+
2: Math.pow(2, 2 / 12),
1243+
3: Math.pow(2, 3 / 12),
1244+
4: Math.pow(2, 4 / 12),
1245+
5: Math.pow(2, 5 / 12),
1246+
6: Math.pow(2, 6 / 12),
1247+
7: Math.pow(2, 7 / 12),
1248+
8: Math.pow(2, 8 / 12),
1249+
9: Math.pow(2, 9 / 12),
1250+
10: Math.pow(2, 10 / 12),
1251+
11: Math.pow(2, 11 / 12),
1252+
pitchNumber: 12,
1253+
interval: [
12171254
"perfect 1",
12181255
"minor 2",
12191256
"major 2",
@@ -1235,22 +1272,18 @@ const setOctaveRatio = (newOctaveRatio) => {
12351272
octaveRatio = newOctaveRatio;
12361273
};
12371274

1238-
12391275
const getOctaveRatio = () => {
12401276
return octaveRatio;
12411277
};
12421278

1243-
12441279
const getTemperamentsList = () => {
12451280
return TEMPERAMENTS;
12461281
};
12471282

1248-
12491283
const getTemperament = (entry) => {
12501284
return TEMPERAMENT[entry];
12511285
};
12521286

1253-
12541287
const getTemperamentKeys = () => {
12551288
const keys = [];
12561289
for (const k in TEMPERAMENT) {
@@ -1260,7 +1293,6 @@ const getTemperamentKeys = () => {
12601293
return keys;
12611294
};
12621295

1263-
12641296
const addTemperamentToList = (newEntry) => {
12651297
for (let i = 0; i < TEMPERAMENTS.length; i++) {
12661298
if (PreDefinedTemperaments[i] === newEntry) {
@@ -1270,17 +1302,14 @@ const addTemperamentToList = (newEntry) => {
12701302
TEMPERAMENTS.push(newEntry);
12711303
};
12721304

1273-
12741305
const deleteTemperamentFromList = (oldEntry) => {
12751306
delete TEMPERAMENT[oldEntry];
12761307
};
12771308

1278-
12791309
const addTemperamentToDictionary = (entryName, entryValue) => {
12801310
TEMPERAMENT[entryName] = entryValue;
12811311
};
12821312

1283-
12841313
const updateTemperaments = () => {
12851314
TEMPERAMENTS = [...INITIALTEMPERAMENTS];
12861315
for (const i in TEMPERAMENT) {
@@ -2974,14 +3003,14 @@ function getNote(
29743003
for (const number in TEMPERAMENT[temperament]) {
29753004
if (number !== "pitchNumber") {
29763005
if (note === TEMPERAMENT[temperament][number][3]) {
2977-
if (typeof(number) === "string") {
3006+
if (typeof number === "string") {
29783007
pitchNumber = Number(number);
29793008
} else {
29803009
pitchNumber = number;
29813010
}
29823011
break;
29833012
} else if (note === TEMPERAMENT[temperament][number][1]) {
2984-
if (typeof(number) === "string") {
3013+
if (typeof number === "string") {
29853014
pitchNumber = Number(number);
29863015
} else {
29873016
pitchNumber = number;
@@ -4237,7 +4266,8 @@ function getPitchInfo(activity, type, notePlayed, tur) {
42374266
if (tur.singer.moveable === false) return SOLFEGECONVERSIONTABLE[np];
42384267
return SOLFEGENAMES[buildScale(tur.singer.keySignature)[0].indexOf(np)];
42394268
case "pitch class":
4240-
if (Number(np)) {
4269+
// If it is a frequency, convert it to a pitch/octave.
4270+
if (!isNaN(Number(np))) {
42414271
np = frequencyToPitch(np)[0] + frequencyToPitch(np)[1];
42424272
}
42434273
return (
@@ -4303,7 +4333,10 @@ function getPitchInfo(activity, type, notePlayed, tur) {
43034333
case "pitch number":
43044334
return _calculate_pitch_number(activity, np, tur);
43054335
case "pitch in hertz":
4306-
return activity.logo.synth._getFrequency(np, activity.logo.synth.changeInTemperament);
4336+
return activity.logo.synth._getFrequency(
4337+
np,
4338+
activity.logo.synth.changeInTemperament
4339+
);
43074340
case "pitch to color":
43084341
if (Number(np)) {
43094342
[np, octave] = frequencyToPitch(np);

0 commit comments

Comments
 (0)