@easyv/biz-components 0.0.46 → 0.0.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/index.es2.js +2 -2
- package/dist/_virtual/index.es3.js +2 -2
- package/dist/_virtual/index.es4.js +2 -2
- package/dist/index.es.js +4 -0
- package/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/classnames@2.3.2/node_modules/classnames/index.es.js +1 -1
- package/dist/node_modules/.pnpm/co-web-worker@1.0.1/node_modules/co-web-worker/index.es.js +1 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_apply.es.js +17 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_apply.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayEach.es.js +13 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayEach.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayLikeKeys.es.js +1 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayLikeKeys.es.js.map +1 -1
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayMap.es.js +11 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayMap.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assignValue.es.js +14 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assignValue.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssignValue.es.js +17 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssignValue.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseClone.es.js +76 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseClone.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFlatten.es.js +22 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFlatten.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGet.es.js +14 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGet.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsMap.es.js +10 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsMap.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsSet.es.js +10 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsSet.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeysIn.es.js +21 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeysIn.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSetToString.es.js +15 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSetToString.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSlice.es.js +21 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSlice.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseToString.es.js +22 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseToString.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUnset.es.js +13 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUnset.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_castPath.es.js +14 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_castPath.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneArrayBuffer.es.js +10 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneArrayBuffer.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneBuffer.es.js +15 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneBuffer.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneDataView.es.js +9 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneDataView.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneRegExp.es.js +10 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneRegExp.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneSymbol.es.js +9 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneSymbol.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneTypedArray.es.js +9 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneTypedArray.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copyObject.es.js +24 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copyObject.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_customOmitClone.es.js +8 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_customOmitClone.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_defineProperty.es.js +13 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_defineProperty.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_flatRest.es.js +10 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_flatRest.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeysIn.es.js +10 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeysIn.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getPrototype.es.js +6 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getPrototype.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbolsIn.es.js +17 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbolsIn.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneArray.es.js +14 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneArray.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneByTag.es.js +44 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneByTag.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isFlattenable.es.js +11 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isFlattenable.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isKey.es.js +17 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isKey.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_memoizeCapped.es.js +16 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_memoizeCapped.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeysIn.es.js +13 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeysIn.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_overRest.es.js +22 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_overRest.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_parent.es.js +9 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_parent.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setToString.es.js +7 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setToString.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_shortOut.es.js +21 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_shortOut.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stringToPath.es.js +17 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stringToPath.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_toKey.es.js +12 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_toKey.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/constant.es.js +9 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/constant.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/flatten.es.js +9 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/flatten.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/identity.es.js +7 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/identity.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isMap.es.js +9 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isMap.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isPlainObject.es.js +23 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isPlainObject.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSet.es.js +9 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSet.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSymbol.es.js +10 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSymbol.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keysIn.es.js +10 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keysIn.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/last.es.js +8 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/last.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/memoize.es.js +23 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/memoize.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/omit.es.js +34 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/omit.es.js.map +1 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toString.es.js +8 -0
- package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toString.es.js.map +1 -0
- package/dist/node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.es.js +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/voskBrowserManager/AudioManager/AudioManager.d.ts +31 -0
- package/dist/utils/voskBrowserManager/AudioManager/AudioManager.es.js +89 -0
- package/dist/utils/voskBrowserManager/AudioManager/AudioManager.es.js.map +1 -0
- package/dist/utils/voskBrowserManager/AudioManager/test/audioManager.cy.d.ts +1 -0
- package/dist/utils/voskBrowserManager/AudioManager/types.d.ts +2 -0
- package/dist/utils/voskBrowserManager/AudioManager/workletProcessor.es.js +5 -0
- package/dist/utils/voskBrowserManager/AudioManager/workletProcessor.es.js.map +1 -0
- package/dist/utils/voskBrowserManager/index.d.ts +2 -0
- package/dist/utils/voskBrowserManager/test/voskBrowserManager.cy.d.ts +1 -0
- package/dist/utils/voskBrowserManager/voskBrowserManager.d.ts +24 -0
- package/dist/utils/voskBrowserManager/voskBrowserManager.es.js +60 -0
- package/dist/utils/voskBrowserManager/voskBrowserManager.es.js.map +1 -0
- package/dist/utils/xunFeiVoice/RecorderManager/RecorderManager.es.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"last.es.js","sources":["../../../../../../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/last.js"],"sourcesContent":["/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n"],"names":[],"mappings":"AAcA,SAAS,KAAK,OAAO;AACnB,MAAI,SAAS,SAAS,OAAO,IAAI,MAAM;AACvC,SAAO,SAAS,MAAM,SAAS,CAAC,IAAI;AACtC;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import MapCache from "./_MapCache.es.js";
|
|
2
|
+
var FUNC_ERROR_TEXT = "Expected a function";
|
|
3
|
+
function memoize(func, resolver) {
|
|
4
|
+
if (typeof func != "function" || resolver != null && typeof resolver != "function") {
|
|
5
|
+
throw new TypeError(FUNC_ERROR_TEXT);
|
|
6
|
+
}
|
|
7
|
+
var memoized = function() {
|
|
8
|
+
var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache;
|
|
9
|
+
if (cache.has(key)) {
|
|
10
|
+
return cache.get(key);
|
|
11
|
+
}
|
|
12
|
+
var result = func.apply(this, args);
|
|
13
|
+
memoized.cache = cache.set(key, result) || cache;
|
|
14
|
+
return result;
|
|
15
|
+
};
|
|
16
|
+
memoized.cache = new (memoize.Cache || MapCache)();
|
|
17
|
+
return memoized;
|
|
18
|
+
}
|
|
19
|
+
memoize.Cache = MapCache;
|
|
20
|
+
export {
|
|
21
|
+
memoize as default
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=memoize.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memoize.es.js","sources":["../../../../../../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/memoize.js"],"sourcesContent":["import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n"],"names":[],"mappings":";AAGA,IAAI,kBAAkB;AA8CtB,SAAS,QAAQ,MAAM,UAAU;AAC/B,MAAI,OAAO,QAAQ,cAAe,YAAY,QAAQ,OAAO,YAAY,YAAa;AACpF,UAAM,IAAI,UAAU,eAAe;AAAA,EACvC;AACE,MAAI,WAAW,WAAW;AACxB,QAAI,OAAO,WACP,MAAM,WAAW,SAAS,MAAM,MAAM,IAAI,IAAI,KAAK,CAAC,GACpD,QAAQ,SAAS;AAErB,QAAI,MAAM,IAAI,GAAG,GAAG;AAClB,aAAO,MAAM,IAAI,GAAG;AAAA,IAC1B;AACI,QAAI,SAAS,KAAK,MAAM,MAAM,IAAI;AAClC,aAAS,QAAQ,MAAM,IAAI,KAAK,MAAM,KAAK;AAC3C,WAAO;AAAA,EACR;AACD,WAAS,QAAQ,KAAK,QAAQ,SAAS;AACvC,SAAO;AACT;AAGA,QAAQ,QAAQ;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import arrayMap from "./_arrayMap.es.js";
|
|
2
|
+
import baseClone from "./_baseClone.es.js";
|
|
3
|
+
import baseUnset from "./_baseUnset.es.js";
|
|
4
|
+
import castPath from "./_castPath.es.js";
|
|
5
|
+
import copyObject from "./_copyObject.es.js";
|
|
6
|
+
import customOmitClone from "./_customOmitClone.es.js";
|
|
7
|
+
import flatRest from "./_flatRest.es.js";
|
|
8
|
+
import getAllKeysIn from "./_getAllKeysIn.es.js";
|
|
9
|
+
var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG = 4;
|
|
10
|
+
var omit = flatRest(function(object, paths) {
|
|
11
|
+
var result = {};
|
|
12
|
+
if (object == null) {
|
|
13
|
+
return result;
|
|
14
|
+
}
|
|
15
|
+
var isDeep = false;
|
|
16
|
+
paths = arrayMap(paths, function(path) {
|
|
17
|
+
path = castPath(path, object);
|
|
18
|
+
isDeep || (isDeep = path.length > 1);
|
|
19
|
+
return path;
|
|
20
|
+
});
|
|
21
|
+
copyObject(object, getAllKeysIn(object), result);
|
|
22
|
+
if (isDeep) {
|
|
23
|
+
result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
|
|
24
|
+
}
|
|
25
|
+
var length = paths.length;
|
|
26
|
+
while (length--) {
|
|
27
|
+
baseUnset(result, paths[length]);
|
|
28
|
+
}
|
|
29
|
+
return result;
|
|
30
|
+
});
|
|
31
|
+
export {
|
|
32
|
+
omit as default
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=omit.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omit.es.js","sources":["../../../../../../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/omit.js"],"sourcesContent":["import arrayMap from './_arrayMap.js';\nimport baseClone from './_baseClone.js';\nimport baseUnset from './_baseUnset.js';\nimport castPath from './_castPath.js';\nimport copyObject from './_copyObject.js';\nimport customOmitClone from './_customOmitClone.js';\nimport flatRest from './_flatRest.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n});\n\nexport default omit;\n"],"names":[],"mappings":";;;;;;;;AAUA,IAAI,kBAAkB,GAClB,kBAAkB,GAClB,qBAAqB;AAsBtB,IAAC,OAAO,SAAS,SAAS,QAAQ,OAAO;AAC1C,MAAI,SAAS,CAAE;AACf,MAAI,UAAU,MAAM;AAClB,WAAO;AAAA,EACX;AACE,MAAI,SAAS;AACb,UAAQ,SAAS,OAAO,SAAS,MAAM;AACrC,WAAO,SAAS,MAAM,MAAM;AAC5B,eAAW,SAAS,KAAK,SAAS;AAClC,WAAO;AAAA,EACX,CAAG;AACD,aAAW,QAAQ,aAAa,MAAM,GAAG,MAAM;AAC/C,MAAI,QAAQ;AACV,aAAS,UAAU,QAAQ,kBAAkB,kBAAkB,oBAAoB,eAAe;AAAA,EACtG;AACE,MAAI,SAAS,MAAM;AACnB,SAAO,UAAU;AACf,cAAU,QAAQ,MAAM,MAAM,CAAC;AAAA,EACnC;AACE,SAAO;AACT,CAAC;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toString.es.js","sources":["../../../../../../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toString.js"],"sourcesContent":["import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n"],"names":[],"mappings":";AAuBA,SAAS,SAAS,OAAO;AACvB,SAAO,SAAS,OAAO,KAAK,aAAa,KAAK;AAChD;","x_google_ignoreList":[0]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getDefaultExportFromCjs } from "../../../../../_virtual/_commonjsHelpers.es.js";
|
|
2
|
-
import { __module as propTypes } from "../../../../../_virtual/index.
|
|
2
|
+
import { __module as propTypes } from "../../../../../_virtual/index.es3.js";
|
|
3
3
|
import { __require as requireReactIs } from "../../../react-is@16.13.1/node_modules/react-is/index.es.js";
|
|
4
4
|
import { __require as requireFactoryWithTypeCheckers } from "./factoryWithTypeCheckers.es.js";
|
|
5
5
|
import { __require as requireFactoryWithThrowingShims } from "./factoryWithThrowingShims.es.js";
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { SampleRate } from './types';
|
|
2
|
+
|
|
3
|
+
export interface AudiManagerConfig {
|
|
4
|
+
/** 一个转换成 string js 文件。其内容要符合 AudioWorkletProcessor 的要求。
|
|
5
|
+
* - 需使用 registerProcessor 注册,第一个参数为 “audio-worklet-processor”,如: registerProcessor('audio-worklet-processor', audioToFloat32Processor);
|
|
6
|
+
* - 参考:https://developer.mozilla.org/en-US/docs/Web/API/AudioWorkletProcessor
|
|
7
|
+
*/
|
|
8
|
+
workletProcessor?: string;
|
|
9
|
+
/** 采样率(每秒采样数)的浮点数,常用值:16000, 32000, 44100, 48000 */
|
|
10
|
+
sampleRate?: SampleRate;
|
|
11
|
+
onFrameRecorded?: (data: Float32Array) => void;
|
|
12
|
+
onStart?: () => void;
|
|
13
|
+
onStop?: () => void;
|
|
14
|
+
frameSize?: number;
|
|
15
|
+
}
|
|
16
|
+
/** 对实时音频录制进行管理。 */
|
|
17
|
+
export declare class AudioManager {
|
|
18
|
+
workletUrl?: string;
|
|
19
|
+
onFrameRecorded?: (data: Float32Array) => void;
|
|
20
|
+
sampleRate?: SampleRate;
|
|
21
|
+
status: 'init' | 'starting' | 'running' | 'closed';
|
|
22
|
+
audioContext?: AudioContext;
|
|
23
|
+
mediaSource?: MediaStreamAudioSourceNode;
|
|
24
|
+
mediaStream?: MediaStream;
|
|
25
|
+
config: AudiManagerConfig;
|
|
26
|
+
constructor(config: AudiManagerConfig);
|
|
27
|
+
start(): Promise<void>;
|
|
28
|
+
stop(): Promise<void>;
|
|
29
|
+
close(): Promise<void> | undefined;
|
|
30
|
+
destroy(): void;
|
|
31
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
+
import { requestMicrophonePermission } from "../../xunFeiVoice/utils.es.js";
|
|
5
|
+
import defaultWorkletProcessorStr from "./workletProcessor.es.js";
|
|
6
|
+
const generateWorkletUrl = (jsStr) => {
|
|
7
|
+
const blob = new Blob([jsStr], { type: "application/javascript" });
|
|
8
|
+
const scriptUrl = URL.createObjectURL(blob);
|
|
9
|
+
return scriptUrl;
|
|
10
|
+
};
|
|
11
|
+
class AudioManager {
|
|
12
|
+
constructor(config) {
|
|
13
|
+
__publicField(this, "workletUrl");
|
|
14
|
+
__publicField(this, "onFrameRecorded");
|
|
15
|
+
__publicField(this, "sampleRate", 48e3);
|
|
16
|
+
__publicField(this, "status", "init");
|
|
17
|
+
__publicField(this, "audioContext");
|
|
18
|
+
__publicField(this, "mediaSource");
|
|
19
|
+
__publicField(this, "mediaStream");
|
|
20
|
+
__publicField(this, "config", {});
|
|
21
|
+
console.log("audio manager constructor: ====", config);
|
|
22
|
+
const processorStr = config.workletProcessor || defaultWorkletProcessorStr;
|
|
23
|
+
this.workletUrl = generateWorkletUrl(processorStr);
|
|
24
|
+
this.onFrameRecorded = config.onFrameRecorded;
|
|
25
|
+
this.sampleRate = config.sampleRate;
|
|
26
|
+
this.config = config;
|
|
27
|
+
}
|
|
28
|
+
async start() {
|
|
29
|
+
var _a, _b;
|
|
30
|
+
try {
|
|
31
|
+
if (this.status === "starting") {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
this.status = "starting";
|
|
35
|
+
const audioContext = new window.AudioContext({
|
|
36
|
+
sampleRate: this.sampleRate
|
|
37
|
+
});
|
|
38
|
+
if (!this.workletUrl) {
|
|
39
|
+
throw Error("加载 workletProcessor 失败!");
|
|
40
|
+
}
|
|
41
|
+
await audioContext.audioWorklet.addModule(this.workletUrl);
|
|
42
|
+
const audioWorkletNode = new AudioWorkletNode(audioContext, "audio-worklet-processor");
|
|
43
|
+
const mediaStream = await requestMicrophonePermission();
|
|
44
|
+
const mediaSource = audioContext.createMediaStreamSource(mediaStream);
|
|
45
|
+
audioWorkletNode.port.postMessage({
|
|
46
|
+
type: "init",
|
|
47
|
+
frameSize: this.config.frameSize
|
|
48
|
+
});
|
|
49
|
+
audioWorkletNode.port.onmessage = (e) => {
|
|
50
|
+
var _a2;
|
|
51
|
+
(_a2 = this.onFrameRecorded) == null ? void 0 : _a2.call(this, e.data);
|
|
52
|
+
};
|
|
53
|
+
mediaSource.connect(audioWorkletNode);
|
|
54
|
+
this.audioContext = audioContext;
|
|
55
|
+
this.mediaSource = mediaSource;
|
|
56
|
+
this.mediaStream = mediaStream;
|
|
57
|
+
this.status = "running";
|
|
58
|
+
(_b = (_a = this.config).onStart) == null ? void 0 : _b.call(_a);
|
|
59
|
+
} catch (error) {
|
|
60
|
+
console.error("Failed to start recording:", error);
|
|
61
|
+
throw error;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async stop() {
|
|
65
|
+
var _a, _b, _c;
|
|
66
|
+
this.status = "closed";
|
|
67
|
+
if (((_a = this.audioContext) == null ? void 0 : _a.state) === "running") {
|
|
68
|
+
await this.audioContext.suspend();
|
|
69
|
+
}
|
|
70
|
+
(_c = (_b = this.config).onStop) == null ? void 0 : _c.call(_b);
|
|
71
|
+
}
|
|
72
|
+
close() {
|
|
73
|
+
var _a, _b, _c;
|
|
74
|
+
(_a = this.mediaSource) == null ? void 0 : _a.disconnect();
|
|
75
|
+
this.status = "closed";
|
|
76
|
+
if (((_b = this.audioContext) == null ? void 0 : _b.state) !== "closed") {
|
|
77
|
+
return (_c = this.audioContext) == null ? void 0 : _c.close();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
destroy() {
|
|
81
|
+
var _a, _b;
|
|
82
|
+
this.close();
|
|
83
|
+
(_b = (_a = this.mediaStream) == null ? void 0 : _a.getTracks()) == null ? void 0 : _b.forEach((track) => track.stop());
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export {
|
|
87
|
+
AudioManager
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=AudioManager.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioManager.es.js","sources":["../../../../src/utils/voskBrowserManager/AudioManager/AudioManager.ts"],"sourcesContent":["import { requestMicrophonePermission } from '../../xunFeiVoice/utils';\nimport { SampleRate } from './types';\nimport defaultWorkletProcessorStr from './workletProcessor.js?raw';\n\nexport interface AudiManagerConfig {\n /** 一个转换成 string js 文件。其内容要符合 AudioWorkletProcessor 的要求。\n * - 需使用 registerProcessor 注册,第一个参数为 “audio-worklet-processor”,如: registerProcessor('audio-worklet-processor', audioToFloat32Processor);\n * - 参考:https://developer.mozilla.org/en-US/docs/Web/API/AudioWorkletProcessor\n */\n workletProcessor?: string;\n /** 采样率(每秒采样数)的浮点数,常用值:16000, 32000, 44100, 48000 */\n sampleRate?: SampleRate;\n onFrameRecorded?: (data: Float32Array) => void;\n onStart?: () => void;\n onStop?: () => void;\n frameSize?: number;\n}\n\nconst generateWorkletUrl = (jsStr: string) => {\n const blob = new Blob([jsStr], { type: 'application/javascript' });\n const scriptUrl = URL.createObjectURL(blob);\n return scriptUrl;\n};\n\n/** 对实时音频录制进行管理。 */\nexport class AudioManager {\n workletUrl?: string;\n onFrameRecorded?: (data: Float32Array) => void;\n sampleRate?: SampleRate = 48000;\n status: 'init' | 'starting' | 'running' | 'closed' = 'init';\n audioContext?: AudioContext;\n mediaSource?: MediaStreamAudioSourceNode;\n mediaStream?: MediaStream;\n config: AudiManagerConfig = {};\n\n constructor(config: AudiManagerConfig) {\n console.log('audio manager constructor: ====', config);\n const processorStr = config.workletProcessor || defaultWorkletProcessorStr;\n this.workletUrl = generateWorkletUrl(processorStr);\n this.onFrameRecorded = config.onFrameRecorded;\n this.sampleRate = config.sampleRate;\n this.config = config;\n }\n\n async start() {\n try {\n if (this.status === 'starting') {\n return;\n }\n this.status = 'starting';\n // 1. 创建 AudioContext\n const audioContext = new window.AudioContext({\n sampleRate: this.sampleRate,\n });\n if (!this.workletUrl) {\n throw Error('加载 workletProcessor 失败!');\n }\n // 加载给定 JavaScript 文件中的模块,并将其添加到当前 Worklet 中\n await audioContext.audioWorklet.addModule(this.workletUrl);\n const audioWorkletNode = new AudioWorkletNode(audioContext, 'audio-worklet-processor');\n // 获取音频流并创建处理节点\n const mediaStream = await requestMicrophonePermission();\n const mediaSource = audioContext.createMediaStreamSource(mediaStream);\n // 发送配置给 workletProcessor\n audioWorkletNode.port.postMessage({\n type: 'init',\n frameSize: this.config.frameSize,\n });\n // 监听消息\n audioWorkletNode.port.onmessage = (e) => {\n this.onFrameRecorded?.(e.data);\n };\n // 连接音频节点\n mediaSource.connect(audioWorkletNode);\n // 赋值到 this 上\n this.audioContext = audioContext;\n this.mediaSource = mediaSource;\n this.mediaStream = mediaStream;\n this.status = 'running';\n this.config.onStart?.();\n } catch (error) {\n console.error('Failed to start recording:', error);\n throw error;\n }\n }\n\n async stop() {\n this.status = 'closed';\n /** 暂停音频上下文对象中的进度,并暂时剥离进程对音频设备硬件的访问权限,减少 CPU 和电池的使用 */\n if (this.audioContext?.state === 'running') {\n await this.audioContext.suspend();\n }\n this.config.onStop?.();\n }\n\n close() {\n this.mediaSource?.disconnect();\n this.status = 'closed';\n if (this.audioContext?.state !== 'closed') {\n return this.audioContext?.close();\n }\n }\n\n destroy() {\n this.close();\n this.mediaStream?.getTracks()?.forEach((track) => track.stop());\n }\n}\n"],"names":["_a"],"mappings":";;;;;AAkBA,MAAM,qBAAqB,CAAC,UAAkB;AACtC,QAAA,OAAO,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,MAAM,0BAA0B;AAC3D,QAAA,YAAY,IAAI,gBAAgB,IAAI;AACnC,SAAA;AACT;AAGO,MAAM,aAAa;AAAA,EAUxB,YAAY,QAA2B;AATvC;AACA;AACA,sCAA0B;AAC1B,kCAAqD;AACrD;AACA;AACA;AACA,kCAA4B,CAAC;AAGnB,YAAA,IAAI,mCAAmC,MAAM;AAC/C,UAAA,eAAe,OAAO,oBAAoB;AAC3C,SAAA,aAAa,mBAAmB,YAAY;AACjD,SAAK,kBAAkB,OAAO;AAC9B,SAAK,aAAa,OAAO;AACzB,SAAK,SAAS;AAAA,EAAA;AAAA,EAGhB,MAAM,QAAQ;;AACR,QAAA;AACE,UAAA,KAAK,WAAW,YAAY;AAC9B;AAAA,MAAA;AAEF,WAAK,SAAS;AAER,YAAA,eAAe,IAAI,OAAO,aAAa;AAAA,QAC3C,YAAY,KAAK;AAAA,MAAA,CAClB;AACG,UAAA,CAAC,KAAK,YAAY;AACpB,cAAM,MAAM,yBAAyB;AAAA,MAAA;AAGvC,YAAM,aAAa,aAAa,UAAU,KAAK,UAAU;AACzD,YAAM,mBAAmB,IAAI,iBAAiB,cAAc,yBAAyB;AAE/E,YAAA,cAAc,MAAM,4BAA4B;AAChD,YAAA,cAAc,aAAa,wBAAwB,WAAW;AAEpE,uBAAiB,KAAK,YAAY;AAAA,QAChC,MAAM;AAAA,QACN,WAAW,KAAK,OAAO;AAAA,MAAA,CACxB;AAEgB,uBAAA,KAAK,YAAY,CAAC,MAAM;;AAClC,SAAAA,MAAA,KAAA,oBAAA,gBAAAA,IAAA,WAAkB,EAAE;AAAA,MAC3B;AAEA,kBAAY,QAAQ,gBAAgB;AAEpC,WAAK,eAAe;AACpB,WAAK,cAAc;AACnB,WAAK,cAAc;AACnB,WAAK,SAAS;AACd,uBAAK,QAAO,YAAZ;AAAA,aACO,OAAO;AACN,cAAA,MAAM,8BAA8B,KAAK;AAC3C,YAAA;AAAA,IAAA;AAAA,EACR;AAAA,EAGF,MAAM,OAAO;;AACX,SAAK,SAAS;AAEV,UAAA,UAAK,iBAAL,mBAAmB,WAAU,WAAW;AACpC,YAAA,KAAK,aAAa,QAAQ;AAAA,IAAA;AAElC,qBAAK,QAAO,WAAZ;AAAA,EAAqB;AAAA,EAGvB,QAAQ;;AACN,eAAK,gBAAL,mBAAkB;AAClB,SAAK,SAAS;AACV,UAAA,UAAK,iBAAL,mBAAmB,WAAU,UAAU;AAClC,cAAA,UAAK,iBAAL,mBAAmB;AAAA,IAAM;AAAA,EAClC;AAAA,EAGF,UAAU;;AACR,SAAK,MAAM;AACN,qBAAA,gBAAA,mBAAa,gBAAb,mBAA0B,QAAQ,CAAC,UAAU,MAAM;EAAM;AAElE;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
const defaultWorkletProcessorStr = "/** 录音数据处理器,把 录音数据转换成 Float32 的数据 */\nclass audioToFloat32Processor extends AudioWorkletProcessor {\n /** 每一帧的数据大小 */\n frameSize = 4096;\n float32Data = new Float32Array(this.frameSize);\n _pos = 0;\n\n constructor() {\n super();\n this.port.onMessage = (e) => {\n console.log('%c 🐱 cat ==== set worklet', 'color: orange; font-size: 16px;');\n if (e?.type === 'init' && typeof e?.frameSize === 'number') {\n this.frameSize = e.frameSize;\n this.float32Data = new Float32Array(this.frameSize);\n this._pos = 0;\n }\n };\n }\n\n process(inputs, outputs, parameters) {\n // 获取第一个输入通道的音频数据\n const input = inputs[0][0];\n if (input && input.length > 0) {\n for (let i = 0; i < input.length; i++) {\n this.float32Data[this._pos++] = input[i];\n if (this._pos === this.frameSize) {\n this.port.postMessage(this.float32Data);\n this._pos = 0;\n }\n }\n }\n return true;\n }\n}\n\nregisterProcessor('audio-worklet-processor', audioToFloat32Processor);\n";
|
|
2
|
+
export {
|
|
3
|
+
defaultWorkletProcessorStr as default
|
|
4
|
+
};
|
|
5
|
+
//# sourceMappingURL=workletProcessor.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workletProcessor.es.js","sources":["../../../../src/utils/voskBrowserManager/AudioManager/workletProcessor.js?raw"],"sourcesContent":["export default \"/** 录音数据处理器,把 录音数据转换成 Float32 的数据 */\\nclass audioToFloat32Processor extends AudioWorkletProcessor {\\n /** 每一帧的数据大小 */\\n frameSize = 4096;\\n float32Data = new Float32Array(this.frameSize);\\n _pos = 0;\\n\\n constructor() {\\n super();\\n this.port.onMessage = (e) => {\\n console.log('%c 🐱 cat ==== set worklet', 'color: orange; font-size: 16px;');\\n if (e?.type === 'init' && typeof e?.frameSize === 'number') {\\n this.frameSize = e.frameSize;\\n this.float32Data = new Float32Array(this.frameSize);\\n this._pos = 0;\\n }\\n };\\n }\\n\\n process(inputs, outputs, parameters) {\\n // 获取第一个输入通道的音频数据\\n const input = inputs[0][0];\\n if (input && input.length > 0) {\\n for (let i = 0; i < input.length; i++) {\\n this.float32Data[this._pos++] = input[i];\\n if (this._pos === this.frameSize) {\\n this.port.postMessage(this.float32Data);\\n this._pos = 0;\\n }\\n }\\n }\\n return true;\\n }\\n}\\n\\nregisterProcessor('audio-worklet-processor', audioToFloat32Processor);\\n\""],"names":[],"mappings":"AAAA,MAAe,6BAAA;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { AudiManagerConfig, AudioManager } from './AudioManager/AudioManager';
|
|
2
|
+
import { SampleRate } from './AudioManager/types';
|
|
3
|
+
import type * as Vosk from 'vosk-browser';
|
|
4
|
+
interface VoskBrowserManagerConfig extends AudiManagerConfig {
|
|
5
|
+
vosk: typeof Vosk;
|
|
6
|
+
modelUrl: string;
|
|
7
|
+
/** 加载模型等初始化配置完成后,自动开始监听 */
|
|
8
|
+
autoStart?: boolean;
|
|
9
|
+
onInitialized?: () => void;
|
|
10
|
+
onResult?: (text: string) => void;
|
|
11
|
+
onPartialResult?: (text: string) => void;
|
|
12
|
+
}
|
|
13
|
+
export declare class VoskBrowserManager {
|
|
14
|
+
config: VoskBrowserManagerConfig;
|
|
15
|
+
/** 采样率(每秒采样数)的浮点数,常用值:16000, 32000, 44100, 48000 */
|
|
16
|
+
sampleRate: SampleRate;
|
|
17
|
+
audioManager?: AudioManager;
|
|
18
|
+
autoStart: boolean;
|
|
19
|
+
constructor(config: VoskBrowserManagerConfig);
|
|
20
|
+
init(vosk: typeof Vosk): Promise<void>;
|
|
21
|
+
start(): void;
|
|
22
|
+
stop(): void;
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
+
import { AudioManager } from "./AudioManager/AudioManager.es.js";
|
|
5
|
+
import omit from "../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/omit.es.js";
|
|
6
|
+
const defaultSampleRate = 16e3;
|
|
7
|
+
class VoskBrowserManager {
|
|
8
|
+
constructor(config) {
|
|
9
|
+
__publicField(this, "config");
|
|
10
|
+
/** 采样率(每秒采样数)的浮点数,常用值:16000, 32000, 44100, 48000 */
|
|
11
|
+
__publicField(this, "sampleRate", defaultSampleRate);
|
|
12
|
+
__publicField(this, "audioManager");
|
|
13
|
+
__publicField(this, "autoStart", true);
|
|
14
|
+
this.config = config;
|
|
15
|
+
this.sampleRate = config.sampleRate || defaultSampleRate;
|
|
16
|
+
this.autoStart = config.autoStart || true;
|
|
17
|
+
this.init(config.vosk);
|
|
18
|
+
}
|
|
19
|
+
async init(vosk) {
|
|
20
|
+
var _a, _b;
|
|
21
|
+
console.time("load model:");
|
|
22
|
+
const model = await vosk.createModel(this.config.modelUrl);
|
|
23
|
+
console.timeEnd("load model:");
|
|
24
|
+
const recognizer = new model.KaldiRecognizer(this.sampleRate);
|
|
25
|
+
recognizer.on("result", (message) => {
|
|
26
|
+
var _a2, _b2;
|
|
27
|
+
const resultText = message.result.text;
|
|
28
|
+
(_b2 = (_a2 = this.config).onResult) == null ? void 0 : _b2.call(_a2, resultText);
|
|
29
|
+
});
|
|
30
|
+
recognizer.on("partialresult", (message) => {
|
|
31
|
+
var _a2, _b2;
|
|
32
|
+
const partialText = message.result.partial;
|
|
33
|
+
(_b2 = (_a2 = this.config).onPartialResult) == null ? void 0 : _b2.call(_a2, partialText);
|
|
34
|
+
});
|
|
35
|
+
this.audioManager = new AudioManager({
|
|
36
|
+
...omit(this.config, ["vosk", "modelUrl", "onResult", "onPartialResult", "onInitialized"]),
|
|
37
|
+
onFrameRecorded: (data) => {
|
|
38
|
+
var _a2, _b2;
|
|
39
|
+
recognizer.acceptWaveformFloat(data, this.sampleRate);
|
|
40
|
+
(_b2 = (_a2 = this.config).onFrameRecorded) == null ? void 0 : _b2.call(_a2, data);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
(_b = (_a = this.config).onInitialized) == null ? void 0 : _b.call(_a);
|
|
44
|
+
if (this.autoStart) {
|
|
45
|
+
this.start();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
start() {
|
|
49
|
+
var _a;
|
|
50
|
+
(_a = this.audioManager) == null ? void 0 : _a.start();
|
|
51
|
+
}
|
|
52
|
+
stop() {
|
|
53
|
+
var _a;
|
|
54
|
+
(_a = this.audioManager) == null ? void 0 : _a.stop();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export {
|
|
58
|
+
VoskBrowserManager
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=voskBrowserManager.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voskBrowserManager.es.js","sources":["../../../src/utils/voskBrowserManager/voskBrowserManager.ts"],"sourcesContent":["import { omit } from 'lodash-es';\nimport type * as Vosk from 'vosk-browser';\nimport { AudiManagerConfig, AudioManager } from './AudioManager/AudioManager';\nimport { SampleRate } from './AudioManager/types';\n\ninterface VoskBrowserManagerConfig extends AudiManagerConfig {\n vosk: typeof Vosk;\n modelUrl: string;\n /** 加载模型等初始化配置完成后,自动开始监听 */\n autoStart?: boolean;\n onInitialized?: () => void;\n onResult?: (text: string) => void;\n onPartialResult?: (text: string) => void;\n}\n\nconst defaultSampleRate = 16000;\n\nexport class VoskBrowserManager {\n config: VoskBrowserManagerConfig;\n /** 采样率(每秒采样数)的浮点数,常用值:16000, 32000, 44100, 48000 */\n sampleRate: SampleRate = defaultSampleRate;\n audioManager?: AudioManager;\n autoStart = true;\n\n constructor(config: VoskBrowserManagerConfig) {\n this.config = config;\n this.sampleRate = config.sampleRate || defaultSampleRate;\n this.autoStart = config.autoStart || true;\n this.init(config.vosk);\n }\n\n async init(vosk: typeof Vosk) {\n console.time('load model:');\n const model = await vosk.createModel(this.config.modelUrl);\n console.timeEnd('load model:');\n\n const recognizer = new model.KaldiRecognizer(this.sampleRate);\n recognizer.on('result', (message) => {\n const resultText = (message as any).result.text;\n this.config.onResult?.(resultText);\n });\n recognizer.on('partialresult', (message) => {\n const partialText = (message as any).result.partial;\n this.config.onPartialResult?.(partialText);\n });\n\n this.audioManager = new AudioManager({\n ...omit(this.config, ['vosk', 'modelUrl', 'onResult', 'onPartialResult', 'onInitialized']),\n onFrameRecorded: (data) => {\n recognizer.acceptWaveformFloat(data, this.sampleRate);\n this.config.onFrameRecorded?.(data);\n },\n });\n this.config.onInitialized?.();\n if (this.autoStart) {\n this.start();\n }\n }\n\n start() {\n this.audioManager?.start();\n }\n\n stop() {\n this.audioManager?.stop();\n }\n}\n"],"names":["_b","_a"],"mappings":";;;;;AAeA,MAAM,oBAAoB;AAEnB,MAAM,mBAAmB;AAAA,EAO9B,YAAY,QAAkC;AAN9C;AAEA;AAAA,sCAAyB;AACzB;AACA,qCAAY;AAGV,SAAK,SAAS;AACT,SAAA,aAAa,OAAO,cAAc;AAClC,SAAA,YAAY,OAAO,aAAa;AAChC,SAAA,KAAK,OAAO,IAAI;AAAA,EAAA;AAAA,EAGvB,MAAM,KAAK,MAAmB;;AAC5B,YAAQ,KAAK,aAAa;AAC1B,UAAM,QAAQ,MAAM,KAAK,YAAY,KAAK,OAAO,QAAQ;AACzD,YAAQ,QAAQ,aAAa;AAE7B,UAAM,aAAa,IAAI,MAAM,gBAAgB,KAAK,UAAU;AACjD,eAAA,GAAG,UAAU,CAAC,YAAY;;AAC7B,YAAA,aAAc,QAAgB,OAAO;AACtC,OAAAA,OAAAC,MAAA,KAAA,QAAO,aAAP,gBAAAD,IAAA,KAAAC,KAAkB;AAAA,IAAU,CAClC;AACU,eAAA,GAAG,iBAAiB,CAAC,YAAY;;AACpC,YAAA,cAAe,QAAgB,OAAO;AACvC,OAAAD,OAAAC,MAAA,KAAA,QAAO,oBAAP,gBAAAD,IAAA,KAAAC,KAAyB;AAAA,IAAW,CAC1C;AAEI,SAAA,eAAe,IAAI,aAAa;AAAA,MACnC,GAAG,KAAK,KAAK,QAAQ,CAAC,QAAQ,YAAY,YAAY,mBAAmB,eAAe,CAAC;AAAA,MACzF,iBAAiB,CAAC,SAAS;;AACd,mBAAA,oBAAoB,MAAM,KAAK,UAAU;AAC/C,SAAAD,OAAAC,MAAA,KAAA,QAAO,oBAAP,gBAAAD,IAAA,KAAAC,KAAyB;AAAA,MAAI;AAAA,IACpC,CACD;AACD,qBAAK,QAAO,kBAAZ;AACA,QAAI,KAAK,WAAW;AAClB,WAAK,MAAM;AAAA,IAAA;AAAA,EACb;AAAA,EAGF,QAAQ;;AACN,eAAK,iBAAL,mBAAmB;AAAA,EAAM;AAAA,EAG3B,OAAO;;AACL,eAAK,iBAAL,mBAAmB;AAAA,EAAK;AAE5B;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecorderManager.es.js","sources":["../../../../src/utils/xunFeiVoice/RecorderManager/RecorderManager.js"],"sourcesContent":["/**\n * 录音管理器 - 用于处理音频录制及处理\n */\nimport CrossOriginWorker from 'co-web-worker';\nimport { requestMicrophonePermission } from '../utils';\nimport workerJsString from './processorSource/processor.worker.js?raw';\nimport workletJsString from './processorSource/processor.worklet.js?raw';\n\nconst { AudioWorkletNode } = window;\nconst isAudioWorkletSupported = !!AudioWorkletNode;\n\n/** @type {(type: 'worker' | 'worklet') => string} */\nconst generateWorkletUrl = (type) => {\n const jsStr = type === 'worker' ? workerJsString : workletJsString;\n const blob = new Blob([jsStr], { type: 'application/javascript' });\n const scriptUrl = URL.createObjectURL(blob);\n return scriptUrl;\n};\n\n/**\n * 初始化音频处理器\n * @param {AudioContext} audioContext\n * @returns {Promise<AudioWorkletNode|{port: Worker}>}\n */\nasync function initializeAudioProcessor(audioContext) {\n if (isAudioWorkletSupported) {\n if (audioContext.state !== 'closed') {\n await audioContext.audioWorklet.addModule(generateWorkletUrl('worklet'));\n return new AudioWorkletNode(audioContext, 'processor-worklet');\n }\n throw new Error('AudioWorkletNode can not be created, when audioContext is closed.');\n }\n\n const worker = new CrossOriginWorker(generateWorkletUrl('worker'));\n return { port: worker };\n}\n\nconst NOOP = () => {};\n/**\n *
|
|
1
|
+
{"version":3,"file":"RecorderManager.es.js","sources":["../../../../src/utils/xunFeiVoice/RecorderManager/RecorderManager.js"],"sourcesContent":["/**\n * 录音管理器 - 用于处理音频录制及处理\n */\nimport CrossOriginWorker from 'co-web-worker';\nimport { requestMicrophonePermission } from '../utils';\nimport workerJsString from './processorSource/processor.worker.js?raw';\nimport workletJsString from './processorSource/processor.worklet.js?raw';\n\nconst { AudioWorkletNode } = window;\nconst isAudioWorkletSupported = !!AudioWorkletNode;\n\n/** @type {(type: 'worker' | 'worklet') => string} */\nconst generateWorkletUrl = (type) => {\n const jsStr = type === 'worker' ? workerJsString : workletJsString;\n const blob = new Blob([jsStr], { type: 'application/javascript' });\n const scriptUrl = URL.createObjectURL(blob);\n return scriptUrl;\n};\n\n/**\n * 初始化音频处理器\n * @param {AudioContext} audioContext\n * @returns {Promise<AudioWorkletNode|{port: Worker}>}\n */\nasync function initializeAudioProcessor(audioContext) {\n if (isAudioWorkletSupported) {\n if (audioContext.state !== 'closed') {\n await audioContext.audioWorklet.addModule(generateWorkletUrl('worklet'));\n return new AudioWorkletNode(audioContext, 'processor-worklet');\n }\n throw new Error('AudioWorkletNode can not be created, when audioContext is closed.');\n }\n\n const worker = new CrossOriginWorker(generateWorkletUrl('worker'));\n return { port: worker };\n}\n\nconst NOOP = () => {};\n/**\n * 录音管理器,仅针对讯飞语音\n */\nexport class RecorderManager {\n /** @type {Array<ArrayBuffer>} */\n audioBuffers = [];\n /** @type {(params: RecordFrameInfo) => void} */\n onFrameRecorded = NOOP;\n onStart = NOOP;\n /** @type {(currStatus: 'stop' | 'closed' | 'initialized' | 'initializing' | 'default') => void} */\n onStop = NOOP;\n /** @type {(data: Array<ArrayBuffer>) => void} */\n onLastFrame = NOOP;\n /** @type {'stop' | 'closed' | 'initialized' | 'initializing' | 'default'} */\n status = 'default';\n /** @type {AudioContext} */\n audioContext = null;\n /** @type {AudioWorkletNode} */\n audioWorkletNode = null;\n /** @type {MediaStreamAudioSourceNode} */\n mediaSource = null;\n /** @type {MediaStream} */\n mediaStream = null;\n constructor() {}\n\n /**\n * 开始录音\n * @param {{\n * sampleRate?: number,\n * frameSize?: number,\n * arrayBufferType?: string\n * }} config 录音配置\n */\n async start(config) {\n this.status = 'initializing';\n try {\n this.audioBuffers = [];\n // 获取音频流并创建处理节点\n const mediaStream = await requestMicrophonePermission();\n this.mediaStream = mediaStream;\n const audioContext = this.createAudioContext(mediaStream, config.sampleRate);\n this.audioContext = audioContext;\n this.audioWorkletNode = await initializeAudioProcessor(audioContext);\n // 防止开始后立刻结束,资源没有得到释放。\n if (this.status === 'stop' || this.status === 'closed') {\n this.close();\n return;\n }\n\n // 初始化音频处理\n this.setupAudioProcessing(audioContext, mediaStream, this.audioWorkletNode, config);\n\n this.status = 'initialized';\n this.onStart?.();\n } catch (error) {\n console.error('Failed to start recording:', error);\n throw error;\n }\n }\n\n /**\n * 创建音频上下文\n * @private\n */\n createAudioContext(mediaStream, targetSampleRate) {\n try {\n const context = new (window.AudioContext || window.webkitAudioContext)({\n sampleRate: targetSampleRate,\n });\n context.createMediaStreamSource(mediaStream);\n return context;\n } catch (error) {\n // 回退处理:当目标采样率不支持时使用默认采样率\n const fallbackContext = new (window.AudioContext || window.webkitAudioContext)();\n console.warn(`Using default sample rate: ${fallbackContext.sampleRate}`);\n fallbackContext.createMediaStreamSource(mediaStream);\n return fallbackContext;\n }\n }\n\n /**\n * 配置音频处理管线\n * @private\n */\n setupAudioProcessing(audioContext, mediaStream, audioWorkletNode, config) {\n // 创建媒体流源节点\n const mediaSource = audioContext.createMediaStreamSource(mediaStream);\n this.mediaSource = mediaSource;\n\n // 配置处理器通信\n audioWorkletNode.port.postMessage({\n type: 'init',\n data: {\n frameSize: config.frameSize,\n toSampleRate: config.sampleRate || audioContext.sampleRate,\n fromSampleRate: audioContext.sampleRate,\n arrayBufferType: config.arrayBufferType || 'short16',\n },\n });\n\n // 处理音频数据回调\n audioWorkletNode.port.onmessage = (e) => {\n const { data } = e;\n if (config.frameSize && this.onFrameRecorded) {\n this.onFrameRecorded(data);\n }\n\n if (data.frameBuffer) {\n this.audioBuffers.push(data.frameBuffer);\n }\n\n if (data.isLastFrame) {\n if (!isAudioWorkletSupported) {\n audioWorkletNode.port?.terminate();\n }\n this.mediaSource?.disconnect();\n if (this.audioContext?.state !== 'closed') {\n this.audioContext?.close();\n }\n this.onLastFrame?.(this.audioBuffers);\n }\n };\n\n // 连接音频节点\n if (isAudioWorkletSupported) {\n mediaSource.connect(audioWorkletNode);\n } else {\n const scriptProcessor = audioContext.createScriptProcessor(0, 1, 1);\n scriptProcessor.onaudioprocess = ({ inputBuffer }) => {\n audioWorkletNode.port.postMessage({\n type: 'message',\n data: inputBuffer.getChannelData(0),\n });\n };\n mediaSource.connect(scriptProcessor);\n scriptProcessor.connect(audioContext.destination);\n }\n }\n\n /** 停止录音 */\n stop() {\n this.onStop?.(this.status);\n this.status = 'stop';\n /** 暂停音频上下文对象中的进度,并暂时剥离进程对音频设备硬件的访问权限,减少 CPU 和电池的使用 */\n if (this.audioContext?.state === 'running') {\n this.audioContext.suspend();\n }\n if (this.audioWorkletNode) {\n this.audioWorkletNode.port.postMessage({ type: 'stop' });\n }\n }\n\n close() {\n this.audioBuffers = [];\n this.mediaSource?.disconnect();\n this.status = 'closed';\n if (this.audioContext?.state !== 'closed') {\n return this.audioContext?.close();\n }\n }\n\n destroy() {\n this.close();\n this.mediaStream?.getTracks()?.forEach((track) => track.stop());\n }\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@easyv/biz-components",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.48",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.es.js",
|
|
6
6
|
"module": "dist/index.es.js",
|
|
@@ -26,7 +26,8 @@
|
|
|
26
26
|
"echarts": "5.4.1",
|
|
27
27
|
"react": "^16.8.0 || ^17.0.0 || ^18.0.0",
|
|
28
28
|
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0",
|
|
29
|
-
"socket.io-client": "^4.8.1"
|
|
29
|
+
"socket.io-client": "^4.8.1",
|
|
30
|
+
"vosk-browser": "^0.0.8"
|
|
30
31
|
},
|
|
31
32
|
"devDependencies": {
|
|
32
33
|
"@types/crypto-js": "^4.2.2",
|