HTML · 4234 bytes Raw Blame History
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>Gesture DSP - Web Audio Port</title>
7 <link rel="stylesheet" href="css/main.css">
8 </head>
9 <body>
10 <div class="container">
11 <header>
12 <h1>🎵 Gesture DSP - Web Audio Port</h1>
13 </header>
14
15 <section class="controls">
16 <div class="control-group">
17 <button id="startCamera" class="btn btn-primary">Start Camera</button>
18 <button id="microphoneToggle" class="btn btn-warning" disabled>Start Microphone</button>
19 <select id="audioSelect" class="select">
20 <option value="">Select Audio File...</option>
21 <option value="__demo__">Generated Demo</option>
22 <option disabled>──────────</option>
23 </select>
24 <button id="loadFile" class="btn">Upload WAV</button>
25 <input type="file" id="fileInput" accept="audio/wav" hidden>
26 <button id="playPause" class="btn btn-success" disabled>Play</button>
27 </div>
28
29 <div class="ir-controls">
30 <label for="irSelect">Impulse Response:</label>
31 <select id="irSelect" class="select">
32 <option value="none">None</option>
33 <option value="hall">Hall</option>
34 <option value="room">Room</option>
35 <option value="plate">Plate</option>
36 </select>
37 <button id="loadIR" class="btn btn-small">Load Custom IR</button>
38 <input type="file" id="irInput" accept="audio/wav" hidden>
39 </div>
40
41 <div class="status" id="status">Ready to start...</div>
42 </section>
43
44 <main class="main-area">
45 <section class="video-section">
46 <div class="video-container">
47 <canvas id="videoCanvas" width="640" height="480"></canvas>
48 <div class="effect-zones" id="effectZones"></div>
49 <div class="cue-indicator" id="cueIndicator">CUE TRIGGERED</div>
50 </div>
51 </section>
52
53 <aside class="params-section">
54 <h3>Current Effect: <span id="currentEffect">None</span></h3>
55
56 <div class="param-visualizer">
57 <div class="param-bar">
58 <div class="param-fill" id="paramFill"></div>
59 </div>
60 <div class="param-labels">
61 <span>0%</span>
62 <span>50%</span>
63 <span>100%</span>
64 </div>
65 </div>
66
67 <div class="info-box">
68 <dl class="info-list">
69 <dt>Parameter:</dt>
70 <dd id="paramValue">0.50</dd>
71 <dt>Raw Param:</dt>
72 <dd id="rawParamValue">0.50</dd>
73 <dt>Hand Detected:</dt>
74 <dd id="handStatus">No</dd>
75 </dl>
76 </div>
77
78 <div class="info-box instructions">
79 <h4>Instructions:</h4>
80 <ol>
81 <li>Hold a <span style="color: #ffff00;">YELLOW</span> object (post-it, card)</li>
82 <li>Move horizontally to select effect</li>
83 <li>Hold a <span style="color: #00ff00;">GREEN</span> object with other hand</li>
84 <li>Move GREEN vertically for parameter strength</li>
85 <li>Keep object in same zone for cue trigger</li>
86 </ol>
87 <div style="margin-top: 10px; font-size: 12px; opacity: 0.8;">
88 💡 Tip: Use bright, saturated colors for best detection
89 </div>
90 </div>
91 </aside>
92 </main>
93 </div>
94
95 <script type="module" src="js/app.js"></script>
96 </body>
97 </html>