Skip to content

Commit 9a13b32

Browse files
Finalize Release v1.0.8
- Web Flasher v1.0.8: Graceful success handling (100% bar on reboot) - README.md: Updated to point to Web Flasher and reflect correct controls
1 parent f350c8a commit 9a13b32

File tree

3 files changed

+52
-43
lines changed

3 files changed

+52
-43
lines changed

README.md

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,44 @@
11
# Digital Kalimba for Daisy Seed
22

3-
A 7-button polyphonic kalimba instrument using Karplus-Strong physical modeling synthesis with traditional G Major Pentatonic tuning.
3+
A 7-button polyphonic synthesizer using Karplus-Strong physical modeling synthesis with 5 selectable musical scales.
44

55
## Features
66

77
- **Full Polyphony:** All 7 notes can play simultaneously
8-
- **Authentic Tuning:** G Major Pentatonic (traditional kalimba scale)
9-
- **Frequency-Dependent Decay:** Low notes sustain longer, high notes decay faster (just like a real kalimba)
10-
- **Built-in Reverb:** Simulates resonator box for rich, ambient sound
11-
- **Real-Time Control:** 6 potentiometers for brightness, decay, reverb, and LFO modulation
12-
- **OLED Display:** Shows active notes, tuning, and parameters
13-
- **Low CPU Usage:** ~12-15% CPU (85% available for expansion)
14-
- **Low Latency:** ~0.08ms (4-sample blocks @ 48kHz)
8+
- **5 Musical Scales:** Pentatonic Major, Dorian, Chromatic, Kalimba, Just Intonation
9+
- **Octave Shift:** -2 to +2 octaves (5 octave range)
10+
- **Frequency-Dependent Decay:** Low notes sustain longer, high notes decay faster
11+
- **Stereo Reverb:** High-quality ReverbSc for spatial depth
12+
- **Real-Time Control:** Brightness, Decay, Scale Select, Reverb Mix/Time
13+
- **OLED Display:** Shows current scale, octave, and active notes
14+
- **Low Latency:** ~0.08ms
15+
16+
## Quick Start (Easiest Way)
17+
18+
**Flash directly from your browser! No software installation required.**
19+
20+
1. **Connect** your Daisy Seed to your computer via USB.
21+
2. **Visit the Web Flasher:**
22+
👉 **[https://willbearfruits.github.io/KarplusStrongMachine/web-flasher/](https://willbearfruits.github.io/KarplusStrongMachine/web-flasher/)**
23+
3. **Put Daisy in Bootloader Mode:**
24+
* Hold **BOOT** button.
25+
* Press **RESET** button.
26+
* Release **BOOT** button.
27+
4. Click **"Connect to Daisy Seed"** and select your device.
28+
5. Click **"Flash Firmware"**.
29+
6. Press **RESET** to play!
1530

16-
## Quick Start
31+
---
32+
33+
## Alternative: Build from Source (CLI)
1734

1835
### 1. Build and Upload
1936

2037
```bash
2138
cd ~/Documents/KarplusStrongMachine
22-
./build-and-upload-kalimba.sh
39+
make program-dfu
2340
```
2441

25-
### 2. Enter Bootloader Mode
26-
27-
1. Hold **BOOT** button on Daisy Seed
28-
2. Press **RESET** button (while holding BOOT)
29-
3. Release **BOOT** button
30-
4. LED should pulse slowly
31-
5. Press ENTER in terminal
32-
33-
### 3. Play!
34-
35-
After upload, press RESET button. The kalimba is now ready to play!
36-
3742
## Hardware Setup
3843

3944
### Minimum Required Wiring
@@ -110,12 +115,12 @@ Traditional kalimba center-out alternating pattern:
110115

111116
| Control | Function | Effect |
112117
|---------|----------|--------|
113-
| **A0 - Brightness** | Tone color | CCW: Warmer, darker / CW: Brighter, more treble |
114-
| **A1 - Decay** | Sustain time | CCW: Shorter decay / CW: Longer sustain |
115-
| **A2 - Reverb Amount** | Dry/wet mix | CCW: Dry / CW: Full reverb |
116-
| **A3 - Reverb Size** | Room size | CCW: Small room / CW: Large hall |
117-
| **A4 - LFO Rate** | Vibrato speed | CCW: Slow / CW: Fast |
118-
| **A5 - LFO Depth** | Vibrato amount | CCW: None / CW: Maximum |
118+
| **A0 - Brightness** | Tone color | CCW: Warmer, darker / CW: Brighter, metallic |
119+
| **A1 - Decay** | Sustain time | CCW: Short plucks / CW: Long sustain |
120+
| **A2 - Octave Shift** | Pitch range | Center: Normal. Left: -1/-2 oct. Right: +1/+2 oct |
121+
| **A3 - Scale Select** | Musical Scale | 5 regions: Pentatonic -> Dorian -> Chromatic -> Kalimba -> Just Intonation |
122+
| **A4 - Reverb Mix** | Dry/wet mix | CCW: Dry / CW: Full reverb |
123+
| **A5 - Reverb Time** | Room size | CCW: Small room / CW: Large hall |
119124

120125
## Tips for Playing
121126

web-flasher/dfu.js

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -284,20 +284,24 @@ class DFUDevice {
284284
}
285285

286286
// Send zero-length download to exit DFU mode
287-
progressCallback({ stage: 'finalize', percent: 90, message: 'Finalizing...' });
288-
await this.download(new Uint8Array(0), 0);
289-
290-
// Wait for manifest
291-
let status = await this.getStatus();
292-
while (status.state === DFU_STATE.DFU_MANIFEST_SYNC ||
293-
status.state === DFU_STATE.DFU_MANIFEST) {
294-
await new Promise(resolve => setTimeout(resolve, 100));
295-
try {
287+
progressCallback({ stage: 'finalize', percent: 100, message: 'Finalizing...' });
288+
try {
289+
await this.download(new Uint8Array(0), 0);
290+
} catch (e) {
291+
// Ignore errors here - device might reboot immediately
292+
}
293+
294+
// Wait for manifest - but be tolerant of disconnection
295+
try {
296+
let status = await this.getStatus();
297+
while (status.state === DFU_STATE.DFU_MANIFEST_SYNC ||
298+
status.state === DFU_STATE.DFU_MANIFEST) {
299+
await new Promise(resolve => setTimeout(resolve, 100));
296300
status = await this.getStatus();
297-
} catch (e) {
298-
// Device may disconnect during manifest
299-
break;
300301
}
302+
} catch (e) {
303+
// Device disconnected/rebooted - this is expected success!
304+
console.log('Device rebooted successfully');
301305
}
302306

303307
progressCallback({ stage: 'complete', percent: 100, message: 'Flash complete!' });

web-flasher/index.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,13 +125,13 @@ <h4>Activity Log</h4>
125125
<p>Built with ❤️ using WebUSB API |
126126
<a href="https://github.com/willbearfruits/KarplusStrongMachine" target="_blank">View on GitHub</a> |
127127
<a href="README.md">Documentation</a> |
128-
<span class="version">Web Flasher v1.0.7</span>
128+
<span class="version">Web Flasher v1.0.8</span>
129129
</p>
130130
<p class="small">Requires Chrome/Chromium browser with WebUSB support</p>
131131
</footer>
132132
</div>
133133

134-
<script type="module" src="dfu.js?v=1.0.7"></script>
135-
<script type="module" src="flasher.js?v=1.0.7"></script>
134+
<script type="module" src="dfu.js?v=1.0.8"></script>
135+
<script type="module" src="flasher.js?v=1.0.8"></script>
136136
</body>
137137
</html>

0 commit comments

Comments
 (0)