|
14 | 14 | <script src="../fft.js"></script> |
15 | 15 | <script src="../waves.js"></script> |
16 | 16 | <script src="../widget.js"></script> |
| 17 | + <script src="../interaction.js"></script> |
| 18 | + <title>Digital Audio Workbench</title> |
17 | 19 | </head> |
18 | | - <body> |
| 20 | + <body> |
19 | 21 | <main> |
20 | | - <script> |
21 | | - const widget = new_widget( |
22 | | - [ new inputSigPanel() |
23 | | - , new inputSigFreqPanel() |
24 | | - , new impulsePanel() |
25 | | - , new impulseFreqPanel() |
26 | | - , new sampledInputPanel() |
27 | | - , new sampledInputFreqPanel() |
28 | | - , new quantNoisePanel() |
29 | | - , new quantNoiseFFTPanel() |
30 | | - , new reconstructedSigPanel() |
31 | | - , new reconstructedSigFFTPanel() |
32 | | - , new inputPlusSampledPanel() |
33 | | - , new allSignalsPanel() |
34 | | - ], |
35 | | - [ new freqSlider() |
36 | | - , new numHarmSlider() |
37 | | - , new sampleRateSlider() |
38 | | - , new antialiasingSlider() |
39 | | - , new ditherSlider() |
40 | | - , new bitDepthSlider() |
41 | | - , new amplitudeSlider() |
42 | | - , new phaseSlider() |
43 | | - , new ampZoomSlider() |
44 | | - , new freqZoomSlider() |
45 | | - , new timeZoomSlider() |
46 | | - ] |
47 | | - ); |
48 | | - </script> |
| 22 | + <div class="timeline"> |
| 23 | + |
| 24 | + <h1>Digital Audio Workbench (Sampling and Quantization)</h1> |
| 25 | + |
| 26 | + <h2>By Arden Butterfield, Josh Rohs, Travis J. West & Marcelo M. Wanderley |
| 27 | + with contributions by Eduardo Meneses, Christian Frisson, Erivan Duarte, Laurent Tarabout, and Maxwell Gentili-Morin</h2> |
| 28 | + <h3>Copyright IDMIL/McGill University, 2025</h3> |
| 29 | + |
| 30 | + <div class="section" id="input-section"> |
| 31 | + <div class="titlebar"> |
| 32 | + <div class="section-title"> |
| 33 | + <h2>Input</h2> |
| 34 | + </div> |
| 35 | + <button class="collapse-button" id="coll-input" onclick="collapseClick(this.id)"></button> |
| 36 | + </div> |
| 37 | + <div class="collapse"> |
| 38 | + <div class="row panels"> |
| 39 | + <div class="panel" id="input-time-domain"></div> |
| 40 | + <div class="panel" id="input-freq-domain"></div> |
| 41 | + </div> |
| 42 | + <div class="row sliders"> |
| 43 | + <div class="slider" id="audio-input-type-slider"></div> |
| 44 | + <div class="slider" id="frequency-slider"></div> |
| 45 | + <div class="slider" id="num-harmonics-slider"></div> |
| 46 | + <div class="slider" id="amplitude-slider"></div> |
| 47 | + </div> |
| 48 | + <button class="play-button" id="play-input">Play</button> |
| 49 | + </div> |
| 50 | + </div> |
| 51 | + <div class="section" id="filter-section"> |
| 52 | + <div class="titlebar"> |
| 53 | + <div class="section-title"> |
| 54 | + <h2>Filter</h2> |
| 55 | + </div> |
| 56 | + <button class="collapse-button" id="coll-filter" onclick="collapseClick(this.id)"></button> |
| 57 | + </div> |
| 58 | + <div class="collapse"> |
| 59 | + <div class="row panels"> |
| 60 | + <div class="panel" id="filter-kernel"></div> |
| 61 | + <div class="panel" id="filter-kernel-fft"></div> |
| 62 | + </div> |
| 63 | + <div class="row panels"> |
| 64 | + <div class="panel" id="input-filtered-time-domain"></div> |
| 65 | + <div class="panel" id="input-filtered-freq-domain"></div> |
| 66 | + </div> |
| 67 | + <div class="row sliders"> |
| 68 | + <div class="slider" id="antialiasing-filter-order-slider"></div> |
| 69 | + </div> |
| 70 | + <button class="play-button" id="play-filter-kernel">Play kernel</button> |
| 71 | + <button class="play-button" id="play-filtered-input">Play filtered input</button> |
| 72 | + </div> |
| 73 | + </div> |
| 74 | + <div class="section" id="samplerate-section"> |
| 75 | + <div class="titlebar"> |
| 76 | + <div class="section-title"> |
| 77 | + <h2>Sample Rate</h2> |
| 78 | + </div> |
| 79 | + <button class="collapse-button" id="coll-fs" onclick="collapseClick(this.id)"></button> |
| 80 | + </div> |
| 81 | + <div class="collapse"> |
| 82 | + <div class="row panels"> |
| 83 | + <div class="panel" id="input-plus-sampled"></div> |
| 84 | + <div class="panel" id="sampling-freq-domain"></div> |
| 85 | + </div> |
| 86 | + <div class="row sliders"> |
| 87 | + <div class="slider" id="sample-rate-slider"></div> |
| 88 | + </div> |
| 89 | + <button class="play-button" id="play-sample-rate">Play</button> |
| 90 | + </div> |
| 91 | + </div> |
| 92 | + <div class="section" id="dither-section"> |
| 93 | + <div class="titlebar"> |
| 94 | + <div class="section-title"> |
| 95 | + <h2>Dither</h2> |
| 96 | + </div> |
| 97 | + <button class="collapse-button" id="coll-dither" onclick="collapseClick(this.id)"></button> |
| 98 | + |
| 99 | + </div> |
| 100 | + <div class="collapse"> |
| 101 | + <div class="row panels"> |
| 102 | + <div class="panel" id="dither-histogram"></div> |
| 103 | + </div> |
| 104 | + <div class="row sliders"> |
| 105 | + <div class="slider" id="dither-slider"></div> |
| 106 | + </div> |
| 107 | + </div> |
| 108 | + </div> |
| 109 | + <div class="section" id="quantization-section"> |
| 110 | + <div class="titlebar"> |
| 111 | + <div class="section-title"> |
| 112 | + <h2>Quantization</h2> |
| 113 | + </div> |
| 114 | + <button class="collapse-button" id="coll-quantization" onclick="collapseClick(this.id)"></button> |
| 115 | + </div> |
| 116 | + <div class="collapse"> |
| 117 | + <div class="row panels"> |
| 118 | + <div class="panel" id="quantization-noise"></div> |
| 119 | + <div class="panel" id="quantization-noise-fft"></div> |
| 120 | + </div> |
| 121 | + <div class="row sliders"> |
| 122 | + <div class="slider" id="quantization-slider"></div> |
| 123 | + </div> |
| 124 | + <button class="play-button" id="play-quantized-noise">Play</button> |
| 125 | + </div> |
| 126 | + </div> |
| 127 | + <div class="section" id="reconstructed-section"> |
| 128 | + <div class="titlebar"> |
| 129 | + <div class="section-title"> |
| 130 | + <h2>Reconstructed</h2> |
| 131 | + </div> |
| 132 | + <button class="collapse-button" id="coll-recon" onclick="collapseClick(this.id)"></button> |
| 133 | + |
| 134 | + </div> |
| 135 | + <div class="collapse"> |
| 136 | + <div class="row panels"> |
| 137 | + <div class="panel" id="reconstructed"></div> |
| 138 | + <div class="panel" id="reconstructed-fft"></div> |
| 139 | + </div> |
| 140 | + <div class="row panels"> |
| 141 | + <div class="panel" id="all-signals"></div> |
| 142 | + </div> |
| 143 | + <div class="row sliders"> |
| 144 | + <div class="slider" id="reconstruction-filter-order-slider"></div> |
| 145 | + </div> |
| 146 | + <button class="play-button" id="play-reconstructed">Play Reconstructed</button> |
| 147 | + </div> |
| 148 | + </div> |
| 149 | + </div> |
49 | 150 | </main> |
50 | | - <footer> |
51 | | - <div>Digital Audio Workbench </div> |
52 | | - <div>By Josh Rohs, Travis J. West & Marcelo M. Wanderley </div> |
53 | | - <div>with contributions by Eduardo Meneses, Christian Frisson, and Erivan Duarte</div> |
54 | | - <div>Copyright <a href="//www-new.idmil.org/">IDMIL</a>/McGill University, 2020 </div> |
55 | | - </footer> |
| 151 | + <div class="global-panel"> |
| 152 | + <div id="global-panel-collapse-button" onclick="collapseGlobalPanel()"></div> |
| 153 | + <div class="contents"> |
| 154 | + <div class="slider" id="time-zoom-slider"></div> |
| 155 | + <div class="slider" id="amp-zoom-slider"></div> |
| 156 | + </div> |
| 157 | + </div> |
| 158 | + <script> |
| 159 | + createWidgets(); |
| 160 | + </script> |
56 | 161 | </body> |
57 | 162 | </html> |
0 commit comments