react-native-mp3 0.1.0

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 (64) hide show
  1. package/android/build.gradle +111 -0
  2. package/android/src/main/AndroidManifest.xml +44 -0
  3. package/android/src/main/java/com/reactnativemp3/Mp3Package.kt +23 -0
  4. package/android/src/main/java/com/reactnativemp3/Mp3TurboModule.kt +43 -0
  5. package/android/src/main/java/com/reactnativemp3/database/MusicDatabase.kt +48 -0
  6. package/android/src/main/java/com/reactnativemp3/database/dao/SongDao.kt +72 -0
  7. package/android/src/main/java/com/reactnativemp3/database/entities/PlaylistEntity.kt +58 -0
  8. package/android/src/main/java/com/reactnativemp3/database/entities/SongEntity.kt +104 -0
  9. package/android/src/main/java/com/reactnativemp3/database/entities/ThumbnailCacheEntity.kt +43 -0
  10. package/android/src/main/java/com/reactnativemp3/managers/CacheManager.kt +0 -0
  11. package/android/src/main/java/com/reactnativemp3/managers/EqualizerManager.kt +0 -0
  12. package/android/src/main/java/com/reactnativemp3/modules/MetadataModule.kt +330 -0
  13. package/android/src/main/java/com/reactnativemp3/modules/NotificationModule.kt +236 -0
  14. package/android/src/main/java/com/reactnativemp3/modules/PlayerModule.kt +710 -0
  15. package/android/src/main/java/com/reactnativemp3/modules/ScannerModule.kt +640 -0
  16. package/android/src/main/java/com/reactnativemp3/services/AudioFocusService.kt +0 -0
  17. package/android/src/main/java/com/reactnativemp3/services/FileObserverService.kt +0 -0
  18. package/android/src/main/java/com/reactnativemp3/services/MusicService.kt +309 -0
  19. package/android/src/main/java/com/reactnativemp3/utils/MediaStoreUtils.kt +0 -0
  20. package/android/src/main/java/com/reactnativemp3/utils/PermissionUtils.kt +0 -0
  21. package/android/src/main/jni/Mp3TurboModule.cpp +29 -0
  22. package/android/src/main/res/drawable/ic_music_note.xml +11 -0
  23. package/android/src/main/res/drawable/ic_pause.xml +11 -0
  24. package/android/src/main/res/drawable/ic_play.xml +11 -0
  25. package/android/src/main/res/drawable/ic_skip_next.xml +11 -0
  26. package/android/src/main/res/drawable/ic_skip_previous.xml +11 -0
  27. package/android/src/main/res/drawable/ic_stop.xml +11 -0
  28. package/lib/components/MusicList.d.ts +0 -0
  29. package/lib/components/MusicList.js +1 -0
  30. package/lib/components/MusicPlayerUI.d.ts +0 -0
  31. package/lib/components/MusicPlayerUI.js +1 -0
  32. package/lib/hooks/useMusicPlayer.d.ts +38 -0
  33. package/lib/hooks/useMusicPlayer.js +242 -0
  34. package/lib/hooks/useMusicScanner.d.ts +27 -0
  35. package/lib/hooks/useMusicScanner.js +217 -0
  36. package/lib/hooks/usePermissions.d.ts +9 -0
  37. package/lib/hooks/usePermissions.js +55 -0
  38. package/lib/index.d.ts +144 -0
  39. package/lib/index.js +148 -0
  40. package/lib/types/common.types.d.ts +79 -0
  41. package/lib/types/common.types.js +2 -0
  42. package/lib/types/index.d.ts +3 -0
  43. package/lib/types/index.js +2 -0
  44. package/lib/types/player.types.d.ts +35 -0
  45. package/lib/types/player.types.js +2 -0
  46. package/lib/types/scanner.types.d.ts +29 -0
  47. package/lib/types/scanner.types.js +2 -0
  48. package/lib/utils/constants.d.ts +31 -0
  49. package/lib/utils/constants.js +55 -0
  50. package/lib/utils/events.d.ts +0 -0
  51. package/lib/utils/events.js +1 -0
  52. package/package.json +62 -0
  53. package/src/components/MusicList.tsx +0 -0
  54. package/src/components/MusicPlayerUI.tsx +0 -0
  55. package/src/hooks/useMusicPlayer.ts +358 -0
  56. package/src/hooks/useMusicScanner.ts +286 -0
  57. package/src/hooks/usePermissions.ts +64 -0
  58. package/src/index.ts +214 -0
  59. package/src/types/common.types.ts +86 -0
  60. package/src/types/index.ts +4 -0
  61. package/src/types/player.types.ts +37 -0
  62. package/src/types/scanner.types.ts +31 -0
  63. package/src/utils/constants.ts +56 -0
  64. package/src/utils/events.ts +0 -0
package/lib/index.d.ts ADDED
@@ -0,0 +1,144 @@
1
+ import { ScannerEvents, PlayerEvents, RepeatMode, EqualizerPresets, AudioExtensions } from './utils/constants';
2
+ import { Album, Artist, PlaybackState, ScannerOptions, Song } from './types';
3
+ export { Song, Album, Artist, Playlist, PlaybackState, EqualizerPreset, ScannerOptions, PlayerOptions, } from './types/common.types';
4
+ export type { ScannerEvents as ScannerEventsType, ScannerEventType, } from './types/scanner.types';
5
+ export type { PlayerEvents as PlayerEventsType, PlayerEventType, } from './types/player.types';
6
+ export { ScannerEvents, PlayerEvents, RepeatMode, EqualizerPresets, AudioExtensions, };
7
+ export { useMusicPlayer } from './hooks/useMusicPlayer';
8
+ export { useMusicScanner } from './hooks/useMusicScanner';
9
+ export { usePermissions } from './hooks/usePermissions';
10
+ export declare const Scanner: {
11
+ requestStoragePermission: () => Promise<boolean>;
12
+ checkPermissionStatus: () => Promise<boolean>;
13
+ scanMusicFiles: (options?: ScannerOptions) => Promise<any>;
14
+ getCachedSongs: (options?: any) => Promise<Song[]>;
15
+ deleteSong: (songId: string) => Promise<boolean>;
16
+ addToFavorites: (songId: string) => Promise<boolean>;
17
+ removeFromFavorites: (songId: string) => Promise<boolean>;
18
+ getAlbums: () => Promise<Album[]>;
19
+ getArtists: () => Promise<Artist[]>;
20
+ searchSongs: (query: string) => Promise<Song[]>;
21
+ clearCache: () => Promise<boolean>;
22
+ startFileMonitoring: () => void;
23
+ stopFileMonitoring: () => void;
24
+ addEventListener: (event: string, listener: (data: any) => void) => {
25
+ remove: () => void;
26
+ };
27
+ removeAllListeners: (event?: string) => void;
28
+ };
29
+ export declare const Player: {
30
+ play: (uri: string) => Promise<void>;
31
+ playFromQueue: (index: number) => void;
32
+ pause: () => void;
33
+ stop: () => void;
34
+ seekTo: (position: number) => void;
35
+ skipToNext: () => void;
36
+ skipToPrevious: () => void;
37
+ setVolume: (volume: number) => void;
38
+ setPlaybackRate: (rate: number) => void;
39
+ setQueue: (songs: Song[]) => void;
40
+ addToQueue: (songs: Song[]) => void;
41
+ clearQueue: () => void;
42
+ getQueue: () => Promise<Song[]>;
43
+ getCurrentTrack: () => Promise<Song>;
44
+ getPlaybackState: () => Promise<PlaybackState>;
45
+ getCurrentTime: () => Promise<number>;
46
+ getDuration: () => Promise<number>;
47
+ isPlaying: () => Promise<boolean>;
48
+ setRepeatMode: (mode: "none" | "one" | "all") => void;
49
+ setShuffleMode: (enabled: boolean) => void;
50
+ setEqualizerPreset: (preset: string) => void;
51
+ setEqualizerBands: (bands: number[]) => void;
52
+ getEqualizerPresets: () => Promise<string[]>;
53
+ enableEqualizer: (enabled: boolean) => void;
54
+ setSleepTimer: (minutes: number) => void;
55
+ cancelSleepTimer: () => void;
56
+ setupBackgroundPlayback: (config?: any) => void;
57
+ stopBackgroundPlayback: () => void;
58
+ addEventListener: (event: string, listener: (data: any) => void) => {
59
+ remove: () => void;
60
+ };
61
+ removeAllListeners: (event?: string) => void;
62
+ };
63
+ export declare const Metadata: {
64
+ extractMetadata: (uri: string) => Promise<any>;
65
+ getAlbumArt: (uri: string, size?: number) => Promise<string>;
66
+ getLyrics: (uri: string) => Promise<string | null>;
67
+ updateMetadata: (uri: string, metadata: any) => Promise<boolean>;
68
+ };
69
+ export declare const Notifications: {
70
+ setupNotificationChannel: () => void;
71
+ updateNotification: (metadata: any) => void;
72
+ hideNotification: () => void;
73
+ showNotification: () => void;
74
+ };
75
+ declare const _default: {
76
+ Scanner: {
77
+ requestStoragePermission: () => Promise<boolean>;
78
+ checkPermissionStatus: () => Promise<boolean>;
79
+ scanMusicFiles: (options?: ScannerOptions) => Promise<any>;
80
+ getCachedSongs: (options?: any) => Promise<Song[]>;
81
+ deleteSong: (songId: string) => Promise<boolean>;
82
+ addToFavorites: (songId: string) => Promise<boolean>;
83
+ removeFromFavorites: (songId: string) => Promise<boolean>;
84
+ getAlbums: () => Promise<Album[]>;
85
+ getArtists: () => Promise<Artist[]>;
86
+ searchSongs: (query: string) => Promise<Song[]>;
87
+ clearCache: () => Promise<boolean>;
88
+ startFileMonitoring: () => void;
89
+ stopFileMonitoring: () => void;
90
+ addEventListener: (event: string, listener: (data: any) => void) => {
91
+ remove: () => void;
92
+ };
93
+ removeAllListeners: (event?: string) => void;
94
+ };
95
+ Player: {
96
+ play: (uri: string) => Promise<void>;
97
+ playFromQueue: (index: number) => void;
98
+ pause: () => void;
99
+ stop: () => void;
100
+ seekTo: (position: number) => void;
101
+ skipToNext: () => void;
102
+ skipToPrevious: () => void;
103
+ setVolume: (volume: number) => void;
104
+ setPlaybackRate: (rate: number) => void;
105
+ setQueue: (songs: Song[]) => void;
106
+ addToQueue: (songs: Song[]) => void;
107
+ clearQueue: () => void;
108
+ getQueue: () => Promise<Song[]>;
109
+ getCurrentTrack: () => Promise<Song>;
110
+ getPlaybackState: () => Promise<PlaybackState>;
111
+ getCurrentTime: () => Promise<number>;
112
+ getDuration: () => Promise<number>;
113
+ isPlaying: () => Promise<boolean>;
114
+ setRepeatMode: (mode: "none" | "one" | "all") => void;
115
+ setShuffleMode: (enabled: boolean) => void;
116
+ setEqualizerPreset: (preset: string) => void;
117
+ setEqualizerBands: (bands: number[]) => void;
118
+ getEqualizerPresets: () => Promise<string[]>;
119
+ enableEqualizer: (enabled: boolean) => void;
120
+ setSleepTimer: (minutes: number) => void;
121
+ cancelSleepTimer: () => void;
122
+ setupBackgroundPlayback: (config?: any) => void;
123
+ stopBackgroundPlayback: () => void;
124
+ addEventListener: (event: string, listener: (data: any) => void) => {
125
+ remove: () => void;
126
+ };
127
+ removeAllListeners: (event?: string) => void;
128
+ };
129
+ Metadata: {
130
+ extractMetadata: (uri: string) => Promise<any>;
131
+ getAlbumArt: (uri: string, size?: number) => Promise<string>;
132
+ getLyrics: (uri: string) => Promise<string | null>;
133
+ updateMetadata: (uri: string, metadata: any) => Promise<boolean>;
134
+ };
135
+ Notifications: {
136
+ setupNotificationChannel: () => void;
137
+ updateNotification: (metadata: any) => void;
138
+ hideNotification: () => void;
139
+ showNotification: () => void;
140
+ };
141
+ };
142
+ export default _default;
143
+ export declare const isAndroid: boolean;
144
+ export declare const isIOS: boolean;
package/lib/index.js ADDED
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isIOS = exports.isAndroid = exports.Notifications = exports.Metadata = exports.Player = exports.Scanner = exports.usePermissions = exports.useMusicScanner = exports.useMusicPlayer = exports.AudioExtensions = exports.EqualizerPresets = exports.RepeatMode = exports.PlayerEvents = exports.ScannerEvents = void 0;
4
+ const react_native_1 = require("react-native");
5
+ // Import constants
6
+ const constants_1 = require("./utils/constants");
7
+ Object.defineProperty(exports, "ScannerEvents", { enumerable: true, get: function () { return constants_1.ScannerEvents; } });
8
+ Object.defineProperty(exports, "PlayerEvents", { enumerable: true, get: function () { return constants_1.PlayerEvents; } });
9
+ Object.defineProperty(exports, "RepeatMode", { enumerable: true, get: function () { return constants_1.RepeatMode; } });
10
+ Object.defineProperty(exports, "EqualizerPresets", { enumerable: true, get: function () { return constants_1.EqualizerPresets; } });
11
+ Object.defineProperty(exports, "AudioExtensions", { enumerable: true, get: function () { return constants_1.AudioExtensions; } });
12
+ // Hooks
13
+ var useMusicPlayer_1 = require("./hooks/useMusicPlayer");
14
+ Object.defineProperty(exports, "useMusicPlayer", { enumerable: true, get: function () { return useMusicPlayer_1.useMusicPlayer; } });
15
+ var useMusicScanner_1 = require("./hooks/useMusicScanner");
16
+ Object.defineProperty(exports, "useMusicScanner", { enumerable: true, get: function () { return useMusicScanner_1.useMusicScanner; } });
17
+ var usePermissions_1 = require("./hooks/usePermissions");
18
+ Object.defineProperty(exports, "usePermissions", { enumerable: true, get: function () { return usePermissions_1.usePermissions; } });
19
+ // Optional UI Components (if needed)
20
+ // export { MusicPlayerUI } from './components/MusicPlayerUI';
21
+ // export { MusicList } from './components/MusicList';
22
+ // Native Modules
23
+ const { ScannerModule, PlayerModule, MetadataModule, NotificationModule } = react_native_1.NativeModules;
24
+ // Event Emitters
25
+ const scannerEventEmitter = new react_native_1.NativeEventEmitter(ScannerModule);
26
+ const playerEventEmitter = new react_native_1.NativeEventEmitter(PlayerModule);
27
+ // Check if native modules are available
28
+ if (!ScannerModule || !PlayerModule) {
29
+ console.warn('react-native-mp3 native modules are not available. Make sure to link the package properly.');
30
+ }
31
+ // Scanner Module Functions
32
+ exports.Scanner = {
33
+ // Permission
34
+ requestStoragePermission: () => ScannerModule.requestStoragePermission(),
35
+ checkPermissionStatus: () => ScannerModule.checkPermissionStatus(),
36
+ // Scanning
37
+ scanMusicFiles: (options) => ScannerModule.scanMusicFiles(options || {}),
38
+ getCachedSongs: (options) => ScannerModule.getCachedSongs(options || {}),
39
+ // File Operations
40
+ deleteSong: (songId) => ScannerModule.deleteSong(songId),
41
+ addToFavorites: (songId) => ScannerModule.addToFavorites(songId),
42
+ removeFromFavorites: (songId) => ScannerModule.removeFromFavorites(songId),
43
+ // Metadata
44
+ getAlbums: () => ScannerModule.getAlbums(),
45
+ getArtists: () => ScannerModule.getArtists(),
46
+ searchSongs: (query) => ScannerModule.searchSongs(query),
47
+ // Cache Management
48
+ clearCache: () => ScannerModule.clearCache(),
49
+ // File Monitoring
50
+ startFileMonitoring: () => ScannerModule.startFileMonitoring(),
51
+ stopFileMonitoring: () => ScannerModule.stopFileMonitoring(),
52
+ // Events
53
+ addEventListener: (event, listener) => {
54
+ const subscription = scannerEventEmitter.addListener(event, listener);
55
+ return { remove: () => subscription.remove() };
56
+ },
57
+ removeAllListeners: (event) => {
58
+ if (event) {
59
+ scannerEventEmitter.removeAllListeners(event);
60
+ }
61
+ else {
62
+ // Remove all events by specifying each event type
63
+ const scannerEventTypes = Object.values(constants_1.ScannerEvents);
64
+ scannerEventTypes.forEach(eventType => {
65
+ scannerEventEmitter.removeAllListeners(eventType);
66
+ });
67
+ }
68
+ },
69
+ };
70
+ // Player Module Functions
71
+ exports.Player = {
72
+ // Playback Control
73
+ play: (uri) => PlayerModule.play(uri),
74
+ playFromQueue: (index) => PlayerModule.playFromQueue(index),
75
+ pause: () => PlayerModule.pause(),
76
+ stop: () => PlayerModule.stop(),
77
+ seekTo: (position) => PlayerModule.seekTo(position),
78
+ skipToNext: () => PlayerModule.skipToNext(),
79
+ skipToPrevious: () => PlayerModule.skipToPrevious(),
80
+ setVolume: (volume) => PlayerModule.setVolume(volume),
81
+ setPlaybackRate: (rate) => PlayerModule.setPlaybackRate(rate),
82
+ // Queue Management
83
+ setQueue: (songs) => PlayerModule.setQueue(songs),
84
+ addToQueue: (songs) => PlayerModule.addToQueue(songs),
85
+ clearQueue: () => PlayerModule.clearQueue(),
86
+ getQueue: () => PlayerModule.getQueue(),
87
+ getCurrentTrack: () => PlayerModule.getCurrentTrack(),
88
+ // Playback State
89
+ getPlaybackState: () => PlayerModule.getPlaybackState(),
90
+ getCurrentTime: () => PlayerModule.getCurrentTime(),
91
+ getDuration: () => PlayerModule.getDuration(),
92
+ isPlaying: () => PlayerModule.isPlaying(),
93
+ // Playback Modes
94
+ setRepeatMode: (mode) => PlayerModule.setRepeatMode(mode),
95
+ setShuffleMode: (enabled) => PlayerModule.setShuffleMode(enabled),
96
+ // Equalizer
97
+ setEqualizerPreset: (preset) => PlayerModule.setEqualizerPreset(preset),
98
+ setEqualizerBands: (bands) => PlayerModule.setEqualizerBands(bands),
99
+ getEqualizerPresets: () => PlayerModule.getEqualizerPresets(),
100
+ enableEqualizer: (enabled) => PlayerModule.enableEqualizer(enabled),
101
+ // Sleep Timer
102
+ setSleepTimer: (minutes) => PlayerModule.setSleepTimer(minutes),
103
+ cancelSleepTimer: () => PlayerModule.cancelSleepTimer(),
104
+ // Background Playback
105
+ setupBackgroundPlayback: (config) => PlayerModule.setupBackgroundPlayback(config || {}),
106
+ stopBackgroundPlayback: () => PlayerModule.stopBackgroundPlayback(),
107
+ // Events
108
+ addEventListener: (event, listener) => {
109
+ const subscription = playerEventEmitter.addListener(event, listener);
110
+ return { remove: () => subscription.remove() };
111
+ },
112
+ removeAllListeners: (event) => {
113
+ if (event) {
114
+ playerEventEmitter.removeAllListeners(event);
115
+ }
116
+ else {
117
+ // Remove all events by specifying each event type
118
+ const playerEventTypes = Object.values(constants_1.PlayerEvents);
119
+ playerEventTypes.forEach(eventType => {
120
+ playerEventEmitter.removeAllListeners(eventType);
121
+ });
122
+ }
123
+ },
124
+ };
125
+ // Metadata Module Functions
126
+ exports.Metadata = {
127
+ extractMetadata: (uri) => MetadataModule.extractMetadata(uri),
128
+ getAlbumArt: (uri, size) => MetadataModule.getAlbumArt(uri, size || 300),
129
+ getLyrics: (uri) => MetadataModule.getLyrics(uri),
130
+ updateMetadata: (uri, metadata) => MetadataModule.updateMetadata(uri, metadata),
131
+ };
132
+ // Notification Module Functions
133
+ exports.Notifications = {
134
+ setupNotificationChannel: () => NotificationModule.setupNotificationChannel(),
135
+ updateNotification: (metadata) => NotificationModule.updateNotification(metadata),
136
+ hideNotification: () => NotificationModule.hideNotification(),
137
+ showNotification: () => NotificationModule.showNotification(),
138
+ };
139
+ // Default export
140
+ exports.default = {
141
+ Scanner: exports.Scanner,
142
+ Player: exports.Player,
143
+ Metadata: exports.Metadata,
144
+ Notifications: exports.Notifications,
145
+ };
146
+ // Platform check
147
+ exports.isAndroid = react_native_1.Platform.OS === 'android';
148
+ exports.isIOS = react_native_1.Platform.OS === 'ios';
@@ -0,0 +1,79 @@
1
+ export interface Song {
2
+ id: string;
3
+ title: string;
4
+ artist: string;
5
+ album: string;
6
+ duration: number;
7
+ path: string;
8
+ uri: string;
9
+ albumArtUri?: string;
10
+ size: number;
11
+ mimeType: string;
12
+ trackNumber: number;
13
+ year?: number;
14
+ genre?: string;
15
+ dateAdded: number;
16
+ lastModified: number;
17
+ isFavorite: boolean;
18
+ playCount: number;
19
+ lastPlayed?: number;
20
+ bitrate?: number;
21
+ sampleRate?: number;
22
+ channels?: number;
23
+ composer?: string;
24
+ bookmark: number;
25
+ isPodcast: boolean;
26
+ rating?: number;
27
+ }
28
+ export interface Album {
29
+ name: string;
30
+ songCount: number;
31
+ albumArtUri?: string;
32
+ artist?: string;
33
+ year?: number;
34
+ }
35
+ export interface Artist {
36
+ name: string;
37
+ songCount: number;
38
+ albumCount: number;
39
+ }
40
+ export interface Playlist {
41
+ id: string;
42
+ name: string;
43
+ songCount: number;
44
+ thumbnailUri?: string;
45
+ createdAt: number;
46
+ }
47
+ export interface PlaybackState {
48
+ isPlaying: boolean;
49
+ currentTime: number;
50
+ duration: number;
51
+ buffered?: number;
52
+ playbackRate: number;
53
+ volume: number;
54
+ repeatMode: 'none' | 'one' | 'all';
55
+ shuffleMode: boolean;
56
+ currentSong?: Song;
57
+ queue: Song[];
58
+ queuePosition: number;
59
+ error?: string;
60
+ }
61
+ export interface EqualizerPreset {
62
+ name: string;
63
+ bands: number[];
64
+ }
65
+ export interface ScannerOptions {
66
+ forceRescan?: boolean;
67
+ paths?: string[];
68
+ maxFiles?: number;
69
+ extensions?: string[];
70
+ }
71
+ export interface PlayerOptions {
72
+ autoPlay?: boolean;
73
+ keepAwake?: boolean;
74
+ volume?: number;
75
+ speed?: number;
76
+ repeatMode?: 'none' | 'one' | 'all';
77
+ audioFocus?: boolean;
78
+ ducking?: boolean;
79
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ export type { Song, Album, Artist, Playlist, PlaybackState, EqualizerPreset, ScannerOptions, PlayerOptions } from './common.types';
2
+ export type { ScannerEvents, ScannerEventType } from './scanner.types';
3
+ export type { PlayerEvents, PlayerEventType } from './player.types';
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,35 @@
1
+ export interface PlayerEvents {
2
+ PLAYBACK_STATE_CHANGED: {
3
+ isPlaying: boolean;
4
+ currentTime: number;
5
+ duration: number;
6
+ buffered?: number;
7
+ };
8
+ PLAYBACK_QUEUE_CHANGED: {
9
+ queue: any[];
10
+ position: number;
11
+ };
12
+ PLAYBACK_ERROR: {
13
+ error: string;
14
+ songId?: string;
15
+ };
16
+ PLAYBACK_COMPLETE: {
17
+ songId: string;
18
+ };
19
+ PLAYBACK_NEXT: {
20
+ songId: string;
21
+ };
22
+ PLAYBACK_PREVIOUS: {
23
+ songId: string;
24
+ };
25
+ EQUALIZER_CHANGED: {
26
+ enabled: boolean;
27
+ preset?: string;
28
+ bands?: number[];
29
+ };
30
+ }
31
+ export type PlayerEventType = keyof PlayerEvents;
32
+ export interface AudioFocusConfig {
33
+ focusGain: number;
34
+ willPauseWhenDucked: boolean;
35
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,29 @@
1
+ export interface ScannerEvents {
2
+ SCAN_PROGRESS: {
3
+ processed: number;
4
+ total: number;
5
+ percentage: number;
6
+ };
7
+ SCAN_COMPLETE: {
8
+ totalSongs: number;
9
+ scanPaths: string[];
10
+ };
11
+ FILE_ADDED: {
12
+ songId: string;
13
+ path: string;
14
+ song: any;
15
+ };
16
+ FILE_DELETED: {
17
+ songId: string;
18
+ path: string;
19
+ };
20
+ PERMISSION_STATUS: {
21
+ granted: boolean;
22
+ message: string;
23
+ };
24
+ }
25
+ export type ScannerEventType = keyof ScannerEvents;
26
+ export interface ScanResult {
27
+ totalSongs: number;
28
+ scanPaths: string[];
29
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,31 @@
1
+ export declare const ScannerEvents: {
2
+ readonly SCAN_PROGRESS: "SCAN_PROGRESS";
3
+ readonly SCAN_COMPLETE: "SCAN_COMPLETE";
4
+ readonly FILE_ADDED: "FILE_ADDED";
5
+ readonly FILE_DELETED: "FILE_DELETED";
6
+ readonly PERMISSION_STATUS: "PERMISSION_STATUS";
7
+ };
8
+ export declare const PlayerEvents: {
9
+ readonly PLAYBACK_STATE_CHANGED: "PLAYBACK_STATE_CHANGED";
10
+ readonly PLAYBACK_QUEUE_CHANGED: "PLAYBACK_QUEUE_CHANGED";
11
+ readonly PLAYBACK_ERROR: "PLAYBACK_ERROR";
12
+ readonly PLAYBACK_COMPLETE: "PLAYBACK_COMPLETE";
13
+ readonly PLAYBACK_NEXT: "PLAYBACK_NEXT";
14
+ readonly PLAYBACK_PREVIOUS: "PLAYBACK_PREVIOUS";
15
+ readonly EQUALIZER_CHANGED: "EQUALIZER_CHANGED";
16
+ };
17
+ export declare const RepeatMode: {
18
+ readonly NONE: "none";
19
+ readonly ONE: "one";
20
+ readonly ALL: "all";
21
+ };
22
+ export declare const EqualizerPresets: {
23
+ readonly NORMAL: "normal";
24
+ readonly ROCK: "rock";
25
+ readonly POP: "pop";
26
+ readonly JAZZ: "jazz";
27
+ readonly CLASSIC: "classic";
28
+ readonly DANCE: "dance";
29
+ readonly FLAT: "flat";
30
+ };
31
+ export declare const AudioExtensions: string[];
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AudioExtensions = exports.EqualizerPresets = exports.RepeatMode = exports.PlayerEvents = exports.ScannerEvents = void 0;
4
+ exports.ScannerEvents = {
5
+ SCAN_PROGRESS: 'SCAN_PROGRESS',
6
+ SCAN_COMPLETE: 'SCAN_COMPLETE',
7
+ FILE_ADDED: 'FILE_ADDED',
8
+ FILE_DELETED: 'FILE_DELETED',
9
+ PERMISSION_STATUS: 'PERMISSION_STATUS',
10
+ };
11
+ exports.PlayerEvents = {
12
+ PLAYBACK_STATE_CHANGED: 'PLAYBACK_STATE_CHANGED',
13
+ PLAYBACK_QUEUE_CHANGED: 'PLAYBACK_QUEUE_CHANGED',
14
+ PLAYBACK_ERROR: 'PLAYBACK_ERROR',
15
+ PLAYBACK_COMPLETE: 'PLAYBACK_COMPLETE',
16
+ PLAYBACK_NEXT: 'PLAYBACK_NEXT',
17
+ PLAYBACK_PREVIOUS: 'PLAYBACK_PREVIOUS',
18
+ EQUALIZER_CHANGED: 'EQUALIZER_CHANGED',
19
+ };
20
+ exports.RepeatMode = {
21
+ NONE: 'none',
22
+ ONE: 'one',
23
+ ALL: 'all',
24
+ };
25
+ exports.EqualizerPresets = {
26
+ NORMAL: 'normal',
27
+ ROCK: 'rock',
28
+ POP: 'pop',
29
+ JAZZ: 'jazz',
30
+ CLASSIC: 'classic',
31
+ DANCE: 'dance',
32
+ FLAT: 'flat',
33
+ };
34
+ exports.AudioExtensions = [
35
+ '.mp3',
36
+ '.mp4',
37
+ '.m4a',
38
+ '.aac',
39
+ '.flac',
40
+ '.wav',
41
+ '.ogg',
42
+ '.opus',
43
+ '.wma',
44
+ '.amr',
45
+ '.aif',
46
+ '.aiff',
47
+ '.mid',
48
+ '.midi',
49
+ '.xmf',
50
+ '.mxmf',
51
+ '.rtttl',
52
+ '.rtx',
53
+ '.ota',
54
+ '.imy',
55
+ ];
File without changes
@@ -0,0 +1 @@
1
+ "use strict";
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "react-native-mp3",
3
+ "version": "0.1.0",
4
+ "description": "A comprehensive music player for React Native with offline/online playback, file scanning, metadata extraction, and background playback",
5
+ "main": "lib/index.js",
6
+ "types": "lib/index.d.ts",
7
+ "react-native": "src/index.ts",
8
+ "source": "src/index.ts",
9
+ "files": [
10
+ "src",
11
+ "android",
12
+ "lib",
13
+ "!**/__tests__",
14
+ "!**/__fixtures__",
15
+ "!**/__mocks__",
16
+ "!example"
17
+ ],
18
+ "scripts": {
19
+ "prepare": "npm run build",
20
+ "build": "tsc",
21
+ "dev": "tsc --watch",
22
+ "lint": "eslint src --ext .ts,.tsx",
23
+ "prepack": "npm run build",
24
+ "test": "echo \"Error: no test specified\" && exit 1"
25
+ },
26
+ "keywords": [
27
+ "react-native",
28
+ "android",
29
+ "music",
30
+ "player",
31
+ "mp3",
32
+ "audio",
33
+ "scanner",
34
+ "metadata"
35
+ ],
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "https://github.com/RakeshPrasad28/react-native-mp3.git"
39
+ },
40
+ "author": "Rakesh",
41
+ "license": "MIT",
42
+ "bugs": {
43
+ "url": "https://github.com/yourusername/react-native-mp3/issues"
44
+ },
45
+ "homepage": "https://github.com/yourusername/react-native-mp3#readme",
46
+ "peerDependencies": {
47
+ "react": ">=16.8.0",
48
+ "react-native": ">=0.60.0"
49
+ },
50
+ "devDependencies": {
51
+ "@types/react": "^18.0.0",
52
+ "@types/react-native": "^0.70.0",
53
+ "typescript": "^4.9.0",
54
+ "@react-native-community/eslint-config": "^3.2.0",
55
+ "eslint": "^8.0.0",
56
+ "react": "18.2.0",
57
+ "react-native": "0.72.0"
58
+ },
59
+ "engines": {
60
+ "node": ">=14.0.0"
61
+ }
62
+ }
File without changes
File without changes