react-native-get-music-files
react-native-get-music-files copied to clipboard
React Native package to get music files from local and sd for iOS and Android
react-native-get-music-files
React Native package to get music files from local and sd for iOS and Android
What does this package?
This package allow you to get music files from Android & iOS with following properties:
- Title
- Author
- Album
- Duration
- FilePath
- Cover
- Duration
- Genre
Getting started
$ yarn add react-native-get-music-files
or
$ yarn add https://github.com/cinder92/react-native-get-music-files.git
iOS
- Add in
info.plist
following permission
<key>NSAppleMusicUsageDescription</key>
<string>This permission is not needed by the app, but it is required by an underlying API. If you see this dialog, contact us.</string>
- Add MediaPlayer.framework under build settings in Xcode
- Ensure all your music files are sync from a computer to a real iPhone device (this package does not work in simulators)
Android
- Navigate to
android/app/src/main/AndroidManifest.xml
and ensure to add this permission
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/> <-- Add this for Android 13 and newer versions
Before usage
As this package needs permissions from the device, please ensure that you asked for permissions before run any of this package functions.
Constants
SortSongFields {
TITLE, DURATION, ARTIST, GENRE, ALBUM
}
SortSongOrder {
ASC, DESC
}
Usage
import { getAll, getAlbums, searchSongs, SortSongFields, SortSongOrder } from "react-native-get-music-files";
const songsOrError = await getAll({
limit: 20,
offset: 0,
coverQuality: 50,
minSongDuration: 1000,
sortBy: SortSongFields.TITLE,
sortOrder: SortSongOrder.DESC,
});
// error
if (typeof songsOrError === 'string') {
// do something with the error
return;
}
const albumsOrError = await getAlbums({
limit: 10,
offset: 0,
coverQuality: 50,
artist: 'Rihanna',
sortBy: SortSongFields.ALBUM,
sortOrder: SortSongOrder.DESC,
});
// error
if (typeof albumsOrError === 'string') {
// do something with the error
return;
}
const resultsOrError = await searchSongs({
limit: 10,
offset: 0,
coverQuality: 50,
searchBy: '...',
sortBy: SortSongFields.DURATION,
sortOrder: SortSongOrder.DESC,
});
// error
if (typeof resultsOrError === 'string') {
// do something with the error
return;
}
MusicFiles returns an array of objects where you can loop, something like this.
[
{
title : "La danza del fuego",
author : "Mago de Oz",
album : "Finisterra",
genre : "Folk",
duration : 209120,
cover : "data:image/jpeg;base64, ....",
url : "/sdcard/0/la-danza-del-fuego.mp3"
}
]
Return Types
-
Album
Type: Object
property type description album string album name artist string author cover string base64 of the artwork numberOfSongs number number of songs in this album -
Song
property type description title string title artist string artist album string album name duration string duration in ms genre string genre cover string base64 of the artwork url string path of the song
Methods
-
getAlbums
async getAlbums(options) → {Promise<Album[] | string>}
-
options
Type: Object
property type description artist string required limit number optional offset number required if limit set coverQuality number optional sortBy string optional sortOrder string optional -
returns
Type: Albums Error: string
-
-
getAll
async getAll(options) → {Promise<Song[] | string>}
-
options
Type: Object
property type description limit number optional offset number required if limit set coverQuality string optional minSongDuration number optional sortBy string optional sortOrder string optional -
returns
Type: Song Error: string
-
-
searchSongs
async searchSongs(options) → { Promise<Song[] | string> }
-
options
Type: Object
property type description searchBy string required limit number optional offset number required if limit set coverQuality number optional sortBy string optional sortOrder string optional -
returns Type: Song Error: string
-
Usage:
Version Changes
2.2
- [x] Android & iOS compatible
- [x] Retro-compat turbo module
- [x] Limit & offset to paginate results
- [x] Compatible with
https://github.com/zoontek/react-native-permissions
PR are welcome!