ezuikit-js 7.5.0 → 7.6.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.
Files changed (76) hide show
  1. package/demos/base-demo/ezuikit.js +31252 -15566
  2. package/demos/base-demo/ezuikit_static/v65/v2/js/jsPluginV2-2.0.1.min.js +74 -11
  3. package/demos/base-demo/ezuikit_static/v66/v1/css/theme.css +121 -0
  4. package/demos/base-demo/ezuikit_static/v66/v1/js/AudioRenderer.js +225 -0
  5. package/demos/base-demo/ezuikit_static/v66/v1/js/SuperRender_10.js +395 -0
  6. package/demos/base-demo/ezuikit_static/v66/v1/js/SystemTransform.js +22 -0
  7. package/demos/base-demo/ezuikit_static/v66/v1/js/SystemTransform.js.mem +0 -0
  8. package/demos/base-demo/ezuikit_static/v66/v1/js/jsPluginV1-1.0.0.min.js +26 -0
  9. package/demos/base-demo/ezuikit_static/v66/v1/js/playctrl/AudioRenderer.js +225 -0
  10. package/demos/base-demo/ezuikit_static/v66/v1/js/playctrl/DecodeWorker.js +618 -0
  11. package/demos/base-demo/ezuikit_static/v66/v1/js/playctrl/Decoder.js +1 -0
  12. package/demos/base-demo/ezuikit_static/v66/v1/js/playctrl/JSPlaySDKInterface.js +2052 -0
  13. package/demos/base-demo/ezuikit_static/v66/v1/js/playctrl/SuperRender_10.js +396 -0
  14. package/demos/base-demo/ezuikit_static/v66/v1/js/playctrl/SuperRender_20.js +1 -0
  15. package/demos/base-demo/ezuikit_static/v66/v1/js/transform/SystemTransform.js +22 -0
  16. package/demos/base-demo/ezuikit_static/v66/v1/js/transform/SystemTransform.js.mem +0 -0
  17. package/demos/base-demo/ezuikit_static/v66/v1/js/transform/systemTransform-worker.min.js +1 -0
  18. package/demos/base-demo/ezuikit_static/v66/v1/js/tts-v4.js +346 -0
  19. package/demos/base-demo/ezuikit_static/v66/v1/rec/datepicker.js +1522 -0
  20. package/demos/base-demo/ezuikit_static/v66/v1/rec/datepicker.min.css +36 -0
  21. package/demos/base-demo/ezuikit_static/v66/v1/rec/datepicker.zh-CN.js +19 -0
  22. package/demos/base-demo/ezuikit_static/v66/v1/rec/jquery.min.js +2 -0
  23. package/demos/base-demo/ezuikit_static/v66/v1/speed/speed.css +144 -0
  24. package/demos/base-demo/ezuikit_static/v66/v1/talk/adapeter.js +5497 -0
  25. package/demos/base-demo/ezuikit_static/v66/v1/talk/janus.js +3507 -0
  26. package/demos/base-demo/ezuikit_static/v66/v1/talk/tts-v4.js +346 -0
  27. package/demos/base-demo/ezuikit_static/v66/v2/css/theme.css +121 -0
  28. package/demos/base-demo/ezuikit_static/v66/v2/js/Decoder.js +9198 -0
  29. package/demos/base-demo/ezuikit_static/v66/v2/js/Decoder.wasm +0 -0
  30. package/demos/base-demo/ezuikit_static/v66/v2/js/jsPluginV2-2.0.1.min.js +15968 -0
  31. package/demos/base-demo/ezuikit_static/v66/v2/rec/datepicker.js +1522 -0
  32. package/demos/base-demo/ezuikit_static/v66/v2/rec/datepicker.min.css +36 -0
  33. package/demos/base-demo/ezuikit_static/v66/v2/rec/datepicker.zh-CN.js +19 -0
  34. package/demos/base-demo/ezuikit_static/v66/v2/rec/jquery.min.js +2 -0
  35. package/demos/base-demo/ezuikit_static/v66/v2/speed/speed.css +144 -0
  36. package/demos/base-demo/ezuikit_static/v66/v2/talk/adapeter.js +5497 -0
  37. package/demos/base-demo/ezuikit_static/v66/v2/talk/janus.js +3507 -0
  38. package/demos/base-demo/ezuikit_static/v66/v2/talk/tts-v4.js +343 -0
  39. package/ezuikit.js +32877 -26317
  40. package/ezuikit_static/v66/v1/css/theme.css +121 -0
  41. package/ezuikit_static/v66/v1/js/AudioRenderer.js +225 -0
  42. package/ezuikit_static/v66/v1/js/SuperRender_10.js +395 -0
  43. package/ezuikit_static/v66/v1/js/SystemTransform.js +22 -0
  44. package/ezuikit_static/v66/v1/js/SystemTransform.js.mem +0 -0
  45. package/ezuikit_static/v66/v1/js/jsPluginV1-1.0.0.min.js +26 -0
  46. package/ezuikit_static/v66/v1/js/playctrl/AudioRenderer.js +225 -0
  47. package/ezuikit_static/v66/v1/js/playctrl/DecodeWorker.js +618 -0
  48. package/ezuikit_static/v66/v1/js/playctrl/Decoder.js +1 -0
  49. package/ezuikit_static/v66/v1/js/playctrl/JSPlaySDKInterface.js +2052 -0
  50. package/ezuikit_static/v66/v1/js/playctrl/SuperRender_10.js +396 -0
  51. package/ezuikit_static/v66/v1/js/playctrl/SuperRender_20.js +1 -0
  52. package/ezuikit_static/v66/v1/js/transform/SystemTransform.js +22 -0
  53. package/ezuikit_static/v66/v1/js/transform/SystemTransform.js.mem +0 -0
  54. package/ezuikit_static/v66/v1/js/transform/systemTransform-worker.min.js +1 -0
  55. package/ezuikit_static/v66/v1/js/tts-v4.js +346 -0
  56. package/ezuikit_static/v66/v1/rec/datepicker.js +1522 -0
  57. package/ezuikit_static/v66/v1/rec/datepicker.min.css +36 -0
  58. package/ezuikit_static/v66/v1/rec/datepicker.zh-CN.js +19 -0
  59. package/ezuikit_static/v66/v1/rec/jquery.min.js +2 -0
  60. package/ezuikit_static/v66/v1/speed/speed.css +144 -0
  61. package/ezuikit_static/v66/v1/talk/adapeter.js +5497 -0
  62. package/ezuikit_static/v66/v1/talk/janus.js +3507 -0
  63. package/ezuikit_static/v66/v1/talk/tts-v4.js +346 -0
  64. package/ezuikit_static/v66/v2/css/theme.css +121 -0
  65. package/ezuikit_static/v66/v2/js/Decoder.js +9198 -0
  66. package/ezuikit_static/v66/v2/js/Decoder.wasm +0 -0
  67. package/ezuikit_static/v66/v2/js/jsPluginV2-2.0.1.min.js +15968 -0
  68. package/ezuikit_static/v66/v2/rec/datepicker.js +1522 -0
  69. package/ezuikit_static/v66/v2/rec/datepicker.min.css +36 -0
  70. package/ezuikit_static/v66/v2/rec/datepicker.zh-CN.js +19 -0
  71. package/ezuikit_static/v66/v2/rec/jquery.min.js +2 -0
  72. package/ezuikit_static/v66/v2/speed/speed.css +144 -0
  73. package/ezuikit_static/v66/v2/talk/adapeter.js +5497 -0
  74. package/ezuikit_static/v66/v2/talk/janus.js +3507 -0
  75. package/ezuikit_static/v66/v2/talk/tts-v4.js +343 -0
  76. package/package.json +1 -1
@@ -3049,6 +3049,10 @@ const loadJSByBlobToHeader = (url, callback, isReady) => {
3049
3049
  }
3050
3050
  }
3051
3051
  }
3052
+ if (oJSON && oJSON.errorCode) {
3053
+ //推流异常时返回异常信息
3054
+ cbMessage(oJSON);
3055
+ }
3052
3056
  } else {
3053
3057
  let dataObj = {};
3054
3058
  let dataBuf = new Uint8Array(e.data);
@@ -3753,7 +3757,6 @@ const loadJSByBlobToHeader = (url, callback, isReady) => {
3753
3757
  //宽、高
3754
3758
  var nWidth = 0;
3755
3759
  var nHeight = 0;
3756
- var g_port;
3757
3760
  // 录制
3758
3761
  // var aHead = [];
3759
3762
  function downloadFile(oData, szName) {
@@ -3901,9 +3904,26 @@ class JSPluginV2 {
3901
3904
  console.log("1.获取播放库端口号 g_port:" + _this.g_port);
3902
3905
  // 端口已经使用,设置为不可用状态
3903
3906
  this.portAvailable = false;
3907
+
3908
+ //xuehb 开始取流 4
3909
+ if (_this.EventCallback && _this.EventCallback.openStreamCallback) {
3910
+ console.log('开始取流-----v2');
3911
+ _this.EventCallback.openStreamCallback();
3912
+ }
3904
3913
  _this.oStreamClient.openStream(szUrl, oParams, data => {
3914
+ if (data.errorCode && data.errorCode != '1') {
3915
+ //推流异常时触发errorHandler
3916
+ if (_this.EventCallback && _this.EventCallback.pluginErrorHandler) {
3917
+ _this.EventCallback.pluginErrorHandler(iWndNum, data.errorCode, data);
3918
+ }
3919
+ }
3905
3920
  if (data.bHead) {
3906
3921
  //判断是否开启预览,用于初始化播放库,回放跳片段是会返回媒体头,不能只判断是否为媒体头
3922
+ //xuehb 完成取流返回流头 5
3923
+ if (_this.EventCallback && _this.EventCallback.getStreamHeaderCallback) {
3924
+ console.log('完成取流返回流头');
3925
+ _this.EventCallback.getStreamHeaderCallback();
3926
+ }
3907
3927
  _this.PlayM4_openStream(_this.g_port, data.buf);
3908
3928
  _this.aHead = new Uint8Array(data.buf);
3909
3929
  _this.pCanvasData = Module._malloc(128); //通过emscripten分配C/C++中的堆内存
@@ -3920,6 +3940,28 @@ class JSPluginV2 {
3920
3940
  aKeyData = null;
3921
3941
  let resP = Module._JSPlayM4_Play(_this.g_port, _this.pCanvasData); //pCanvasString或pCanvasData
3922
3942
  console.log("4.开始播放 resP:" + resP);
3943
+ try {
3944
+ const getQueryString = (name, url) => {
3945
+ const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
3946
+ const r = url.match(reg);
3947
+ if (r != null) {
3948
+ return unescape(r[2]);
3949
+ }
3950
+ return null;
3951
+ };
3952
+ const date = getQueryString('begin', oParams.playURL);
3953
+ const year = parseInt(date.slice(0, 4));
3954
+ const month = parseInt(date.slice(4, 6));
3955
+ const day = parseInt(date.slice(6, 8));
3956
+ const hour = parseInt(date.slice(9, 11));
3957
+ const min = parseInt(date.slice(11, 13));
3958
+ const second = parseInt(date.slice(13, 15)) + 3;
3959
+ const setRes = Module._JSPlayM4_SetGlobalBaseTime(_this.g_port, year, month, day, hour, min, second, 0);
3960
+ console.log('设置OSD时间: ', _this.g_port, year + ':' + month + ':' + day + ':' + hour + ':' + min + ':' + second + ':' + 0);
3961
+ console.log('设置OSD时间res:', setRes);
3962
+ } catch (error) {
3963
+ console.log('_JSPlayM4_SetGlobalBaseTime:', error);
3964
+ }
3923
3965
  _this.bPlay = true;
3924
3966
  _this.bPlayIng = false;
3925
3967
  // 设置一系列回调
@@ -3933,13 +3975,32 @@ class JSPluginV2 {
3933
3975
  Module._JSPlayM4_RenderPrivateData(0, 4, 0);
3934
3976
  Module._JSPlayM4_RenderPrivateData(0, 16, 0);
3935
3977
  this.firstFlag = true;
3978
+ this.firstGetData = true;
3936
3979
  resolve(resP);
3937
3980
  } else {
3981
+ if (this.firstGetData) {
3982
+ // 第一次获取数据
3983
+ this.firstGetData = false;
3984
+
3985
+ //xuehb 返回视频流(首次) 6
3986
+ if (_this.EventCallback && _this.EventCallback.getVideoStreamCallback) {
3987
+ _this.EventCallback.getVideoStreamCallback();
3988
+ }
3989
+ }
3938
3990
  if (this.firstFlag) {
3939
3991
  let oFrameInfo = Module._JSPlayM4_GetFrameInfo(this.g_port);
3940
3992
  var nWidth = Module.HEAP32[oFrameInfo + 12 >> 2];
3941
3993
  var nHeight = Module.HEAP32[oFrameInfo + 16 >> 2];
3942
3994
  if (nWidth) {
3995
+ //xuehb 首屏展示 7
3996
+ if (_this.EventCallback && _this.EventCallback.appearFirstFrameCallback) {
3997
+ console.log('出现首帧画面(播放成功)------多线程');
3998
+ _this.EventCallback.appearFirstFrameCallback();
3999
+ }
4000
+ //xuehb 平均成功取流的出流耗时 8
4001
+ if (_this.EventCallback && _this.EventCallback.averageStreamSuccessCallback) {
4002
+ _this.EventCallback.averageStreamSuccessCallback();
4003
+ }
3943
4004
  console.log("首帧展示", nWidth, nHeight);
3944
4005
  this.firstFlag = false;
3945
4006
  if (document.getElementById(this.szId + '-player-tmp')) {
@@ -3991,13 +4052,13 @@ class JSPluginV2 {
3991
4052
  //websocket onopen事件触发
3992
4053
  _this.szStreamUUID = id;
3993
4054
  _this.oStreamClient.startPlay(id).then(() => {
3994
- let resSSOM = Module._JSPlayM4_SetStreamOpenMode(g_port, 1);
4055
+ let resSSOM = Module._JSPlayM4_SetStreamOpenMode(_this.g_port, 1);
3995
4056
  console.log("2.设置流模式 resSSOM:" + resSSOM);
3996
4057
  }).catch(err => {
3997
4058
  console.log("err", err);
3998
4059
  _this._doRelease();
3999
4060
  _this.bPlayIng = false;
4000
- reject(err);
4061
+ reject(err.oError);
4001
4062
  });
4002
4063
  }, function (oError) {
4003
4064
  //websocekt 未进入onopen
@@ -4471,8 +4532,11 @@ class JSPluginV2 {
4471
4532
  }
4472
4533
  JS_Speed(nextRate) {
4473
4534
  this.oStreamClient.setPlayRate(this.szStreamUUID, nextRate);
4535
+ window.Module._JSPlayM4_SetDecodeFrameType(1);
4536
+ const fastRes = window.Module._JSPlayM4_Fast(this.g_port);
4474
4537
  this.iRate = nextRate;
4475
4538
  console.log("开启倍速播放", nextRate);
4539
+ console.log("开启倍速播放res:", fastRes);
4476
4540
  }
4477
4541
  JS_Seek(iWndNum, szStartTime, szStopTime) {
4478
4542
  let oPromise = new Promise((resolve, reject) => {
@@ -4574,19 +4638,18 @@ class JSPluginV2 {
4574
4638
  if (this.playURL.indexOf("playback") !== -1) {
4575
4639
  this.playURL = this.playURL.replace(/begin=[0-9]{8}T[0-9]{6}Z/gi, `begin=${this.bPauseTime.slice(0, 8)}T${this.bPauseTime.slice(8, 14)}Z`);
4576
4640
  }
4641
+ console.log('this.playURL:', this.playURL);
4642
+ console.log('this.bPauseTime:', this.bPauseTime);
4643
+ if (this.playURL.indexOf("cloudplayback") !== -1) {
4644
+ this.playURL = this.playURL.replace(/"startTime":[0-9]{13}/gi, `"startTime":${this.bPauseTime}`);
4645
+ }
4577
4646
  this.bPause = false;
4578
4647
  this.JS_Play(this.szUrl, {
4579
4648
  playURL: this.playURL
4580
4649
  }).then(data => {
4581
- resolve({
4582
- code: 1,
4583
- msg: "恢复成功"
4584
- });
4650
+ resolve(data);
4585
4651
  }).catch(err => {
4586
- reject({
4587
- code: 0,
4588
- msg: "恢复失败"
4589
- });
4652
+ reject(err);
4590
4653
  });
4591
4654
  });
4592
4655
  return promise;
@@ -0,0 +1,121 @@
1
+ .footer-controls .theme-icon-item {
2
+ margin: 0 1%;
3
+ }
4
+ .footer-controls.themeEditing .theme-icon-item {
5
+ position: relative;
6
+ /* margin: 0 8px; */
7
+ }
8
+ .footer-controls .footer-controls-left{
9
+ margin-left: 12px;
10
+ }
11
+ .footer-controls.themeEditing .footer-controls-left .theme-icon-item {
12
+ /* margin-left: 12px; */
13
+ }
14
+ .footer-controls.themeEditing .footer-controls-right .theme-icon-item {
15
+ /* margin-right: 12px; */
16
+ }
17
+ .footer-controls .theme-icon-item .icon-move {
18
+ display: none;
19
+ }
20
+ .footer-controls.themeEditing .theme-icon-item:hover .icon-move {
21
+ display: block;
22
+ }
23
+ .footer-controls.themeEditing .footer-controls-left .theme-icon-item:first-child .icon-move.left{
24
+ display: none;
25
+ }
26
+ .footer-controls.themeEditing .footer-controls-left .theme-icon-item:nth-last-child(1) .icon-move.right{
27
+ display: none;
28
+ }
29
+ .footer-controls .footer-controls-right {
30
+ margin-right: 12px;
31
+ }
32
+
33
+ .footer-controls.themeEditing .footer-controls-right .theme-icon-item:first-child .icon-move.left{
34
+ display: none;
35
+ }
36
+ .footer-controls.themeEditing .footer-controls-right .theme-icon-item:nth-last-child(1) .icon-move.right{
37
+ display: none;
38
+ }
39
+
40
+ .header-controls .theme-icon-item {
41
+ margin: 0 1%;
42
+ }
43
+ .header-controls.themeEditing .theme-icon-item {
44
+ position: relative;
45
+ /* margin: 0 8px; */
46
+ }
47
+ .header-controls.themeEditing .header-controls-left {
48
+ margin-left: 12px;
49
+ }
50
+ .header-controls.themeEditing .header-controls-right {
51
+ margin-right: 12px;
52
+ }
53
+ .header-controls .theme-icon-item .icon-move {
54
+ display: none;
55
+ }
56
+ .header-controls.themeEditing .theme-icon-item:hover .icon-move {
57
+ display: block;
58
+ }
59
+ .header-controls.themeEditing .header-controls-left .theme-icon-item:first-child .icon-move.left{
60
+ display: none;
61
+ }
62
+ .header-controls.themeEditing .header-controls-left .theme-icon-item:nth-last-child(1) .icon-move.right{
63
+ display: none;
64
+ }
65
+
66
+ .header-controls.themeEditing .header-controls-right .theme-icon-item:first-child .icon-move.left{
67
+ display: none;
68
+ }
69
+ .header-controls.themeEditing .header-controls-right .theme-icon-item:nth-last-child(1) .icon-move.right{
70
+ display: none;
71
+ }
72
+
73
+
74
+ .time-area {
75
+ position: absolute;
76
+ color: #FFFFFF;
77
+ width: 68px;
78
+ height: 24px;
79
+ line-height: 24px;
80
+ background: #00000050;
81
+ border-radius: 12px;
82
+ display: none;
83
+ align-content: center;
84
+ left: calc(50% - 34px);
85
+ top: -30px;
86
+ align-items: center;
87
+ justify-content: space-around;
88
+ padding-left: 4px;
89
+ z-index: 9999999;
90
+
91
+ }
92
+ .time-area .dot {
93
+ display: inline-block;
94
+ width: 8px;
95
+ height: 8px;
96
+ background: red;
97
+ border-radius: 100%;
98
+ margin: 0 4px 1px 4px;
99
+ }
100
+
101
+
102
+ /* .footer-controls.themeEditing .theme-icon-item {
103
+ position: relative;
104
+ margin: 0 8px;
105
+ }
106
+ .footer-controls.themeEditing .footer-controls-left .theme-icon-item:nth-child(1) .ezuikit-theme-icon >span:first-child{
107
+ display: none!important;
108
+ }
109
+ .footer-controls.themeEditing .footer-controls-left .theme-icon-item:nth-last-child(2) .ezuikit-theme-icon >span:nth-child(3){
110
+ display: none!important;
111
+ }
112
+
113
+ .footer-controls.themeEditing .theme-icon-item:hover .ezuikit-theme-icon {
114
+ display: block!important;
115
+ }
116
+ .footer-controls.themeEditing .footer-controls-right .theme-icon-item:nth-child(1) .ezuikit-theme-icon >span:first-child{
117
+ display: none!important;
118
+ }
119
+ .footer-controls.themeEditing .footer-controls-right .theme-icon-item:nth-last-child(1) .ezuikit-theme-icon >span:nth-child(3){
120
+ display: none!important;
121
+ } */
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Created by wangweijie5 on 2016/12/16.
3
+ */
4
+
5
+ "use strict";
6
+
7
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
8
+
9
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
10
+
11
+ var __instance = function () {
12
+ var instance = void 0;
13
+ return function (newInstance) {
14
+ if (newInstance) instance = newInstance;
15
+ return instance;
16
+ };
17
+ }();
18
+
19
+ var AudioRenderer = function () {
20
+ function AudioRenderer() {
21
+ _classCallCheck(this, AudioRenderer);
22
+
23
+ if (__instance()) return __instance();
24
+
25
+ // 确保只有单例
26
+ if (AudioRenderer.unique !== undefined) {
27
+ return AudioRenderer.unique;
28
+ }
29
+
30
+ AudioRenderer.unique = this;
31
+
32
+ this.oAudioContext = null;
33
+ this.currentVolume = 0.8; // 初始音量
34
+ this.bSetVolume = false;
35
+ this.gainNode = null;
36
+ this.iWndNum = -1; // 窗口号
37
+ this.mVolumes = new Map(); // 用于存储所有音量
38
+
39
+ // Init AudioContext
40
+ var AudioContext = window.AudioContext || window.webkitAudioContext;
41
+ this.oAudioContext = new AudioContext();
42
+
43
+ this.writeString = function (view, offset, string) {
44
+ for (var i = 0; i < string.length; i++) {
45
+ view.setUint8(offset + i, string.charCodeAt(i));
46
+ }
47
+ };
48
+
49
+ this.setBufferToDataview = function (output, offset, input) {
50
+ for (var i = 0; i < input.length; i++, offset++) {
51
+ output.setUint8(offset, input[i]);
52
+ }
53
+ };
54
+
55
+ __instance(this);
56
+ }
57
+
58
+ /**
59
+ * @synopsis 音频播放
60
+ *
61
+ * @param dataBuf [IN] 音频缓存
62
+ * @param dataLen [IN] 缓存长度
63
+ * @param audioInfo [IN] 音频参数
64
+ *
65
+ * @returns 状态码
66
+ */
67
+
68
+
69
+ _createClass(AudioRenderer, [{
70
+ key: 'Play',
71
+ value: function Play(dataBuf, dataLen, audioInfo) {
72
+ var bufferData = new ArrayBuffer(44 + dataLen);
73
+ var viewTalk = new DataView(bufferData);
74
+ var sampleRates = audioInfo.samplesPerSec;
75
+ var channels = audioInfo.channels;
76
+ var bitsPerSample = audioInfo.bitsPerSample;
77
+
78
+ //console.log("audiorender sampleRates"+sampleRates+"channels:"+channels+"bitsPerSample:"+bitsPerSample);
79
+
80
+ /* RIFF identifier */
81
+ this.writeString(viewTalk, 0, 'RIFF');
82
+ /* file length */
83
+ viewTalk.setUint32(4, 32 + dataLen * 2, true);
84
+ /* RIFF type */
85
+ this.writeString(viewTalk, 8, 'WAVE');
86
+ /* format chunk identifier */
87
+ this.writeString(viewTalk, 12, 'fmt ');
88
+ /* format chunk length */
89
+ viewTalk.setUint32(16, 16, true);
90
+ /* sample format (raw) */
91
+ viewTalk.setUint16(20, 1, true);
92
+ /* channel count */
93
+ viewTalk.setUint16(22, channels, true);
94
+ /* sample rate */
95
+ viewTalk.setUint32(24, sampleRates, true);
96
+ /* byte rate (sample rate * block align) */
97
+ viewTalk.setUint32(28, sampleRates * 2, true);
98
+ /* block align (channel count * bytes per sample)/8 */
99
+ viewTalk.setUint16(32, channels * bitsPerSample / 8, true);
100
+ /* bits per sample */
101
+ viewTalk.setUint16(34, bitsPerSample, true);
102
+ /* data chunk identifier */
103
+ this.writeString(viewTalk, 36, 'data');
104
+ /* data chunk length */
105
+ viewTalk.setUint32(40, dataLen, true);
106
+ this.setBufferToDataview(viewTalk, 44, dataBuf);
107
+
108
+ var self = this;
109
+ this.oAudioContext.decodeAudioData(viewTalk.buffer, function (buffer) {
110
+
111
+ var bufferSource = self.oAudioContext.createBufferSource();
112
+ if (bufferSource == null) {
113
+ return -1;
114
+ }
115
+
116
+ bufferSource.buffer = buffer;
117
+ bufferSource.start(0);
118
+
119
+ if (self.gainNode == null || self.bSetVolume) {
120
+ self.gainNode = self.oAudioContext.createGain();
121
+ // self.gainNode.gain.value = self.currentVolume;
122
+ // // self.currentVolume = self.gainNode.gain.value;
123
+ // self.gainNode.connect(self.oAudioContext.destination);
124
+
125
+ self.bSetVolume = false;
126
+ }
127
+
128
+ self.gainNode.gain.value = self.currentVolume;
129
+ // self.currentVolume = self.gainNode.gain.value;
130
+ self.gainNode.connect(self.oAudioContext.destination);
131
+
132
+ bufferSource.connect(self.gainNode);
133
+ }, function (e) {
134
+ console.log("decode error");
135
+ return -1;
136
+ });
137
+
138
+ return 0;
139
+ }
140
+
141
+ /**
142
+ * @synopsis 停止播放
143
+ *
144
+ * @returns 返回音量
145
+ */
146
+
147
+ }, {
148
+ key: 'Stop',
149
+ value: function Stop() {
150
+ if (this.gainNode != null) {
151
+ this.gainNode.disconnect();
152
+ this.gainNode = null;
153
+ }
154
+
155
+ // this.oAudioContext.close();
156
+
157
+ // AudioRenderer.unique = undefined;
158
+ // __instance() = null;
159
+ return true;
160
+ }
161
+
162
+ /**
163
+ * @synopsis 设置音量
164
+ *
165
+ * @param iVolume [IN] 音量
166
+ *
167
+ * @returns 状态码
168
+ */
169
+
170
+ }, {
171
+ key: 'SetVolume',
172
+ value: function SetVolume(iVolume) {
173
+ this.bSetVolume = true;
174
+ this.currentVolume = iVolume;
175
+
176
+ // 储存当前窗口设置音量值
177
+ this.mVolumes.set(this.iWndNum, iVolume);
178
+ return true;
179
+ }
180
+
181
+ /**
182
+ * @synopsis 设置窗口号
183
+ *
184
+ * @param iWndNum [IN] 窗口号
185
+ *
186
+ * @returns 状态码
187
+ */
188
+
189
+ }, {
190
+ key: 'SetWndNum',
191
+ value: function SetWndNum(iWndNum) {
192
+ this.iWndNum = iWndNum;
193
+
194
+ // 获取当前窗口设置音量值
195
+ var iVolume = this.mVolumes.get(iWndNum);
196
+ if (iVolume == undefined) {
197
+ iVolume = 0.8; // 默认音量
198
+ }
199
+ this.currentVolume = iVolume;
200
+
201
+ return true;
202
+ }
203
+
204
+ /**
205
+ * @synopsis 获取音量
206
+ *
207
+ * @returns 返回音量
208
+ */
209
+
210
+ }, {
211
+ key: 'GetVolume',
212
+ value: function GetVolume() {
213
+ // 获取当前窗口设置音量值
214
+ var iVolume = this.mVolumes.get(this.iWndNum);
215
+ if (iVolume == undefined) {
216
+ iVolume = 0.8; // 默认音量
217
+ }
218
+
219
+ return iVolume;
220
+ }
221
+ }]);
222
+ window.AudioRenderer = AudioRenderer;
223
+ return AudioRenderer;
224
+ }();
225
+ //# sourceMappingURL=AudioRenderer.js.map