From 70db662026383ea2a4ba47ab32877acb4b01a3a8 Mon Sep 17 00:00:00 2001 From: binaryify Date: Sun, 10 Sep 2023 15:30:59 +0800 Subject: [PATCH] =?UTF-8?q?update:=20=E5=90=AC=E6=AD=8C=E8=AF=86=E6=9B=B2?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AE=8C=E5=96=84,=20=E8=A1=A5=E5=85=85demo?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.js | 1 + CHANGELOG.MD | 8 + docs/README.md | 14 + interface.d.ts | 7 + module/audio_match.js | 16 +- package.json | 2 +- public/audio_match_demo/afp.js | 1664 ++++++++++++++++++++++++++++ public/audio_match_demo/afp.wasm | Bin 0 -> 231182 bytes public/audio_match_demo/index.html | 184 +++ public/audio_match_demo/rec.js | 49 + public/index.html | 3 +- 11 files changed, 1941 insertions(+), 7 deletions(-) create mode 100644 public/audio_match_demo/afp.js create mode 100644 public/audio_match_demo/afp.wasm create mode 100644 public/audio_match_demo/index.html create mode 100644 public/audio_match_demo/rec.js diff --git a/.eslintrc.js b/.eslintrc.js index f58b0ba..3e60e10 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,5 +1,6 @@ module.exports = { root: true, + ignorePatterns: ['public/'], parserOptions: { parser: 'babel-eslint', ecmaVersion: 2018, diff --git a/CHANGELOG.MD b/CHANGELOG.MD index 1872269..fedad79 100644 --- a/CHANGELOG.MD +++ b/CHANGELOG.MD @@ -1,4 +1,12 @@ # 更新日志 + +### 4.12.0 | 2023.09.10 +- 听歌识曲接口完善, 补充demo页面 + +- NMTID 动态添加 #1792 + +- weapi ua 固定 + ### 4.11.3 | 2023.09.09 - 返回内容的`code`统一处理 diff --git a/docs/README.md b/docs/README.md index 76db28b..678f127 100644 --- a/docs/README.md +++ b/docs/README.md @@ -274,6 +274,7 @@ 256. 播客声音上传 257. 验证接口-二维码生成 258. 验证接口-二维码检测 +259. 听歌识曲 ## 安装 @@ -4245,6 +4246,19 @@ qrCodeStatus:10,detailReason:0 二维码已扫描,并且手机号相同 qrCodeStatus:20,detailReason:0 验证成功qrCodeStatus:21,detailReason:0 二维码已失效 +### 听歌识曲 +说明: 使用此接口,上传音频文件或者麦克风采集声音可识别对应歌曲信息,具体调用例子参考 `/audio_match_demo/index.html` (项目文件: `public/audio_match_demo/index.html`) + +**接口地址:** `/audio/match` + +**必选参数:** + +`duration`: 音频时长,单位秒 + +`audioFP`: 音频指纹,参考项目调用例子获取 + + + ## 离线访问此文档 此文档同时也是 Progressive Web Apps(PWA), 加入了 serviceWorker, 可离线访问 diff --git a/interface.d.ts b/interface.d.ts index 9f9dd19..b5da183 100644 --- a/interface.d.ts +++ b/interface.d.ts @@ -244,6 +244,13 @@ export function artists( params: { id: string | number } & RequestBaseConfig, ): Promise +export function audio_match( + params: { + duration: string | number + audioFP: string | number + } & RequestBaseConfig, +): Promise + export function avatar_upload( params: ImageUploadConfig & RequestBaseConfig, ): Promise diff --git a/module/audio_match.js b/module/audio_match.js index a9a2cfa..8ec30b0 100644 --- a/module/audio_match.js +++ b/module/audio_match.js @@ -1,14 +1,20 @@ -const realData = - 'eJx10mtIU2EcBvDtnCwNMfO2klUSmSQ5ZugKW/v/0TIjJVdhDStbXpqXrhY5Kwhtrcwiut9VSqMUMxX6IFqsD92sD1YgWGHRBcowKrpnPa/v+drg4flt572ds2PQ6XQut7MwJ940w2TOyS0pzF+/BV/MJrNO+3TVLOHUzKx5iw3/H5uZ7yxegct3tTl7Cr6QEa0gZ/dZOFsvfe5YHe1D+yFZxpncqEj/cCdwoirdVxHNnZrX3xygU5g7Eh6I9uOx8Ch4y9FQjlKkDz1pYrFXIJLUOovFGcYivqJgXqaXDqu7Rzc0XzmZxG81B/fF8wRVusn2jN5rDnwca8tFhyAJP4L4qiI9vX8cWzEmVKzT/46qxNpIdZOZz2HNcHhSkZ3D4AjYFpfGFkX6+dB+FvcSBe/SWbkLPVnEOJ1DFelXxVVci/Wj4TsBLhrQ/LGoaU4HxsTA28L76Cc8Dfau/U6F6FgkyBDDJar0g8tesmOvOHioWeXXmme6l3MLbIIre6wciU5E2t/k8WVxHfHvuUWXsH4SPCv1NW1Cz0aivgYO34vw1AEvi3MlIw0xHl6JNVPEGW41UJsqPaXYYTuEnotMdHwYfv7CFR/i+aXmrY5wrlSkEwr+0EJ0GvLmdw4/RS9Amj93UAbGZMIF40ezE3PtcG/yBWrT3L6oh66hFyMXK4xsUKT7aufzapxnFTwiNc3Wis5Bdm+OYCvmOuHj/ZeoQPOI00PUrUjXpG+kMFU61tFFDvQaZOn5DH4mzoLw4Hsaj14rzu/K4jF66fSWTnJinW3wBvcveqjZN3iFjKp0qKuF1mi21keST3NtTcbwu1eG3Dussr9eemljLIco0tVH7HwA493wOr+FlIjfy+GvkR4uwfjt4v/6G8K3NX8K38lt6B1ISa+Bv2O8Fy69foZOovci2S4Lr1aku4P9OEWVTt9wgMQ7exgJ8JXyI0W694WFyuBjcH75XyrEXsfhg+ZSvqZIf/Lct8Wp0md2tJN4PifEfjcm8gu02Ptbj459eum8eg8bFWlLXTb/A+uo9bM=' +function createRandomString(len) { + const str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' + let result = '' + for (let i = len; i > 0; --i) + result += str[Math.floor(Math.random() * str.length)] + return result +} module.exports = (query, request) => { query.cookie.os = 'pc' const data = { algorithmCode: 'shazam_v2', times: 1, - sessionId: 'C999431ACDC84EDBB984763654E6F8D7', - duration: 3.3066249999999995, + sessionId: createRandomString(16), + duration: Number(query.duration), from: 'recognize-song', - rawdata: realData, + decrypt: '1', + rawdata: query.audioFP, } return request('POST', `https://music.163.com/api/music/audio/match`, data, { crypto: 'weapi', diff --git a/package.json b/package.json index 12dd5b9..63b700b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "NeteaseCloudMusicApi", - "version": "4.11.3", + "version": "4.12.0", "description": "网易云音乐 NodeJS 版 API", "scripts": { "start": "node app.js", diff --git a/public/audio_match_demo/afp.js b/public/audio_match_demo/afp.js new file mode 100644 index 0000000..605e599 --- /dev/null +++ b/public/audio_match_demo/afp.js @@ -0,0 +1,1664 @@ +// https://fn.music.163.com/g/chrome-extension-home-page-beta/ +let AudioFingerprintRuntime = (() => { + var n, o = void 0 !== o ? o : {},i = {}; + for (n in o) + o.hasOwnProperty(n) && (i[n] = o[n]); + var read_, readAsync, readBinary, c, f, l = [], + p = "./this.program", + ENVIRONMENT_IS_WEB = "object" == typeof window, + ENVIRONMENT_IS_WORKER = "function" == typeof importScripts, + ENVIRONMENT_IS_NODE = "object" == typeof process && "object" == typeof process.versions && "string" == typeof process.versions.node, + m = ""; + ENVIRONMENT_IS_NODE ? ( + m = ENVIRONMENT_IS_WORKER ? path.dirname(m) + "/" : "//", + read_ = function shell_read(t, e) { + return c || (c = fs), + f || (f = path), + t = f.normalize(t), + c.readFileSync(t, e ? null : "utf8") + }, + readBinary = function(t) { + var e = read_(t, !0); + return e.buffer || (e = new Uint8Array(e)), + T(e.buffer), + e + } + , + u = function (t, e, n) { + c || (c = r(194)), + f || (f = r(997)), + t = f.normalize(t), + c.readFile(t, (function(t, r) { + t ? n(t) : e(r.buffer) + })) + }, + process.argv.length > 1 && (p = process.argv[1].replace(/\\/g, "/")), + l = process.argv.slice(2), + process.on("uncaughtException", (function(t) { + if (!(t instanceof ExitStatus)) + throw t + })), + process.on("unhandledRejection", (function(t) { + throw t + })), + function logExceptionOnExit(t, e) { + if (_) + throw process.exitCode = t, + e; + var r; + (r = e) instanceof ExitStatus || g("exiting due to exception: " + r), + process.exit(t) + }, + o.inspect = function() { + return "[Emscripten Module object]" + } + ) : (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && (ENVIRONMENT_IS_WORKER ? m = self.location.href : "undefined" != typeof document && document.currentScript && (m = document.currentScript.src), + m = 0 !== m.indexOf("blob:") ? m.substr(0, m.replace(/[?#].*/, "").lastIndexOf("/") + 1) : "", + read_ = function(t) { + var e = new XMLHttpRequest; + return e.open("GET", t, !1), + e.send(null), + e.responseText + }, + ENVIRONMENT_IS_WORKER && (readBinary = function(t) { + var e = new XMLHttpRequest; + return e.open("GET", t, !1), + e.responseType = "arraybuffer", + e.send(null), + new Uint8Array(e.response) + }), + readAsync = function(t, e, r) { + var n = new XMLHttpRequest; + n.open("GET", t, !0), + n.responseType = "arraybuffer", + n.onload = function() { + 200 == n.status || 0 == n.status && n.response ? e(n.response) : r() + }, + n.onerror = r, + n.send(null) + } + ); + var v = o.print || console.log.bind(console), + g = o.printErr || console.warn.bind(console); + for (n in i) + i.hasOwnProperty(n) && (o[n] = i[n]); + i = null, + o.arguments && (l = o.arguments), + o.thisProgram && (p = o.thisProgram), + o.quit && o.quit; + var w; + o.wasmBinary && (w = o.wasmBinary); + var b, _ = o.noExitRuntime || !0; + "object" != typeof WebAssembly && abort("no native wasm support detected"); + var C = !1; + + function T(t, e) { + t || abort("Assertion failed: " + e) + } + var UTF8Decoder = "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0; + + function UTF8ArrayToString(heap, idx, maxBytesToRead) { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + while (heap[endPtr] && !(endPtr >= endIdx)) ++endPtr; + if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) { + return UTF8Decoder.decode(heap.subarray(idx, endPtr)) + } else { + var str = ""; + while (idx < endPtr) { + var u0 = heap[idx++]; + if (!(u0 & 128)) { + str += String.fromCharCode(u0); + continue + } + var u1 = heap[idx++] & 63; + if ((u0 & 224) == 192) { + str += String.fromCharCode((u0 & 31) << 6 | u1); + continue + } + var u2 = heap[idx++] & 63; + if ((u0 & 240) == 224) { + u0 = (u0 & 15) << 12 | u1 << 6 | u2 + } else { + u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heap[idx++] & 63 + } + if (u0 < 65536) { + str += String.fromCharCode(u0) + } else { + var ch = u0 - 65536; + str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023) + } + } + } + return str + } + + function UTF8ToString(ptr, maxBytesToRead) { + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "" + } + function UTF8ToString(t, e) { + return t ? UTF8ArrayToString(O, t, e) : "" + } + + + function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { + if (!(maxBytesToWrite > 0)) return 0; + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) { + var u1 = str.charCodeAt(++i); + u = 65536 + ((u & 1023) << 10) | u1 & 1023 + } + if (u <= 127) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u + } else if (u <= 2047) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 192 | u >> 6; + heap[outIdx++] = 128 | u & 63 + } else if (u <= 65535) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 224 | u >> 12; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63 + } else { + if (outIdx + 3 >= endIdx) break; + heap[outIdx++] = 240 | u >> 18; + heap[outIdx++] = 128 | u >> 12 & 63; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63 + } + } + heap[outIdx] = 0; + return outIdx - startIdx + } + + + function UTF8CharCount(t) { + for (var e = 0, r = 0; r < t.length; ++r) { + var n = t.charCodeAt(r); + n >= 55296 && n <= 57343 && (n = 65536 + ((1023 & n) << 10) | 1023 & t.charCodeAt(++r)), + n <= 127 ? ++e : e += n <= 2047 ? 2 : n <= 65535 ? 3 : 4 + } + return e + } + var E, S, O, k, W, j, R, M, I, UTF16Decoder = "undefined" != typeof TextDecoder ? new TextDecoder("utf-16le") : void 0; + + function UTF16ArrayToString(t, e) { + for (var r = t, n = r >> 1, o = n + e / 2; !(n >= o) && W[n];) + ++n; + if ((r = n << 1) - t > 32 && UTF16Decoder) + return UTF16Decoder.decode(O.subarray(t, r)); + for (var i = "", a = 0; !(a >= e / 2); ++a) { + var u = k[t + 2 * a >> 1]; + if (0 == u) + break; + i += String.fromCharCode(u) + } + return i + } + + function H(t, e, r) { + if (void 0 === r && (r = 2147483647), + r < 2) + return 0; + for (var n = e, o = (r -= 2) < 2 * t.length ? r / 2 : t.length, i = 0; i < o; ++i) { + var a = t.charCodeAt(i); + k[e >> 1] = a, + e += 2 + } + return k[e >> 1] = 0, + e - n + } + + function Y(t) { + return 2 * t.length + } + + function V(t, e) { + for (var r = 0, n = ""; !(r >= e / 4);) { + var o = j[t + 4 * r >> 2]; + if (0 == o) + break; + if (++r, + o >= 65536) { + var i = o - 65536; + n += String.fromCharCode(55296 | i >> 10, 56320 | 1023 & i) + } else + n += String.fromCharCode(o) + } + return n + } + + function z(t, e, r) { + if (void 0 === r && (r = 2147483647), + r < 4) + return 0; + for (var n = e, o = n + r - 4, i = 0; i < t.length; ++i) { + var a = t.charCodeAt(i); + if (a >= 55296 && a <= 57343) + a = 65536 + ((1023 & a) << 10) | 1023 & t.charCodeAt(++i); + if (j[e >> 2] = a, + (e += 4) + 4 > o) + break + } + return j[e >> 2] = 0, + e - n + } + + function B(t) { + for (var e = 0, r = 0; r < t.length; ++r) { + var n = t.charCodeAt(r); + n >= 55296 && n <= 57343 && ++r, + e += 4 + } + return e + } + o.INITIAL_MEMORY; + var L, G = [], + N = [], + q = []; + var J = 0, + X = null, + Z = null; + + function abort(what) { + throw o.onAbort && o.onAbort(what), + g(what = "Aborted(" + what + ")"), + C = !0, + 1, + what += ". Build with -s ASSERTIONS=1 for more info.", + new WebAssembly.RuntimeError(what) + } + o.preloadedImages = {}, + o.preloadedAudios = {}; + var Q; + + function isDataURI(t) { + return t.startsWith("data:application/octet-stream;base64,") + } + + function isFileURI(t) { + return t.startsWith("file://") + } + + function getBinary(file) { + try { + if (file == Q && w) + return new Uint8Array(w); + if (readBinary) + return readBinary(file); + throw "both async and sync fetching of the wasm failed" + } catch (t) { + abort(t) + } + } + + function callRuntimeCallbacks(cb) { + for (; cb.length > 0;) { + var func = cb.shift(); + if ("function" != typeof func) { + var r = func.func; + "number" == typeof r ? void 0 === func.arg ? it(r)() : it(r)(func.arg) : r(void 0 === func.arg ? null : func.arg) + } else + func(o) + } + } + var wasmBinaryFile = "afp.wasm"; + isDataURI(wasmBinaryFile) || (Q = function(t) { + return wasmBinaryFile + }(Q)); + var ot = []; + + function it(t) { + var e = ot[t]; + return e || (t >= ot.length && (ot.length = t + 1), + ot[t] = e = L.get(t)), + e + } + + function ExceptionInfo(excPtr) { + this.excPtr = excPtr, + this.ptr = excPtr - 16, + this.set_type = function(t) { + j[this.ptr + 4 >> 2] = t + }, + this.get_type = function() { + return j[this.ptr + 4 >> 2] + }, + this.set_destructor = function(t) { + j[this.ptr + 8 >> 2] = t + }, + this.get_destructor = function() { + return j[this.ptr + 8 >> 2] + }, + this.set_refcount = function(t) { + j[this.ptr >> 2] = t + }, + this.set_caught = function(t) { + t = t ? 1 : 0, + S[this.ptr + 12 >> 0] = t + }, + this.get_caught = function() { + return 0 != S[this.ptr + 12 >> 0] + }, + this.set_rethrown = function(t) { + t = t ? 1 : 0, + S[this.ptr + 13 >> 0] = t + }, + this.get_rethrown = function() { + return 0 != S[this.ptr + 13 >> 0] + }, + this.init = function(t, e) { + this.set_type(t), + this.set_destructor(e), + this.set_refcount(0), + this.set_caught(!1), + this.set_rethrown(!1) + }, + this.add_ref = function() { + var t = j[this.ptr >> 2]; + j[this.ptr >> 2] = t + 1 + }, + this.release_ref = function() { + var t = j[this.ptr >> 2]; + return j[this.ptr >> 2] = t - 1, + 1 === t + } + } + + function ut(t) { + switch (t) { + case 1: + return 0; + case 2: + return 1; + case 4: + return 2; + case 8: + return 3; + default: + throw new TypeError("Unknown type size: " + t) + } + } + var st = void 0; + + function ct(t) { + for (var e = "", r = t; O[r];) + e += st[O[r++]]; + return e + } + var ft = {}, + lt = {}, + pt = {}; + + function dt(t) { + if (void 0 === t) + return "_unknown"; + var e = (t = t.replace(/[^a-zA-Z0-9_]/g, "$")).charCodeAt(0); + return e >= 48 && e <= 57 ? "_" + t : t + } + + function ht(t, e) { + return t = dt(t), + new Function("body", "return function " + t + '() {\n "use strict"; return body.apply(this, arguments);\n};\n')(e) + } + + function yt(t, e) { + var r = ht(e, (function(t) { + this.name = e, + this.message = t; + var r = new Error(t).stack; + void 0 !== r && (this.stack = this.toString() + "\n" + r.replace(/^Error(:[^\n]*)?\n/, "")) + })); + return r.prototype = Object.create(t.prototype), + r.prototype.constructor = r, + r.prototype.toString = function() { + return void 0 === this.message ? this.name : this.name + ": " + this.message + }, + r + } + var mt = void 0; + + function vt(t) { + throw new mt(t) + } + var gt = void 0; + + function wt(t) { + throw new gt(t) + } + + function bt(t, e, r) { + function n(e) { + var n = r(e); + n.length !== t.length && wt("Mismatched type converter count"); + for (var o = 0; o < t.length; ++o) + _t(t[o], n[o]) + } + t.forEach((function(t) { + pt[t] = e + })); + var o = new Array(e.length), + i = [], + a = 0; + e.forEach((function(t, e) { + lt.hasOwnProperty(t) ? o[e] = lt[t] : (i.push(t), + ft.hasOwnProperty(t) || (ft[t] = []), + ft[t].push((function() { + o[e] = lt[t], + ++a === i.length && n(o) + }))) + })), + 0 === i.length && n(o) + } + + function _t(t, e, r) { + if (r = r || {}, + !("argPackAdvance" in e)) + throw new TypeError("registerType registeredInstance requires argPackAdvance"); + var n = e.name; + if (t || vt('type "' + n + '" must have a positive integer typeid pointer'), + lt.hasOwnProperty(t)) { + if (r.ignoreDuplicateRegistrations) + return; + vt("Cannot register type '" + n + "' twice") + } + if (lt[t] = e, + delete pt[t], + ft.hasOwnProperty(t)) { + var o = ft[t]; + delete ft[t], + o.forEach((function(t) { + t() + })) + } + } + + function Ct(t) { + if (!(this instanceof Rt)) + return !1; + if (!(t instanceof Rt)) + return !1; + for (var e = this.$$.ptrType.registeredClass, r = this.$$.ptr, n = t.$$.ptrType.registeredClass, o = t.$$.ptr; e.baseClass;) + r = e.upcast(r), + e = e.baseClass; + for (; n.baseClass;) + o = n.upcast(o), + n = n.baseClass; + return e === n && r === o + } + + function Tt(t) { + vt(t.$$.ptrType.registeredClass.name + " instance already deleted") + } + var $t = !1; + + function Pt(t) {} + + function At(t) { + t.count.value -= 1, + 0 === t.count.value && function(t) { + t.smartPtr ? t.smartPtrType.rawDestructor(t.smartPtr) : t.ptrType.registeredClass.rawDestructor(t.ptr) + }(t) + } + + function Dt(t) { + return "undefined" == typeof FinalizationRegistry ? (Dt = function(t) { + return t + }, + t) : ($t = new FinalizationRegistry((function(t) { + At(t.$$) + })), + Dt = function(t) { + var e = { + $$: t.$$ + }; + return $t.register(t, e, t), + t + }, + Pt = function(t) { + $t.unregister(t) + }, + Dt(t)) + } + + function Ft() { + if (this.$$.ptr || Tt(this), + this.$$.preservePointerOnDelete) + return this.$$.count.value += 1, + this; + var t, e = Dt(Object.create(Object.getPrototypeOf(this), { + $$: { + value: (t = this.$$, { + count: t.count, + deleteScheduled: t.deleteScheduled, + preservePointerOnDelete: t.preservePointerOnDelete, + ptr: t.ptr, + ptrType: t.ptrType, + smartPtr: t.smartPtr, + smartPtrType: t.smartPtrType + }) + } + })); + return e.$$.count.value += 1, + e.$$.deleteScheduled = !1, + e + } + + function Et() { + this.$$.ptr || Tt(this), + this.$$.deleteScheduled && !this.$$.preservePointerOnDelete && vt("Object already scheduled for deletion"), + Pt(this), + At(this.$$), + this.$$.preservePointerOnDelete || (this.$$.smartPtr = void 0, + this.$$.ptr = void 0) + } + + function St() { + return !this.$$.ptr + } + var Ot = void 0, + kt = []; + + function Wt() { + for (; kt.length;) { + var t = kt.pop(); + t.$$.deleteScheduled = !1, + t.delete() + } + } + + function jt() { + return this.$$.ptr || Tt(this), + this.$$.deleteScheduled && !this.$$.preservePointerOnDelete && vt("Object already scheduled for deletion"), + kt.push(this), + 1 === kt.length && Ot && Ot(Wt), + this.$$.deleteScheduled = !0, + this + } + + function Rt() {} + var Mt = {}; + + function It(t, e, r) { + if (void 0 === t[e].overloadTable) { + var n = t[e]; + t[e] = function() { + return t[e].overloadTable.hasOwnProperty(arguments.length) || vt("Function '" + r + "' called with an invalid number of arguments (" + arguments.length + ") - expects one of (" + t[e].overloadTable + ")!"), + t[e].overloadTable[arguments.length].apply(this, arguments) + }, + t[e].overloadTable = [], + t[e].overloadTable[n.argCount] = n + } + } + + function xt(t, e, r) { + o.hasOwnProperty(t) ? ((void 0 === r || void 0 !== o[t].overloadTable && void 0 !== o[t].overloadTable[r]) && vt("Cannot register public name '" + t + "' twice"), + It(o, t, t), + o.hasOwnProperty(r) && vt("Cannot register multiple overloads of a function with the same number of arguments (" + r + ")!"), + o[t].overloadTable[r] = e) : (o[t] = e, + void 0 !== r && (o[t].numArguments = r)) + } + + function Ut(t, e, r, n, o, i, a, u) { + this.name = t, + this.constructor = e, + this.instancePrototype = r, + this.rawDestructor = n, + this.baseClass = o, + this.getActualType = i, + this.upcast = a, + this.downcast = u, + this.pureVirtualFunctions = [] + } + + function Ht(t, e, r) { + for (; e !== r;) + e.upcast || vt("Expected null or instance of " + r.name + ", got an instance of " + e.name), + t = e.upcast(t), + e = e.baseClass; + return t + } + + function Yt(t, e) { + if (null === e) + return this.isReference && vt("null is not a valid " + this.name), + 0; + e.$$ || vt('Cannot pass "' + ge(e) + '" as a ' + this.name), + e.$$.ptr || vt("Cannot pass deleted object as a pointer of type " + this.name); + var r = e.$$.ptrType.registeredClass; + return Ht(e.$$.ptr, r, this.registeredClass) + } + + function Vt(t, e) { + var r; + if (null === e) + return this.isReference && vt("null is not a valid " + this.name), + this.isSmartPointer ? (r = this.rawConstructor(), + null !== t && t.push(this.rawDestructor, r), + r) : 0; + e.$$ || vt('Cannot pass "' + ge(e) + '" as a ' + this.name), + e.$$.ptr || vt("Cannot pass deleted object as a pointer of type " + this.name), + !this.isConst && e.$$.ptrType.isConst && vt("Cannot convert argument of type " + (e.$$.smartPtrType ? e.$$.smartPtrType.name : e.$$.ptrType.name) + " to parameter type " + this.name); + var n = e.$$.ptrType.registeredClass; + if (r = Ht(e.$$.ptr, n, this.registeredClass), + this.isSmartPointer) + switch (void 0 === e.$$.smartPtr && vt("Passing raw pointer to smart pointer is illegal"), + this.sharingPolicy) { + case 0: + e.$$.smartPtrType === this ? r = e.$$.smartPtr : vt("Cannot convert argument of type " + (e.$$.smartPtrType ? e.$$.smartPtrType.name : e.$$.ptrType.name) + " to parameter type " + this.name); + break; + case 1: + r = e.$$.smartPtr; + break; + case 2: + if (e.$$.smartPtrType === this) + r = e.$$.smartPtr; + else { + var o = e.clone(); + r = this.rawShare(r, ve.toHandle((function() { + o.delete() + }))), + null !== t && t.push(this.rawDestructor, r) + } + break; + default: + vt("Unsupporting sharing policy") + } + return r + } + + function zt(t, e) { + if (null === e) + return this.isReference && vt("null is not a valid " + this.name), + 0; + e.$$ || vt('Cannot pass "' + ge(e) + '" as a ' + this.name), + e.$$.ptr || vt("Cannot pass deleted object as a pointer of type " + this.name), + e.$$.ptrType.isConst && vt("Cannot convert argument of type " + e.$$.ptrType.name + " to parameter type " + this.name); + var r = e.$$.ptrType.registeredClass; + return Ht(e.$$.ptr, r, this.registeredClass) + } + + function Bt(t) { + return this.fromWireType(R[t >> 2]) + } + + function Lt(t) { + return this.rawGetPointee && (t = this.rawGetPointee(t)), + t + } + + function Gt(t) { + this.rawDestructor && this.rawDestructor(t) + } + + function Nt(t) { + null !== t && t.delete() + } + + function qt(t, e, r) { + if (e === r) + return t; + if (void 0 === r.baseClass) + return null; + var n = qt(t, e, r.baseClass); + return null === n ? null : r.downcast(n) + } + + function Jt() { + return Object.keys(Kt).length + } + + function Xt() { + var t = []; + for (var e in Kt) + Kt.hasOwnProperty(e) && t.push(Kt[e]); + return t + } + + function Zt(t) { + Ot = t, + kt.length && Ot && Ot(Wt) + } + var Kt = {}; + + function Qt(t, e) { + return e = function(t, e) { + for (void 0 === e && vt("ptr should not be undefined"); t.baseClass;) + e = t.upcast(e), + t = t.baseClass; + return e + }(t, e), + Kt[e] + } + + function te(t, e) { + return e.ptrType && e.ptr || wt("makeClassHandle requires ptr and ptrType"), + !!e.smartPtrType !== !!e.smartPtr && wt("Both smartPtrType and smartPtr must be specified"), + e.count = { + value: 1 + }, + Dt(Object.create(t, { + $$: { + value: e + } + })) + } + + function ee(t) { + var e = this.getPointee(t); + if (!e) + return this.destructor(t), + null; + var r = Qt(this.registeredClass, e); + if (void 0 !== r) { + if (0 === r.$$.count.value) + return r.$$.ptr = e, + r.$$.smartPtr = t, + r.clone(); + var n = r.clone(); + return this.destructor(t), + n + } + + function o() { + return this.isSmartPointer ? te(this.registeredClass.instancePrototype, { + ptrType: this.pointeeType, + ptr: e, + smartPtrType: this, + smartPtr: t + }) : te(this.registeredClass.instancePrototype, { + ptrType: this, + ptr: t + }) + } + var i, a = this.registeredClass.getActualType(e), + u = Mt[a]; + if (!u) + return o.call(this); + i = this.isConst ? u.constPointerType : u.pointerType; + var s = qt(e, this.registeredClass, i.registeredClass); + return null === s ? o.call(this) : this.isSmartPointer ? te(i.registeredClass.instancePrototype, { + ptrType: i, + ptr: s, + smartPtrType: this, + smartPtr: t + }) : te(i.registeredClass.instancePrototype, { + ptrType: i, + ptr: s + }) + } + + function re(t, e, r, n, o, i, a, u, s, c, f) { + this.name = t, + this.registeredClass = e, + this.isReference = r, + this.isConst = n, + this.isSmartPointer = o, + this.pointeeType = i, + this.sharingPolicy = a, + this.rawGetPointee = u, + this.rawConstructor = s, + this.rawShare = c, + this.rawDestructor = f, + o || void 0 !== e.baseClass ? this.toWireType = Vt : n ? (this.toWireType = Yt, + this.destructorFunction = null) : (this.toWireType = zt, + this.destructorFunction = null) + } + + function ne(t, e, r) { + o.hasOwnProperty(t) || wt("Replacing nonexistant public symbol"), + void 0 !== o[t].overloadTable && void 0 !== r ? o[t].overloadTable[r] = e : (o[t] = e, + o[t].argCount = r) + } + + function oe(t, e, r) { + return t.includes("j") ? function(t, e, r) { + var n = o["dynCall_" + t]; + return r && r.length ? n.apply(null, [e].concat(r)) : n.call(null, e) + }(t, e, r) : it(e).apply(null, r) + } + + function ie(t, e) { + var r, n, o, i = (t = ct(t)).includes("j") ? (r = t, + n = e, + o = [], + function() { + o.length = arguments.length; + for (var t = 0; t < arguments.length; t++) + o[t] = arguments[t]; + return oe(r, n, o) + } + ) : it(e); + return "function" != typeof i && vt("unknown function pointer with signature " + t + ": " + e), + i + } + var ae = void 0; + + function ue(t) { + var e = je(t), + r = ct(e); + return We(e), + r + } + + function se(t, e) { + var r = [], + n = {}; + throw e.forEach((function t(e) { + n[e] || lt[e] || (pt[e] ? pt[e].forEach(t) : (r.push(e), + n[e] = !0)) + })), + new ae(t + ": " + r.map(ue).join([", "])) + } + + function ce(t, e) { + for (var r = [], n = 0; n < t; n++) + r.push(j[(e >> 2) + n]); + return r + } + + function fe(t) { + for (; t.length;) { + var e = t.pop(); + t.pop()(e) + } + } + + function le(t, e, r, n, o) { + var i = e.length; + i < 2 && vt("argTypes array size mismatch! Must at least get return value and 'this' types!"); + for (var a = null !== e[1] && null !== r, u = !1, s = 1; s < e.length; ++s) + if (null !== e[s] && void 0 === e[s].destructorFunction) { + u = !0; + break + } + var c = "void" !== e[0].name, + f = "", + l = ""; + for (s = 0; s < i - 2; ++s) + f += (0 !== s ? ", " : "") + "arg" + s, + l += (0 !== s ? ", " : "") + "arg" + s + "Wired"; + var p = "return function " + dt(t) + "(" + f + ") {\nif (arguments.length !== " + (i - 2) + ") {\nthrowBindingError('function " + t + " called with ' + arguments.length + ' arguments, expected " + (i - 2) + " args!');\n}\n"; + u && (p += "var destructors = [];\n"); + var d = u ? "destructors" : "null", + h = ["throwBindingError", "invoker", "fn", "runDestructors", "retType", "classParam"], + y = [vt, n, o, fe, e[0], e[1]]; + a && (p += "var thisWired = classParam.toWireType(" + d + ", this);\n"); + for (s = 0; s < i - 2; ++s) + p += "var arg" + s + "Wired = argType" + s + ".toWireType(" + d + ", arg" + s + "); // " + e[s + 2].name + "\n", + h.push("argType" + s), + y.push(e[s + 2]); + if (a && (l = "thisWired" + (l.length > 0 ? ", " : "") + l), + p += (c ? "var rv = " : "") + "invoker(fn" + (l.length > 0 ? ", " : "") + l + ");\n", + u) + p += "runDestructors(destructors);\n"; + else + for (s = a ? 1 : 2; s < e.length; ++s) { + var m = 1 === s ? "thisWired" : "arg" + (s - 2) + "Wired"; + null !== e[s].destructorFunction && (p += m + "_dtor(" + m + "); // " + e[s].name + "\n", + h.push(m + "_dtor"), + y.push(e[s].destructorFunction)) + } + return c && (p += "var ret = retType.fromWireType(rv);\nreturn ret;\n"), + p += "}\n", + h.push(p), + function(t, e) { + if (!(t instanceof Function)) + throw new TypeError("new_ called with constructor type " + typeof t + " which is not a function"); + var r = ht(t.name || "unknownFunctionName", (function() {})); + r.prototype = t.prototype; + var n = new r, + o = t.apply(n, e); + return o instanceof Object ? o : n + }(Function, h).apply(null, y) + } + var pe = [], + de = [{}, { + value: void 0 + }, { + value: null + }, { + value: !0 + }, { + value: !1 + }]; + + function he(t) { + t > 4 && 0 == --de[t].refcount && (de[t] = void 0, + pe.push(t)) + } + + function ye() { + for (var t = 0, e = 5; e < de.length; ++e) + void 0 !== de[e] && ++t; + return t + } + + function me() { + for (var t = 5; t < de.length; ++t) + if (void 0 !== de[t]) + return de[t]; + return null + } + var ve = { + toValue: function(t) { + return t || vt("Cannot use deleted val. handle = " + t), + de[t].value + }, + toHandle: function(t) { + switch (t) { + case void 0: + return 1; + case null: + return 2; + case !0: + return 3; + case !1: + return 4; + default: + var e = pe.length ? pe.pop() : de.length; + return de[e] = { + refcount: 1, + value: t + }, + e + } + } + }; + + function ge(t) { + if (null === t) + return "null"; + var e = typeof t; + return "object" === e || "array" === e || "function" === e ? t.toString() : "" + t + } + + function we(t, e) { + switch (e) { + case 2: + return function(t) { + return this.fromWireType(M[t >> 2]) + }; + case 3: + return function(t) { + return this.fromWireType(I[t >> 3]) + }; + default: + throw new TypeError("Unknown float type: " + t) + } + } + + function be(t, e, r) { + switch (e) { + case 0: + return r ? function(t) { + return S[t] + } : + function(t) { + return O[t] + }; + case 1: + return r ? function(t) { + return k[t >> 1] + } : + function(t) { + return W[t >> 1] + }; + case 2: + return r ? function(t) { + return j[t >> 2] + } : + function(t) { + return R[t >> 2] + }; + default: + throw new TypeError("Unknown integer type: " + t) + } + } + var Te = { + mappings: {}, + buffers: [null, [], + [] + ], + printChar: function(t, e) { + var r = Te.buffers[t]; + 0 === e || 10 === e ? ((1 === t ? v : g)(UTF8ArrayToString(r, 0)), + r.length = 0) : r.push(e) + }, + varargs: void 0, + get: function() { + return Te.varargs += 4, + j[Te.varargs - 4 >> 2] + }, + getStr: function(t) { + return UTF8ToString(t) + }, + get64: function(t, e) { + return t + } + }; + + function $e(t) { + return t % 4 == 0 && (t % 100 != 0 || t % 400 == 0) + } + + function Pe(t, e) { + for (var r = 0, n = 0; n <= e; r += t[n++]) + ; + return r + } + var Ae = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + De = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + + function Fe(t, e) { + for (var r = new Date(t.getTime()); e > 0;) { + var n = $e(r.getFullYear()), + o = r.getMonth(), + i = (n ? Ae : De)[o]; + if (!(e > i - r.getDate())) + return r.setDate(r.getDate() + e), + r; + e -= i - r.getDate() + 1, + r.setDate(1), + o < 11 ? r.setMonth(o + 1) : (r.setMonth(0), + r.setFullYear(r.getFullYear() + 1)) + } + return r + } + + for (var t = new Array(256), e = 0; e < 256; ++e) + t[e] = String.fromCharCode(e); + st = t + + mt = o.BindingError = yt(Error, "BindingError"), + gt = o.InternalError = yt(Error, "InternalError"), + Rt.prototype.isAliasOf = Ct, + Rt.prototype.clone = Ft, + Rt.prototype.delete = Et, + Rt.prototype.isDeleted = St, + Rt.prototype.deleteLater = jt, + re.prototype.getPointee = Lt, + re.prototype.destructor = Gt, + re.prototype.argPackAdvance = 8, + re.prototype.readValueFromPointer = Bt, + re.prototype.deleteObject = Nt, + re.prototype.fromWireType = ee, + o.getInheritedInstanceCount = Jt, + o.getLiveInheritedInstances = Xt, + o.flushPendingDeletes = Wt, + o.setDelayFunction = Zt, + ae = o.UnboundTypeError = yt(Error, "UnboundTypeError"), + o.count_emval_handles = ye, + o.get_first_emval = me; + var Se, import_table_impl = { + d: function(t, e, r, n) { + abort("Assertion failed: " + UTF8ToString(t) + ", at: " + [e ? UTF8ToString(e) : "unknown filename", r, n ? UTF8ToString(n) : "unknown function"]) + }, + g: function(t) { + return ke(t + 16) + 16 + }, + f: function(t, e, r) { + throw new ExceptionInfo(t).init(e, r),t,t + }, + p: function(t, e, r, n, o) {}, + y: function(t, e, r, n, o) { + var i = ut(r); + _t(t, { + name: e = ct(e), + fromWireType: function(t) { + return !!t + }, + toWireType: function(t, e) { + return e ? n : o + }, + argPackAdvance: 8, + readValueFromPointer: function(t) { + var n; + if (1 === r) + n = S; + else if (2 === r) + n = k; + else { + if (4 !== r) + throw new TypeError("Unknown boolean type size: " + e); + n = j + } + return this.fromWireType(n[t >> i]) + }, + destructorFunction: null + }) + }, + A: function(t, e, r, n, o, i, a, u, s, c, f, l, p) { + f = ct(f), + i = ie(o, i), + u && (u = ie(a, u)), + c && (c = ie(s, c)), + p = ie(l, p); + var d = dt(f); + xt(d, (function() { + se("Cannot construct " + f + " due to unbound types", [n]) + })), + bt([t, e, r], n ? [n] : [], (function(e) { + var r, o; + e = e[0], + o = n ? (r = e.registeredClass).instancePrototype : Rt.prototype; + var a = ht(d, (function() { + if (Object.getPrototypeOf(this) !== s) + throw new mt("Use 'new' to construct " + f); + if (void 0 === l.constructor_body) + throw new mt(f + " has no accessible constructor"); + var t = l.constructor_body[arguments.length]; + if (void 0 === t) + throw new mt("Tried to invoke ctor of " + f + " with invalid number of parameters (" + arguments.length + ") - expected (" + Object.keys(l.constructor_body).toString() + ") parameters instead!"); + return t.apply(this, arguments) + })), + s = Object.create(o, { + constructor: { + value: a + } + }); + a.prototype = s; + var l = new Ut(f, a, s, p, r, i, u, c), + h = new re(f, l, !0, !1, !1), + y = new re(f + "*", l, !1, !1, !1), + m = new re(f + " const*", l, !1, !0, !1); + return Mt[t] = { + pointerType: y, + constPointerType: m + }, + ne(d, a), + [h, y, m] + })) + }, + w: function(t, e, r, n, o, i) { + T(e > 0); + var a = ce(e, r); + o = ie(n, o), + bt([], [t], (function(t) { + var r = "constructor " + (t = t[0]).name; + if (void 0 === t.registeredClass.constructor_body && (t.registeredClass.constructor_body = []), + void 0 !== t.registeredClass.constructor_body[e - 1]) + throw new mt("Cannot register multiple constructors with identical number of parameters (" + (e - 1) + ") for class '" + t.name + "'! Overload resolution is currently only performed using the parameter count, not actual type info!"); + return t.registeredClass.constructor_body[e - 1] = function() { + se("Cannot construct " + t.name + " due to unbound types", a) + }, + bt([], a, (function(n) { + return n.splice(1, 0, null), + t.registeredClass.constructor_body[e - 1] = le(r, n, null, o, i), + [] + })), + [] + })) + }, + c: function(t, e, r, n, o, i, a, u) { + var s = ce(r, n); + e = ct(e), + i = ie(o, i), + bt([], [t], (function(t) { + var n = (t = t[0]).name + "." + e; + + function o() { + se("Cannot call " + n + " due to unbound types", s) + } + e.startsWith("@@") && (e = Symbol[e.substring(2)]), + u && t.registeredClass.pureVirtualFunctions.push(e); + var c = t.registeredClass.instancePrototype, + f = c[e]; + return void 0 === f || void 0 === f.overloadTable && f.className !== t.name && f.argCount === r - 2 ? (o.argCount = r - 2, + o.className = t.name, + c[e] = o) : (It(c, e, n), + c[e].overloadTable[r - 2] = o), + bt([], s, (function(o) { + var u = le(n, o, t, i, a); + return void 0 === c[e].overloadTable ? (u.argCount = r - 2, + c[e] = u) : c[e].overloadTable[r - 2] = u, + [] + })), + [] + })) + }, + x: function(t, e) { + _t(t, { + name: e = ct(e), + fromWireType: function(t) { + var e = ve.toValue(t); + return he(t), + e + }, + toWireType: function(t, e) { + return ve.toHandle(e) + }, + argPackAdvance: 8, + readValueFromPointer: Bt, + destructorFunction: null + }) + }, + j: function(t, e, r) { + var n = ut(r); + _t(t, { + name: e = ct(e), + fromWireType: function(t) { + return t + }, + toWireType: function(t, e) { + if ("number" != typeof e && "boolean" != typeof e) + throw new TypeError('Cannot convert "' + ge(e) + '" to ' + this.name); + return e + }, + argPackAdvance: 8, + readValueFromPointer: we(e, n), + destructorFunction: null + }) + }, + l: function(t, e, r, n, o, i) { + // Registering functions from constructor (;204;) + var a = ce(e, r); + t = ct(t), + o = ie(n, o), + xt(t, (function() { + se("Cannot call " + t + " due to unbound types", a) + }), e - 1), + bt([], a, (function(r) { + var n = [r[0], null].concat(r.slice(1)); + return ne(t, le(t, n, null, o, i), e - 1), + [] + })) + }, + b: function(t, e, r, n, o) { + e = ct(e), + -1 === o && (o = 4294967295); + var i = ut(r), + a = function(t) { + return t + }; + if (0 === n) { + var u = 32 - 8 * r; + a = function(t) { + return t << u >>> u + } + } + var s = e.includes("unsigned"); + _t(t, { + name: e, + fromWireType: a, + toWireType: function(t, r) { + if ("number" != typeof r && "boolean" != typeof r) + throw new TypeError('Cannot convert "' + ge(r) + '" to ' + this.name); + if (r < n || r > o) + throw new TypeError('Passing a number "' + ge(r) + '" from JS side to C/C++ side to an argument of type "' + e + '", which is outside the valid range [' + n + ", " + o + "]!"); + return s ? r >>> 0 : 0 | r + }, + argPackAdvance: 8, + readValueFromPointer: be(e, i, 0 !== n), + destructorFunction: null + }) + }, + a: function(t, e, r) { + var n = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array][e]; + + function o(t) { + var e = R, + r = e[t >>= 2], + o = e[t + 1]; + return new n(E, o, r) + } + _t(t, { + name: r = ct(r), + fromWireType: o, + argPackAdvance: 8, + readValueFromPointer: o + }, { + ignoreDuplicateRegistrations: !0 + }) + }, + k: function(t, e) { + var r = "std::string" === (e = ct(e)); + _t(t, { + name: e, + fromWireType: function(t) { + var e, n = R[t >> 2]; + if (r) + for (var o = t + 4, i = 0; i <= n; ++i) { + var a = t + 4 + i; + if (i == n || 0 == O[a]) { + var u = UTF8ToString(o, a - o); + void 0 === e ? e = u : (e += String.fromCharCode(0), + e += u), + o = a + 1 + } + } + else { + var s = new Array(n); + for (i = 0; i < n; ++i) + s[i] = String.fromCharCode(O[t + 4 + i]); + e = s.join("") + } + return We(t), + e + }, + toWireType: function(t, e) { + e instanceof ArrayBuffer && (e = new Uint8Array(e)); + var n = "string" == typeof e; + n || e instanceof Uint8Array || e instanceof Uint8ClampedArray || e instanceof Int8Array || vt("Cannot pass non-string to std::string"); + var o = (r && n ? function() { + return UTF8CharCount(e) + } : + function() { + return e.length + } + )(), + i = ke(4 + o + 1); + if (R[i >> 2] = o, + r && n) + stringToUTF8Array(e, O, i + 4, o + 1); + else if (n) + for (var a = 0; a < o; ++a) { + var u = e.charCodeAt(a); + u > 255 && (We(i), + vt("String has UTF-16 code units that do not fit in 8 bits")), + O[i + 4 + a] = u + } + else + for (a = 0; a < o; ++a) + O[i + 4 + a] = e[a]; + return null !== t && t.push(We, i), + i + }, + argPackAdvance: 8, + readValueFromPointer: Bt, + destructorFunction: function(t) { + We(t) + } + }) + }, + e: function(t, e, r) { + var n, o, i, a, u; + r = ct(r), + 2 === e ? (n = UTF16ArrayToString, + o = H, + a = Y, + i = function() { + return W + }, + u = 1) : 4 === e && (n = V, + o = z, + a = B, + i = function() { + return R + }, + u = 2), + _t(t, { + name: r, + fromWireType: function(t) { + for (var r, o = R[t >> 2], a = i(), s = t + 4, c = 0; c <= o; ++c) { + var f = t + 4 + c * e; + if (c == o || 0 == a[f >> u]) { + var l = n(s, f - s); + void 0 === r ? r = l : (r += String.fromCharCode(0), + r += l), + s = f + e + } + } + return We(t), + r + }, + toWireType: function(t, n) { + "string" != typeof n && vt("Cannot pass non-string to C++ string type " + r); + var i = a(n), + s = ke(4 + i + e); + return R[s >> 2] = i >> u, + o(n, s + 4, i + e), + null !== t && t.push(We, s), + s + }, + argPackAdvance: 8, + readValueFromPointer: Bt, + destructorFunction: function(t) { + We(t) + } + }) + }, + z: function(t, e) { + _t(t, { + isVoid: !0, + name: e = ct(e), + argPackAdvance: 0, + fromWireType: function() {}, + toWireType: function(t, e) {} + }) + }, + m: he, + n: function(t) { + t > 4 && (de[t].refcount += 1) + }, + o: function(t, e) { + var r, n, o; + n = "_emval_take_value", + void 0 === (o = lt[r = t]) && vt(n + " has unknown type " + ue(r)); + var i = (t = o).readValueFromPointer(e); + return ve.toHandle(i) + }, + h: function() { + abort("") + }, + r: function(t, e, r) { + O.copyWithin(t, e, e + r) + }, + s: function(t) { + O.length, + abort("OOM") + }, + u: function(t, e) {}, + v: function(t, e) {}, + i: function(t, e, r, n) { + for (var o = 0, i = 0; i < r; i++) { + var a = j[e >> 2], + u = j[e + 4 >> 2]; + e += 8; + for (var s = 0; s < u; s++) + Te.printChar(t, O[a + s]); + o += u + } + return j[n >> 2] = o, + 0 + }, + q: function(t) { + t + }, + t: function(t, e, r, n) { + return Ee(t, e, r, n) + } + }, + ke = (function() { + var import_table = { + a: import_table_impl + }; + + function updateGlobalBufferAndViews(t, e) { + var r, n, exports = t.exports; + o.asm = exports; + b = o.asm.B; // Mem + r = b.buffer + E = r + o.HEAP8 = S = new Int8Array(r), + o.HEAP16 = k = new Int16Array(r), + o.HEAP32 = j = new Int32Array(r), + o.HEAPU8 = O = new Uint8Array(r), + o.HEAPU16 = W = new Uint16Array(r), + o.HEAPU32 = R = new Uint32Array(r), + o.HEAPF32 = M = new Float32Array(r), + o.HEAPF64 = I = new Float64Array(r), + L = o.asm.D // Table + n = o.asm.C // ctor + N.unshift(n), + function(t) { + if (J--, + o.monitorRunDependencies && o.monitorRunDependencies(J), + 0 == J && (null !== X && (clearInterval(X), + X = null), + Z)) { + var e = Z; + Z = null, + e() + } + }() + } + + function load_wasm(t) { + updateGlobalBufferAndViews(t.instance) + } + + function getBinaryPromise(e) { + return function() { + if (!w && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) { + if ("function" == typeof fetch && !isFileURI(Q)) + return fetch(Q, { + credentials: "same-origin" + }).then((function(t) { + if (!t.ok) + throw "failed to load wasm binary file at '" + Q + "'"; + return t.arrayBuffer() + })).catch((function() { + return getBinary(Q) + })); + if (readAsync) + return new Promise((function(t, e) { + readAsync(Q, (function(e) { + t(new Uint8Array(e)) + }), e) + })) + } + return Promise.resolve().then((function() { + return getBinary(Q) + })) + }().then((function(e) { + return WebAssembly.instantiate(e, import_table) + })).then((function(t) { + return t + })).then(e, (function(t) { + g("failed to asynchronously prepare wasm: " + t), + abort(t) + })) + } + if (J++, + o.monitorRunDependencies && o.monitorRunDependencies(J), + o.instantiateWasm) + try { + return o.instantiateWasm(import_table, updateGlobalBufferAndViews) + } catch (t) { + return g("Module.instantiateWasm callback failed with error: " + t), + !1 + } + w || "function" != typeof WebAssembly.instantiate || isDataURI(Q) || isFileURI(Q) || getBinaryPromise(load_wasm) + }(), + o.___wasm_call_ctors = function() { + return (o.___wasm_call_ctors = o.asm.C).apply(null, arguments) + }, + o._malloc = function() { + return (ke = o._malloc = o.asm.E).apply(null, arguments) + } + ), + We = o._free = function() { + return (We = o._free = o.asm.F).apply(null, arguments) + }, + je = o.___getTypeName = function() { + return (je = o.___getTypeName = o.asm.G).apply(null, arguments) + }; + o.___embind_register_native_and_builtin_types = function() { + return (o.___embind_register_native_and_builtin_types = o.asm.H).apply(null, arguments) + }, + o.dynCall_jiji = function() { + return (o.dynCall_jiji = o.asm.I).apply(null, arguments) + }, + o.dynCall_iiiiij = function() { + return (o.dynCall_iiiiij = o.asm.J).apply(null, arguments) + }, + o.dynCall_iiiiijj = function() { + return (o.dynCall_iiiiijj = o.asm.K).apply(null, arguments) + }, + o.dynCall_iiiiiijj = function() { + return (o.dynCall_iiiiiijj = o.asm.L).apply(null, arguments) + }, + o.dynCall_viijii = function() { + return (o.dynCall_viijii = o.asm.M).apply(null, arguments) + }; + + function ExitStatus(t) { + this.name = "ExitStatus", + this.message = "Program terminated with exit(" + t + ")", + this.status = t + } + + function doRun(t) { + function postRun() { + Se || (Se = !0,o.calledRun = !0,C || (!0, + callRuntimeCallbacks(N), + o.onRuntimeInitialized && o.onRuntimeInitialized(), + function() { + if (o.postRun) + for ("function" == typeof o.postRun && (o.postRun = [o.postRun]); o.postRun.length;) + t = o.postRun.shift(), + q.unshift(t); + var t; + callRuntimeCallbacks(q) + }())) + } + t = t || l + J > 0 || (! function preRun() { + if (o.preRun) + for ("function" == typeof o.preRun && (o.preRun = [o.preRun]); o.preRun.length;) + t = o.preRun.shift(), + G.unshift(t); + var t; + callRuntimeCallbacks(G) + }(), + J > 0 || (o.setStatus ? (o.setStatus("Running..."), + setTimeout((function() { + setTimeout((function() { + o.setStatus("") + }), 1), + postRun() + }), 1)) : postRun())) + } + if (Z = function t() { + Se || doRun(), + Se || (Z = t) + }, + o.run = doRun, + o.preInit) + for ("function" == typeof o.preInit && (o.preInit = [o.preInit]); o.preInit.length > 0;) + o.preInit.pop()(); + doRun(); + return o; +}) +let fpRuntime; +export function InstantiateRuntime(){ + return new Promise((resolve, reject) => { + fpRuntime = AudioFingerprintRuntime() + var monitor = setInterval(() => { + // Wait for ctor + if (typeof fpRuntime.ExtractQueryFP == "function") + resolve(fpRuntime) || clearInterval(monitor) + }) + }) +} +export function GenerateFP(PCMBuffer) { + /* Generates audio fingerprint via ShazamV2 algorithm, + as implmented by afp.wasm + + input : (Float32Array) 8kHz Mono PCM audio sample + output: (string) Base64 Encoded AFP + */ + if (typeof fpRuntime.ExtractQueryFP != "function") + return console.error('InstantiateRuntime() Must be called first.') + + let fp_vector = fpRuntime.ExtractQueryFP(PCMBuffer.buffer) + let result_buf = new Uint8Array(fp_vector.size()); + for (let t = 0; t < fp_vector.size(); t++) + result_buf[t] = fp_vector.get(t); + return btoa(String.fromCharCode(...result_buf)) +} diff --git a/public/audio_match_demo/afp.wasm b/public/audio_match_demo/afp.wasm new file mode 100644 index 0000000000000000000000000000000000000000..bb3e2ad68875612017194d27f837234a70d6e7a4 GIT binary patch literal 231182 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

`QhOFY{G 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 z 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

DU9@OGAtv+GH7GG`NizJ>Za|Hl{NNHdyvyZ`=kl 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%0A8E6u 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 E|CzYnjsO4v literal 0 HcmV?d00001 diff --git a/public/audio_match_demo/index.html b/public/audio_match_demo/index.html new file mode 100644 index 0000000..f173c1c --- /dev/null +++ b/public/audio_match_demo/index.html @@ -0,0 +1,184 @@ + + + + + + + +

听歌识曲 Demo (Credit: https://github.com/mos9527/ncm-afp)

+

Usage:

+
  • Select your audio file through "Choose File" picker
  • +
  • Seek to a point where your music should sound the most distinct
  • +
  • Hit the "Clip" button and wait for the results!
  • +

    Sorry if your music somehow sounds 100x awful here, since everything is in telephone quality and that's what they're using :/

    + + + + + +
    + + +
    +
    
    +
    +
    diff --git a/public/audio_match_demo/rec.js b/public/audio_match_demo/rec.js
    new file mode 100644
    index 0000000..9b5b8fe
    --- /dev/null
    +++ b/public/audio_match_demo/rec.js
    @@ -0,0 +1,49 @@
    +/* AudioWorkletProcesser must be initialized as modules (i.e. seperate files)
    + *  Ref : https://developer.mozilla.org/en-US/docs/Web/API/AudioWorkletProcessor
    + */
    +class TimedRecorder extends AudioWorkletProcessor {
    +  constructor(options) {
    +    super()
    +    this.max_length = 0
    +    this.recbuffer = new Float32Array()
    +    this.recording = false
    +    this.buf_index = 0
    +    this.port.onmessage = (event) => {
    +      switch (event.data.message) {
    +        case 'start':
    +          this.max_length = event.data.duration * 8000
    +          this.recbuffer = new Float32Array(this.max_length)
    +          this.buf_index = 0
    +          this.recording = true
    +          this.port.postMessage({ message: '[rec.js] Recording started' })
    +          break
    +      }
    +    }
    +  }
    +  process(inputs) {
    +    // Only take care of channel 0 (Left)
    +    if (this.recording) {
    +      let channelL = inputs[0][0]
    +      this.port.postMessage({
    +        message: 'bufferhealth',
    +        health: this.buf_index / this.max_length,
    +        recording: this.recbuffer,
    +      })
    +      if (this.buf_index + channelL.length > this.max_length) {
    +        this.port.postMessage({ message: '[rec.js] Recording finished' })
    +        this.recording = false
    +        this.buf_index = 0
    +        this.port.postMessage({
    +          message: 'finished',
    +          recording: this.recbuffer,
    +        })
    +      } else {
    +        this.recbuffer.set(channelL, this.buf_index)
    +        this.buf_index += channelL.length
    +      }
    +    }
    +    return true
    +  }
    +}
    +
    +registerProcessor('timed-recorder', TimedRecorder)
    diff --git a/public/index.html b/public/index.html
    index 848e995..e8defa5 100644
    --- a/public/index.html
    +++ b/public/index.html
    @@ -17,7 +17,8 @@
         
  • 1. 搜索
  • 2. 歌曲评论
  • 3. 电台节目
  • -
  • 4. 二维码登录
  • +
  • 4. 二维码登录
  • +
  • 4. 听歌识曲