Sorting out glissando

This commit is contained in:
Neale Pickett 2020-11-25 21:53:45 -07:00
parent 5d6bc54653
commit d31398ed63
3 changed files with 14 additions and 6 deletions

View File

@ -51,6 +51,7 @@ void doPlay(bool forceDisplayUpdate) {
updateDisplay = true;
}
diag("%d %f", pipe.keys, pipe.glissandoOpenness);
#if 0
if (updateDisplay) {
// Look up the note name

View File

@ -47,22 +47,28 @@ void Pipe::Update() {
// 0x6c is actually 8 bytes, but all 8 are always the same...
paj7620ReadReg(0x6c, 1, &kneeClosedness);
for (int i = 0; i < NUM_KEYS; i++) {
for (int i = 0; i < NUM_KEYS; ++i) {
uint16_t val = max(capSensor.filteredData(i), CLOSEDVAL);
float openness = ((val - CLOSEDVAL) / float(GLISSANDO_STEPS));
keyOpen[i] = ((val - CLOSEDVAL) / float(GLISSANDO_STEPS));
// keys = all keys which are at least touched
// glissandoKeys = all keys which are fully closed
// The glissando operation computes the difference.
if (openness < 1.0) {
glissandoOpenness = max(glissandoOpenness, openness);
if (keyOpen[i] < 1.0) {
glissandoOpenness = max(glissandoOpenness, keyOpen[i]);
bitSet(keys, i);
}
if (openness == 0.0) {
if (keyOpen[i] == 0.0) {
bitSet(glissandoKeys, i);
}
}
// Compute glissando amount
glissandoOpenness = 0.0;
for (int i = 0; i < 8; ++i) {
glissandoOpenness = max(glissandoOpenness, keyOpen[i]);
}
// Look up notes in the big table
struct Fingering f = FingeredNote(keys);
struct Fingering gf = FingeredNote(glissandoKeys);

3
pipe.h
View File

@ -6,7 +6,7 @@
#include <stdint.h>
#include "tuning.h"
#define NUM_KEYS 12
#define NUM_KEYS 8
enum Adjust {
ADJUST_DOWN = -1,
@ -23,6 +23,7 @@ class Pipe {
// keys are which keys are being pressed.
uint16_t keys;
uint16_t keysLast;
float keyOpen[NUM_KEYS];
// note holds the note being played, according to the fingering chart.
Note note;