@capgo/native-audio 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. package/CapgoNativeAudio.podspec +16 -0
  2. package/LICENSE +21 -0
  3. package/README.md +394 -0
  4. package/android/build.gradle +55 -0
  5. package/android/src/main/AndroidManifest.xml +5 -0
  6. package/android/src/main/java/ee/forgr/audio/AudioAsset.java +140 -0
  7. package/android/src/main/java/ee/forgr/audio/AudioDispatcher.java +178 -0
  8. package/android/src/main/java/ee/forgr/audio/Constant.java +18 -0
  9. package/android/src/main/java/ee/forgr/audio/NativeAudio.java +471 -0
  10. package/android/src/main/res/layout/bridge_layout_main.xml +15 -0
  11. package/android/src/main/res/values/colors.xml +3 -0
  12. package/android/src/main/res/values/strings.xml +3 -0
  13. package/android/src/main/res/values/styles.xml +3 -0
  14. package/dist/docs.json +279 -0
  15. package/dist/esm/audio-asset.d.ts +4 -0
  16. package/dist/esm/audio-asset.js +6 -0
  17. package/dist/esm/audio-asset.js.map +1 -0
  18. package/dist/esm/definitions.d.ts +53 -0
  19. package/dist/esm/definitions.js +2 -0
  20. package/dist/esm/definitions.js.map +1 -0
  21. package/dist/esm/index.d.ts +4 -0
  22. package/dist/esm/index.js +7 -0
  23. package/dist/esm/index.js.map +1 -0
  24. package/dist/esm/web.d.ts +52 -0
  25. package/dist/esm/web.js +113 -0
  26. package/dist/esm/web.js.map +1 -0
  27. package/dist/plugin.cjs.js +134 -0
  28. package/dist/plugin.cjs.js.map +1 -0
  29. package/dist/plugin.js +137 -0
  30. package/dist/plugin.js.map +1 -0
  31. package/ios/Plugin/AudioAsset.swift +184 -0
  32. package/ios/Plugin/Constant.swift +20 -0
  33. package/ios/Plugin/Info.plist +24 -0
  34. package/ios/Plugin/Plugin.h +10 -0
  35. package/ios/Plugin/Plugin.m +19 -0
  36. package/ios/Plugin/Plugin.swift +276 -0
  37. package/package.json +91 -0
package/dist/docs.json ADDED
@@ -0,0 +1,279 @@
1
+ {
2
+ "api": {
3
+ "name": "NativeAudio",
4
+ "slug": "nativeaudio",
5
+ "docs": "",
6
+ "tags": [],
7
+ "methods": [
8
+ {
9
+ "name": "configure",
10
+ "signature": "(options: ConfigureOptions) => Promise<void>",
11
+ "parameters": [
12
+ {
13
+ "name": "options",
14
+ "docs": "",
15
+ "type": "ConfigureOptions"
16
+ }
17
+ ],
18
+ "returns": "Promise<void>",
19
+ "tags": [],
20
+ "docs": "",
21
+ "complexTypes": [
22
+ "ConfigureOptions"
23
+ ],
24
+ "slug": "configure"
25
+ },
26
+ {
27
+ "name": "preload",
28
+ "signature": "(options: PreloadOptions) => Promise<void>",
29
+ "parameters": [
30
+ {
31
+ "name": "options",
32
+ "docs": "",
33
+ "type": "PreloadOptions"
34
+ }
35
+ ],
36
+ "returns": "Promise<void>",
37
+ "tags": [],
38
+ "docs": "",
39
+ "complexTypes": [
40
+ "PreloadOptions"
41
+ ],
42
+ "slug": "preload"
43
+ },
44
+ {
45
+ "name": "play",
46
+ "signature": "(options: { assetId: string; time: number; }) => Promise<void>",
47
+ "parameters": [
48
+ {
49
+ "name": "options",
50
+ "docs": "",
51
+ "type": "{ assetId: string; time: number; }"
52
+ }
53
+ ],
54
+ "returns": "Promise<void>",
55
+ "tags": [],
56
+ "docs": "",
57
+ "complexTypes": [],
58
+ "slug": "play"
59
+ },
60
+ {
61
+ "name": "pause",
62
+ "signature": "(options: { assetId: string; }) => Promise<void>",
63
+ "parameters": [
64
+ {
65
+ "name": "options",
66
+ "docs": "",
67
+ "type": "{ assetId: string; }"
68
+ }
69
+ ],
70
+ "returns": "Promise<void>",
71
+ "tags": [],
72
+ "docs": "",
73
+ "complexTypes": [],
74
+ "slug": "pause"
75
+ },
76
+ {
77
+ "name": "resume",
78
+ "signature": "(options: { assetId: string; }) => Promise<void>",
79
+ "parameters": [
80
+ {
81
+ "name": "options",
82
+ "docs": "",
83
+ "type": "{ assetId: string; }"
84
+ }
85
+ ],
86
+ "returns": "Promise<void>",
87
+ "tags": [],
88
+ "docs": "",
89
+ "complexTypes": [],
90
+ "slug": "resume"
91
+ },
92
+ {
93
+ "name": "loop",
94
+ "signature": "(options: { assetId: string; }) => Promise<void>",
95
+ "parameters": [
96
+ {
97
+ "name": "options",
98
+ "docs": "",
99
+ "type": "{ assetId: string; }"
100
+ }
101
+ ],
102
+ "returns": "Promise<void>",
103
+ "tags": [],
104
+ "docs": "",
105
+ "complexTypes": [],
106
+ "slug": "loop"
107
+ },
108
+ {
109
+ "name": "stop",
110
+ "signature": "(options: { assetId: string; }) => Promise<void>",
111
+ "parameters": [
112
+ {
113
+ "name": "options",
114
+ "docs": "",
115
+ "type": "{ assetId: string; }"
116
+ }
117
+ ],
118
+ "returns": "Promise<void>",
119
+ "tags": [],
120
+ "docs": "",
121
+ "complexTypes": [],
122
+ "slug": "stop"
123
+ },
124
+ {
125
+ "name": "unload",
126
+ "signature": "(options: { assetId: string; }) => Promise<void>",
127
+ "parameters": [
128
+ {
129
+ "name": "options",
130
+ "docs": "",
131
+ "type": "{ assetId: string; }"
132
+ }
133
+ ],
134
+ "returns": "Promise<void>",
135
+ "tags": [],
136
+ "docs": "",
137
+ "complexTypes": [],
138
+ "slug": "unload"
139
+ },
140
+ {
141
+ "name": "setVolume",
142
+ "signature": "(options: { assetId: string; volume: number; }) => Promise<void>",
143
+ "parameters": [
144
+ {
145
+ "name": "options",
146
+ "docs": "",
147
+ "type": "{ assetId: string; volume: number; }"
148
+ }
149
+ ],
150
+ "returns": "Promise<void>",
151
+ "tags": [],
152
+ "docs": "",
153
+ "complexTypes": [],
154
+ "slug": "setvolume"
155
+ },
156
+ {
157
+ "name": "getCurrentTime",
158
+ "signature": "(options: { assetId: string; }) => Promise<{ currentTime: number; }>",
159
+ "parameters": [
160
+ {
161
+ "name": "options",
162
+ "docs": "",
163
+ "type": "{ assetId: string; }"
164
+ }
165
+ ],
166
+ "returns": "Promise<{ currentTime: number; }>",
167
+ "tags": [],
168
+ "docs": "",
169
+ "complexTypes": [],
170
+ "slug": "getcurrenttime"
171
+ },
172
+ {
173
+ "name": "getDuration",
174
+ "signature": "(options: { assetId: string; }) => Promise<{ duration: number; }>",
175
+ "parameters": [
176
+ {
177
+ "name": "options",
178
+ "docs": "",
179
+ "type": "{ assetId: string; }"
180
+ }
181
+ ],
182
+ "returns": "Promise<{ duration: number; }>",
183
+ "tags": [],
184
+ "docs": "",
185
+ "complexTypes": [],
186
+ "slug": "getduration"
187
+ },
188
+ {
189
+ "name": "isPlaying",
190
+ "signature": "(options: { assetId: string; }) => Promise<{ isPlaying: boolean; }>",
191
+ "parameters": [
192
+ {
193
+ "name": "options",
194
+ "docs": "",
195
+ "type": "{ assetId: string; }"
196
+ }
197
+ ],
198
+ "returns": "Promise<{ isPlaying: boolean; }>",
199
+ "tags": [],
200
+ "docs": "",
201
+ "complexTypes": [],
202
+ "slug": "isplaying"
203
+ }
204
+ ],
205
+ "properties": []
206
+ },
207
+ "interfaces": [
208
+ {
209
+ "name": "ConfigureOptions",
210
+ "slug": "configureoptions",
211
+ "docs": "",
212
+ "tags": [],
213
+ "methods": [],
214
+ "properties": [
215
+ {
216
+ "name": "fade",
217
+ "tags": [],
218
+ "docs": "",
219
+ "complexTypes": [],
220
+ "type": "boolean | undefined"
221
+ },
222
+ {
223
+ "name": "focus",
224
+ "tags": [],
225
+ "docs": "",
226
+ "complexTypes": [],
227
+ "type": "boolean | undefined"
228
+ }
229
+ ]
230
+ },
231
+ {
232
+ "name": "PreloadOptions",
233
+ "slug": "preloadoptions",
234
+ "docs": "",
235
+ "tags": [],
236
+ "methods": [],
237
+ "properties": [
238
+ {
239
+ "name": "assetPath",
240
+ "tags": [],
241
+ "docs": "",
242
+ "complexTypes": [],
243
+ "type": "string"
244
+ },
245
+ {
246
+ "name": "assetId",
247
+ "tags": [],
248
+ "docs": "",
249
+ "complexTypes": [],
250
+ "type": "string"
251
+ },
252
+ {
253
+ "name": "volume",
254
+ "tags": [],
255
+ "docs": "",
256
+ "complexTypes": [],
257
+ "type": "number | undefined"
258
+ },
259
+ {
260
+ "name": "audioChannelNum",
261
+ "tags": [],
262
+ "docs": "",
263
+ "complexTypes": [],
264
+ "type": "number | undefined"
265
+ },
266
+ {
267
+ "name": "isUrl",
268
+ "tags": [],
269
+ "docs": "",
270
+ "complexTypes": [],
271
+ "type": "boolean | undefined"
272
+ }
273
+ ]
274
+ }
275
+ ],
276
+ "enums": [],
277
+ "typeAliases": [],
278
+ "pluginConfigs": []
279
+ }
@@ -0,0 +1,4 @@
1
+ export declare class AudioAsset {
2
+ readonly audio: HTMLAudioElement;
3
+ constructor(audio: HTMLAudioElement);
4
+ }
@@ -0,0 +1,6 @@
1
+ export class AudioAsset {
2
+ constructor(audio) {
3
+ this.audio = audio;
4
+ }
5
+ }
6
+ //# sourceMappingURL=audio-asset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-asset.js","sourceRoot":"","sources":["../../src/audio-asset.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAU;IAGrB,YAAY,KAAuB;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF"}
@@ -0,0 +1,53 @@
1
+ export interface NativeAudio {
2
+ configure(options: ConfigureOptions): Promise<void>;
3
+ preload(options: PreloadOptions): Promise<void>;
4
+ play(options: {
5
+ assetId: string;
6
+ time: number;
7
+ }): Promise<void>;
8
+ pause(options: {
9
+ assetId: string;
10
+ }): Promise<void>;
11
+ resume(options: {
12
+ assetId: string;
13
+ }): Promise<void>;
14
+ loop(options: {
15
+ assetId: string;
16
+ }): Promise<void>;
17
+ stop(options: {
18
+ assetId: string;
19
+ }): Promise<void>;
20
+ unload(options: {
21
+ assetId: string;
22
+ }): Promise<void>;
23
+ setVolume(options: {
24
+ assetId: string;
25
+ volume: number;
26
+ }): Promise<void>;
27
+ getCurrentTime(options: {
28
+ assetId: string;
29
+ }): Promise<{
30
+ currentTime: number;
31
+ }>;
32
+ getDuration(options: {
33
+ assetId: string;
34
+ }): Promise<{
35
+ duration: number;
36
+ }>;
37
+ isPlaying(options: {
38
+ assetId: string;
39
+ }): Promise<{
40
+ isPlaying: boolean;
41
+ }>;
42
+ }
43
+ export interface ConfigureOptions {
44
+ fade?: boolean;
45
+ focus?: boolean;
46
+ }
47
+ export interface PreloadOptions {
48
+ assetPath: string;
49
+ assetId: string;
50
+ volume?: number;
51
+ audioChannelNum?: number;
52
+ isUrl?: boolean;
53
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=definitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import { NativeAudio } from './definitions';
2
+ declare const NativeAudio: NativeAudio;
3
+ export * from './definitions';
4
+ export { NativeAudio };
@@ -0,0 +1,7 @@
1
+ import { registerPlugin } from '@capacitor/core';
2
+ const NativeAudio = registerPlugin('NativeAudio', {
3
+ web: () => import('./web').then((m) => new m.NativeAudioWeb()),
4
+ });
5
+ export * from './definitions';
6
+ export { NativeAudio };
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjD,MAAM,WAAW,GAAG,cAAc,CAAc,aAAa,EAAE;IAC7D,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;CAC/D,CAAC,CAAC;AAEH,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { WebPlugin } from '@capacitor/core';
2
+ import type { ConfigureOptions, PreloadOptions } from './definitions';
3
+ import { NativeAudio } from './definitions';
4
+ export declare class NativeAudioWeb extends WebPlugin implements NativeAudio {
5
+ private static readonly FILE_LOCATION;
6
+ private static readonly AUDIO_ASSET_BY_ASSET_ID;
7
+ constructor();
8
+ resume(options: {
9
+ assetId: string;
10
+ }): Promise<void>;
11
+ pause(options: {
12
+ assetId: string;
13
+ }): Promise<void>;
14
+ getCurrentTime(options: {
15
+ assetId: string;
16
+ }): Promise<{
17
+ currentTime: number;
18
+ }>;
19
+ getDuration(options: {
20
+ assetId: string;
21
+ }): Promise<{
22
+ duration: number;
23
+ }>;
24
+ configure(options: ConfigureOptions): Promise<void>;
25
+ preload(options: PreloadOptions): Promise<void>;
26
+ play(options: {
27
+ assetId: string;
28
+ time?: number;
29
+ }): Promise<void>;
30
+ loop(options: {
31
+ assetId: string;
32
+ }): Promise<void>;
33
+ stop(options: {
34
+ assetId: string;
35
+ }): Promise<void>;
36
+ unload(options: {
37
+ assetId: string;
38
+ }): Promise<void>;
39
+ setVolume(options: {
40
+ assetId: string;
41
+ volume: number;
42
+ }): Promise<void>;
43
+ isPlaying(options: {
44
+ assetId: string;
45
+ }): Promise<{
46
+ isPlaying: boolean;
47
+ }>;
48
+ private getAudioAsset;
49
+ private checkAssetId;
50
+ }
51
+ declare const NativeAudio: NativeAudioWeb;
52
+ export { NativeAudio };
@@ -0,0 +1,113 @@
1
+ import { WebPlugin } from '@capacitor/core';
2
+ import { AudioAsset } from './audio-asset';
3
+ export class NativeAudioWeb extends WebPlugin {
4
+ constructor() {
5
+ super({
6
+ name: 'NativeAudio',
7
+ platforms: ['web'],
8
+ });
9
+ }
10
+ async resume(options) {
11
+ const audio = this.getAudioAsset(options.assetId).audio;
12
+ if (audio.paused) {
13
+ return audio.play();
14
+ }
15
+ }
16
+ async pause(options) {
17
+ const audio = this.getAudioAsset(options.assetId).audio;
18
+ return audio.pause();
19
+ }
20
+ async getCurrentTime(options) {
21
+ const audio = this.getAudioAsset(options.assetId).audio;
22
+ return { currentTime: audio.currentTime };
23
+ }
24
+ async getDuration(options) {
25
+ const audio = this.getAudioAsset(options.assetId).audio;
26
+ if (Number.isNaN(audio.duration)) {
27
+ throw 'no duration available';
28
+ }
29
+ if (!Number.isFinite(audio.duration)) {
30
+ throw 'duration not available => media resource is streaming';
31
+ }
32
+ return { duration: audio.duration };
33
+ }
34
+ async configure(options) {
35
+ throw `configure is not supported for web: ${JSON.stringify(options)}`;
36
+ }
37
+ async preload(options) {
38
+ var _a;
39
+ if (NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.has(options.assetId)) {
40
+ throw 'AssetId already exists. Unload first if like to change!';
41
+ }
42
+ if (!((_a = options.assetPath) === null || _a === void 0 ? void 0 : _a.length)) {
43
+ throw 'no assetPath provided';
44
+ }
45
+ if (!options.isUrl && !new RegExp('^/?' + NativeAudioWeb.FILE_LOCATION).test(options.assetPath)) {
46
+ const slashPrefix = options.assetPath.startsWith('/') ? '' : '/';
47
+ options.assetPath = `${NativeAudioWeb.FILE_LOCATION}${slashPrefix}${options.assetPath}`;
48
+ }
49
+ const audio = new Audio(options.assetPath);
50
+ audio.autoplay = false;
51
+ audio.loop = false;
52
+ audio.preload = 'auto';
53
+ if (options.volume) {
54
+ audio.volume = options.volume;
55
+ }
56
+ NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.set(options.assetId, new AudioAsset(audio));
57
+ }
58
+ async play(options) {
59
+ var _a;
60
+ const audio = this.getAudioAsset(options.assetId).audio;
61
+ await this.stop(options);
62
+ audio.loop = false;
63
+ audio.currentTime = (_a = options.time) !== null && _a !== void 0 ? _a : 0;
64
+ return audio.play();
65
+ }
66
+ async loop(options) {
67
+ const audio = this.getAudioAsset(options.assetId).audio;
68
+ await this.stop(options);
69
+ audio.loop = true;
70
+ return audio.play();
71
+ }
72
+ async stop(options) {
73
+ const audio = this.getAudioAsset(options.assetId).audio;
74
+ audio.pause();
75
+ audio.loop = false;
76
+ audio.currentTime = 0;
77
+ }
78
+ async unload(options) {
79
+ await this.stop(options);
80
+ NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.delete(options.assetId);
81
+ }
82
+ async setVolume(options) {
83
+ if (typeof (options === null || options === void 0 ? void 0 : options.volume) !== 'number') {
84
+ throw 'no volume provided';
85
+ }
86
+ const audio = this.getAudioAsset(options.assetId).audio;
87
+ audio.volume = options.volume;
88
+ }
89
+ async isPlaying(options) {
90
+ const audio = this.getAudioAsset(options.assetId).audio;
91
+ return { isPlaying: !audio.paused };
92
+ }
93
+ getAudioAsset(assetId) {
94
+ this.checkAssetId(assetId);
95
+ if (!NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.has(assetId)) {
96
+ throw `no asset for assetId "${assetId}" available. Call preload first!`;
97
+ }
98
+ return NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.get(assetId);
99
+ }
100
+ checkAssetId(assetId) {
101
+ if (typeof assetId !== 'string') {
102
+ throw 'assetId must be a string';
103
+ }
104
+ if (!(assetId === null || assetId === void 0 ? void 0 : assetId.length)) {
105
+ throw 'no assetId provided';
106
+ }
107
+ }
108
+ }
109
+ NativeAudioWeb.FILE_LOCATION = 'assets/sounds';
110
+ NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID = new Map();
111
+ const NativeAudio = new NativeAudioWeb();
112
+ export { NativeAudio };
113
+ //# sourceMappingURL=web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var core = require('@capacitor/core');
6
+
7
+ const NativeAudio$1 = core.registerPlugin('NativeAudio', {
8
+ web: () => Promise.resolve().then(function () { return web; }).then((m) => new m.NativeAudioWeb()),
9
+ });
10
+
11
+ class AudioAsset {
12
+ constructor(audio) {
13
+ this.audio = audio;
14
+ }
15
+ }
16
+
17
+ class NativeAudioWeb extends core.WebPlugin {
18
+ constructor() {
19
+ super({
20
+ name: 'NativeAudio',
21
+ platforms: ['web'],
22
+ });
23
+ }
24
+ async resume(options) {
25
+ const audio = this.getAudioAsset(options.assetId).audio;
26
+ if (audio.paused) {
27
+ return audio.play();
28
+ }
29
+ }
30
+ async pause(options) {
31
+ const audio = this.getAudioAsset(options.assetId).audio;
32
+ return audio.pause();
33
+ }
34
+ async getCurrentTime(options) {
35
+ const audio = this.getAudioAsset(options.assetId).audio;
36
+ return { currentTime: audio.currentTime };
37
+ }
38
+ async getDuration(options) {
39
+ const audio = this.getAudioAsset(options.assetId).audio;
40
+ if (Number.isNaN(audio.duration)) {
41
+ throw 'no duration available';
42
+ }
43
+ if (!Number.isFinite(audio.duration)) {
44
+ throw 'duration not available => media resource is streaming';
45
+ }
46
+ return { duration: audio.duration };
47
+ }
48
+ async configure(options) {
49
+ throw `configure is not supported for web: ${JSON.stringify(options)}`;
50
+ }
51
+ async preload(options) {
52
+ var _a;
53
+ if (NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.has(options.assetId)) {
54
+ throw 'AssetId already exists. Unload first if like to change!';
55
+ }
56
+ if (!((_a = options.assetPath) === null || _a === void 0 ? void 0 : _a.length)) {
57
+ throw 'no assetPath provided';
58
+ }
59
+ if (!options.isUrl && !new RegExp('^/?' + NativeAudioWeb.FILE_LOCATION).test(options.assetPath)) {
60
+ const slashPrefix = options.assetPath.startsWith('/') ? '' : '/';
61
+ options.assetPath = `${NativeAudioWeb.FILE_LOCATION}${slashPrefix}${options.assetPath}`;
62
+ }
63
+ const audio = new Audio(options.assetPath);
64
+ audio.autoplay = false;
65
+ audio.loop = false;
66
+ audio.preload = 'auto';
67
+ if (options.volume) {
68
+ audio.volume = options.volume;
69
+ }
70
+ NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.set(options.assetId, new AudioAsset(audio));
71
+ }
72
+ async play(options) {
73
+ var _a;
74
+ const audio = this.getAudioAsset(options.assetId).audio;
75
+ await this.stop(options);
76
+ audio.loop = false;
77
+ audio.currentTime = (_a = options.time) !== null && _a !== void 0 ? _a : 0;
78
+ return audio.play();
79
+ }
80
+ async loop(options) {
81
+ const audio = this.getAudioAsset(options.assetId).audio;
82
+ await this.stop(options);
83
+ audio.loop = true;
84
+ return audio.play();
85
+ }
86
+ async stop(options) {
87
+ const audio = this.getAudioAsset(options.assetId).audio;
88
+ audio.pause();
89
+ audio.loop = false;
90
+ audio.currentTime = 0;
91
+ }
92
+ async unload(options) {
93
+ await this.stop(options);
94
+ NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.delete(options.assetId);
95
+ }
96
+ async setVolume(options) {
97
+ if (typeof (options === null || options === void 0 ? void 0 : options.volume) !== 'number') {
98
+ throw 'no volume provided';
99
+ }
100
+ const audio = this.getAudioAsset(options.assetId).audio;
101
+ audio.volume = options.volume;
102
+ }
103
+ async isPlaying(options) {
104
+ const audio = this.getAudioAsset(options.assetId).audio;
105
+ return { isPlaying: !audio.paused };
106
+ }
107
+ getAudioAsset(assetId) {
108
+ this.checkAssetId(assetId);
109
+ if (!NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.has(assetId)) {
110
+ throw `no asset for assetId "${assetId}" available. Call preload first!`;
111
+ }
112
+ return NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID.get(assetId);
113
+ }
114
+ checkAssetId(assetId) {
115
+ if (typeof assetId !== 'string') {
116
+ throw 'assetId must be a string';
117
+ }
118
+ if (!(assetId === null || assetId === void 0 ? void 0 : assetId.length)) {
119
+ throw 'no assetId provided';
120
+ }
121
+ }
122
+ }
123
+ NativeAudioWeb.FILE_LOCATION = 'assets/sounds';
124
+ NativeAudioWeb.AUDIO_ASSET_BY_ASSET_ID = new Map();
125
+ const NativeAudio = new NativeAudioWeb();
126
+
127
+ var web = /*#__PURE__*/Object.freeze({
128
+ __proto__: null,
129
+ NativeAudioWeb: NativeAudioWeb,
130
+ NativeAudio: NativeAudio
131
+ });
132
+
133
+ exports.NativeAudio = NativeAudio$1;
134
+ //# sourceMappingURL=plugin.cjs.js.map