cnhis-design-vue 3.3.1-release.4 → 3.3.2-beta.1
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/README.md +87 -87
- package/es/components/audio-sdk/index.d.ts +57 -6
- package/es/components/audio-sdk/index.js +1 -0
- package/es/components/audio-sdk/src/Index.vue.d.ts +55 -6
- package/es/components/audio-sdk/src/Index.vue2.js +12 -4
- package/es/components/audio-sdk/src/audioSDK.d.ts +4 -4
- package/es/components/audio-sdk/src/audioSDK.js +23 -9
- package/es/components/audio-sdk/src/components/recording-modal.vue.d.ts +27 -3
- package/es/components/audio-sdk/src/components/recording.vue.d.ts +27 -3
- package/es/components/audio-sdk/src/components/recording.vue2.js +14 -6
- package/es/components/audio-sdk/src/constants/index.d.ts +1 -0
- package/es/components/audio-sdk/src/constants/index.js +3 -0
- package/es/components/audio-sdk/src/utils/recorder/fft.d.ts +4 -0
- package/es/components/audio-sdk/src/utils/recorder/fft.js +75 -0
- package/es/components/audio-sdk/src/utils/recorder/index.d.ts +3 -0
- package/es/components/audio-sdk/src/utils/recorder/index.js +12 -0
- package/es/components/audio-sdk/src/utils/recorder/mp3-engine.d.ts +4 -0
- package/es/components/audio-sdk/src/utils/recorder/mp3-engine.js +12435 -0
- package/es/components/audio-sdk/src/utils/recorder/mp3.d.ts +4 -0
- package/es/components/audio-sdk/src/utils/recorder/mp3.js +343 -0
- package/es/components/audio-sdk/src/utils/recorder/recorder.d.ts +4 -0
- package/es/components/audio-sdk/src/utils/recorder/recorder.js +1324 -0
- package/es/components/audio-sdk/src/utils/recorder/wave.d.ts +4 -0
- package/es/components/audio-sdk/src/utils/recorder/wave.js +258 -0
- package/es/components/audio-sdk/src/utils/recordingModal.js +13 -2
- package/es/components/bpmn-workflow/src/BpmnWorkflow.d.ts +0 -0
- package/es/components/bpmn-workflow/types/BpmnViewer.d.ts +1 -0
- package/es/components/bpmn-workflow/types/ModelingModule.d.ts +1 -0
- package/es/components/bpmn-workflow/types/MoveCanvasModule.d.ts +1 -0
- package/es/components/callback/src/components/render/popupMaps.d.ts +17 -1
- package/es/components/card-render/index.d.ts +4 -4
- package/es/components/card-render/src/CardRender.vue.d.ts +4 -4
- package/es/components/card-render/src/components/index.d.ts +23 -23
- package/es/components/classification/src/components/table-modal/index.vue.d.ts +0 -3
- package/es/components/fabric-chart/src/hooks/useCumputedPoint.js +12 -6
- package/es/components/field-editor/index.d.ts +4 -0
- package/es/components/field-editor/src/FieldEditor.vue.d.ts +4 -0
- package/es/components/field-set/src/FieldColor.vue.d.ts +1 -1
- package/es/components/field-set/src/FieldFilter.vue.d.ts +1 -1
- package/es/components/field-set/src/FieldSet.vue.d.ts +1 -1
- package/es/components/field-set/src/components/table-row.vue.d.ts +1 -1
- package/es/components/form-config/index.d.ts +80 -5
- package/es/components/form-config/src/FormConfig.vue.d.ts +80 -5
- package/es/components/form-config/src/components/FormConfigCreator.vue.d.ts +4 -0
- package/es/components/form-config/src/components/FormConfigEdit.vue.d.ts +57 -4
- package/es/components/form-config/src/components/FormConfigEventSetting.vue.d.ts +16 -1
- package/es/components/form-config/src/constants/index.d.ts +2 -1
- package/es/components/form-config/src/constants/index.js +1 -0
- package/es/components/form-config/src/hooks/useConfigurationField.js +19 -1
- package/es/components/form-config/src/hooks/useLocale.d.ts +1 -0
- package/es/components/form-config/src/hooks/useLocale.js +1 -0
- package/es/components/form-config/src/types/index.d.ts +1 -0
- package/es/components/form-render/index.d.ts +4 -0
- package/es/components/form-render/src/FormRender.vue.d.ts +4 -0
- package/es/components/form-render/src/FormRender.vue2.js +3 -2
- package/es/components/form-render/src/FormRenderWrapper.vue.d.ts +4 -0
- package/es/components/form-render/src/components/renderer/combination/combination.js +1 -1
- package/es/components/form-render/src/components/renderer/date.d.ts +2 -2
- package/es/components/form-render/src/components/renderer/input.d.ts +16 -4
- package/es/components/form-render/src/components/renderer/input.js +39 -7
- package/es/components/form-render/src/components/renderer/levelSearchCascader/index.js +3 -0
- package/es/components/form-render/src/components/renderer/lineBar/FormCollapse.vue.d.ts +1 -0
- package/es/components/form-render/src/components/renderer/lineBar/index.d.ts +1 -0
- package/es/components/form-render/src/components/renderer/radio_checkbox.js +9 -8
- package/es/components/form-render/src/components/renderer/text.js +1 -1
- package/es/components/form-render/src/components/renderer/textarea.d.ts +16 -1
- package/es/components/form-render/src/components/renderer/textarea.js +36 -8
- package/es/components/form-render/src/hooks/useBusinessBinding.js +1 -0
- package/es/components/form-render/src/hooks/useComplexOptions.js +3 -2
- package/es/components/form-render/src/hooks/useFieldListAdaptor.d.ts +2 -2
- package/es/components/form-render/src/hooks/useFieldListAdaptor.js +4 -3
- package/es/components/form-render/src/hooks/useFieldNormalize.d.ts +2 -0
- package/es/components/form-render/src/hooks/useFormField.d.ts +2 -0
- package/es/components/form-render/src/hooks/useFormField.js +5 -1
- package/es/components/form-render/src/hooks/useFormValidator.js +1 -0
- package/es/components/form-render/src/hooks/usePresetScope.js +1 -0
- package/es/components/form-render/src/types/fieldItem.d.ts +11 -0
- package/es/components/form-render/src/types/index.d.ts +2 -1
- package/es/components/form-render/src/utils/index.js +1 -0
- package/es/components/form-render/src/utils/schema.js +60 -15
- package/es/components/guide/src/renderer.d.ts +2 -2
- package/es/components/iho-chat/src/components/PersonProfile.vue2.js +1 -1
- package/es/components/iho-table/index.d.ts +13 -1
- package/es/components/iho-table/src/IhoTable.vue.d.ts +13 -2
- package/es/components/iho-table/src/IhoTable.vue2.js +27 -20
- package/es/components/iho-table/src/plugins/filterRenderPlugin/filter.vue.d.ts +6 -0
- package/es/components/index.css +1 -1
- package/es/components/index.d.ts +1 -2
- package/es/components/index.js +1 -3
- package/es/components/info-header/index.d.ts +13 -0
- package/es/components/info-header/src/InfoHeader.vue.d.ts +13 -0
- package/es/components/info-header/src/components/infoDescription/DescriptionItem.vue.d.ts +1 -0
- package/es/components/info-header/src/components/infoDescription/DescriptionList.vue.d.ts +1 -0
- package/es/components/info-header/src/components/infoDescription/index.vue.d.ts +5 -0
- package/es/components/info-header/src/components/patientInfo/index.vue.d.ts +4 -0
- package/es/components/scale-view/src/ScaleView.vue2.js +1 -1
- package/es/components/select-person/src/SelectPerson.vue2.js +21 -9
- package/es/components/shortcut-setter/index.d.ts +16 -1
- package/es/components/shortcut-setter/src/ShortcutSetter.vue.d.ts +16 -1
- package/es/components/table-filter/src/components/render-widget/enums.d.ts +2 -0
- package/es/components/table-filter/src/components/render-widget/enums.js +2 -1
- package/es/components/table-filter/src/components/render-widget/helpers/dateExtraMap.js +8 -0
- package/es/components/table-filter/src/components/render-widget/helpers/enums.d.ts +1 -0
- package/es/components/table-filter/src/components/render-widget/helpers/enums.js +2 -1
- package/es/components/table-filter/src/components/render-widget/helpers/presetValToTimestamp.js +15 -13
- package/es/components/table-filter/src/tool/baseOptions.js +3 -0
- package/es/env.d.ts +25 -25
- package/es/shared/assets/img/defaultCover/10review_successful.png.js +1 -1
- package/es/shared/assets/img/defaultCover/11review_fail.png.js +1 -1
- package/es/shared/assets/img/defaultCover/12no_setting.png.js +1 -1
- package/es/shared/assets/img/defaultCover/13no_menu_setting.png.js +1 -1
- package/es/shared/assets/img/defaultCover/14no_call_setting.png.js +1 -1
- package/es/shared/assets/img/defaultCover/15no_use_tag.png.js +1 -1
- package/es/shared/assets/img/defaultCover/16no_table_data.png.js +1 -1
- package/es/shared/assets/img/defaultCover/1location.png.js +1 -1
- package/es/shared/assets/img/defaultCover/2notfound.png.js +1 -1
- package/es/shared/assets/img/defaultCover/3loading.png.js +1 -1
- package/es/shared/assets/img/defaultCover/4no_permission.png.js +1 -1
- package/es/shared/assets/img/defaultCover/5no_data.png.js +1 -1
- package/es/shared/assets/img/defaultCover/6no_network.png.js +1 -1
- package/es/shared/assets/img/defaultCover/7no_doctor.png.js +1 -1
- package/es/shared/assets/img/defaultCover/8system_error.png.js +1 -1
- package/es/shared/assets/img/defaultCover/9system_upgrade.png.js +1 -1
- package/es/shared/assets/img/failure.png.js +1 -1
- package/es/shared/assets/img/no-permission.png.js +1 -1
- package/es/shared/assets/img/nodata.png.js +1 -1
- package/es/shared/assets/img/notfound.png.js +1 -1
- package/es/shared/assets/img/qr.png.js +1 -1
- package/es/shared/assets/img/success.png.js +1 -1
- package/es/shared/assets/img/table_style_2.png.js +1 -1
- package/es/shared/assets/img/video.png.js +1 -1
- package/es/shared/assets/img/video_default_cover.png.js +1 -1
- package/es/shared/assets/img/xb_big.png.js +1 -1
- package/es/shared/assets/img/xb_small.png.js +1 -1
- package/es/shared/components/CancelRadio/CancelRadio.d.ts +7 -0
- package/es/shared/components/CancelRadio/CancelRadio.js +6 -6
- package/es/shared/components/VueDraggable/src/vuedraggable.d.ts +86 -0
- package/es/shared/package.json.js +1 -1
- package/es/shared/utils/fabricjs/index.d.ts +6823 -0
- package/es/shared/utils/index.js +3 -2
- package/es/shared/utils/tapable/index.d.ts +139 -0
- package/package.json +76 -78
- package/es/components/ai-chat/index.d.ts +0 -680
- package/es/components/ai-chat/index.js +0 -10
- package/es/components/ai-chat/src/Index.vue.d.ts +0 -682
- package/es/components/ai-chat/src/Index.vue.js +0 -6
- package/es/components/ai-chat/src/Index.vue2.js +0 -175
- package/es/components/ai-chat/src/api/index.d.ts +0 -8
- package/es/components/ai-chat/src/api/index.js +0 -87
- package/es/components/ai-chat/src/components/ChatAudio.vue.d.ts +0 -38
- package/es/components/ai-chat/src/components/ChatAudio.vue.js +0 -6
- package/es/components/ai-chat/src/components/ChatAudio.vue2.js +0 -103
- package/es/components/ai-chat/src/components/ChatBI.vue.d.ts +0 -101
- package/es/components/ai-chat/src/components/ChatBI.vue.js +0 -6
- package/es/components/ai-chat/src/components/ChatBI.vue2.js +0 -73
- package/es/components/ai-chat/src/components/ChatCard.d.ts +0 -43
- package/es/components/ai-chat/src/components/ChatCard.js +0 -403
- package/es/components/ai-chat/src/components/ChatFooter.vue.d.ts +0 -203
- package/es/components/ai-chat/src/components/ChatFooter.vue.js +0 -6
- package/es/components/ai-chat/src/components/ChatFooter.vue2.js +0 -373
- package/es/components/ai-chat/src/components/ChatMain.d.ts +0 -2
- package/es/components/ai-chat/src/components/ChatMain.js +0 -350
- package/es/components/ai-chat/src/components/ChatMainDefault.d.ts +0 -2
- package/es/components/ai-chat/src/components/ChatMainDefault.js +0 -278
- package/es/components/ai-chat/src/components/ChatPatient.vue.d.ts +0 -59
- package/es/components/ai-chat/src/components/ChatPatient.vue.js +0 -6
- package/es/components/ai-chat/src/components/ChatPatient.vue2.js +0 -218
- package/es/components/ai-chat/src/components/ChatPrompt.vue.d.ts +0 -45
- package/es/components/ai-chat/src/components/ChatPrompt.vue.js +0 -6
- package/es/components/ai-chat/src/components/ChatPrompt.vue2.js +0 -143
- package/es/components/ai-chat/src/components/ChatRight.vue.d.ts +0 -57
- package/es/components/ai-chat/src/components/ChatRight.vue.js +0 -6
- package/es/components/ai-chat/src/components/ChatRight.vue2.js +0 -190
- package/es/components/ai-chat/src/components/card/JsonCard.d.ts +0 -25
- package/es/components/ai-chat/src/components/card/JsonCard.js +0 -574
- package/es/components/ai-chat/src/components/message-render/CardRender.d.ts +0 -16
- package/es/components/ai-chat/src/components/message-render/CardRender.js +0 -80
- package/es/components/ai-chat/src/components/message-render/FormRender.d.ts +0 -16
- package/es/components/ai-chat/src/components/message-render/FormRender.js +0 -173
- package/es/components/ai-chat/src/components/mobile/MobileChatAudio.vue.d.ts +0 -36
- package/es/components/ai-chat/src/components/mobile/MobileChatAudio.vue.js +0 -6
- package/es/components/ai-chat/src/components/mobile/MobileChatAudio.vue2.js +0 -96
- package/es/components/ai-chat/src/components/mobile/MobileChatFooter.vue.d.ts +0 -105
- package/es/components/ai-chat/src/components/mobile/MobileChatFooter.vue.js +0 -6
- package/es/components/ai-chat/src/components/mobile/MobileChatFooter.vue2.js +0 -260
- package/es/components/ai-chat/src/components/svgs/AddIcon.vue.js +0 -18
- package/es/components/ai-chat/src/components/svgs/AudioIcon.vue.js +0 -37
- package/es/components/ai-chat/src/components/svgs/KeyboardIcon.vue.js +0 -20
- package/es/components/ai-chat/src/components/svgs/MicroPhone.vue.js +0 -48
- package/es/components/ai-chat/src/hooks/index.d.ts +0 -2
- package/es/components/ai-chat/src/hooks/index.js +0 -2
- package/es/components/ai-chat/src/hooks/useChartAudioContext.d.ts +0 -18
- package/es/components/ai-chat/src/hooks/useChartAudioContext.js +0 -202
- package/es/components/ai-chat/src/hooks/useData.d.ts +0 -77
- package/es/components/ai-chat/src/hooks/useData.js +0 -289
- package/es/components/ai-chat/src/hooks/useFooterContext.d.ts +0 -38
- package/es/components/ai-chat/src/hooks/useFooterContext.js +0 -218
- package/es/components/ai-chat/src/hooks/useProgram.d.ts +0 -14
- package/es/components/ai-chat/src/hooks/useProgram.js +0 -306
- package/es/components/ai-chat/src/hooks/useSSE.d.ts +0 -9
- package/es/components/ai-chat/src/hooks/useSSE.js +0 -138
- package/es/components/ai-chat/src/hooks/useWebsocket.d.ts +0 -4
- package/es/components/ai-chat/src/hooks/useWebsocket.js +0 -66
- package/es/components/ai-chat/src/types/index.d.ts +0 -45
- package/es/components/ai-chat/src/types/index.js +0 -1
- package/es/components/ai-chat/src/utils/index.d.ts +0 -7
- package/es/components/ai-chat/src/utils/index.js +0 -41
- package/es/components/ai-chat/style/index.css +0 -1
- package/es/shared/assets/img/ai__avatar.png.js +0 -3
- package/es/shared/assets/img/file-emr.png.js +0 -3
- package/es/shared/assets/img/file.png.js +0 -3
- package/es/shared/assets/img/logo.png.js +0 -3
- package/es/shared/assets/img/use.png.js +0 -3
@@ -0,0 +1,343 @@
|
|
1
|
+
function useMP3(Recorder) {
|
2
|
+
Recorder.prototype.enc_mp3 = {
|
3
|
+
stable: true,
|
4
|
+
testmsg: "\u91C7\u6837\u7387\u8303\u56F448000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000"
|
5
|
+
};
|
6
|
+
Recorder.prototype.mp3 = function(res, True, False) {
|
7
|
+
var This = this, set = This.set, size = res.length;
|
8
|
+
var ctx = This.mp3_start(set);
|
9
|
+
if (ctx) {
|
10
|
+
This.mp3_encode(ctx, res);
|
11
|
+
This.mp3_complete(ctx, True, False, 1);
|
12
|
+
return;
|
13
|
+
}
|
14
|
+
var mp3 = new Recorder.lamejs.Mp3Encoder(1, set.sampleRate, set.bitRate);
|
15
|
+
var blockSize = 57600;
|
16
|
+
var data = [];
|
17
|
+
var idx = 0, mp3Size = 0;
|
18
|
+
var run = function() {
|
19
|
+
if (idx < size) {
|
20
|
+
var buf = mp3.encodeBuffer(res.subarray(idx, idx + blockSize));
|
21
|
+
if (buf.length > 0) {
|
22
|
+
mp3Size += buf.buffer.byteLength;
|
23
|
+
data.push(buf.buffer);
|
24
|
+
}
|
25
|
+
idx += blockSize;
|
26
|
+
setTimeout(run);
|
27
|
+
} else {
|
28
|
+
var buf = mp3.flush();
|
29
|
+
if (buf.length > 0) {
|
30
|
+
mp3Size += buf.buffer.byteLength;
|
31
|
+
data.push(buf.buffer);
|
32
|
+
}
|
33
|
+
var meta = mp3TrimFix.fn(data, mp3Size, size, set.sampleRate);
|
34
|
+
mp3TrimFixSetMeta(meta, set);
|
35
|
+
True(new Blob(data, { type: "audio/mp3" }));
|
36
|
+
}
|
37
|
+
};
|
38
|
+
run();
|
39
|
+
};
|
40
|
+
var mp3Worker;
|
41
|
+
Recorder.BindDestroy("mp3Worker", function() {
|
42
|
+
Recorder.CLog("mp3Worker Destroy");
|
43
|
+
mp3Worker && mp3Worker.terminate();
|
44
|
+
mp3Worker = null;
|
45
|
+
});
|
46
|
+
Recorder.prototype.mp3_envCheck = function(envInfo, set) {
|
47
|
+
var errMsg = "";
|
48
|
+
if (set.takeoffEncodeChunk) {
|
49
|
+
if (!envInfo.canProcess) {
|
50
|
+
errMsg = envInfo.envName + "\u73AF\u5883\u4E0D\u652F\u6301\u5B9E\u65F6\u5904\u7406";
|
51
|
+
} else if (!newContext()) {
|
52
|
+
errMsg = "\u5F53\u524D\u6D4F\u89C8\u5668\u7248\u672C\u592A\u4F4E\uFF0C\u65E0\u6CD5\u5B9E\u65F6\u5904\u7406";
|
53
|
+
}
|
54
|
+
}
|
55
|
+
return errMsg;
|
56
|
+
};
|
57
|
+
Recorder.prototype.mp3_start = function(set) {
|
58
|
+
return newContext(set);
|
59
|
+
};
|
60
|
+
var openList = { id: 0 };
|
61
|
+
var newContext = function(setOrNull) {
|
62
|
+
var worker = mp3Worker;
|
63
|
+
try {
|
64
|
+
if (!worker) {
|
65
|
+
var onmsg = function(e) {
|
66
|
+
var ed = e.data;
|
67
|
+
var cur = wk_ctxs[ed.id];
|
68
|
+
if (ed.action == "init") {
|
69
|
+
wk_ctxs[ed.id] = {
|
70
|
+
sampleRate: ed.sampleRate,
|
71
|
+
bitRate: ed.bitRate,
|
72
|
+
takeoff: ed.takeoff,
|
73
|
+
mp3Size: 0,
|
74
|
+
pcmSize: 0,
|
75
|
+
encArr: [],
|
76
|
+
encObj: new wk_lame.Mp3Encoder(1, ed.sampleRate, ed.bitRate)
|
77
|
+
};
|
78
|
+
} else if (!cur) {
|
79
|
+
return;
|
80
|
+
}
|
81
|
+
switch (ed.action) {
|
82
|
+
case "stop":
|
83
|
+
cur.encObj = null;
|
84
|
+
delete wk_ctxs[ed.id];
|
85
|
+
break;
|
86
|
+
case "encode":
|
87
|
+
cur.pcmSize += ed.pcm.length;
|
88
|
+
var buf = cur.encObj.encodeBuffer(ed.pcm);
|
89
|
+
if (buf.length > 0) {
|
90
|
+
if (cur.takeoff) {
|
91
|
+
self.postMessage({ action: "takeoff", id: ed.id, chunk: buf });
|
92
|
+
} else {
|
93
|
+
cur.mp3Size += buf.buffer.byteLength;
|
94
|
+
cur.encArr.push(buf.buffer);
|
95
|
+
}
|
96
|
+
}
|
97
|
+
break;
|
98
|
+
case "complete":
|
99
|
+
var buf = cur.encObj.flush();
|
100
|
+
if (buf.length > 0) {
|
101
|
+
if (cur.takeoff) {
|
102
|
+
self.postMessage({ action: "takeoff", id: ed.id, chunk: buf });
|
103
|
+
} else {
|
104
|
+
cur.mp3Size += buf.buffer.byteLength;
|
105
|
+
cur.encArr.push(buf.buffer);
|
106
|
+
}
|
107
|
+
}
|
108
|
+
var meta = wk_mp3TrimFix.fn(cur.encArr, cur.mp3Size, cur.pcmSize, cur.sampleRate);
|
109
|
+
self.postMessage({
|
110
|
+
action: ed.action,
|
111
|
+
id: ed.id,
|
112
|
+
blob: new Blob(cur.encArr, { type: "audio/mp3" }),
|
113
|
+
meta
|
114
|
+
});
|
115
|
+
break;
|
116
|
+
}
|
117
|
+
};
|
118
|
+
var jsCode = ");wk_lame();var wk_ctxs={};self.onmessage=" + onmsg;
|
119
|
+
jsCode += ";var wk_mp3TrimFix={rm:" + mp3TrimFix.rm + ",fn:" + mp3TrimFix.fn + "}";
|
120
|
+
var lamejsCode = Recorder.lamejs.toString();
|
121
|
+
var url = (window.URL || webkitURL).createObjectURL(
|
122
|
+
new Blob(["var wk_lame=(", lamejsCode, jsCode], { type: "text/javascript" })
|
123
|
+
);
|
124
|
+
worker = new Worker(url);
|
125
|
+
setTimeout(function() {
|
126
|
+
(window.URL || webkitURL).revokeObjectURL(url);
|
127
|
+
}, 1e4);
|
128
|
+
worker.onmessage = function(e) {
|
129
|
+
var data = e.data;
|
130
|
+
var ctx2 = openList[data.id];
|
131
|
+
if (ctx2) {
|
132
|
+
if (data.action == "takeoff") {
|
133
|
+
ctx2.set.takeoffEncodeChunk(new Uint8Array(data.chunk.buffer));
|
134
|
+
} else {
|
135
|
+
ctx2.call && ctx2.call(data);
|
136
|
+
ctx2.call = null;
|
137
|
+
}
|
138
|
+
}
|
139
|
+
};
|
140
|
+
}
|
141
|
+
var ctx = { worker, set: setOrNull, takeoffQueue: [] };
|
142
|
+
if (setOrNull) {
|
143
|
+
ctx.id = ++openList.id;
|
144
|
+
openList[ctx.id] = ctx;
|
145
|
+
worker.postMessage({
|
146
|
+
action: "init",
|
147
|
+
id: ctx.id,
|
148
|
+
sampleRate: setOrNull.sampleRate,
|
149
|
+
bitRate: setOrNull.bitRate,
|
150
|
+
takeoff: !!setOrNull.takeoffEncodeChunk,
|
151
|
+
x: new Int16Array(5)
|
152
|
+
});
|
153
|
+
} else {
|
154
|
+
worker.postMessage({
|
155
|
+
x: new Int16Array(5)
|
156
|
+
});
|
157
|
+
}
|
158
|
+
mp3Worker = worker;
|
159
|
+
return ctx;
|
160
|
+
} catch (e) {
|
161
|
+
worker && worker.terminate();
|
162
|
+
console.error(e);
|
163
|
+
return null;
|
164
|
+
}
|
165
|
+
};
|
166
|
+
Recorder.prototype.mp3_stop = function(startCtx) {
|
167
|
+
if (startCtx && startCtx.worker) {
|
168
|
+
startCtx.worker.postMessage({
|
169
|
+
action: "stop",
|
170
|
+
id: startCtx.id
|
171
|
+
});
|
172
|
+
startCtx.worker = null;
|
173
|
+
delete openList[startCtx.id];
|
174
|
+
var opens = -1;
|
175
|
+
for (var k in openList) {
|
176
|
+
opens++;
|
177
|
+
}
|
178
|
+
if (opens) {
|
179
|
+
Recorder.CLog("mp3 worker\u5269" + opens + "\u4E2A\u5728\u4E32\u884C\u7B49\u5F85", 3);
|
180
|
+
}
|
181
|
+
}
|
182
|
+
};
|
183
|
+
Recorder.prototype.mp3_encode = function(startCtx, pcm) {
|
184
|
+
if (startCtx && startCtx.worker) {
|
185
|
+
startCtx.worker.postMessage({
|
186
|
+
action: "encode",
|
187
|
+
id: startCtx.id,
|
188
|
+
pcm
|
189
|
+
});
|
190
|
+
}
|
191
|
+
};
|
192
|
+
Recorder.prototype.mp3_complete = function(startCtx, True, False, autoStop) {
|
193
|
+
var This = this;
|
194
|
+
if (startCtx && startCtx.worker) {
|
195
|
+
startCtx.call = function(data) {
|
196
|
+
mp3TrimFixSetMeta(data.meta, startCtx.set);
|
197
|
+
True(data.blob);
|
198
|
+
if (autoStop) {
|
199
|
+
This.mp3_stop(startCtx);
|
200
|
+
}
|
201
|
+
};
|
202
|
+
startCtx.worker.postMessage({
|
203
|
+
action: "complete",
|
204
|
+
id: startCtx.id
|
205
|
+
});
|
206
|
+
} else {
|
207
|
+
False("mp3\u7F16\u7801\u5668\u672A\u6253\u5F00");
|
208
|
+
}
|
209
|
+
};
|
210
|
+
Recorder.mp3ReadMeta = function(mp3Buffers, length) {
|
211
|
+
var parseInt_ES3 = typeof window == "object" ? window.parseInt : self.parseInt;
|
212
|
+
var u8arr0 = new Uint8Array(mp3Buffers[0] || []);
|
213
|
+
if (u8arr0.length < 4) {
|
214
|
+
return null;
|
215
|
+
}
|
216
|
+
var byteAt = function(idx2, u8) {
|
217
|
+
return ("0000000" + ((u8 || u8arr0)[idx2] || 0).toString(2)).substr(-8);
|
218
|
+
};
|
219
|
+
var b2 = byteAt(0) + byteAt(1);
|
220
|
+
var b4 = byteAt(2) + byteAt(3);
|
221
|
+
if (!/^1{11}/.test(b2)) {
|
222
|
+
return null;
|
223
|
+
}
|
224
|
+
var version = { "00": 2.5, 10: 2, 11: 1 }[b2.substr(11, 2)];
|
225
|
+
var layer = { "01": 3 }[b2.substr(13, 2)];
|
226
|
+
var sampleRate = {
|
227
|
+
1: [44100, 48e3, 32e3],
|
228
|
+
2: [22050, 24e3, 16e3],
|
229
|
+
2.5: [11025, 12e3, 8e3]
|
230
|
+
}[version];
|
231
|
+
sampleRate && (sampleRate = sampleRate[parseInt_ES3(b4.substr(4, 2), 2)]);
|
232
|
+
var bitRate = [
|
233
|
+
[0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160],
|
234
|
+
[0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320]
|
235
|
+
][version == 1 ? 1 : 0][parseInt_ES3(b4.substr(0, 4), 2)];
|
236
|
+
if (!version || !layer || !bitRate || !sampleRate) {
|
237
|
+
return null;
|
238
|
+
}
|
239
|
+
var duration = Math.round(length * 8 / bitRate);
|
240
|
+
var frame = layer == 1 ? 384 : layer == 2 ? 1152 : version == 1 ? 1152 : 576;
|
241
|
+
var frameDurationFloat = frame / sampleRate * 1e3;
|
242
|
+
var frameSize = Math.floor(frame * bitRate / 8 / sampleRate * 1e3);
|
243
|
+
var hasPadding = 0, seek = 0;
|
244
|
+
for (var i = 0; i < mp3Buffers.length; i++) {
|
245
|
+
var buf = mp3Buffers[i];
|
246
|
+
seek += buf.byteLength;
|
247
|
+
if (seek >= frameSize + 3) {
|
248
|
+
var buf8 = new Uint8Array(buf);
|
249
|
+
var idx = buf.byteLength - (seek - (frameSize + 3) + 1);
|
250
|
+
var ib4 = byteAt(idx, buf8);
|
251
|
+
hasPadding = ib4.charAt(6) == "1";
|
252
|
+
break;
|
253
|
+
}
|
254
|
+
}
|
255
|
+
if (hasPadding) {
|
256
|
+
frameSize++;
|
257
|
+
}
|
258
|
+
return {
|
259
|
+
version,
|
260
|
+
layer,
|
261
|
+
sampleRate,
|
262
|
+
bitRate,
|
263
|
+
duration,
|
264
|
+
size: length,
|
265
|
+
hasPadding,
|
266
|
+
frameSize,
|
267
|
+
frameDurationFloat
|
268
|
+
};
|
269
|
+
};
|
270
|
+
var mp3TrimFix = {
|
271
|
+
rm: Recorder.mp3ReadMeta,
|
272
|
+
fn: function(mp3Buffers, length, pcmLength, pcmSampleRate) {
|
273
|
+
var meta = this.rm(mp3Buffers, length);
|
274
|
+
if (!meta) {
|
275
|
+
return { err: "mp3\u975E\u9884\u5B9A\u683C\u5F0F" };
|
276
|
+
}
|
277
|
+
var pcmDuration = Math.round(pcmLength / pcmSampleRate * 1e3);
|
278
|
+
var num = Math.floor((meta.duration - pcmDuration) / meta.frameDurationFloat);
|
279
|
+
if (num > 0) {
|
280
|
+
var size = num * meta.frameSize - (meta.hasPadding ? 1 : 0);
|
281
|
+
length -= size;
|
282
|
+
var arr0 = 0, arrs = [];
|
283
|
+
for (var i = 0; i < mp3Buffers.length; i++) {
|
284
|
+
var arr = mp3Buffers[i];
|
285
|
+
if (size <= 0) {
|
286
|
+
break;
|
287
|
+
}
|
288
|
+
if (size >= arr.byteLength) {
|
289
|
+
size -= arr.byteLength;
|
290
|
+
arrs.push(arr);
|
291
|
+
mp3Buffers.splice(i, 1);
|
292
|
+
i--;
|
293
|
+
} else {
|
294
|
+
mp3Buffers[i] = arr.slice(size);
|
295
|
+
arr0 = arr;
|
296
|
+
size = 0;
|
297
|
+
}
|
298
|
+
}
|
299
|
+
var checkMeta = this.rm(mp3Buffers, length);
|
300
|
+
if (!checkMeta) {
|
301
|
+
arr0 && (mp3Buffers[0] = arr0);
|
302
|
+
for (var i = 0; i < arrs.length; i++) {
|
303
|
+
mp3Buffers.splice(i, 0, arrs[i]);
|
304
|
+
}
|
305
|
+
meta.err = "fix\u540E\u6570\u636E\u9519\u8BEF\uFF0C\u5DF2\u8FD8\u539F\uFF0C\u9519\u8BEF\u539F\u56E0\u4E0D\u660E";
|
306
|
+
}
|
307
|
+
var fix = meta.trimFix = {};
|
308
|
+
fix.remove = num;
|
309
|
+
fix.removeDuration = Math.round(num * meta.frameDurationFloat);
|
310
|
+
fix.duration = Math.round(length * 8 / meta.bitRate);
|
311
|
+
}
|
312
|
+
return meta;
|
313
|
+
}
|
314
|
+
};
|
315
|
+
var mp3TrimFixSetMeta = function(meta, set) {
|
316
|
+
var tag = "MP3\u4FE1\u606F ";
|
317
|
+
if (meta.sampleRate && meta.sampleRate != set.sampleRate || meta.bitRate && meta.bitRate != set.bitRate) {
|
318
|
+
Recorder.CLog(
|
319
|
+
tag + "\u548C\u8BBE\u7F6E\u7684\u4E0D\u5339\u914Dset:" + set.bitRate + "kbps " + set.sampleRate + "hz\uFF0C\u5DF2\u66F4\u65B0set:" + meta.bitRate + "kbps " + meta.sampleRate + "hz",
|
320
|
+
3,
|
321
|
+
set
|
322
|
+
);
|
323
|
+
set.sampleRate = meta.sampleRate;
|
324
|
+
set.bitRate = meta.bitRate;
|
325
|
+
}
|
326
|
+
var trimFix = meta.trimFix;
|
327
|
+
if (trimFix) {
|
328
|
+
tag += "Fix\u79FB\u9664" + trimFix.remove + "\u5E27" + trimFix.removeDuration + "ms -> " + trimFix.duration + "ms";
|
329
|
+
if (trimFix.remove > 2) {
|
330
|
+
meta.err = (meta.err ? meta.err + ", " : "") + "\u79FB\u9664\u5E27\u6570\u8FC7\u591A";
|
331
|
+
}
|
332
|
+
} else {
|
333
|
+
tag += (meta.duration || "-") + "ms";
|
334
|
+
}
|
335
|
+
if (meta.err) {
|
336
|
+
Recorder.CLog(tag, 1, meta.err, meta);
|
337
|
+
} else {
|
338
|
+
Recorder.CLog(tag, meta);
|
339
|
+
}
|
340
|
+
};
|
341
|
+
}
|
342
|
+
|
343
|
+
export { useMP3 };
|