Skip to content

Commit 45089d8

Browse files
Make strings play correct notes in new tunings
1 parent d3fa419 commit 45089d8

File tree

4 files changed

+28
-32
lines changed

4 files changed

+28
-32
lines changed

apps/fretonator-web/src/app/common/fretonator/fretboard/fretboard.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
[attr.data-display-note]="noteNameDisplay === NoteDisplays.noteNames ? ((fretMap | getFretFromFretMap: string.name:fret:stringNamesAreCaseSensitive)?.displayName) : ((fretMap | getFretFromFretMap: string.name:fret:stringNamesAreCaseSensitive)?.degreeNumber)"
2727
[attr.data-mode]="mode"
2828
[attr.data-highlight]="highlightedDegrees.has((fretMap | getFretFromFretMap: string.name:fret:stringNamesAreCaseSensitive)?.degree)"
29-
(click)="playbackService.playNote(string.name, fret)"
29+
(click)="playbackService.playNote(string.frequencyMarker, fret)"
3030
></div>
3131
</ng-container>
3232
</ng-container>

apps/fretonator-web/src/app/common/fretonator/fretboard/fretboard.component.ts

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -37,31 +37,31 @@ enum Tunings {
3737
dadgad = 'dadgad'
3838
}
3939

40-
//string are in reverse order
40+
//strings are in reverse order
4141
const TuningReturner = {
4242
'standard': [
43-
{ name: 'e', note: 'E' },
44-
{ name: 'B', note: 'B' },
45-
{ name: 'G', note: 'G' },
46-
{ name: 'D', note: 'D' },
47-
{ name: 'A', note: 'A' },
48-
{ name: 'E', note: 'E' },
43+
{ name: 'e', note: 'E', frequencyMarker: 'e' },
44+
{ name: 'B', note: 'B', frequencyMarker: 'B' },
45+
{ name: 'G', note: 'G', frequencyMarker: 'G' },
46+
{ name: 'D', note: 'D', frequencyMarker: 'D' },
47+
{ name: 'A', note: 'A', frequencyMarker: 'A' },
48+
{ name: 'E', note: 'E', frequencyMarker: 'E' },
4949
],
5050
'dropd': [
51-
{ name: 'e', note: 'E' },
52-
{ name: 'B', note: 'B' },
53-
{ name: 'G', note: 'G' },
54-
{ name: 'D', note: 'D' },
55-
{ name: 'A', note: 'A' },
56-
{ name: 'D', note: 'D' },
51+
{ name: 'e', note: 'E', frequencyMarker: 'e' },
52+
{ name: 'B', note: 'B', frequencyMarker: 'B' },
53+
{ name: 'G', note: 'G', frequencyMarker: 'G' },
54+
{ name: 'D', note: 'D', frequencyMarker: 'D' },
55+
{ name: 'A', note: 'A', frequencyMarker: 'A' },
56+
{ name: 'D', note: 'D', frequencyMarker: 'D_' },
5757
],
5858
'dadgad': [
59-
{ name: 'd', note: 'D' },
60-
{ name: 'A', note: 'A' },
61-
{ name: 'G', note: 'G' },
62-
{ name: 'D', note: 'D' },
63-
{ name: 'A', note: 'A' },
64-
{ name: 'D', note: 'D' },
59+
{ name: 'd', note: 'D', frequencyMarker: 'd' },
60+
{ name: 'A', note: 'A', frequencyMarker: 'A' },
61+
{ name: 'G', note: 'G', frequencyMarker: 'G' },
62+
{ name: 'D', note: 'D', frequencyMarker: 'D' },
63+
{ name: 'A', note: 'A', frequencyMarker: 'A' },
64+
{ name: 'D', note: 'D', frequencyMarker: 'D_' },
6565
]
6666
};
6767

apps/fretonator-web/src/app/common/playback/note-playback.service.ts

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { Injectable } from '@angular/core';
22
import { StringFrequencies } from '../../util/constants';
3-
import { ModeMap } from '../../util/types';
43

54
const SYNTH_BUFFER_SIZE = 4096;
65
const SYNTH_PLAY_DURATION = 2000;
@@ -14,7 +13,7 @@ export class NotePlaybackService {
1413
constructor() {
1514
}
1615

17-
playNote(stringName, fret) {
16+
playNote(stringFrequencyMarker, fret) {
1817
if (!this.context) {
1918
try {
2019
// Feature sniff for web audio API
@@ -24,19 +23,14 @@ export class NotePlaybackService {
2423
}
2524
}
2625
if (this.context) {
27-
const noteFrequency = this.getFrequency(stringName, fret);
26+
const noteFrequency = this.getFrequency(stringFrequencyMarker, fret);
2827
this.pluckString(noteFrequency);
2928
}
3029
}
3130

32-
playMode(modeMap: ModeMap) {
33-
console.log('playMode called!');
34-
console.log(modeMap);
35-
}
36-
37-
private getFrequency(stringName, fret) {
38-
// We're using stringName here, the case sensitive alt to string, to differentiate E/e strings.
39-
const stringFrequency = StringFrequencies[stringName];
31+
private getFrequency(stringFrequencyMarker, fret) {
32+
// We're using stringFrequencyMarker here, the case sensitive alt to string, to differentiate E/e strings.
33+
const stringFrequency = StringFrequencies[stringFrequencyMarker];
4034
const fretCents = fret * 100;
4135
return stringFrequency * Math.pow(2, (fretCents / 1200));
4236
}

apps/fretonator-web/src/app/util/constants.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -640,11 +640,13 @@ export const Enharmonics = [
640640

641641
export const StringFrequencies = {
642642
'e': 329.63,
643+
'd': 293.66,
643644
'B': 246.94,
644645
'G': 196.00,
645646
'D': 146.83,
646647
'A': 110.00,
647-
'E': 82.41
648+
'E': 82.41,
649+
'D_': 73.42,
648650
};
649651

650652
export const StandardModePatterns = [

0 commit comments

Comments
 (0)