@94ai/softphone 4.0.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.
@@ -0,0 +1,21 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDczCCAlugAwIBAgIUXpQZ+3iWD7bb+5y4bQmV0h7IX60wDQYJKoZIhvcNAQEL
3
+ BQAwJzELMAkGA1UEBhMCVVMxGDAWBgNVBAMMD0V4YW1wbGUtUm9vdC1DQTAeFw0x
4
+ OTA5MTkwNDA0MjdaFw0yMjA3MDkwNDA0MjdaMG0xCzAJBgNVBAYTAlVTMRIwEAYD
5
+ VQQIDAlZb3VyU3RhdGUxETAPBgNVBAcMCFlvdXJDaXR5MR0wGwYDVQQKDBRFeGFt
6
+ cGxlLUNlcnRpZmljYXRlczEYMBYGA1UEAwwPbG9jYWxob3N0LmxvY2FsMIIBIjAN
7
+ BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoud24POt5P3Tx6hLOHSQeW/W+nk+
8
+ rE4/3M/wAXN6HXKZApb8h2xkXbwUmEZ1qenxZz6bQ/i9cBgZrEjtg1z+Vw5fa01L
9
+ mWUIVSd5U+xOazJP6276JGs4nwz0H5FP8BsghVjX26TF27XXzI6eg0SEOJWCoyfB
10
+ E7S/4/wuXeAdERu+KSQadtT8B4Q5Y0AGm/AK9nQYsDgBkn5oibRRhwzFPiWOJN2N
11
+ W9M2SgQfOQXpf4kWrt+IJ4UUWZ6gX7sXwhAV3rYkp1jCCZEClhR4AP22M2+1Ebxf
12
+ 21WiHo8lrtnF7NMHqFiVd8dk9XutoQ94/5VUXAPwX8rg2ina6p9wcJJAZQIDAQAB
13
+ o1EwTzAfBgNVHSMEGDAWgBTy0wbamFk9icegmCuR2nwNxn8lvzAJBgNVHRMEAjAA
14
+ MAsGA1UdDwQEAwIE8DAUBgNVHREEDTALgglsb2NhbGhvc3QwDQYJKoZIhvcNAQEL
15
+ BQADggEBABUZaFT9qdvrjEpWHlCFjsy2CmrCx4ns5dHbPoCQz8R7GOQn35A1hAS5
16
+ 65UbM0+sU193jcswgv19AfXw3NHP9FQNnMZ5nS0iFGCv7D418oxOhjnnSo+ExTf7
17
+ 7iKq/9Jc3hlWD6Te1INwlHWT1VYU2LeUf7rShsY1SgDjhkHk2B+s63OVO/aMm1XH
18
+ Lnhn7jdhdgyEcttD4iOmvDPCz13zCSyM8l1vlg+uX3/OpYJIB0onXPNI5Kn25uLQ
19
+ ujLU77qhVuarC/gUx1yTHpIrwcTii4I1kTMgivxe0yBewWtuArgaMknP3pd7X2fN
20
+ VTfNjktqeAK+qZCqLcqjJfZzKimxuH8=
21
+ -----END CERTIFICATE-----
@@ -0,0 +1,28 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCi53bg863k/dPH
3
+ qEs4dJB5b9b6eT6sTj/cz/ABc3odcpkClvyHbGRdvBSYRnWp6fFnPptD+L1wGBms
4
+ SO2DXP5XDl9rTUuZZQhVJ3lT7E5rMk/rbvokazifDPQfkU/wGyCFWNfbpMXbtdfM
5
+ jp6DRIQ4lYKjJ8ETtL/j/C5d4B0RG74pJBp21PwHhDljQAab8Ar2dBiwOAGSfmiJ
6
+ tFGHDMU+JY4k3Y1b0zZKBB85Bel/iRau34gnhRRZnqBfuxfCEBXetiSnWMIJkQKW
7
+ FHgA/bYzb7URvF/bVaIejyWu2cXs0weoWJV3x2T1e62hD3j/lVRcA/BfyuDaKdrq
8
+ n3BwkkBlAgMBAAECggEBAIoP75GRFETp1q309ONA7xzsa19WmIZBvyAuXvNr4gfJ
9
+ EuK+AgHoHFvQxgeUV66MpdphlgeSbULuOfvoxts5WhmABeCT3sl/dgNtdAdrU77I
10
+ IjGfmYJ6GL+7o76JUh1lcDdzZ2YwjLu7rswf5znLPOAT3mbWj21bF/JpzQYkpZ3T
11
+ 8Z8xIjCHaZjjYhc3BXTqsC916wCgo3xrMFuuVvHJNVFQLyrdVONa9ny0EJeqipDf
12
+ 3L/InMi5Dv+Mi0jMsGv3FgCTpgUmtJL1csKOyH4uE4AB4YQFmbGjpYjHXpp4zz8b
13
+ THmBMxoti6bL3gzbKm05r55b/TUwj4YeUmpUjdz0D/UCgYEA2MFGaCYYVT4D8vQj
14
+ 4siXwoEwOrLhV+p1DEsk/yo6i5qyJLNU5Amy2u2B6Zk/rM9sKFmFovgYR4ogLdKQ
15
+ asoCV6JoKrtldqT8P55DXxXburbPBpOa9kV3yc8gIUNHIVa4KXgup5a1LS39wJM9
16
+ /obwdt5AVQY+gnzfUIzqoS1BdVMCgYEAwGYrxsytBro/9e4Dxy8iHMzwFPRbbrvw
17
+ nYu+h32MnnHt0QzHI1sYpYzPEFofNXyYhQJb7NuWVofOmEi4+WSgZMx1ZjUaC0J3
18
+ AcVTq9dQ25izF6J1XOLrQag9ufY9EXFtpMUE1mPH1VZ4oFVI+vcF/gReTCgLLbHF
19
+ YNJdqmNmRGcCgYAzw3xv9OEMwmGpDLrhNuxfLAD7k6qTF0/anrt4IHqYylnOv/D/
20
+ AH3xIJVM1ydIusRmonJyp/MMaqUirE2G4zVJ/mQICHbDrcT74GzQcWTnIy8vr+Jq
21
+ +84OqONQbkO3Z4FVjfj+VtRvtLML4V4Fwe39RThx1arp+K5QC0chNLCUNwKBgC/Y
22
+ uMZFnDnyE3nraREdzZPv+zya0ConntzvJcC4HkJA/u1gCh3mx6hT7iKY5u38QEnD
23
+ nmy25xo5x8zjOOz8c07d8cwrJIDsVIAiPH6dm0QhI1ibVCh3Xh4D4uXeMK2n0aaK
24
+ QHu4cLfDO1hUHUQcLmdPWswBoVYJwZYkepqnAYW9AoGAU9OZXkLySmLO+Hqnfnqu
25
+ b8Uk448QK/AQfqeCqIEFyXELqEGaP5dN08uqqoSJZ+RNlfnnJP+B/kZtjBavEfHI
26
+ +SVoyIXnz0fR9OByM/Pwxfa6i5qatMPIWKmKQ8H4A6H6cnDT9OI8h2I2GwF3uw7n
27
+ OLn5GfsNI0aM8EEfynUI/ck=
28
+ -----END PRIVATE KEY-----
@@ -0,0 +1,131 @@
1
+ function PCMPlayer(option) {
2
+ this.init(option);
3
+ }
4
+
5
+ PCMPlayer.prototype.init = function(option) {
6
+ var defaults = {
7
+ encoding: '16bitInt',
8
+ channels: 1,
9
+ sampleRate: 8000,
10
+ flushingTime: 1000
11
+ };
12
+ this.option = Object.assign({}, defaults, option);
13
+ this.samples = new Float32Array();
14
+ this.flush = this.flush.bind(this);
15
+ this.interval = setInterval(this.flush, this.option.flushingTime);
16
+ this.maxValue = this.getMaxValue();
17
+ this.typedArray = this.getTypedArray();
18
+ this.createContext();
19
+ };
20
+
21
+ PCMPlayer.prototype.getMaxValue = function () {
22
+ var encodings = {
23
+ '8bitInt': 128,
24
+ '16bitInt': 32768,
25
+ '32bitInt': 2147483648,
26
+ '32bitFloat': 1
27
+ }
28
+
29
+ return encodings[this.option.encoding] ? encodings[this.option.encoding] : encodings['16bitInt'];
30
+ };
31
+
32
+ PCMPlayer.prototype.getTypedArray = function () {
33
+ var typedArrays = {
34
+ '8bitInt': Int8Array,
35
+ '16bitInt': Int16Array,
36
+ '32bitInt': Int32Array,
37
+ '32bitFloat': Float32Array
38
+ }
39
+
40
+ return typedArrays[this.option.encoding] ? typedArrays[this.option.encoding] : typedArrays['16bitInt'];
41
+ };
42
+
43
+ PCMPlayer.prototype.createContext = function() {
44
+ this.audioCtx = new (window.AudioContext || window.webkitAudioContext)();
45
+
46
+ // context needs to be resumed on iOS and Safari (or it will stay in "suspended" state)
47
+ this.audioCtx.resume();
48
+ this.audioCtx.onstatechange = () => console.log(this.audioCtx.state); // if you want to see "Running" state in console and be happy about it
49
+
50
+ this.gainNode = this.audioCtx.createGain();
51
+ this.gainNode.gain.value = 1;
52
+ this.gainNode.connect(this.audioCtx.destination);
53
+ this.startTime = this.audioCtx.currentTime;
54
+ };
55
+
56
+ PCMPlayer.prototype.isTypedArray = function(data) {
57
+ return (data.byteLength && data.buffer && data.buffer.constructor == ArrayBuffer);
58
+ };
59
+
60
+ PCMPlayer.prototype.feed = function(data) {
61
+ if (!this.isTypedArray(data)) return;
62
+ data = this.getFormatedValue(data);
63
+ var tmp = new Float32Array(this.samples.length + data.length);
64
+ tmp.set(this.samples, 0);
65
+ tmp.set(data, this.samples.length);
66
+ this.samples = tmp;
67
+ };
68
+
69
+ PCMPlayer.prototype.getFormatedValue = function(data) {
70
+ var data = new this.typedArray(data.buffer),
71
+ float32 = new Float32Array(data.length),
72
+ i;
73
+
74
+ for (i = 0; i < data.length; i++) {
75
+ float32[i] = data[i] / this.maxValue;
76
+ }
77
+ return float32;
78
+ };
79
+
80
+ PCMPlayer.prototype.volume = function(volume) {
81
+ this.gainNode.gain.value = volume;
82
+ };
83
+
84
+ PCMPlayer.prototype.destroy = function() {
85
+ if (this.interval) {
86
+ clearInterval(this.interval);
87
+ }
88
+ this.samples = null;
89
+ this.audioCtx.close();
90
+ this.audioCtx = null;
91
+ };
92
+
93
+ PCMPlayer.prototype.flush = function() {
94
+ if (!this.samples.length) return;
95
+ var bufferSource = this.audioCtx.createBufferSource(),
96
+ length = this.samples.length / this.option.channels,
97
+ audioBuffer = this.audioCtx.createBuffer(this.option.channels, length, this.option.sampleRate),
98
+ audioData,
99
+ channel,
100
+ offset,
101
+ i,
102
+ decrement;
103
+
104
+ for (channel = 0; channel < this.option.channels; channel++) {
105
+ audioData = audioBuffer.getChannelData(channel);
106
+ offset = channel;
107
+ decrement = 50;
108
+ for (i = 0; i < length; i++) {
109
+ audioData[i] = this.samples[offset];
110
+ /* fadein */
111
+ if (i < 50) {
112
+ audioData[i] = (audioData[i] * i) / 50;
113
+ }
114
+ /* fadeout*/
115
+ if (i >= (length - 51)) {
116
+ audioData[i] = (audioData[i] * decrement--) / 50;
117
+ }
118
+ offset += this.option.channels;
119
+ }
120
+ }
121
+
122
+ if (this.startTime < this.audioCtx.currentTime) {
123
+ this.startTime = this.audioCtx.currentTime;
124
+ }
125
+ console.log('start vs current '+this.startTime+' vs '+this.audioCtx.currentTime+' duration: '+audioBuffer.duration);
126
+ bufferSource.buffer = audioBuffer;
127
+ bufferSource.connect(this.gainNode);
128
+ bufferSource.start(this.startTime);
129
+ this.startTime += audioBuffer.duration;
130
+ this.samples = new Float32Array();
131
+ };
@@ -0,0 +1,28 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDLTDLHqk88nm2p
3
+ WhAp0g8YdAgZiYe5zXw0pTDGPUYsMmkpUiRaOktI+NS8zYK+4G1uyogP8+ZbrtaC
4
+ QjlhCuVn1Q5r5NuMhoQ5e7ulSDG+IR3cVZ/x6pq6ijeDcq4vVYnH9BinD0hBw4rV
5
+ PWvzQa6GkGCcj/+mvlx90WPnusye/oQpDZCaVXWcmSx/eRp6lZ5bsUNDGlj69ypI
6
+ ZTw2XsZcmM6PEVLJ5HVUStNncy/ReFgprBoLrEi8y2GaUbBPyWZOHd6l5Bu1IwMm
7
+ BgD8e3jbjyU7wTDcP1rGebxOz24dbcnPETA0dVfOIp4f/UUSMoQ84impfBaqKywd
8
+ 01XBBQ2FAgMBAAECggEAG7ttQedtn6tM8kki41GQVZmecT1dkm8Bfnz6RlCdffHy
9
+ fnyCEPzawD2RZ5/xMfCTfQWLwgFXbzJOeL5n7WD7IkriCL3TZTwEVYMXedh7UKBb
10
+ 3m6fvvRt3vxzzi6arEJS5T/bDQ78oFv4WFZkn25aTGjthO3vxeM54r/pjPbiat23
11
+ E7nTUEEPnNW4qQUvnZn4ozdQfZCd8jvKwExXVq7NUfL5chvr5x0uOpOkM4J4lRzJ
12
+ ungrE2hXXHRs19sAWT3rp5hKpprzMts2VVIobooqdyoazg2TPPddM49zNfvHD4xS
13
+ +cL7bWAx+K2IFWb1FANFOyZ/7FWdVQ5Ndbuu8nF2gQKBgQDlbHdcPldzOCRH6liZ
14
+ U5TdsO4wWlPxSNoxN2adxmzCSRREwejAdLcYo1XQNrKYMvwg4nqIGzPL8Cia5W1X
15
+ iRLoOebIFcDZA+cGrjZC6SV0hEp7leTKX7xsecK0HI942DE4gAPunkOQ1TxSp3Op
16
+ 3SfZ50/CpzCtxxTN/22EUglEiQKBgQDi2PeXm2/7WeFvcVZSHE4eU/DmGTG+jREI
17
+ TD0N6fw1xAR/k4FImH8bLjY4tKCh8JJ4W98OV+sQa6AaxZ6V0d94/ul6tCwkoXke
18
+ A2xiiXfkddWdndUIYAfZ8S2AxG8BM7q4TsRCYNQ3MqSGuCKtVY+6ElgDRtxfExc2
19
+ Qd9xCxd6HQKBgQChlYljsIzLG8mB1S3dn56DnW/FInlowVTbwRdHHE/RbsMVwjT6
20
+ B7pFYhS4dy3GQHKPfrOqVO5gPp96qQgf1O06Hj3Kwnd24Wa/r8eLzMWSkPIcpO/l
21
+ ERSWmhNl44+xHyNbld4vG8yen3DDDilKg/bjZCUrBbIlUsf2ZmZuAZGBcQKBgEtm
22
+ IE107bCWvFaFTlK2c8Si0+Q3JZCXZLzkUjrItfrM703UIlmVzlGjd4Q7jVSmGJkG
23
+ uEoVMN1hWHLtkntrqaKW39XYAwAd55rxOlo6JO57uAfOiRtih9mJzz0IjXjRz9Mo
24
+ 4xTJCGBcZdEdbPE+CiqnpDdamy7CsqlnFbSGIkSFAoGALkRFt74BvQ7JvgFZzHJQ
25
+ Zg/MMG5uIduSGwDlb5EJKYwzfjdsrmu4vkhxistVbbSHUdfU2wSGEUGAT6cRxYVp
26
+ oXHStiQHQoI+Y5dbnrzZVjVRMhFIF61bgjbVmrgSweYeBHEF0XAzbdDNw/orMpW8
27
+ 5bgQEe8Py8ai1ux9gltbbfk=
28
+ -----END RSA PRIVATE KEY-----