diff --git a/webapp/path_navigator.html b/webapp/path_navigator.html
index f5c8d2b..d069dfd 100644
--- a/webapp/path_navigator.html
+++ b/webapp/path_navigator.html
@@ -281,6 +281,8 @@
Fundamental (Hz):
+ Octave:
+
@@ -466,7 +468,8 @@
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
chordIndex: chordIndex,
- nodeIndex: localId
+ nodeIndex: localId,
+ octave: parseInt(document.getElementById('octaveInput').value) || 0
})
}).then(r => r.json()).then(data => {
console.log('Playing on', destination + ':', data.frequency.toFixed(2), 'Hz on voice', data.voice);
diff --git a/webapp/server.py b/webapp/server.py
index c7659c0..6226889 100644
--- a/webapp/server.py
+++ b/webapp/server.py
@@ -99,6 +99,7 @@ def play_freq():
data = request.json
chord_index = data.get("chordIndex")
node_index = data.get("nodeIndex")
+ octave = data.get("octave", 0)
if chord_index < 0 or chord_index >= len(chords):
return jsonify({"error": "Invalid chord index"}), 400
@@ -109,7 +110,7 @@ def play_freq():
pitch = chord[node_index]
fraction = Fraction(pitch.get("fraction", "1"))
- frequency = fundamental * float(fraction)
+ frequency = fundamental * float(fraction) * (2**octave)
voice = node_index + 1 # 1-indexed
osc_sender.send_single(frequency, voice)