1'use strict';
2
3const EventEmitter = require('events');
4
5module.exports = new class AudioPlayer extends EventEmitter {
6    constructor(){
7        super();
8        this._onState();
9    }
10
11    play(source, callback) {
12        if (!source || !callback) {
13            throw new Error('invalid params');
14        }
15        return __native.audioplayer.play(source, callback);
16    };
17
18    pause() {
19        return __native.audioplayer.pause();
20    };
21
22    resume() {
23        return __native.audioplayer.resume();
24    };
25
26    stop() {
27        return __native.audioplayer.stop();
28    };
29
30    seekto(seconds) {
31        if (seconds < 0) {
32            throw new Error('invalid params');
33        }
34        return __native.audioplayer.seekto(seconds);
35    };
36
37    getPosition() {
38        return __native.audioplayer.getPosition();
39    };
40
41    getDuration() {
42        return __native.audioplayer.getDuration();
43    };
44
45    getState() {
46        return __native.audioplayer.getState();
47    };
48
49    _onState() {
50        __native.audioplayer.onState(function(state) {
51            this.emit('stateChange', state);
52        }.bind(this));
53    };
54
55    listPlay(sourcelist, callback) {
56        if (!sourcelist || !callback) {
57            throw new Error('invalid params');
58        }
59        return __native.audioplayer.listPlay(sourcelist, callback);
60    };
61
62    listPlayStop() {
63        return __native.audioplayer.listPlayStop();
64    };
65
66    setVolume(volume) {
67        if (volume < 0) {
68            throw new Error('invalid params');
69        }
70        return __native.audioplayer.setVolume(volume);
71    };
72
73    getVolume() {
74        return __native.audioplayer.getVolume();
75    };
76}