{"_id":"@elelel13223/web-recorder-module","_rev":"16-674bd6102a32954826b28b9d3e4d81b7","name":"@elelel13223/web-recorder-module","dist-tags":{"latest":"3.0.5"},"versions":{"1.0.0":{"name":"@elelel13223/web-recorder-module","version":"1.0.0","_id":"@elelel13223/web-recorder-module@1.0.0","maintainers":[{"name":"elelel13223","email":"1595818152@qq.com"}],"dist":{"shasum":"c78019cf78b690ea8224376e4b3f240a4f2bdfe9","tarball":"https://registry.npmjs.org/@elelel13223/web-recorder-module/-/web-recorder-module-1.0.0.tgz","fileCount":3,"integrity":"sha512-54m9BoE9N9gJRAzjCiNnI+XrPErPrKlAel2CVqLzpncN6eO3i3h4GPIsVkiKh3nuM1mGyrURxwPKRxeE29E8Jw==","signatures":[{"sig":"MEUCIQCun88/7Et4vmApvYcy5FBK502C/H9a/PtIjhna8MWSGgIgJqdOnH+/k/+HcGPLoieYUOXwySMYt2uo3OyYmX6GwnQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164363},"main":"dist/index.js","scripts":{"build":"webpack"},"_npmUser":{"name":"elelel13223","email":"1595818152@qq.com"},"_npmVersion":"8.19.3","description":"A simple web recorder module","directories":{},"_nodeVersion":"16.18.0","_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.98.0","css-loader":"^7.1.2","webpack-cli":"^6.0.1","style-loader":"^4.0.0","html-webpack-plugin":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/web-recorder-module_1.0.0_1739590411827_0.03540587928568173","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@elelel13223/web-recorder-module","version":"1.0.1","_id":"@elelel13223/web-recorder-module@1.0.1","maintainers":[{"name":"elelel13223","email":"1595818152@qq.com"}],"dist":{"shasum":"39620931e5b6d9d14d620484f0e748efb6610034","tarball":"https://registry.npmjs.org/@elelel13223/web-recorder-module/-/web-recorder-module-1.0.1.tgz","fileCount":3,"integrity":"sha512-P1bChl7XeHevkkuzYC0mdzg82jkqVN55uAqi73x0ELNAw+LPX/i72aOXDYuyhYiMjGE/3BvyErhZf6vDvtt5dA==","signatures":[{"sig":"MEYCIQCkri8rnM0oS6X+AvyA+s3V7sX2bw8PgjDkokp6nxqvXQIhAOSNHEzqe40oVpNfSFat4z/G5xp/5FrIqtYu6Lebc87u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":168958},"main":"dist/index.js","scripts":{"build":"webpack"},"_npmUser":{"name":"elelel13223","email":"1595818152@qq.com"},"_npmVersion":"8.19.3","description":"A simple web recorder module","directories":{},"_nodeVersion":"16.18.0","_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.98.0","css-loader":"^7.1.2","webpack-cli":"^6.0.1","style-loader":"^4.0.0","html-webpack-plugin":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/web-recorder-module_1.0.1_1739591177112_0.48356003618352195","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@elelel13223/web-recorder-module","version":"1.0.2","_id":"@elelel13223/web-recorder-module@1.0.2","maintainers":[{"name":"elelel13223","email":"1595818152@qq.com"}],"dist":{"shasum":"5fd0d41de24f4c33af9c546d3f4ad9debd534740","tarball":"https://registry.npmjs.org/@elelel13223/web-recorder-module/-/web-recorder-module-1.0.2.tgz","fileCount":5,"integrity":"sha512-7Fq9fH40Q+Jh0X8gqoWkRvHcm3JMuHQkCMHff7CrcJiJELAmFpEOm9k4W0b9h0KcHwU59DrkYLVsNRnImETaGw==","signatures":[{"sig":"MEUCIQCaWIlXE/deMZyZKB9e5EmeW9+LUjZctwZ9UXZmo26B9AIgfZZRg5jic25MFL5uab2E9hcBnj6AdIuma4MBWVjYdYE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292568},"main":"dist/index.js","scripts":{"build":"webpack"},"_npmUser":{"name":"elelel13223","email":"1595818152@qq.com"},"_npmVersion":"8.19.3","description":"A simple web recorder module","directories":{},"_nodeVersion":"16.18.0","_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.98.0","css-loader":"^7.1.2","webpack-cli":"^6.0.1","style-loader":"^4.0.0","html-webpack-plugin":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/web-recorder-module_1.0.2_1739873036263_0.22229495055253934","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@elelel13223/web-recorder-module","version":"1.0.3","_id":"@elelel13223/web-recorder-module@1.0.3","maintainers":[{"name":"elelel13223","email":"1595818152@qq.com"}],"dist":{"shasum":"78ecefe3d7ce5cac9cb3b4c41b9824d32197a983","tarball":"https://registry.npmjs.org/@elelel13223/web-recorder-module/-/web-recorder-module-1.0.3.tgz","fileCount":5,"integrity":"sha512-2F2wgB5oGYv0pxEHTYO06bBiotweXVLNvTmYL4zfKvbjo9exdi73+gKql+ue1z99R/iCoMSez1MRwl9Fve1EAw==","signatures":[{"sig":"MEUCIF7eh3jx55HXxzBVjUlDoz+LomrY1a5IR/mCqsgqUS4qAiEA+q2iq6NH7BIQszQKpuc4fi8SSGU6cZtPQMraIm2XtGc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292606},"main":"dist/index.js","scripts":{"build":"webpack"},"_npmUser":{"name":"elelel13223","email":"1595818152@qq.com"},"_npmVersion":"8.19.3","description":"A simple web recorder module","directories":{},"_nodeVersion":"16.18.0","_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.98.0","css-loader":"^7.1.2","webpack-cli":"^6.0.1","style-loader":"^4.0.0","html-webpack-plugin":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/web-recorder-module_1.0.3_1739928034174_0.6901232961480339","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@elelel13223/web-recorder-module","version":"3.0.0","_id":"@elelel13223/web-recorder-module@3.0.0","maintainers":[{"name":"elelel13223","email":"1595818152@qq.com"}],"dist":{"shasum":"7c6259f761c8ffe2aa99056c499960875a51b655","tarball":"https://registry.npmjs.org/@elelel13223/web-recorder-module/-/web-recorder-module-3.0.0.tgz","fileCount":8,"integrity":"sha512-EYoTB9VaxjS1263UuczweaocyJabok7yF5POKiip/uezYa62vtFZoXeeFV5ienN4x7Cf/DfKG2mq1qVLMsrFrA==","signatures":[{"sig":"MEQCIBYwo0kUs/Qb/BD+7rF26HH7lCrKeQnGTOLQNupgl6kFAiA8S7Ysb7frvzx42VswAdMhE5dIxKSidbCHbcYQ9m0j9w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":454031},"main":"dist/index.js","scripts":{"build":"webpack"},"_npmUser":{"name":"elelel13223","email":"1595818152@qq.com"},"_npmVersion":"10.9.2","description":"A simple web recorder module","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.98.0","ts-loader":"^9.5.2","css-loader":"^7.1.2","typescript":"^5.7.3","webpack-cli":"^6.0.1","style-loader":"^4.0.0","copy-webpack-plugin":"^12.0.2","html-webpack-plugin":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/web-recorder-module_3.0.0_1740448885842_0.7198734935833266","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@elelel13223/web-recorder-module","version":"3.0.1","_id":"@elelel13223/web-recorder-module@3.0.1","maintainers":[{"name":"elelel13223","email":"1595818152@qq.com"}],"dist":{"shasum":"10d64795414e9aeacb330d52cb66ac88b071adcb","tarball":"https://registry.npmjs.org/@elelel13223/web-recorder-module/-/web-recorder-module-3.0.1.tgz","fileCount":8,"integrity":"sha512-bp+DUGpY0mCUhXa8EHHUol39uSfhfwgx2xsEx/mItT4l8MgLjT+Hv7KGMqCHgcHXHLH626ibNuznTQdGf2kZCA==","signatures":[{"sig":"MEYCIQDyvEFgyJkseKijQoFNWBY/b/txh0Qthm9CpJQWMcbXqQIhAPWZwaVG+71dHx/Vym17Wdlp7YwcCyjh6C06RY5+XyCY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":454813},"main":"dist/index.js","scripts":{"build":"webpack"},"_npmUser":{"name":"elelel13223","email":"1595818152@qq.com"},"_npmVersion":"10.9.2","description":"A simple web recorder module","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.98.0","ts-loader":"^9.5.2","css-loader":"^7.1.2","typescript":"^5.7.3","webpack-cli":"^6.0.1","style-loader":"^4.0.0","copy-webpack-plugin":"^12.0.2","html-webpack-plugin":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/web-recorder-module_3.0.1_1740463926720_0.07777883210043623","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"@elelel13223/web-recorder-module","version":"3.0.2","_id":"@elelel13223/web-recorder-module@3.0.2","maintainers":[{"name":"elelel13223","email":"1595818152@qq.com"}],"dist":{"shasum":"9df276bf088659d418941a076d87374392eff4d7","tarball":"https://registry.npmjs.org/@elelel13223/web-recorder-module/-/web-recorder-module-3.0.2.tgz","fileCount":8,"integrity":"sha512-YgDMQpMw98oxyCJyU4lB+Zdw++AlWmvvBhe9FxY2qtPr3PQjQkdzhva/cVzVtnO06rGMy083FvjFD0OHaWCbyQ==","signatures":[{"sig":"MEUCIQDCPUtdXSUax3HXtlIN9h+FxuRkxcKr3zCF9Q6n0WO9qgIgQuv79EtLdOvN8NLIkFtwOeVEt0DADxmzj1yQr58aB2o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":456440},"main":"dist/index.js","scripts":{"build":"webpack"},"_npmUser":{"name":"elelel13223","email":"1595818152@qq.com"},"_npmVersion":"10.9.2","description":"A simple web recorder module","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.98.0","ts-loader":"^9.5.2","css-loader":"^7.1.2","typescript":"^5.7.3","webpack-cli":"^6.0.1","style-loader":"^4.0.0","copy-webpack-plugin":"^12.0.2","html-webpack-plugin":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/web-recorder-module_3.0.2_1740563102234_0.13116047230734384","host":"s3://npm-registry-packages-npm-production"}},"3.0.3":{"name":"@elelel13223/web-recorder-module","version":"3.0.3","_id":"@elelel13223/web-recorder-module@3.0.3","maintainers":[{"name":"elelel13223","email":"1595818152@qq.com"}],"dist":{"shasum":"8c2b13edf6f48d880c0cbd493c2bc70dc17a25fd","tarball":"https://registry.npmjs.org/@elelel13223/web-recorder-module/-/web-recorder-module-3.0.3.tgz","fileCount":8,"integrity":"sha512-gnG6y3Plc9up/Ojz92zIWUwgQ85DONkRFMf1F8sNOWNDFaEYfO4mNjkRfySmTtBRXaNxiDmUwgWTmi2caOxwEw==","signatures":[{"sig":"MEUCIQC1Mdtm/U1ELAYw0t1aEFrw1B+Q3rrg0CSDSw4MoIjCDgIgOHM6p1eD1nFpYBiYJ8IystxfATgxNfs4rtWpU7ozxAg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":452529},"main":"dist/index.js","scripts":{"build":"webpack"},"_npmUser":{"name":"elelel13223","email":"1595818152@qq.com"},"_npmVersion":"10.9.2","description":"A simple web recorder module","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.98.0","ts-loader":"^9.5.2","css-loader":"^7.1.2","typescript":"^5.7.3","webpack-cli":"^6.0.1","style-loader":"^4.0.0","copy-webpack-plugin":"^12.0.2","html-webpack-plugin":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/web-recorder-module_3.0.3_1740980666726_0.7540441549041079","host":"s3://npm-registry-packages-npm-production"}},"3.0.4":{"name":"@elelel13223/web-recorder-module","version":"3.0.4","_id":"@elelel13223/web-recorder-module@3.0.4","maintainers":[{"name":"elelel13223","email":"1595818152@qq.com"}],"dist":{"shasum":"98935d5abaff16e7efe66a1a577f370c17d8af8b","tarball":"https://registry.npmjs.org/@elelel13223/web-recorder-module/-/web-recorder-module-3.0.4.tgz","fileCount":8,"integrity":"sha512-Lx7RKcPDyVrnw/Xj0iBCQJqCFjrbNFmdheA29afkkpbC5YezZDWT7DJSiN76GuYHRPXGA67qi0GivKAKEVYjtA==","signatures":[{"sig":"MEYCIQDbqyiLi+np2d5INYcHhbI/ERa6nJySd901H+uijZ7oTwIhALtCrUQ7/fO2L0xkWLgpebGYB6/0wETN4Tjws4LCXLjk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":452471},"main":"dist/index.js","scripts":{"build":"webpack"},"_npmUser":{"name":"elelel13223","email":"1595818152@qq.com"},"_npmVersion":"10.9.2","description":"A simple web recorder module","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.98.0","ts-loader":"^9.5.2","css-loader":"^7.1.2","typescript":"^5.7.3","webpack-cli":"^6.0.1","style-loader":"^4.0.0","copy-webpack-plugin":"^12.0.2","html-webpack-plugin":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/web-recorder-module_3.0.4_1741312477843_0.10860810012180244","host":"s3://npm-registry-packages-npm-production"}},"3.0.5":{"name":"@elelel13223/web-recorder-module","version":"3.0.5","description":"A simple web recorder module","main":"dist/index.js","scripts":{"build":"webpack"},"devDependencies":{"copy-webpack-plugin":"^12.0.2","css-loader":"^7.1.2","html-webpack-plugin":"^5.6.3","style-loader":"^4.0.0","ts-loader":"^9.5.2","typescript":"^5.7.3","webpack":"^5.98.0","webpack-cli":"^6.0.1"},"_id":"@elelel13223/web-recorder-module@3.0.5","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-Dj3pOEGtFLo49Se2vZGKeGECrYpB4wtLCWluqrnLVMHzJe/DbuIqNCk/6U1Oh6ZS/b3tq7GnjfZ1wmogQ8ESbA==","shasum":"d7438f91f11e6ad3aad70f489e170ee422e48487","tarball":"https://registry.npmjs.org/@elelel13223/web-recorder-module/-/web-recorder-module-3.0.5.tgz","fileCount":8,"unpackedSize":456138,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD0r0AGUOhzGG2bEYTVQKpGbujlrWxe0pNIfuSIK2xptwIhAKhlqkbIdkwK2ZfRD53fk7Ifu0vLuXt0OMV5toEu92hj"}]},"_npmUser":{"name":"elelel13223","email":"1595818152@qq.com"},"directories":{},"maintainers":[{"name":"elelel13223","email":"1595818152@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/web-recorder-module_3.0.5_1741335175365_0.6646735349486084"},"_hasShrinkwrap":false}},"time":{"created":"2025-02-15T03:33:31.722Z","modified":"2025-03-07T08:12:55.790Z","1.0.0":"2025-02-15T03:33:32.005Z","1.0.1":"2025-02-15T03:46:17.343Z","1.0.2":"2025-02-18T10:03:56.546Z","1.0.3":"2025-02-19T01:20:34.458Z","2.0.0":"2025-02-19T08:45:31.333Z","2.0.1":"2025-02-19T09:08:19.708Z","2.0.2":"2025-02-19T09:37:27.438Z","3.0.0":"2025-02-25T02:01:26.115Z","3.0.1":"2025-02-25T06:12:07.067Z","3.0.2":"2025-02-26T09:45:02.527Z","3.0.3":"2025-03-03T05:44:26.926Z","3.0.4":"2025-03-07T01:54:38.067Z","3.0.5":"2025-03-07T08:12:55.632Z"},"description":"A simple web recorder module","maintainers":[{"name":"elelel13223","email":"1595818152@qq.com"}],"readme":"### RecorderModule 录音模块说明文档（v3.0.5）\r\n\r\n#### 1.  RecorderModule 模块介绍\r\n\r\n`RecorderModule(v3.0.5)` 是一个 javascript 模块，它封装了 Web 录音 API，并提供了一系列便捷的方法来实现音频录制、播放、上传和下载等功能（最后有vue示例）。(https://www.npmjs.com/package/@elelel13223/web-recorder-module)\r\n\r\n##### 2.1 模块导入\r\n\r\nJavaScript\r\n\r\n```js\r\nnpm install @elelel13223/web-recorder-module\r\n```\r\n\r\n##### 2.2 实例化 RecorderModule\r\n\r\n在您需要使用录音功能的代码中，实例化 `RecorderModule`。构造函数接受一个可选的 `options` 对象，用于配置模块的行为和回调函数。\r\n\r\nJavaScript\r\n\r\n```js\r\n//参数示例\r\nnew RecorderModule({\r\n        API: 'http://127.0.0.1:8080',//必填(*)\r\n        AUTHORIZATION: 'token',//必填(*)\r\n        SID: '', // 必填(*)，会话ID，用于API请求的会话标识\r\n        sampleRate: 16000, // 可选，录音采样率，单位 Hz，表示每秒钟采集的音频样本数，常用的采样率有 16000Hz 和 44100Hz\r\n        bitRate: 16, // 可选，录音比特率，单位 kbps，表示音频数据的压缩率，影响音质和文件大小，常用的比特率有 16kbps, 32kbps, 64kbps 等\r\n        recordType: \"mp3\", // 可选，录音类型，目前只支持mp3\r\n        realTimeTranscription: true, //可选， 是否实时转写，为 true，则实时将录音缓存数据发送到后端进行转写，为 false，则等待录音结束后再发送\r\n        processInterval: 5000,// 可选，数据处理间隔时间 (毫秒)，每隔多久处理一次录音缓存数据并发送到后端，默认 5000 毫秒 (5秒)\r\n        aiTimeout: 5000, // 请求接口超时时间，默认 5000 毫秒 (5秒)\r\n        onTimeout: null, // 请求接口超时的回调函数，默认为 null\r\n    waveConfig: { // 波形可视化配置 (用于 Recorder.WaveView)\r\n                /*  通用波形效果配置 */\r\n                scale: 2,        // 缩放系数 (正整数)，用于提高移动端清晰度，建议保持默认值 2\r\n                speed: 9,        // 波形移动速度系数，值越大移动越快，可调整波形动画速度\r\n                phase: 21.8,      // 相位，调整速度后可能需要调整此值，以获得更佳的波形视觉效果\r\n                fps: 20,         // 帧率 (每秒绘制帧数)，影响动画流畅度，调整后可能需同步调整 phase 值\r\n                keep: true,       // 是否保持波形，true: 停止输入后波形保持，false: 停止输入后波形消失为直线\r\n                lineWidth: 3,     // 基础线条粗细 (像素)\r\n                /*  渐变色配置 (颜色数组，[位置1, 颜色1, 位置2, 颜色2, ...]) */\r\n                linear1: [0, \"rgba(150,96,238,1)\", 0.2, \"rgba(170,79,249,1)\", 1, \"rgba(53,199,253,1)\"], // 线条渐变色1 (从左到右)\r\n                linear2: [0, \"rgba(209,130,255,0.6)\", 1, \"rgba(53,199,255,0.6)\"], // 线条渐变色2 (从左到右)\r\n                linearBg: [0, \"rgba(255,255,255,0.2)\", 1, \"rgba(54,197,252,0.2)\"], // 背景渐变色 (从上到下)\r\n            },\r\n        onPowerLevelUpdate: (durationText) => { // 录音音量更新回调函数，durationText 参数表示当前录音持续时间\r\n          this.powerLevelText = durationText;\r\n        },\r\n        onTranscriptionResult: (text) => { // 实时语音转录结果回调函数，识别结果\r\n          this.transcriptionResult += text + ' ';\r\n        },\r\n        onRecordStop: (blob: Blob, duration) => { // 录音停止回调函数，录音停止后被调用，参数 blob 包含录音音频数据，duration 参数表示录音时长\r\n          console.log('录音已停止, Blob:', blob, '时长:', duration);\r\n          this.recBlob = blob;\r\n          this.isRecording = false;\r\n        },\r\n        onTranscriptionComplete: (fullText) => { // 转译完成文本回调\r\n          console.log('转译完成 (onTranscriptionComplete), 完整文本:', fullText);\r\n        }，\r\n        onRecordError: (errorMsg) => { // 录音错误回调函数，当录音过程中发生错误时被调用，参数 errorMsg 包含错误信息\r\n          console.error('录音错误:', errorMsg);\r\n          this.isRecording = false;\r\n          alert('录音发生错误: ' + errorMsg);\r\n        },\r\n      })\r\n```\r\n\r\n**`options` 参数说明 (构造函数入参)**\r\n\r\n`options` 是一个对象，用于配置 `RecorderModule` 的行为和回调函数。它包含以下属性：\r\n\r\n| 参数名                      | 类型           | 描述                                                         | 默认值                                                  |\r\n| --------------------------- | -------------- | :----------------------------------------------------------- | ------------------------------------------------------- |\r\n| `API`                       | `String`       | **必需**。 音频上传 API 的地址。当您调用 `recUpload` 或在 `processAudioData` 中发送实时音频数据时，将使用此地址。 | `'http://127.0.0.1:8080'`                               |\r\n| `AUTHORIZATION`             | `String`       | **必需**。  API 授权 Token，用于 API 请求的身份验证。在发送音频数据到服务器时，将作为请求头 `Authorization` 的值。 | `'Your_Default_Token'`                                  |\r\n| **`SID`**                   | **`String`**   | **必需。  会话ID，用于API请求的会话标识。**                  | **`'Your_Default_SID'`**                                |\r\n| **`realTimeTranscription`** | **`Bool`**     | **可选。  是否进行实时转写。为 true，则实时将录音缓存数据发送到后端进行转写，为 false，则等待录音结束后再发送。（若为false,无需设置processInterval参数）** | **`false`**                                             |\r\n| `processInterval`           | `Int`          | **可选**。  数据处理间隔时间 (毫秒)，每隔多久处理一次录音缓存数据并发送到后端，默认 5000 毫秒 (5秒)，实时语音转文字。 | `5000（5秒）`                                           |\r\n| **`aiTimeout`**             | **`Int`**      | **可选。 请求接口超时时间，默认 5000 毫秒 (5秒) **           | **`5000（5秒）`**                                       |\r\n| **`onTimeout`**             | **`Function`** | **可选。请求接口超时的回调函数，默认为 null  **              | **`null`**                                              |\r\n| `recordType`                | `String`       | **可选。**  录音类型，目前只支持mp3。                        | `mp3`                                                   |\r\n| `sampleRate`                | `Int`          | **可选。**  录音采样率，单位 Hz，表示每秒钟采集的音频样本数，常用的采样率有 16000Hz 和 44100Hz。 | `16000`                                                 |\r\n| `bitRate`                   | `Int`          | **可选。**  录音比特率，单位 kbps，表示音频数据的压缩率，影响音质和文件大小，常用的比特率有 16kbps, 32kbps, 64kbps 等。 | `16`                                                    |\r\n| `waveConfig`                | `Object`       | **可选。**  可视化配置，用于配置音频波形可视化效果           | `具体配置参考上面实例化 RecorderModule里面的waveConfig` |\r\n| `onPowerLevelUpdate`        | `Function`     | **可选**。  录音时长更新回调函数。在录音过程中，会定时调用此函数，传递当前录音时长 (格式化为 `mm:ss` 字符串)。 | `undefined`                                             |\r\n| `onTranscriptionResult`     | `Function`     | **可选**。  语音转文字结果回调函数。当服务器返回转文字结果时，会调用此函数，传递转文字的文本数据。 | `undefined`                                             |\r\n| `onRecordStop`              | `Function`     | **可选**。  录音停止回调函数。当录音正常停止时，会调用此函数，传递录音的 `Blob` 对象，录音时长 (毫秒)。 | `undefined`                                             |\r\n| `onTranscriptionComplete`   | `Function`     | **可选**。  录音停止后，转译完成文本回调。                   | `undefined`                                             |\r\n| `onRecordError`             | `Function`     | **可选**。  录音错误回调函数。当录音过程中发生错误（例如，麦克风授权失败、录音过程错误等）时，会调用此函数，传递错误信息字符串。 | `undefined`                                             |\r\n\r\n##### 2.3 RecorderModule API 函数说明\r\n\r\n以下是 `RecorderModule` 提供的 API 函数的详细说明，包括函数功能、参数、返回值和使用示例。\r\n\r\n###### 2.3.1 `recOpen(waveElem)`(注意* waveElem参数)\r\n\r\n- **功能**:  打开录音，请求麦克风权限，初始化录音资源。同时可以设置音频可视化效果。\r\n\r\n- **参数**:\r\n\r\n  - `waveElem`:  `HTMLElement` (必需)。 用于显示音频波形或频谱的 HTML 元素。可以是 `<div>` 或 `<canvas>` 等元素。如果不需要可视化，可以传入 `null` 或 `undefined`。\r\n\r\n- **返回值**:  无。\r\n\r\n- **使用示例**:\r\n\r\n  JavaScript\r\n\r\n  ```js\r\n  const waveDisplayElement = document.getElementById('waveDisplay'); //  获取用于显示波形的元素\r\n  recorder.recOpen(waveDisplayElement); //  打开录音并设置波形显示元素\r\n  ```\r\n\r\n###### 2.3.2 `recClose()`\r\n\r\n- **功能**:  关闭录音，释放麦克风资源。\r\n\r\n- **参数**:  无。\r\n\r\n- **返回值**:  无。\r\n\r\n- **使用示例**:\r\n\r\n  JavaScript\r\n\r\n  ```js\r\n  recorder.recClose(); //  关闭录音\r\n  ```\r\n\r\n###### 2.3.3 `recStart()`\r\n\r\n- **功能**:  开始录音。只有在成功调用 `recOpen()` 打开录音后，才能调用此方法。\r\n\r\n- **参数**:  无。\r\n\r\n- **返回值**:  无。\r\n\r\n- **使用示例**:\r\n\r\n  JavaScript\r\n\r\n  ```js\r\n  recorder.recStart(); //  开始录音\r\n  ```\r\n\r\n###### 2.3.4 `recPause()`\r\n\r\n- **功能**:  暂停录音。\r\n\r\n- **参数**:  无。\r\n\r\n- **返回值**:  无。\r\n\r\n- **使用示例**:\r\n\r\n  JavaScript\r\n\r\n  ```js\r\n  recorder.recPause(); //  暂停录音\r\n  ```\r\n\r\n###### 2.3.5 `recResume()`\r\n\r\n- **功能**:  恢复暂停的录音。\r\n\r\n- **参数**:  无。\r\n\r\n- **返回值**:  无。\r\n\r\n- **使用示例**:\r\n\r\n  JavaScript\r\n\r\n  ```js\r\n  recorder.recResume(); //  恢复录音\r\n  ```\r\n\r\n###### 2.3.6 `recStop()`\r\n\r\n- **功能**:  停止录音，结束录音过程，并生成音频 Blob 对象。录音结束后，会触发 `onRecordStop` 回调函数。\r\n\r\n- **参数**:  无。\r\n\r\n- **返回值**:  无。\r\n\r\n- **使用示例**:\r\n\r\n  JavaScript\r\n\r\n  ```js\r\n  recorder.recStop(); //  停止录音\r\n  ```\r\n\r\n###### 2.3.7 `recUpload()`\r\n\r\n- **功能**:  上传录音文件到服务器。上传的文件是最后一次 `recStop()` 生成的音频 Blob 对象。上传成功后，根据服务器返回的数据，可能会触发 `onTranscriptionResult` 回调函数。\r\n\r\n- **参数**:  无。\r\n\r\n- **返回值**:  无。\r\n\r\n- **使用示例**:\r\n\r\n  JavaScript\r\n\r\n  ```js\r\n  recorder.recUpload(); //  上传录音文件\r\n  ```\r\n\r\n###### 2.3.8 `recLocalDown()`\r\n\r\n- **功能**:  本地下载录音文件。浏览器会自动下载最后一次 `recStop()` 生成的音频文件到本地。\r\n\r\n- **参数**:  无。\r\n\r\n- **返回值**:  无。\r\n\r\n- **使用示例**:\r\n\r\n  JavaScript\r\n\r\n  ```js\r\n  recorder.recLocalDown(); //  本地下载录音文件\r\n  ```\r\n\r\n###### 2.3.9 `processAudioData(buffers, bufferSampleRate)`\r\n\r\n- **功能**:  **内部函数**，用于处理录音过程中的音频数据缓存。通常无需手动调用。该函数在录音库内部 `onProcess` 回调中被定时调用，用于缓存 PCM 数据，并定时将缓存的 PCM 数据转换为 MP3 Blob 发送到服务器进行实时转文字。\r\n\r\n- 参数\r\n\r\n  :\r\n\r\n  - `buffers`: `Array<Float32Array>` - 音频数据缓存块，由录音库 `onProcess` 回调提供。\r\n  - `bufferSampleRate`: `number` - 音频数据的采样率，由录音库 `onProcess` 回调提供。\r\n\r\n- **返回值**: 无。\r\n\r\n- **注意**:  此函数为内部处理函数，一般情况下，您不需要直接调用它。模块内部会自动处理音频数据的缓存和发送。\r\n\r\n###### 2.3.10 `pcm_to_mp3(pcm, sampleRate, callback)`\r\n\r\n- **功能**:  **内部函数**，将 PCM 音频数据转换为 MP3 格式的 Blob 对象。通常无需手动调用。\r\n\r\n- 参数\r\n\r\n  :\r\n\r\n  - `pcm`: `Int16Array` - PCM 音频数据。\r\n  - `sampleRate`: `number` - PCM 数据的采样率。\r\n  - `callback`: `Function` - 回调函数。转换完成后，会将 MP3 Blob 对象作为参数传递给此回调函数。\r\n\r\n- **返回值**:  无。\r\n\r\n- **注意**:  此函数为内部工具函数，用于音频格式转换。\r\n\r\n###### 2.3.11 `sendAudioToServer(blob)`\r\n\r\n- **功能**:  **内部函数**，将音频 Blob 对象发送到服务器进行语音转文字处理。通常无需手动调用。\r\n\r\n- 参数\r\n\r\n  :\r\n\r\n  - `blob`: `Blob` - 音频 Blob 对象。\r\n\r\n- **返回值**:  无。\r\n\r\n- **注意**:  此函数为内部网络请求函数，用于发送音频数据到服务器。\r\n\r\n###### 2.3.12 `formatMs(ms)`\r\n\r\n- **功能**:  格式化毫秒数为 `mm:ss` 格式的字符串，用于显示录音时长。\r\n\r\n- **参数**:\r\n\r\n  - `ms`: `number` - 毫秒数。\r\n\r\n- **返回值**:  `String` - 格式化后的时间字符串 (例如: `\"01:30\"`).\r\n\r\n- **使用示例**:\r\n\r\n  JavaScript\r\n\r\n  ```js\r\n  const duration = 90000; //  90秒，即 1 分 30 秒\r\n  const formattedDuration = recorder.formatMs(duration); //  formattedDuration 将为 \"01:30\"\r\n  console.log(formattedDuration);\r\n  ```\r\n\r\n###### 2.3.13 `getFormattedTime()`\r\n\r\n- **功能**:  获取当前时间，并格式化为 `yyyy-MM-dd_HH-mm-ss` 格式的字符串，用于生成文件名等。\r\n\r\n- **参数**:  无。\r\n\r\n- **返回值**:  `String` - 格式化后的时间字符串 (例如: `\"2024-05-03_10-30-45\"`).\r\n\r\n- **使用示例**:\r\n\r\n  JavaScript\r\n\r\n  ```js\r\n  const currentTimeString = recorder.getFormattedTime(); //  获取当前格式化时间字符串\r\n  console.log(currentTimeString);\r\n  ```\r\n\r\n#### 3. Vue 录音示例代码\r\n\r\n```vue\r\n<template>\r\n  <div class=\"audio-recorder-demo\">\r\n    <h1>Vue 录音示例</h1>\r\n\r\n    <div class=\"controls\">\r\n      <button @click=\"startRecord\" :disabled=\"isRecording\">\r\n        {{ isRecording ? '录音中...' : '开始录音' }}\r\n      </button>\r\n      <button @click=\"stopRecord\" :disabled=\"!isRecording\">停止录音</button>\r\n      <button @click=\"downloadRecord\" :disabled=\"!recBlob\">本地下载</button>\r\n      <button @click=\"uploadRecord\" :disabled=\"!recBlob\">上传录音</button>\r\n    </div>\r\n\r\n    <div class=\"display-area\">\r\n      <div class=\"duration-display\">\r\n        <label>录音时长:</label>\r\n        <span class=\"recpowert\">{{ powerLevelText }}</span>\r\n      </div>\r\n      <div ref=\"waveCanvas\" class=\"recwave\"></div>\r\n      <div class=\"transcription-result\">\r\n        <label>实时转文字结果:</label>\r\n        <div class=\"recresultx\">{{ transcriptionResult }}</div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"js\">\r\n// import RecorderModule from '@elelel13223/web-recorder-module';\r\nimport RecorderModule from './utils/index.js';\r\n\r\nexport default {\r\n  components: {},\r\n  data() {\r\n    return {\r\n      recorder: null, // RecorderModule 实例\r\n      powerLevelText: '00:00', // 录音时长显示文本\r\n      transcriptionResult: '', // 实时转文字结果\r\n      recBlob: null, // 录音 Blob 对象\r\n      isRecording: false, // 是否正在录音的标志\r\n      isPlaying: false, // 是否正在播放的标志\r\n      fullTextResult: '',// 新增用于显示完整转写文本的数据属性\r\n    };\r\n  },\r\n  mounted() {\r\n    this.initRecorder(); // 初始化录音模块\r\n    this.openRecorderOnLoad(); // 组件加载后自动打开录音\r\n  },\r\n  beforeUnmount() {\r\n    this.closeRecorderOnUnmount(); // 组件卸载前自动关闭录音\r\n  },\r\n  methods: {\r\n    initRecorder() {\r\n      // 初始化 RecorderModule 实例，配置 API 地址、授权信息和回调函数\r\n      this.recorder = new RecorderModule({\r\n        API: 'http://127.0.0.1:8080',\r\n        AUTHORIZATION: 'token',\r\n        SID: '1234',\r\n        realTimeTranscription: true, // 是否开启实时转文字功能\r\n        processInterval: 3000,\r\n        aiTimeout: 10000, // 设置超时时间为 10 秒\r\n        onTimeout: () => {\r\n          console.log(\"请求 AI 地址超时，请检查网络或稍后重试\");\r\n        },\r\n        waveConfig: { // 波形可视化配置 (用于 Recorder.WaveView)\r\n          speed: 500,         // 帧率 (每秒绘制帧数)，影响动画流畅度，调整后可能需同步调整 phase 值\r\n          /*  渐变色配置 (颜色数组，[位置1, 颜色1, 位置2, 颜色2, ...]) */\r\n          linear1: [0, \"rgba(10,96,238,1)\", 0.2, \"rgba(234,79,123,1)\", 1, \"rgba(123,199,253,1)\"], // 线条渐变色1 (从左到右)\r\n          linear2: [0, \"rgba(209,130,255,0.6)\", 1, \"rgba(53,199,255,0.6)\"], // 线条渐变色2 (从左到右)\r\n          linearBg: [0, \"rgba(255,255,255,0.2)\", 1, \"rgba(54,197,252,0.2)\"], // 背景渐变色 (从上到下)\r\n        },\r\n        onPowerLevelUpdate: (durationText) => {\r\n          this.powerLevelText = durationText; // 更新录音时长显示\r\n        },\r\n        onTranscriptionResult: (text) => {\r\n          this.transcriptionResult += text + ' '; // 拼接实时转文字结果\r\n        },\r\n        onRecordStop: (blob, duration, fullTranscriptionText) => {\r\n          console.log('录音已停止, Blob:', blob, '时长:', duration);\r\n          this.recBlob = blob; // 保存录音 Blob 对象，用于播放和下载\r\n          this.isRecording = false; // 更新录音状态\r\n          this.fullTextResult = fullTranscriptionText; // 将完整转写文本赋值给 data 中的 fullTextResult\r\n        },\r\n        onRecordError: (errorMsg) => {\r\n          console.error('录音错误:', errorMsg);\r\n          this.isRecording = false; // 更新录音状态\r\n          alert('录音发生错误: ' + errorMsg); // 弹出错误提示\r\n        },\r\n        onTranscriptionComplete: (fullText) => {\r\n          console.log('转译完成 (onTranscriptionComplete), 完整文本:', fullText);\r\n        }\r\n      });\r\n    },\r\n    openRecorderOnLoad() {\r\n      // 组件加载时自动打开录音，请求麦克风权限\r\n      this.recorder.recOpen(this.$refs.waveCanvas);\r\n    },\r\n    closeRecorderOnUnmount() {\r\n      // 组件卸载时自动关闭录音，释放资源\r\n      this.recorder.recClose();\r\n      this.isRecording = false;\r\n      this.isPlaying = false;\r\n    },\r\n    startRecord() {\r\n      // 开始录音\r\n      if (!this.recorder) {\r\n        alert(\"录音模块未初始化，请检查!\");\r\n        return;\r\n      }\r\n      this.transcriptionResult = ''; // 开始录音前清空转文字结果\r\n      this.powerLevelText = '00:00'; // 开始录音前重置时长显示\r\n      this.isRecording = true; // 设置为录音中状态\r\n      this.isPlaying = false; // 停止播放状态 (如果正在播放)\r\n      this.recorder.recStart(); // 调用 RecorderModule 的 recStart 方法开始录音\r\n    },\r\n    stopRecord() {\r\n      // 停止录音\r\n      if (!this.recorder) return;\r\n      this.isRecording = false; // 更新录音状态\r\n      this.recorder.recStop(); // 调用 RecorderModule 的 recStop 方法停止录音\r\n    },\r\n    downloadRecord() {\r\n      // 本地下载录音\r\n      if (!this.recorder) return;\r\n      this.recorder.recLocalDown(); // 调用 RecorderModule 的 recLocalDown 方法下载录音\r\n    },\r\n    uploadRecord() {\r\n      // 上传录音\r\n      if (!this.recorder) return;\r\n      this.recorder.recUpload(); // 调用 RecorderModule 的 recUpload 方法上传录音\r\n    }\r\n  },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n/* 示例样式保持不变 */\r\n.audio-recorder-demo {\r\n  font-family: sans-serif;\r\n  padding: 20px;\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: flex-start;\r\n}\r\n\r\n.controls button {\r\n  margin-right: 10px;\r\n  padding: 8px 15px;\r\n  border: 1px solid #ccc;\r\n  border-radius: 5px;\r\n  cursor: pointer;\r\n}\r\n\r\n.controls button:disabled {\r\n  cursor: not-allowed;\r\n  opacity: 0.6;\r\n}\r\n\r\n.display-area {\r\n  margin-top: 20px;\r\n  border: 1px solid #eee;\r\n  padding: 15px;\r\n  border-radius: 5px;\r\n  width: 400px;\r\n}\r\n\r\n.duration-display,\r\n.transcription-result {\r\n  margin-bottom: 10px;\r\n}\r\n\r\n.duration-display label,\r\n.transcription-result label {\r\n  font-weight: bold;\r\n  margin-right: 5px;\r\n}\r\n\r\n.recwave {\r\n  width: 100%;\r\n  height: 100px;\r\n  border: 1px solid #ccc;\r\n  margin-top: 5px;\r\n}\r\n\r\n.recresultx {\r\n  border: 1px solid #ddd;\r\n  padding: 10px;\r\n  min-height: 60px;\r\n  margin-top: 5px;\r\n  background-color: #f9f9f9;\r\n}\r\n</style>\r\n```\r\n","readmeFilename":"README.md"}