Skip to content

React Native package to get music files from local and sd for iOS and Android

License

Notifications You must be signed in to change notification settings

cinder92/react-native-get-music-files

Repository files navigation

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

  1. 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>
  1. Add MediaPlayer.framework under build settings in Xcode
  2. Ensure all your music files are sync from a computer to a real iPhone device (this package does not work in simulators)

Android

  1. 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:

example app

Version Changes

2.2

  • Android & iOS compatible
  • Retro-compat turbo module
  • Limit & offset to paginate results
  • Compatible with https://github.com/zoontek/react-native-permissions

PR are welcome!

About

React Native package to get music files from local and sd for iOS and Android

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published