@lls/lls-audio 0.0.3 → 0.0.5
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 +14 -1237
- package/package.json +4 -3
- package/player/Loop.js +62 -0
- package/player/Play.js +83 -0
- package/player/Speed.js +14 -10
- package/player/index.js +13 -13
- package/recorder/DesktopAudioRecorder.js +3 -3
- package/stories/index.js +3 -21
- package/common/waveform.js +0 -181
- package/player/CustomPlayer.js +0 -218
- package/player/Wave.js +0 -173
- package/stories/customPlayer.js +0 -21
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lls/lls-audio",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"devDependencies": {
|
|
6
6
|
"@kadira/storybook": "^2.21.0",
|
|
@@ -14,12 +14,13 @@
|
|
|
14
14
|
"conventional-changelog": "^1.1.0",
|
|
15
15
|
"conventional-changelog-cli": "^1.2.0",
|
|
16
16
|
"@kadira/storybook-deployer": "^1.0.0",
|
|
17
|
-
"release-it": "^2.4.0"
|
|
17
|
+
"release-it": "^2.4.0",
|
|
18
|
+
"react": "15.3.1",
|
|
19
|
+
"react-dom": "15.3.1"
|
|
18
20
|
},
|
|
19
21
|
"dependencies": {
|
|
20
22
|
"aphrodite": "^1.1.0",
|
|
21
23
|
"is_js": "^0.9.0",
|
|
22
|
-
"material-ui": "^0.16.5",
|
|
23
24
|
"merge-audio-buffers": "^1.0.0",
|
|
24
25
|
"msr": "^1.3.4",
|
|
25
26
|
"react-input-range": "^0.9.3",
|
package/player/Loop.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
|
8
|
+
|
|
9
|
+
var _react = require('react');
|
|
10
|
+
|
|
11
|
+
var _react2 = _interopRequireDefault(_react);
|
|
12
|
+
|
|
13
|
+
var _noImportant = require('aphrodite/no-important');
|
|
14
|
+
|
|
15
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
16
|
+
|
|
17
|
+
var beforeAfter = function beforeAfter(color) {
|
|
18
|
+
return {
|
|
19
|
+
position: 'absolute',
|
|
20
|
+
content: '""',
|
|
21
|
+
width: 0,
|
|
22
|
+
height: 0,
|
|
23
|
+
border: '6px solid transparent',
|
|
24
|
+
borderBottomColor: color
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
var makeStyle = function makeStyle(color) {
|
|
29
|
+
return _noImportant.StyleSheet.create({
|
|
30
|
+
loop: {
|
|
31
|
+
display: 'inline-block',
|
|
32
|
+
position: 'relative',
|
|
33
|
+
verticalAlign: 'middle',
|
|
34
|
+
width: 20,
|
|
35
|
+
height: 20,
|
|
36
|
+
border: '2px solid transparent',
|
|
37
|
+
borderRadius: '50%',
|
|
38
|
+
borderTopColor: color,
|
|
39
|
+
borderBottomColor: color,
|
|
40
|
+
':after': _extends({}, beforeAfter(color), {
|
|
41
|
+
top: 1,
|
|
42
|
+
right: -7,
|
|
43
|
+
transform: 'rotate(135deg)'
|
|
44
|
+
}),
|
|
45
|
+
':before': _extends({}, beforeAfter(color), {
|
|
46
|
+
top: 8,
|
|
47
|
+
left: -7,
|
|
48
|
+
transform: 'rotate(-45deg)'
|
|
49
|
+
})
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
var Loop = function Loop(_ref) {
|
|
55
|
+
var _ref$loop = _ref.loop,
|
|
56
|
+
loop = _ref$loop === undefined ? false : _ref$loop;
|
|
57
|
+
return _react2.default.createElement('span', {
|
|
58
|
+
className: (0, _noImportant.css)(makeStyle(loop ? '#a20025' : '#e5e5e5').loop)
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
exports.default = Loop;
|
package/player/Play.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
var _react = require('react');
|
|
8
|
+
|
|
9
|
+
var _react2 = _interopRequireDefault(_react);
|
|
10
|
+
|
|
11
|
+
var _noImportant = require('aphrodite/no-important');
|
|
12
|
+
|
|
13
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
|
+
|
|
15
|
+
var styles = _noImportant.StyleSheet.create({
|
|
16
|
+
play_button: {
|
|
17
|
+
'height': 16,
|
|
18
|
+
'width': 16,
|
|
19
|
+
'display': 'block',
|
|
20
|
+
'margin': '5px auto',
|
|
21
|
+
'overflow': 'hidden',
|
|
22
|
+
'position': 'relative'
|
|
23
|
+
},
|
|
24
|
+
left: {
|
|
25
|
+
'height': '100%',
|
|
26
|
+
'float': 'left',
|
|
27
|
+
'background-color': 'red',
|
|
28
|
+
'width': '36%',
|
|
29
|
+
'transition': 'all 0.25s ease',
|
|
30
|
+
'overflow': 'hidden'
|
|
31
|
+
},
|
|
32
|
+
triangle_1: {
|
|
33
|
+
'transform': 'translate(0, -100%)'
|
|
34
|
+
},
|
|
35
|
+
triangle_2: {
|
|
36
|
+
'transform': 'translate(0, 100%)'
|
|
37
|
+
},
|
|
38
|
+
triangle: {
|
|
39
|
+
'position': 'absolute',
|
|
40
|
+
'top': 0,
|
|
41
|
+
'right': 0,
|
|
42
|
+
'background-color': 'transparent',
|
|
43
|
+
'width': 0,
|
|
44
|
+
'height': 0,
|
|
45
|
+
'border-right': '16px solid #fff',
|
|
46
|
+
'border-top': '8px solid transparent',
|
|
47
|
+
'border-bottom': '8px solid transparent',
|
|
48
|
+
'transition': 'transform 0.25s ease'
|
|
49
|
+
},
|
|
50
|
+
'right': {
|
|
51
|
+
'height': '100%',
|
|
52
|
+
'float': 'right',
|
|
53
|
+
'width': '36%',
|
|
54
|
+
'background-color': 'red',
|
|
55
|
+
'transition': 'all 0.25s ease'
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
var Play = function Play(_ref) {
|
|
61
|
+
var _ref$pause = _ref.pause,
|
|
62
|
+
pause = _ref$pause === undefined ? true : _ref$pause;
|
|
63
|
+
|
|
64
|
+
var pauseTriangle1 = pause ? {
|
|
65
|
+
transform: 'translate(0, -50%)'
|
|
66
|
+
} : {};
|
|
67
|
+
var pauseTriangle2 = pause ? {
|
|
68
|
+
transform: 'translate(0, 50%)'
|
|
69
|
+
} : {};
|
|
70
|
+
var pauseLine = pause ? {
|
|
71
|
+
'width': '50%'
|
|
72
|
+
} : {};
|
|
73
|
+
return _react2.default.createElement(
|
|
74
|
+
'div',
|
|
75
|
+
{ className: (0, _noImportant.css)(styles.play_button) },
|
|
76
|
+
_react2.default.createElement('div', { style: pauseLine, className: (0, _noImportant.css)(styles.left) }),
|
|
77
|
+
_react2.default.createElement('div', { style: pauseLine, className: (0, _noImportant.css)(styles.right) }),
|
|
78
|
+
_react2.default.createElement('div', { style: pauseTriangle1, className: (0, _noImportant.css)(styles.triangle, styles.triangle_1) }),
|
|
79
|
+
_react2.default.createElement('div', { style: pauseTriangle2, className: (0, _noImportant.css)(styles.triangle, styles.triangle_2) })
|
|
80
|
+
);
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
exports.default = Play;
|
package/player/Speed.js
CHANGED
|
@@ -31,7 +31,8 @@ var styles = _aphrodite.StyleSheet.create({
|
|
|
31
31
|
}
|
|
32
32
|
},
|
|
33
33
|
speed_menu_item: {
|
|
34
|
-
padding: '28px
|
|
34
|
+
padding: '28px 0px 11px 0px',
|
|
35
|
+
textAlign: 'center',
|
|
35
36
|
boxSizing: 'border-box'
|
|
36
37
|
},
|
|
37
38
|
speed_menu_low: {
|
|
@@ -39,6 +40,9 @@ var styles = _aphrodite.StyleSheet.create({
|
|
|
39
40
|
},
|
|
40
41
|
speed_menu_fast: {
|
|
41
42
|
bottom: '1%'
|
|
43
|
+
},
|
|
44
|
+
icon: {
|
|
45
|
+
display: 'inline-block'
|
|
42
46
|
}
|
|
43
47
|
});
|
|
44
48
|
|
|
@@ -65,9 +69,9 @@ var Speed = function Speed(_ref) {
|
|
|
65
69
|
return onSpeedChange(1.25);
|
|
66
70
|
} },
|
|
67
71
|
_react2.default.createElement(
|
|
68
|
-
|
|
69
|
-
{ style: { color: speed === 1.25 ? '#a20025' : '' }
|
|
70
|
-
'
|
|
72
|
+
'span',
|
|
73
|
+
{ className: (0, _aphrodite.css)(styles.icon), style: { color: speed === 1.25 ? '#a20025' : '' } },
|
|
74
|
+
'+1'
|
|
71
75
|
)
|
|
72
76
|
),
|
|
73
77
|
_react2.default.createElement(
|
|
@@ -76,9 +80,9 @@ var Speed = function Speed(_ref) {
|
|
|
76
80
|
return onSpeedChange(1);
|
|
77
81
|
} },
|
|
78
82
|
_react2.default.createElement(
|
|
79
|
-
|
|
80
|
-
{ style: { color: speed === 1 ? '#a20025' : '' }
|
|
81
|
-
'
|
|
83
|
+
'span',
|
|
84
|
+
{ className: (0, _aphrodite.css)(styles.icon), style: { color: speed === 1 ? '#a20025' : '' } },
|
|
85
|
+
'0'
|
|
82
86
|
)
|
|
83
87
|
),
|
|
84
88
|
_react2.default.createElement(
|
|
@@ -87,9 +91,9 @@ var Speed = function Speed(_ref) {
|
|
|
87
91
|
return onSpeedChange(0.75);
|
|
88
92
|
} },
|
|
89
93
|
_react2.default.createElement(
|
|
90
|
-
|
|
91
|
-
{ style: { color: speed === 0.75 ? '#a20025' : '' }
|
|
92
|
-
'
|
|
94
|
+
'span',
|
|
95
|
+
{ className: (0, _aphrodite.css)(styles.icon), style: { color: speed === 0.75 ? '#a20025' : '' } },
|
|
96
|
+
'-1'
|
|
93
97
|
)
|
|
94
98
|
)
|
|
95
99
|
);
|
package/player/index.js
CHANGED
|
@@ -12,9 +12,9 @@ var _react = require('react');
|
|
|
12
12
|
|
|
13
13
|
var _react2 = _interopRequireDefault(_react);
|
|
14
14
|
|
|
15
|
-
var
|
|
15
|
+
var _CustomWave = require('../player/CustomWave');
|
|
16
16
|
|
|
17
|
-
var
|
|
17
|
+
var _CustomWave2 = _interopRequireDefault(_CustomWave);
|
|
18
18
|
|
|
19
19
|
var _audio = require('../utils/audio');
|
|
20
20
|
|
|
@@ -54,6 +54,14 @@ var _Speed = require('./Speed');
|
|
|
54
54
|
|
|
55
55
|
var _Speed2 = _interopRequireDefault(_Speed);
|
|
56
56
|
|
|
57
|
+
var _Play = require('./Play');
|
|
58
|
+
|
|
59
|
+
var _Play2 = _interopRequireDefault(_Play);
|
|
60
|
+
|
|
61
|
+
var _Loop = require('./Loop');
|
|
62
|
+
|
|
63
|
+
var _Loop2 = _interopRequireDefault(_Loop);
|
|
64
|
+
|
|
57
65
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
58
66
|
|
|
59
67
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
@@ -161,11 +169,7 @@ var Player = function (_Component) {
|
|
|
161
169
|
{ className: (0, _noImportant.css)(styles.play_and_stop), onClick: function onClick() {
|
|
162
170
|
return play ? _this4.refs.audio.pause() : _this4.refs.audio.play();
|
|
163
171
|
} },
|
|
164
|
-
_react2.default.createElement(
|
|
165
|
-
_FontIcon2.default,
|
|
166
|
-
{ className: 'material-icons' },
|
|
167
|
-
play ? 'pause' : 'play_arrow'
|
|
168
|
-
)
|
|
172
|
+
_react2.default.createElement(_Play2.default, { pause: !play })
|
|
169
173
|
),
|
|
170
174
|
_react2.default.createElement(_Audio2.default, { onChange: function onChange(state) {
|
|
171
175
|
return _this4.setState(_extends({}, state));
|
|
@@ -173,7 +177,7 @@ var Player = function (_Component) {
|
|
|
173
177
|
_react2.default.createElement(
|
|
174
178
|
'div',
|
|
175
179
|
{ className: (0, _noImportant.css)(styles.timeline), ref: 'container' },
|
|
176
|
-
_react2.default.createElement(
|
|
180
|
+
_react2.default.createElement(_CustomWave2.default, { currentTime: currentTime, width: containerWidth, height: 50, range: { startTime: startTime, endTime: endTime }, isLoading: loading, waveform: waveform }),
|
|
177
181
|
_react2.default.createElement(_reactInputRange2.default, { classNames: _fallbackTimelineClassNames2.default, formatLabel: _utils.timeConvert, maxValue: duration || 1, minValue: 0, onChange: function onChange(c, _ref) {
|
|
178
182
|
var min = _ref.min,
|
|
179
183
|
max = _ref.max;
|
|
@@ -188,11 +192,7 @@ var Player = function (_Component) {
|
|
|
188
192
|
{ onClick: function onClick() {
|
|
189
193
|
return _this4.refs.audio.setLoop(!_this4.state.loop);
|
|
190
194
|
}, className: 'Repeat_menu ' + (0, _noImportant.css)(styles.repeat_menu) },
|
|
191
|
-
_react2.default.createElement(
|
|
192
|
-
_FontIcon2.default,
|
|
193
|
-
{ style: { color: this.state.loop ? '#a20025' : '' }, className: 'material-icons' },
|
|
194
|
-
'loop'
|
|
195
|
-
)
|
|
195
|
+
_react2.default.createElement(_Loop2.default, { loop: this.state.loop })
|
|
196
196
|
),
|
|
197
197
|
_react2.default.createElement(
|
|
198
198
|
'div',
|
|
@@ -10,9 +10,9 @@ var _react = require('react');
|
|
|
10
10
|
|
|
11
11
|
var _react2 = _interopRequireDefault(_react);
|
|
12
12
|
|
|
13
|
-
var
|
|
13
|
+
var _CustomWave = require('../player/CustomWave');
|
|
14
14
|
|
|
15
|
-
var
|
|
15
|
+
var _CustomWave2 = _interopRequireDefault(_CustomWave);
|
|
16
16
|
|
|
17
17
|
var _audioContext = require('../utils/audioContext');
|
|
18
18
|
|
|
@@ -95,7 +95,7 @@ var DesktopAudioRecorder = function (_Component) {
|
|
|
95
95
|
} },
|
|
96
96
|
' record '
|
|
97
97
|
),
|
|
98
|
-
waveform ? _react2.default.createElement(
|
|
98
|
+
waveform ? _react2.default.createElement(_CustomWave2.default, {
|
|
99
99
|
width: 500,
|
|
100
100
|
currentTime: 0,
|
|
101
101
|
totalTime: 200,
|
package/stories/index.js
CHANGED
|
@@ -18,10 +18,6 @@ var _player = require('./player');
|
|
|
18
18
|
|
|
19
19
|
var _player2 = _interopRequireDefault(_player);
|
|
20
20
|
|
|
21
|
-
var _customPlayer = require('./customPlayer');
|
|
22
|
-
|
|
23
|
-
var _customPlayer2 = _interopRequireDefault(_customPlayer);
|
|
24
|
-
|
|
25
21
|
var _recorder = require('./recorder');
|
|
26
22
|
|
|
27
23
|
var _recorder2 = _interopRequireDefault(_recorder);
|
|
@@ -31,23 +27,9 @@ require('../common/material-ui.css');
|
|
|
31
27
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
32
28
|
|
|
33
29
|
//import PlayerCustom from './playerCustom'
|
|
34
|
-
(0, _storybook.storiesOf)('Player', module).add('
|
|
35
|
-
return _react2.default.createElement(
|
|
36
|
-
_MuiThemeProvider2.default,
|
|
37
|
-
{ muiTheme: (0, _getMuiTheme2.default)() },
|
|
38
|
-
_react2.default.createElement(_player2.default, null)
|
|
39
|
-
);
|
|
40
|
-
}).add('Custom waveform', function () {
|
|
41
|
-
return _react2.default.createElement(
|
|
42
|
-
_MuiThemeProvider2.default,
|
|
43
|
-
{ muiTheme: (0, _getMuiTheme2.default)() },
|
|
44
|
-
_react2.default.createElement(_customPlayer2.default, null)
|
|
45
|
-
);
|
|
30
|
+
(0, _storybook.storiesOf)('Player', module).add('Custom waveform', function () {
|
|
31
|
+
return _react2.default.createElement(_player2.default, null);
|
|
46
32
|
});
|
|
47
33
|
(0, _storybook.storiesOf)('Recorder', module).add('Normal', function () {
|
|
48
|
-
return _react2.default.createElement(
|
|
49
|
-
_MuiThemeProvider2.default,
|
|
50
|
-
{ muiTheme: (0, _getMuiTheme2.default)() },
|
|
51
|
-
_react2.default.createElement(_recorder2.default, null)
|
|
52
|
-
);
|
|
34
|
+
return _react2.default.createElement(_recorder2.default, null);
|
|
53
35
|
});
|
package/common/waveform.js
DELETED
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
/* This is a custom (temporary version) of http://waveformjs.org/
|
|
7
|
-
* because these idiots dont do npms packages.
|
|
8
|
-
* I also removed the soundcloud stuff that was useless
|
|
9
|
-
*/
|
|
10
|
-
function Waveform(options) {
|
|
11
|
-
this.container = options.container;
|
|
12
|
-
this.canvas = options.canvas;
|
|
13
|
-
this.data = options.data || [];
|
|
14
|
-
this.outerColor = options.outerColor || "transparent";
|
|
15
|
-
this.innerColor = options.innerColor || "#000000";
|
|
16
|
-
this.interpolate = true;
|
|
17
|
-
if (options.interpolate === false) {
|
|
18
|
-
this.interpolate = false;
|
|
19
|
-
}
|
|
20
|
-
if (this.canvas == null) {
|
|
21
|
-
if (this.container) {
|
|
22
|
-
this.canvas = this.createCanvas(this.container, options.width || this.container.clientWidth, options.height || this.container.clientHeight);
|
|
23
|
-
} else {
|
|
24
|
-
throw "Either canvas or container option must be passed";
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
this.patchCanvasForIE(this.canvas);
|
|
28
|
-
this.context = this.canvas.getContext("2d");
|
|
29
|
-
this.width = parseInt(this.context.canvas.width, 10);
|
|
30
|
-
this.height = parseInt(this.context.canvas.height, 10);
|
|
31
|
-
if (options.data) {
|
|
32
|
-
this.update(options);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
Waveform.prototype.setData = function (data) {
|
|
37
|
-
return this.data = data;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
Waveform.prototype.setDataInterpolated = function (data) {
|
|
41
|
-
return this.setData(this.interpolateArray(data, this.width));
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
Waveform.prototype.setDataCropped = function (data) {
|
|
45
|
-
return this.setData(this.expandArray(data, this.width));
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
Waveform.prototype.update = function (options) {
|
|
49
|
-
if (options.interpolate != null) {
|
|
50
|
-
this.interpolate = options.interpolate;
|
|
51
|
-
}
|
|
52
|
-
if (this.interpolate === false) {
|
|
53
|
-
this.setDataCropped(options.data);
|
|
54
|
-
} else {
|
|
55
|
-
this.setDataInterpolated(options.data);
|
|
56
|
-
}
|
|
57
|
-
return this.redraw();
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
Waveform.prototype.redraw = function () {
|
|
61
|
-
var d, i, middle, t, _i, _len, _ref, _results;
|
|
62
|
-
this.clear();
|
|
63
|
-
if (typeof this.innerColor === "function") {
|
|
64
|
-
this.context.fillStyle = this.innerColor();
|
|
65
|
-
} else {
|
|
66
|
-
this.context.fillStyle = this.innerColor;
|
|
67
|
-
}
|
|
68
|
-
middle = this.height / 2;
|
|
69
|
-
i = 0;
|
|
70
|
-
_ref = this.data;
|
|
71
|
-
_results = [];
|
|
72
|
-
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
|
73
|
-
d = _ref[_i];
|
|
74
|
-
t = this.width / this.data.length;
|
|
75
|
-
if (typeof this.innerColor === "function") {
|
|
76
|
-
this.context.fillStyle = this.innerColor(i / this.width, d);
|
|
77
|
-
}
|
|
78
|
-
this.context.clearRect(t * i, middle - middle * d, t, middle * d * 2);
|
|
79
|
-
this.context.fillRect(t * i, middle - middle * d, t, middle * d * 2);
|
|
80
|
-
_results.push(i++);
|
|
81
|
-
}
|
|
82
|
-
return _results;
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
Waveform.prototype.clear = function () {
|
|
86
|
-
this.context.fillStyle = this.outerColor;
|
|
87
|
-
this.context.clearRect(0, 0, this.width, this.height);
|
|
88
|
-
return this.context.fillRect(0, 0, this.width, this.height);
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
Waveform.prototype.patchCanvasForIE = function (canvas) {
|
|
92
|
-
var oldGetContext;
|
|
93
|
-
if (typeof window.G_vmlCanvasManager !== "undefined") {
|
|
94
|
-
canvas = window.G_vmlCanvasManager.initElement(canvas);
|
|
95
|
-
oldGetContext = canvas.getContext;
|
|
96
|
-
return canvas.getContext = function (a) {
|
|
97
|
-
var ctx;
|
|
98
|
-
ctx = oldGetContext.apply(canvas, arguments);
|
|
99
|
-
canvas.getContext = oldGetContext;
|
|
100
|
-
return ctx;
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
Waveform.prototype.createCanvas = function (container, width, height) {
|
|
106
|
-
var canvas;
|
|
107
|
-
canvas = document.createElement("canvas");
|
|
108
|
-
container.appendChild(canvas);
|
|
109
|
-
canvas.width = width;
|
|
110
|
-
canvas.height = height;
|
|
111
|
-
return canvas;
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
Waveform.prototype.expandArray = function (data, limit, defaultValue) {
|
|
115
|
-
var i, newData, _i, _ref;
|
|
116
|
-
if (defaultValue == null) {
|
|
117
|
-
defaultValue = 0.0;
|
|
118
|
-
}
|
|
119
|
-
newData = [];
|
|
120
|
-
if (data.length > limit) {
|
|
121
|
-
newData = data.slice(data.length - limit, data.length);
|
|
122
|
-
} else {
|
|
123
|
-
for (i = _i = 0, _ref = limit - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
|
|
124
|
-
newData[i] = data[i] || defaultValue;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
return newData;
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
Waveform.prototype.linearInterpolate = function (before, after, atPoint) {
|
|
131
|
-
return before + (after - before) * atPoint;
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
Waveform.prototype.interpolateArray = function (data, fitCount) {
|
|
135
|
-
var after, atPoint, before, i, newData, springFactor, tmp;
|
|
136
|
-
newData = new Array();
|
|
137
|
-
springFactor = new Number((data.length - 1) / (fitCount - 1));
|
|
138
|
-
newData[0] = data[0];
|
|
139
|
-
i = 1;
|
|
140
|
-
while (i < fitCount - 1) {
|
|
141
|
-
tmp = i * springFactor;
|
|
142
|
-
before = new Number(Math.floor(tmp)).toFixed();
|
|
143
|
-
after = new Number(Math.ceil(tmp)).toFixed();
|
|
144
|
-
atPoint = tmp - before;
|
|
145
|
-
newData[i] = this.linearInterpolate(data[before], data[after], atPoint);
|
|
146
|
-
i++;
|
|
147
|
-
}
|
|
148
|
-
newData[fitCount - 1] = data[data.length - 1];
|
|
149
|
-
return newData;
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
Waveform.prototype.optionsForSyncedStream = function (options) {
|
|
153
|
-
var innerColorWasSet, that;
|
|
154
|
-
if (options == null) {
|
|
155
|
-
options = {};
|
|
156
|
-
}
|
|
157
|
-
innerColorWasSet = false;
|
|
158
|
-
that = this;
|
|
159
|
-
return {
|
|
160
|
-
whileplaying: this.redraw,
|
|
161
|
-
whileloading: function whileloading() {
|
|
162
|
-
var stream;
|
|
163
|
-
if (!innerColorWasSet) {
|
|
164
|
-
stream = this;
|
|
165
|
-
that.innerColor = function (x, y) {
|
|
166
|
-
if (x < stream.position / stream.durationEstimate) {
|
|
167
|
-
return options.playedColor || "rgba(255, 102, 0, 0.8)";
|
|
168
|
-
} else if (x < stream.bytesLoaded / stream.bytesTotal) {
|
|
169
|
-
return options.loadedColor || "rgba(0, 0, 0, 0.8)";
|
|
170
|
-
} else {
|
|
171
|
-
return options.defaultColor || "rgba(0, 0, 0, 0.4)";
|
|
172
|
-
}
|
|
173
|
-
};
|
|
174
|
-
innerColorWasSet = true;
|
|
175
|
-
}
|
|
176
|
-
return this.redraw;
|
|
177
|
-
}
|
|
178
|
-
};
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
exports.default = Waveform;
|