| <html data-bs-theme="dark"> |
| |
| <head> |
| <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" |
| integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous"> |
| <script src="https://unpkg.com/pcm-player"></script> |
| </head> |
| |
| <body> |
| <nav class="navbar navbar-dark bg-primary"> |
| <div class="container"> |
| <span class="navbar-brand mb-0 h1">Bumble ASHA Sink</span> |
| </div> |
| </nav> |
| <br> |
| |
| <div class="container"> |
| |
| <div class="row"> |
| <div class="col-auto"> |
| <button id="connect-audio" class="btn btn-danger" onclick="connectAudio()">Connect Audio</button> |
| </div> |
| </div> |
| |
| <hr> |
| |
| <div class="row"> |
| <div class="col-4"> |
| <label class="form-label">Browser Gain</label> |
| <input type="range" class="form-range" id="browser-gain" min="0" max="2" value="1" step="0.1" |
| onchange="setGain()"> |
| </div> |
| </div> |
| |
| <hr> |
| |
| <div id="socketStateContainer" class="bg-body-tertiary p-3 rounded-2"> |
| <h3>Log</h3> |
| <code id="log" style="white-space: pre-line;"></code> |
| </div> |
| </div> |
| |
| |
| <script> |
| let atResponseInput = document.getElementById("at_response") |
| let gainInput = document.getElementById('browser-gain') |
| let log = document.getElementById("log") |
| let socket = new WebSocket('ws://localhost:8888'); |
| let sampleRate = 0; |
| let player; |
| |
| socket.binaryType = "arraybuffer"; |
| socket.onopen = _ => { |
| log.textContent += 'SOCKET OPEN\n' |
| } |
| socket.onclose = _ => { |
| log.textContent += 'SOCKET CLOSED\n' |
| } |
| socket.onerror = (error) => { |
| log.textContent += 'SOCKET ERROR\n' |
| console.log(`ERROR: ${error}`) |
| } |
| socket.onmessage = function (message) { |
| if (typeof message.data === 'string' || message.data instanceof String) { |
| log.textContent += `<-- ${event.data}\n` |
| } else { |
| // BINARY audio data. |
| if (player == null) return; |
| player.feed(message.data); |
| } |
| }; |
| |
| function connectAudio() { |
| player = new PCMPlayer({ |
| inputCodec: 'Int16', |
| channels: 1, |
| sampleRate: 16000, |
| flushTime: 20, |
| }); |
| player.volume(gainInput.value); |
| const button = document.getElementById("connect-audio") |
| button.disabled = true; |
| button.textContent = "Audio Connected"; |
| } |
| |
| function setGain() { |
| if (player != null) { |
| player.volume(gainInput.value); |
| } |
| } |
| </script> |
| </div> |
| </body> |
| |
| </html> |