@konsumer/nuked
Version:
Yamaha OPL2/3 FM synth chip emulator
312 lines (308 loc) • 54.6 kB
JavaScript
var __toBinary = /* @__PURE__ */ (() => {
var table = new Uint8Array(128);
for (var i = 0; i < 64; i++) table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i;
return (base64) => {
var n = base64.length, bytes = new Uint8Array((n - (base64[n - 1] == "=") - (base64[n - 2] == "=")) * 3 / 4 | 0);
for (var i2 = 0, j = 0; i2 < n; ) {
var c0 = table[base64.charCodeAt(i2++)], c1 = table[base64.charCodeAt(i2++)];
var c2 = table[base64.charCodeAt(i2++)], c3 = table[base64.charCodeAt(i2++)];
bytes[j++] = c0 << 2 | c1 >> 4;
bytes[j++] = c1 << 4 | c2 >> 2;
bytes[j++] = c2 << 6 | c3;
}
return bytes;
};
})();
// src/nuked.wasm
var nuked_default = __toBinary("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AQAAAAEAAAAEAO0AAp8BAAAAAQAAAAQA7QIBnwEAAAABAAAABADtAAGfAQAAAAEAAAAEAO0CAJ8BAAAAAQAAAAQA7QABnwEAAAABAAAABADtAgCfAQAAAAEAAAAEAO0AAZ8AAAAAAAAAAAEAAAABAAAABADtAAGfAAAAAAAAAAABAAAAAQAAAAQA7QIAnwEAAAABAAAABADtAAWfAQAAAAEAAAAEAO0AAp8BAAAAAQAAAAQA7QACnwAAAAAAAAAAAQAAAAEAAAAEAO0CAZ8BAAAAAQAAAAQA7QADnwAAAAAAAAAAAQAAAAEAAAAEAO0CAZ8BAAAAAQAAAAQA7QAEnwEAAAABAAAABADtAgGfAQAAAAEAAAAEAO0AAp8AAAAAAAAAAAEAAAABAAAABADtAAafAAAAAAAAAAABAAAAAQAAAAQA7QAAnwEAAAABAAAABADtAgCfAQAAAAEAAAAEAO0AAZ8BAAAAAQAAAAQA7QIAnwEAAAABAAAABADtAAGfAQAAAAEAAAAEAO0CAJ8BAAAAAQAAAAQA7QABnwEAAAABAAAABADtAgCfAQAAAAEAAAAEAO0AAZ8BAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QICnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIDnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIDnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIDnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIGnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIDnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QICnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QICnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIAnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QICnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA7QIFnwAAAAAAAAAA/////wAAAAABAAAAAQAAAAQA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ZF93YXNpX3NuYXBzaG90X3ByZXZpZXcxX3BhdGhfcmVtb3ZlX2RpcmVjdG9yeQBfX3dhc2lfcGF0aF9jcmVhdGVfZGlyZWN0b3J5AF9faW1wb3J0ZWRfd2FzaV9zbmFwc2hvdF9wcmV2aWV3MV9wYXRoX2NyZWF0ZV9kaXJlY3RvcnkAZHVtbXkAaG93AGFyZ3YAZGV2AF9fd2FzaV9zb2NrX3JlY3YAX19pbXBvcnRlZF93YXNpX3NuYXBzaG90X3ByZXZpZXcxX3NvY2tfcmVjdgB1AHRpbWVvdXQAZGVzdAB1bnNpZ25lZCBzaG9ydABfX3dhc2lfc29ja19hY2NlcHQAX19pbXBvcnRlZF93YXNpX3NuYXBzaG90X3ByZXZpZXcxX3NvY2tfYWNjZXB0AHVuc2lnbmVkIGludABfX3dhc2lfcHJvY19leGl0AF9faW1wb3J0ZWRfd2FzaV9zbmFwc2hvdF9wcmV2aWV3MV9wcm9jX2V4aXQAX0V4aXQAbWVtc2V0AG9mZnNldAByZXQAX193YXNpX2ZkX3ByZXN0YXRfZ2V0AF9faW1wb3J0ZWRfd2FzaV9zbmFwc2hvdF9wcmV2aWV3MV9mZF9wcmVzdGF0X2dldABfX3dhc2lfcGF0aF9maWxlc3RhdF9nZXQAX19pbXBvcnRlZF93YXNpX3NuYXBzaG90X3ByZXZpZXcxX3BhdGhfZmlsZXN0YXRfZ2V0AF9fd2FzaV9mZF9maWxlc3RhdF9nZXQAX19pbXBvcnRlZF93YXNpX3NuYXBzaG90X3ByZXZpZXcxX2ZkX2ZpbGVzdGF0X2dldABfX3dhc2lfZmRfZmRzdGF0X2dldABfX2ltcG9ydGVkX3dhc2lfc25hcHNob3RfcHJldmlldzFfZmRfZmRzdGF0X2dldABfX3dhc2lfYXJnc19nZXQAX19pbXBvcnRlZF93YXNpX3NuYXBzaG90X3ByZXZpZXcxX2FyZ3NfZ2V0AF9fd2FzaV9hcmdzX3NpemVzX2dldABfX2ltcG9ydGVkX3dhc2lfc25hcHNob3RfcHJldmlldzFfYXJnc19zaXplc19nZXQAX193YXNpX2Vudmlyb25fc2l6ZXNfZ2V0AF9faW1wb3J0ZWRfd2FzaV9zbmFwc2hvdF9wcmV2aWV3MV9lbnZpcm9uX3NpemVzX2dldABfX3dhc2lfY2xvY2tfcmVzX2dldABfX2ltcG9ydGVkX3dhc2lfc25hcHNob3RfcHJldmlldzFfY2xvY2tfcmVzX2dldABfX3dhc2lfZW52aXJvbl9nZXQAX19pbXBvcnRlZF93YXNpX3NuYXBzaG90X3ByZXZpZXcxX2Vudmlyb25fZ2V0AF9fd2FzaV9yYW5kb21fZ2V0AF9faW1wb3J0ZWRfd2FzaV9zbmFwc2hvdF9wcmV2aWV3MV9yYW5kb21fZ2V0AF9fd2FzaV9jbG9ja190aW1lX2dldABfX2ltcG9ydGVkX3dhc2lfc25hcHNob3RfcHJldmlldzFfY2xvY2tfdGltZV9nZXQAX193YXNpX3N1YnNjcmlwdGlvbl91X3VfdABfX3dhc2lfcHJlc3RhdF91X3QAX193YXNpX3N1YnNjcmlwdGlvbl91X3QAX193YXNpX2xpbmtjb3VudF90AF9fd2FzaV9ldmVudF90AF9fd2FzaV9wcmVzdGF0X3QAX193YXNpX2ZpbGVzdGF0X3QAX193YXNpX2Zkc3RhdF90AF9fd2FzaV9yaWdodHNfdABfX3dhc2lfZXZlbnRyd2ZsYWdzX3QAX193YXNpX2ZzdGZsYWdzX3QAX193YXNpX2xvb2t1cGZsYWdzX3QAX193YXNpX3JvZmxhZ3NfdABfX3dhc2lfb2ZsYWdzX3QAX193YXNpX3N1YmNsb2NrZmxhZ3NfdABfX3dhc2lfc2lmbGFnc190AF9fd2FzaV9yaWZsYWdzX3QAX193YXNpX3NkZmxhZ3NfdABfX3dhc2lfZmRmbGFnc190AHVpbnRwdHJfdABfX3dhc2lfcHJlc3RhdF9kaXJfdABfX3dhc2lfdGltZXN0YW1wX3QAX193YXNpX2Vycm5vX3QAX193YXNpX3N1YnNjcmlwdGlvbl90AF9fd2FzaV9zdWJzY3JpcHRpb25fY2xvY2tfdABfX3dhc2lfZmlsZXNpemVfdABfX3dhc2lfc2l6ZV90AF9fd2FzaV9ldmVudF9mZF9yZWFkd3JpdGVfdABfX3dhc2lfc3Vic2NyaXB0aW9uX2ZkX3JlYWR3cml0ZV90AF9fd2FzaV9ldmVudHR5cGVfdABfX3dhc2lfZmlsZXR5cGVfdABfX3dhc2lfZGlyY29va2llX3QAX193YXNpX2lub2RlX3QAX193YXNpX2V4aXRjb2RlX3QAX193YXNpX3doZW5jZV90AF9fd2FzaV9kZXZpY2VfdABfX3dhc2lfYWR2aWNlX3QAX193YXNpX2Nsb2NraWRfdABfX3dhc2lfZmRfdABfX3dhc2lfY2lvdmVjX3QAX193YXNpX2lvdmVjX3QAX193YXNpX2ZpbGVkZWx0YV90AF9fd2FzaV91c2VyZGF0YV90AHVpbnQ4X3QAdWludDE2X3QAdWludDY0X3QAdWludDMyX3QAaW92cwBzdGF0dXMAX193YXNpX2ZkX2Zkc3RhdF9zZXRfcmlnaHRzAF9faW1wb3J0ZWRfd2FzaV9zbmFwc2hvdF9wcmV2aWV3MV9mZF9mZHN0YXRfc2V0X3JpZ2h0cwBfX3dhc21fY2FsbF9kdG9ycwBuc3Vic2NyaXB0aW9ucwBkaXJmbGFncwBvZmxhZ3MAZmRmbGFncwBmc3RfZmxhZ3MAX193YXNpX2ZkX2Zkc3RhdF9zZXRfZmxhZ3MAX19pbXBvcnRlZF93YXNpX3NuYXBzaG90X3ByZXZpZXcxX2ZkX2Zkc3RhdF9zZXRfZmxhZ3MAZnNfZmxhZ3MAc2lfZmxhZ3MAcmlfZmxhZ3MAb2xkX2ZsYWdzAG5ieXRlcwBfX3dhc2lfcGF0aF9maWxlc3RhdF9zZXRfdGltZXMAX19pbXBvcnRlZF93YXNpX3NuYXBzaG90X3ByZXZpZXcxX3BhdGhfZmlsZXN0YXRfc2V0X3RpbWVzAF9fd2FzaV9mZF9maWxlc3RhdF9zZXRfdGltZXMAX19pbXBvcnRlZF93YXNpX3NuYXBzaG90X3ByZXZpZXcxX2ZkX2ZpbGVzdGF0X3NldF90aW1lcwBmaWxlX2Rlc2NyaXB0b3IAZXJyb3IAX193YXNpX2ZkX3JlYWRkaXIAX19pbXBvcnRlZF93YXNpX3NuYXBzaG90X3ByZXZpZXcxX2ZkX3JlYWRkaXIAX193YXNpX2ZkX3JlbnVtYmVyAF9faW1wb3J0ZWRfd2FzaV9zbmFwc2hvdF9wcmV2aWV3MV9mZF9yZW51bWJlcgB1bnNpZ25lZCBjaGFyAHRvAGlubwBfX3dhc2lfc29ja19zaHV0ZG93bgBfX2ltcG9ydGVkX3dhc2lfc25hcHNob3RfcHJldmlldzFfc29ja19zaHV0ZG93bgBlbnZpcm9uAHByZWNpc2lvbgBpbgBfX3dhc2lfcGF0aF9vcGVuAF9faW1wb3J0ZWRfd2FzaV9zbmFwc2hvdF9wcmV2aWV3MV9wYXRoX29wZW4Ac3RybGVuAGlvdnNfbGVuAG5ld19wYXRoX2xlbgBvbGRfcGF0aF9sZW4AYnVmX2xlbgBwcl9uYW1lX2xlbgBzaV9kYXRhX2xlbgByaV9kYXRhX2xlbgBtdGltAGN0aW0AYXRpbQBfX3dhc2lfZmRfdGVsbABfX2ltcG9ydGVkX3dhc2lfc25hcHNob3RfcHJldmlldzFfZmRfdGVsbABydmFsAG5saW5rAF9fd2FzaV9wYXRoX3N5bWxpbmsAX19pbXBvcnRlZF93YXNpX3NuYXBzaG90X3ByZXZpZXcxX3BhdGhfc3ltbGluawBfX3dhc2lfcGF0aF9yZWFkbGluawBfX2ltcG9ydGVkX3dhc2lfc25hcHNob3RfcHJldmlldzFfcGF0aF9yZWFkbGluawBfX3dhc2lfcGF0aF9saW5rAF9faW1wb3J0ZWRfd2FzaV9zbmFwc2hvdF9wcmV2aWV3MV9wYXRoX2xpbmsAX193YXNpX2ZkX3NlZWsAX19pbXBvcnRlZF93YXNpX3NuYXBzaG90X3ByZXZpZXcxX2ZkX3NlZWsAY2xvY2sAd2FzaXNkazovL3YyNS4wL2J1aWxkL3N5c3Jvb3Qvd2FzaS1saWJjLXdhc20zMi13YXNpAG5ld19wYXRoAG9sZF9wYXRoAHVuc2lnbmVkIGxvbmcgbG9uZwB1bnNpZ25lZCBsb25nAGZzX3JpZ2h0c19pbmhlcml0aW5nAHRhZwBhcmd2X2J1ZgBlbnZpcm9uX2J1ZgBfX3dhc2lfcG9sbF9vbmVvZmYAX19pbXBvcnRlZF93YXNpX3NuYXBzaG90X3ByZXZpZXcxX3BvbGxfb25lb2ZmAF9fd2FzaV9mZF9maWxlc3RhdF9zZXRfc2l6ZQBfX2ltcG9ydGVkX3dhc2lfc25hcHNob3RfcHJldmlldzFfZmRfZmlsZXN0YXRfc2V0X3NpemUAX193YXNpX2ZkX3B3cml0ZQBfX2ltcG9ydGVkX3dhc2lfc25hcHNob3RfcHJldmlldzFfZmRfcHdyaXRlAGZkX3JlYWR3cml0ZQBfX3dhc2lfZmRfd3JpdGUAX19pbXBvcnRlZF93YXNpX3NuYXBzaG90X3ByZXZpZXcxX2ZkX3dyaXRlAF9fd2FzaV9mZF9hbGxvY2F0ZQBfX2ltcG9ydGVkX3dhc2lfc25hcHNob3RfcHJldmlldzFfZmRfYWxsb2NhdGUAX193YXNpX2ZkX2Nsb3NlAF9faW1wb3J0ZWRfd2FzaV9zbmFwc2hvdF9wcmV2aWV3MV9mZF9jbG9zZQBfX3dhc2lfZmRfYWR2aXNlAF9faW1wb3J0ZWRfd2FzaV9zbmFwc2hvdF9wcmV2aWV3MV9mZF9hZHZpc2UAZnNfcmlnaHRzX2Jhc2UAZnNfZmlsZXR5cGUAX193YXNpX3BhdGhfcmVuYW1lAF9faW1wb3J0ZWRfd2FzaV9zbmFwc2hvdF9wcmV2aWV3MV9wYXRoX3JlbmFtZQBfX3dhc2lfZmRfcHJlc3RhdF9kaXJfbmFtZQBfX2ltcG9ydGVkX3dhc2lfc25hcHNob3RfcHJldmlldzFfZmRfcHJlc3RhdF9kaXJfbmFtZQBfX3dhc2lfcGF0aF91bmxpbmtfZmlsZQBfX2ltcG9ydGVkX3dhc2lfc25hcHNob3RfcHJldmlldzFfcGF0aF91bmxpbmtfZmlsZQBjb29raWUAY29kZQB3aGVuY2UAYWR2aWNlAHdvcmQAX193YXNpX3NvY2tfc2VuZABfX2ltcG9ydGVkX3dhc2lfc25hcHNob3RfcHJldmlldzFfc29ja19zZW5kAF9fd2FzaV9zY2hlZF95aWVsZABpZABuZXdfZmQAb2xkX2ZkAF9fd2FzaV9mZF9wcmVhZABfX2ltcG9ydGVkX3dhc2lfc25hcHNob3RfcHJldmlldzFfZmRfcHJlYWQAX193YXNpX2ZkX3JlYWQAX19pbXBvcnRlZF93YXNpX3NuYXBzaG90X3ByZXZpZXcxX2ZkX3JlYWQAX193YXNpX2ZkX2RhdGFzeW5jAF9faW1wb3J0ZWRfd2FzaV9zbmFwc2hvdF9wcmV2aWV3MV9mZF9kYXRhc3luYwBfX3dhc2lfZmRfc3luYwBfX2ltcG9ydGVkX3dhc2lfc25hcHNob3RfcHJldmlldzFfZmRfc3luYwBsaWJjLXRvcC1oYWxmL211c2wvc3JjL2V4aXQvZXhpdC5jAGxpYmMtYm90dG9tLWhhbGYvY2xvdWRsaWJjL3NyYy9saWJjL3N0ZGxpYi9fRXhpdC5jAGxpYmMtdG9wLWhhbGYvbXVzbC9zcmMvc3RyaW5nL21lbXNldC5jAGxpYmMtdG9wLWhhbGYvbXVzbC9zcmMvc3RyaW5nL3N0cmxlbi5jAGxpYmMtYm90dG9tLWhhbGYvc291cmNlcy9fX3dhc2lsaWJjX3JlYWwuYwB1c2VyZGF0YQBzaV9kYXRhAHJpX2RhdGEAdTY0AGM2NAB1MzIAYzMyAHJldHB0cjEAcmV0cHRyMABjbGFuZyB2ZXJzaW9uIDE5LjEuNS13YXNpLXNkayAoaHR0cHM6Ly9naXRodWIuY29tL2xsdm0vbGx2bS1wcm9qZWN0IGFiNGI1YTJkYjU4Mjk1OGFmMWVlMzA4YTc5MGNmZGI0MmJkMjQ3MjApAADRCAsuZGVidWdfbGluZaQAAAAEAJ4AAAABAQH7Dg0AAQEBAQAAAAEAAAF3YXNpc2RrOi8vdjI1LjAvYnVpbGQvc3lzcm9vdC9pbnN0YWxsL3NoYXJlL3dhc2ktc3lzcm9vdC9pbmNsdWRlL3dhc20zMi13YXNpL2JpdHMAbGliYy10b3AtaGFsZi9tdXNsL3NyYy9zdHJpbmcAAGFsbHR5cGVzLmgAAQAAbWVtc2V0LmMAAgAAAKQAAAAEAJ4AAAABAQH7Dg0AAQEBAQAAAAEAAAF3YXNpc2RrOi8vdjI1LjAvYnVpbGQvc3lzcm9vdC9pbnN0YWxsL3NoYXJlL3dhc2ktc3lzcm9vdC9pbmNsdWRlL3dhc20zMi13YXNpL2JpdHMAbGliYy10b3AtaGFsZi9tdXNsL3NyYy9zdHJpbmcAAGFsbHR5cGVzLmgAAQAAc3RybGVuLmMAAgAAAGUBAAAEAF8BAAABAQH7Dg0AAQEBAQAAAAEAAAF3YXNpc2RrOi8vdjI1LjAvYnVpbGQvc3lzcm9vdC9pbnN0YWxsL3NoYXJlL3dhc2ktc3lzcm9vdC9pbmNsdWRlL3dhc20zMi13YXNpL2JpdHMAbGliYy1ib3R0b20taGFsZi9zb3VyY2VzAHdhc2lzZGs6Ly92MjUuMC9idWlsZC9zeXNyb290L2luc3RhbGwvc2hhcmUvd2FzaS1zeXNyb290L2luY2x1ZGUvd2FzbTMyLXdhc2kAd2FzaXNkazovL3YyNS4wL2J1aWxkL3N5c3Jvb3QvaW5zdGFsbC9zaGFyZS93YXNpLXN5c3Jvb3QvaW5jbHVkZS93YXNtMzItd2FzaS93YXNpAABhbGx0eXBlcy5oAAEAAF9fd2FzaWxpYmNfcmVhbC5jAAIAAF9faGVhZGVyX3N0cmluZy5oAAMAAGFwaS5oAAQAAAALAQAABAAFAQAAAQEB+w4NAAEBAQEAAAABAAABbGliYy1ib3R0b20taGFsZi9jbG91ZGxpYmMvc3JjL2xpYmMvc3RkbGliAHdhc2lzZGs6Ly92MjUuMC9idWlsZC9zeXNyb290L2luc3RhbGwvc2hhcmUvd2FzaS1zeXNyb290L2luY2x1ZGUvd2FzbTMyLXdhc2kvd2FzaQB3YXNpc2RrOi8vdjI1LjAvYnVpbGQvc3lzcm9vdC9pbnN0YWxsL3NoYXJlL3dhc2ktc3lzcm9vdC9pbmNsdWRlL3dhc20zMi13YXNpL2JpdHMAAF9FeGl0LmMAAQAAYXBpLmgAAgAAYWxsdHlwZXMuaAADAAAAeQAAAAQAcwAAAAEBAfsODQABAQEBAAAAAQAAAWxpYmMtdG9wLWhhbGYvbXVzbC9zcmMvZXhpdABsaWJjLXRvcC1oYWxmL211c2wvc3JjL2luY2x1ZGUvLi4vLi4vaW5jbHVkZQAAZXhpdC5jAAEAAHN0ZGxpYi5oAAIAAAAAngMNLmRlYnVnX3Jhbmdlc/7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+/////v///wAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAP7////+////AAAAAAAAAAAAjgEJcHJvZHVjZXJzAghsYW5ndWFnZQEDQzExAAxwcm9jZXNzZWQtYnkBBWNsYW5nXzE5LjEuNS13YXNpLXNkayAoaHR0cHM6Ly9naXRodWIuY29tL2xsdm0vbGx2bS1wcm9qZWN0IGFiNGI1YTJkYjU4Mjk1OGFmMWVlMzA4YTc5MGNmZGI0MmJkMjQ3MjApAGcPdGFyZ2V0X2ZlYXR1cmVzBisPbXV0YWJsZS1nbG9iYWxzKwtidWxrLW1lbW9yeSsIc2lnbi1leHQrD3JlZmVyZW5jZS10eXBlcysKbXVsdGl2YWx1ZSsPYnVsay1tZW1vcnktb3B0");
// src/audio.worker.js
var audio_worker_default = "var wasmBytes = new Uint8Array([WASMBYTES])\n\nclass NukedOpl3Processor extends AudioWorkletProcessor {\n constructor(...args) {\n super(...args)\n\n this.i = 0\n\n WebAssembly.instantiate(wasmBytes, {}).then(({ instance }) => {\n this.wasm = instance.exports\n this.wasm.reset(sampleRate)\n this.port.postMessage({ type: 'wasm-ready' })\n })\n\n this.port.onmessage = ({ data: { type, ...args } }) => {\n if (type === 'queue') {\n this.queuedSoundData = args.queue\n this.sendTime(this.queuedSoundData)\n this.port.postMessage({ type: 'queue' })\n this.wasm.reset(sampleRate)\n this.stop()\n } else if (type === 'stop') {\n this.stop()\n } else if (type === 'play') {\n this.play()\n } else if (type === 'pause') {\n this.pause()\n } else if (type === 'seek') {\n this.seek(args.time)\n }\n }\n }\n\n process(inputs, outputs, parameters) {\n if (!this.wasm) {\n return true\n }\n\n const bufferSize = outputs[0][0].length\n\n if (this.queuedSoundData) {\n this.soundData = this.queuedSoundData\n this.queuedSoundData = null\n this.dataIndex = 0\n this.samplePosition = 0\n this.wasm.reset(sampleRate)\n }\n\n // every 20 data-frames output info about time\n if (this.i++ % 20 === 0) {\n this.sendTime(this.soundData)\n }\n\n if (!this.soundData || this.softStop > 0) {\n for (var sample = 0; sample < bufferSize; sample++) {\n outputs[0][0][sample] = outputs[0][1][sample] = 0\n }\n return true\n }\n\n const rateFactor = this.soundData.cmdRate / sampleRate\n\n const v = new DataView(this.wasm.memory.buffer)\n const ptr = this.wasm.buf_ptr()\n\n if (this.afterSeek) {\n this.samplePosition = bufferSize * Math.floor(this.samplePosition / bufferSize)\n this.afterSeek = false\n }\n\n for (var sample = 0; sample < bufferSize; sample++) {\n while (this.dataIndex < this.soundData.commands.length && this.soundData.commands[this.dataIndex].t <= this.samplePosition * rateFactor) {\n const command = this.soundData.commands[this.dataIndex++]\n this.wasm.write(command.r, command.v)\n }\n if (this.dataIndex == this.soundData.commands.length) {\n this.stop()\n } else {\n this.samplePosition++\n }\n this.wasm.render()\n outputs[0][0][sample] = v.getInt16(ptr, true) / 32768\n outputs[0][1][sample] = v.getInt16(ptr + 2, true) / 32768\n }\n\n return true\n }\n\n sendTime(soundData) {\n const current = (this.samplePosition || 0) / (sampleRate ?? 1)\n const total = !soundData?.commands || soundData.commands.length == 0 ? 0 : soundData.commands[soundData.commands.length - 1].t / soundData.cmdRate\n this.port.postMessage({ type: 'time', total, current })\n }\n\n pause() {\n this.softStop = this.softStop ? 0 : 1\n }\n\n stop() {\n this.dataIndex = 0\n this.samplePosition = 0\n this.softStop = 1\n }\n\n play() {\n this.softStop = 0\n }\n\n seek(time) {\n if (!this.soundData?.commands) {\n return\n }\n const adjTime = time * this.soundData.cmdRate\n this.wasm.reset(sampleRate)\n this.dataIndex = 0\n var registerData = []\n while (this.dataIndex < this.soundData.commands.length && this.soundData.commands[this.dataIndex].t < adjTime) {\n const command = this.soundData.commands[this.dataIndex++]\n registerData[command.r] = command.v\n }\n if (registerData[0x105]) {\n this.wasm.write(0x105, registerData[0x105])\n }\n for (const r in registerData) {\n this.wasm.write(r, registerData[r])\n }\n if (this.dataIndex < this.soundData.commands.length) {\n this.samplePosition = time * sampleRate\n this.afterSeek = true\n } else {\n this.stop()\n }\n }\n}\n\nregisterProcessor('nuked-opl3-processor', NukedOpl3Processor)\n";
// src/interface.js
var workletJS = audio_worker_default.replace("WASMBYTES", nuked_default.join(","));
var debug = false ? console.debug : () => {
};
function soundLoad(soundData) {
if (soundData.dualOpl2Mode) {
soundData.commands = soundData.commands.map((c) => {
if (
// Command writes into a relevant register...
(c.r & 255) >= 192 && (c.r & 255) <= 200 && // ...that has all channel bits off
// (which means it's likely just plain OPL2 data as expected)
(c.v & 240) == 0
)
c.v |= c.r < 256 ? 16 : 32;
return c;
});
soundData.commands.unshift({ t: 0, r: 261, v: 1 });
}
return soundData;
}
function imf(imfData, imfRate = 560) {
var soundData = {
commands: [],
cmdRate: imfRate
};
var arr = new Uint8Array(imfData);
var time = 0;
var length = arr[0] | arr[1] << 8;
var extraSearch = arr[2] | arr[3] << 8;
var startOffset = 2;
if (length == 0) {
length = arr.byteLength;
startOffset = extraSearch == 0 ? 0 : 2;
}
for (var i = startOffset; i < length; i += 4) {
soundData.commands.push({ t: time, r: arr[i], v: arr[i + 1] });
time += arr[i + 2] | arr[i + 3] << 8;
}
return soundLoad(soundData);
}
function raw(rawData) {
const pitFreq = 14318180 / 12;
var soundData = {
commands: [],
cmdRate: pitFreq
};
var arr = new Uint8Array(rawData);
const get16 = (i2) => arr[i2] | arr[i2 + 1] << 8;
const get32 = (i2) => arr[i2] | arr[i2 + 1] << 8 | arr[i2 + 2] << 16 | arr[i2 + 3] << 24;
if (get32(0) != 1096237394 && get32(4) != 1096040772) {
console.error("Not a RAW file: Bad file identifier!");
return soundLoad(soundData);
}
var time = 0;
var clock = get16(8);
var regOffset = 0;
for (var i = 10; i < arr.byteLength; i += 2) {
const r = arr[i + 1];
const v = arr[i];
if (r == 0) {
time += v * clock;
continue;
} else if (r == 2) {
if (v == 0) {
i += 2;
clock = get16(i);
} else if (v == 1) {
regOffset = 0;
} else if (v == 2) {
regOffset = 256;
}
continue;
} else {
soundData.commands.push({ t: time, r: r | regOffset, v });
}
}
return soundLoad(soundData);
}
function dro(droData) {
var soundData = {
commands: [],
cmdRate: 1e3,
dualOpl2Mode: false
};
var arr = new Uint8Array(droData);
const get16 = (i2) => arr[i2] | arr[i2 + 1] << 8;
const get32 = (i2) => arr[i2] | arr[i2 + 1] << 8 | arr[i2 + 2] << 16 | arr[i2 + 3] << 24;
if (get32(0) != 1095909956 && get32(4) != 1280331607) {
console.error("Not a DRO file: Bad file identifier!");
return soundLoad(soundData);
}
const version = get16(8).toString(16) + "." + get16(10).toString(16);
debug("DRO file version:", version == "0.1" ? 1 : +version);
if (version < 2) {
const hardware = arr[20];
switch (hardware) {
case 0:
debug("Chip type: OPL2");
break;
case 1:
debug("Chip type: OPL3");
break;
case 2:
debug("Chip type: Dual OPL2");
soundData.dualOpl2Mode = true;
break;
default:
debug("Unknown chip type!");
return soundLoad(soundData);
}
const dataOffset = get32(20) - hardware == 0 ? 24 : 21;
var time = 0;
var regOffset = 0;
for (var i = dataOffset; i < arr.byteLength; i++) {
const r = arr[i];
switch (r) {
// Delay D
case 0:
time += arr[i + 1] + 1;
i++;
break;
// Delay Dl, Dh
case 1:
time += (arr[i + 1] | arr[i + 2] << 8) + 1;
i += 2;
break;
// Set low chip / p0
case 2:
regOffset = 0;
break;
// Set high chip / p1
case 3:
regOffset = 256;
break;
// Register escape: [E], R, V
case 4:
soundData.commands.push({ t: time, r: arr[i + 1] | regOffset, v: arr[i + 2] });
i += 2;
break;
// R, V
default:
soundData.commands.push({ t: time, r: r | regOffset, v: arr[i + 1] });
i++;
break;
}
}
return soundLoad(soundData);
} else if (version == 2) {
const hardware = arr[20];
switch (hardware) {
case 0:
debug("Chip type: OPL2");
break;
case 1:
debug("Chip type: Dual OPL2");
soundData.dualOpl2Mode = true;
break;
case 2:
debug("Chip type: OPL3");
break;
default:
debug("Unknown chip type!");
return soundLoad(soundData);
}
const format = arr[21];
if (format != 0) {
console.error("Only interleaved mode is supported!");
return soundLoad(soundData);
}
const compression = arr[22];
if (compression != 0) {
console.error("Only uncompressed data is supported!");
return soundLoad(soundData);
}
const shortDelayCode = arr[23];
const longDelayCode = arr[24];
const codemapLength = arr[25];
var codes = [];
for (var i = 0; i < codemapLength; i++) codes[i] = arr[26 + i];
var time = 0;
for (var i = 26 + codemapLength; i < arr.byteLength; i++) {
const r = arr[i];
switch (r) {
// Delay D
case shortDelayCode:
time += arr[i + 1] + 1;
i++;
break;
// 256x delay D
case longDelayCode:
time += arr[i + 1] + 1 << 8;
i++;
break;
// R, V
default:
const rc = r & 128 ? 256 | codes[r & 127] : codes[r];
soundData.commands.push({ t: time, r: rc, v: arr[i + 1] });
i++;
break;
}
}
return soundLoad(soundData);
} else {
console.error("DRO version", +version, "playback not supported!");
return soundLoad(soundData);
}
}
function vgm(vgmData, loopRepeat) {
var soundData = {
commands: [],
cmdRate: 44100,
dualOpl2Mode: false
};
var arr = new Uint8Array(vgmData);
const get32 = (i2) => arr[i2] | arr[i2 + 1] << 8 | arr[i2 + 2] << 16 | arr[i2 + 3] << 24;
if (get32(0) != 544040790) {
console.error("Not a VGM file: Bad file identifier!");
return soundLoad(soundData);
}
const version = get32(8).toString(16);
const dataOffset = version < 150 ? 64 : 52 + get32(52);
debug("VGM file version:", +(version / 100).toFixed(2), "data offset:", dataOffset);
var loopOffset = get32(28);
if (loopOffset) loopOffset += 28;
const loopCount = get32(32);
if (loopCount) debug("Loop present:", loopCount, "@", loopOffset);
const clockOpl2 = get32(80) & 1073741823;
const clockOpl3 = get32(92) & 1073741823;
if (clockOpl2 == 3579545) debug("OPL2 detected:", clockOpl2, "Hz", "(standard clock rate)");
else if (clockOpl2) debug("OPL2 detected:", clockOpl2, "Hz");
if (clockOpl3 == 14318180) debug("OPL3 detected:", clockOpl3, "Hz", "(standard clock rate)");
else if (clockOpl3) debug("OPL3 detected:", clockOpl3, "Hz");
const dualOpl2 = get32(80) & 1073741824;
const dualOpl3 = get32(92) & 1073741824;
if (dualOpl2) {
debug("Dual OPL2 mode!");
soundData.dualOpl2Mode = true;
}
if (dualOpl3) {
console.error("Dual OPL3 mode not supported!");
return soundLoad(soundData);
}
if (clockOpl2 && clockOpl3) {
console.error("Combined OPL2 and OPL3 playback not supported!");
return soundLoad(soundData);
}
var time = 0;
for (var loop = 0; loop < (loopCount ? 1 + (loopRepeat ?? 1) : 1); loop++) {
var start = loop == 0 ? dataOffset : loopOffset;
for (var i = start; i < arr.byteLength; i++) {
if (arr[i] >= 112 && arr[i] <= 127) {
time += arr[i] & 15;
} else
switch (arr[i]) {
case 90:
soundData.commands.push({ t: time, r: arr[i + 1], v: arr[i + 2] });
i += 2;
break;
case 91:
soundData.commands.push({ t: time, r: arr[i + 1], v: arr[i + 2] });
i += 2;
break;
case 94:
soundData.commands.push({ t: time, r: arr[i + 1], v: arr[i + 2] });
i += 2;
break;
case 170:
// YM3812#2 R, V
// Stored in YMF262 p1. Only allowed because the OPL2 + OPL3 combination is forbidden!
// case fall-through!
case 95:
soundData.commands.push({ t: time, r: 256 | arr[i + 1], v: arr[i + 2] });
i += 2;
break;
case 97:
time += arr[i + 1] | arr[i + 2] << 8;
i += 2;
break;
case 98:
time += 735;
break;
case 99:
time += 882;
break;
case 102:
i = arr.byteLength;
break;
default:
console.warn("Unknown command", arr[i].toString(16), "at offset", i);