diff options
Diffstat (limited to 'index.htm')
-rw-r--r-- | index.htm | 267 |
1 files changed, 160 insertions, 107 deletions
@@ -74,7 +74,7 @@ this.sound_buffer_address = program.exports.js_sound_buffer(); this.pixels_address = program.exports.js_pixels(); - this.frames = new Float32Array(this.memory_buffer, this.sound_buffer_address, program.exports.js_max_num_audio_frames()); + this.frames = new Float32Array(this.memory_buffer, this.sound_buffer_address, program.exports.js_max_num_sound_frames()); let bytes = new Uint8Array(this.memory_buffer); let title_address = program.exports.js_title(); @@ -181,106 +181,7 @@ ); </script> <script type="text/javascript"> - const KEY_PASTE = 118; - - let key_map = { - "Backspace" : 8, - "Tab" : 9, - "Enter" : 10, - "ControlLeft" : 11, - "ControlRight" : 12, - "ShiftLeft" : 13, - "ShiftRight" : 14, - "AltLeft" : 15, - "AltRight" : 16, - "ArrowLeft" : 17, - "ArrowRight" : 18, - "ArrowUp" : 19, - "ArrowDown" : 20, - "Pause" : 21, - "Insert" : 22, - "Home" : 23, - "End" : 24, - "PageUp" : 25, - "PageDown" : 26, - "Escape" : 27, - "PrintScreen" : 28, - "Space" : 32, - "MetaLeft" : 33, - "MetaRight" : 34, - "Quote" : 39, - "Comma" : 44, - "Minus" : 45, - "Period" : 46, - "Slash" : 47, - "Digit0" : 48, - "Digit1" : 49, - "Digit2" : 50, - "Digit3" : 51, - "Digit4" : 52, - "Digit5" : 53, - "Digit6" : 54, - "Digit7" : 55, - "Digit8" : 56, - "Digit9" : 57, - "Semicolon" : 59, - "Equal" : 61, - "BracketLeft" : 91, - "Backslash" : 92, - "BracketRight" : 93, - "Backquote" : 96, - "KeyA" : 97, - "KeyB" : 98, - "KeyC" : 99, - "KeyD" : 100, - "KeyE" : 101, - "KeyF" : 102, - "KeyG" : 103, - "KeyH" : 104, - "KeyI" : 105, - "KeyJ" : 106, - "KeyK" : 107, - "KeyL" : 108, - "KeyM" : 109, - "KeyN" : 110, - "KeyO" : 111, - "KeyP" : 112, - "KeyQ" : 113, - "KeyR" : 114, - "KeyS" : 115, - "KeyT" : 116, - "KeyU" : 117, - "KeyV" : KEY_PASTE, - "KeyW" : 119, - "KeyX" : 120, - "KeyY" : 121, - "KeyZ" : 122, - "Delete" : 127, - "F1" : 145, - "F2" : 146, - "F3" : 147, - "F4" : 148, - "F5" : 149, - "F6" : 150, - "F7" : 151, - "F8" : 152, - "F9" : 153, - "F10" : 154, - "F11" : 155, - "F12" : 156, - "F13" : 157, - "F14" : 158, - "F15" : 159, - "F16" : 160, - "F17" : 161, - "F18" : 162, - "F19" : 163, - "F20" : 164, - "F21" : 165, - "F22" : 166, - "F23" : 167, - "F24" : 168, - }; + let key_map = {}; function key_from_code(code) { if (code in key_map) @@ -303,9 +204,159 @@ return ev.key.charCodeAt(0); } + async function obtain_defaults(wasm) { + let program = await WebAssembly.instantiate( + wasm, + { + wasi_snapshot_preview1 : { + clock_time_get : () => {}, + args_sizes_get : () => {}, + args_get : () => {}, + proc_exit : () => {}, + fd_close : () => {}, + fd_write : () => {}, + fd_seek : () => {}, + }, + env : { + p_clipboard_write_impl : () => {}, + p_time_impl : () => {}, + + floor : () => {}, + ceil : () => {}, + sqrt : () => {}, + cbrt : () => {}, + pow : () => {}, + log : () => {}, + log2 : () => {}, + log10 : () => {}, + exp : () => {}, + sin : () => {}, + cos : () => {}, + tan : () => {}, + asin : () => {}, + acos : () => {}, + atan : () => {}, + atan2 : () => {}, + }, + } + ); + + let num = program.exports.js_max_num_keys(); + let address = program.exports.js_key_map(); + let keys = new Uint16Array(program.exports.memory.buffer, address, num); + + let n = 0; + + key_map["Backspace"] = keys[n++]; + key_map["Tab"] = keys[n++]; + key_map["Enter"] = keys[n++]; + key_map["ControlLeft"] = keys[n++]; + key_map["ControlRight"] = keys[n++]; + key_map["ShiftLeft"] = keys[n++]; + key_map["ShiftRight"] = keys[n++]; + key_map["AltLeft"] = keys[n++]; + key_map["AltRight"] = keys[n++]; + key_map["ArrowLeft"] = keys[n++]; + key_map["ArrowRight"] = keys[n++]; + key_map["ArrowUp"] = keys[n++]; + key_map["ArrowDown"] = keys[n++]; + key_map["Pause"] = keys[n++]; + key_map["Insert"] = keys[n++]; + key_map["Home"] = keys[n++]; + key_map["End"] = keys[n++]; + key_map["PageUp"] = keys[n++]; + key_map["PageDown"] = keys[n++]; + key_map["Escape"] = keys[n++]; + key_map["PrintScreen"] = keys[n++]; + key_map["Space"] = keys[n++]; + key_map["MetaLeft"] = keys[n++]; + key_map["MetaRight"] = keys[n++]; + key_map["Quote"] = keys[n++]; + key_map["Comma"] = keys[n++]; + key_map["Minus"] = keys[n++]; + key_map["Period"] = keys[n++]; + key_map["Slash"] = keys[n++]; + key_map["Digit0"] = keys[n++]; + key_map["Digit1"] = keys[n++]; + key_map["Digit2"] = keys[n++]; + key_map["Digit3"] = keys[n++]; + key_map["Digit4"] = keys[n++]; + key_map["Digit5"] = keys[n++]; + key_map["Digit6"] = keys[n++]; + key_map["Digit7"] = keys[n++]; + key_map["Digit8"] = keys[n++]; + key_map["Digit9"] = keys[n++]; + key_map["Semicolon"] = keys[n++]; + key_map["Equal"] = keys[n++]; + key_map["BracketLeft"] = keys[n++]; + key_map["Backslash"] = keys[n++]; + key_map["BracketRight"] = keys[n++]; + key_map["Backquote"] = keys[n++]; + key_map["KeyA"] = keys[n++]; + key_map["KeyB"] = keys[n++]; + key_map["KeyC"] = keys[n++]; + key_map["KeyD"] = keys[n++]; + key_map["KeyE"] = keys[n++]; + key_map["KeyF"] = keys[n++]; + key_map["KeyG"] = keys[n++]; + key_map["KeyH"] = keys[n++]; + key_map["KeyI"] = keys[n++]; + key_map["KeyJ"] = keys[n++]; + key_map["KeyK"] = keys[n++]; + key_map["KeyL"] = keys[n++]; + key_map["KeyM"] = keys[n++]; + key_map["KeyN"] = keys[n++]; + key_map["KeyO"] = keys[n++]; + key_map["KeyP"] = keys[n++]; + key_map["KeyQ"] = keys[n++]; + key_map["KeyR"] = keys[n++]; + key_map["KeyS"] = keys[n++]; + key_map["KeyT"] = keys[n++]; + key_map["KeyU"] = keys[n++]; + key_map["KeyV"] = keys[n++]; + key_map["KeyW"] = keys[n++]; + key_map["KeyX"] = keys[n++]; + key_map["KeyY"] = keys[n++]; + key_map["KeyZ"] = keys[n++]; + key_map["Delete"] = keys[n++]; + key_map["F1"] = keys[n++]; + key_map["F2"] = keys[n++]; + key_map["F3"] = keys[n++]; + key_map["F4"] = keys[n++]; + key_map["F5"] = keys[n++]; + key_map["F6"] = keys[n++]; + key_map["F7"] = keys[n++]; + key_map["F8"] = keys[n++]; + key_map["F9"] = keys[n++]; + key_map["F10"] = keys[n++]; + key_map["F11"] = keys[n++]; + key_map["F12"] = keys[n++]; + key_map["F13"] = keys[n++]; + key_map["F14"] = keys[n++]; + key_map["F15"] = keys[n++]; + key_map["F16"] = keys[n++]; + key_map["F17"] = keys[n++]; + key_map["F18"] = keys[n++]; + key_map["F19"] = keys[n++]; + key_map["F20"] = keys[n++]; + key_map["F21"] = keys[n++]; + key_map["F22"] = keys[n++]; + key_map["F23"] = keys[n++]; + key_map["F24"] = keys[n++]; + + let defaults = { + sound_sample_rate : program.exports.js_sound_sample_rate(), + num_sound_channels : program.exports.js_num_sound_channels(), + key_paste : key_map["KeyV"], + }; + + return defaults; + } + async function run(attrs) { - let sound_sample_rate = 44100; // TODO - let sound_num_channels = 2; // TODO + let wasm = await WebAssembly.compileStreaming(attrs.wasm); + + let { sound_sample_rate, num_sound_channels, key_paste } = await obtain_defaults(wasm); let frame_width = 0; let frame_height = 0; @@ -388,7 +439,7 @@ sound_context, "Sound_Node", { numberOfInputs : 0, - outputChannelCount : [ sound_num_channels ], + outputChannelCount : [ num_sound_channels ], processorOptions : { href : new TextEncoder("utf8").encode(document.location.href) }, } ); @@ -418,8 +469,10 @@ sound_node.port.postMessage({ id : "wasm", - wasm : await WebAssembly.compileStreaming(attrs.wasm), + wasm : wasm, }); + + wasm = undefined; }; canvas.addEventListener("mousedown", (ev) => { @@ -467,7 +520,7 @@ let mod = mod_from_event(ev); let ch = char_from_event(ev); - if (ev.ctrlKey && key == KEY_PASTE) { + if (ev.ctrlKey && key == key_paste) { paste_mod = mod; paste_ch = ch; } else @@ -506,7 +559,7 @@ id : "paste", bytes : new TextEncoder("utf8").encode(ev.clipboardData.getData("text")), mod : paste_mod, - key : KEY_PASTE, + key : key_paste, ch : paste_ch, }); }); |