Overview

Starting from Video Editor SDK Android 1.47.1 and iOS 1.47.2 the BanubaMusicApi provides a simple interface for fetching and caching music metadata from the Banuba API, as well as downloading music tracks to local storage for later use.

Create instance

Android

// null if your token(license) does not allow to use BanubaMusic
val banubaMusicApi = BanubaMusicApiProvider(context).provide()

iOS

**// token** – Your Banuba License token.
// storageDirectory - where to download tracks i.e. FileManager.default.temporaryDirectory
let banubaMusicAPI = BanubaMusicAPI(
	token: "<YOUR_BANUBA_LICENSE_TOKEN>",
	storageDirectory: FileManager.default.temporaryDirectory
)

Usage

Load data

Fetches music metadata (track list, categories, etc.) from the backend.

Android

// Invoke method your background thread.
banubaMusicApi.load { result ->
		// response null of loading is failed
		val response = result.getOrNull()?.let { 
				// process data 
		}
}

data class BanubaMusicResponse(
    @field:Json(name = "tracks") val tracks: List<BanubaMusicTrack>,
    @field:Json(name = "popular_tracks") val popularTracks: List<String>,
    @field:Json(name = "moods") val moods: List<BanubaMusicCategory>,
    @field:Json(name = "genres") val genres: List<BanubaMusicCategory>,
    @field:Json(name = "styles") val styles: List<BanubaMusicCategory>,
    @field:Json(name = "artists") val artists: List<BanubaMusicArtist>,
)

iOS

let result = await banubaMusicAPI.load()

switch result {
case .success(let response):
    print("Loaded tracks: \\(response.tracks.count)")
case .failure(let error):
    print("Failed to load music: \\(error)")
}

public struct BanubaMusicResponse: Codable {
  public let popularTracks: [Int]
  public let genres: [BanubaMusicSection]
  public let moods: [BanubaMusicSection]
  public let styles: [BanubaMusicSection]
  public let artists: [BanubaMusicSection]
  public let tracks: [BanubaMusicSong]
  
   enum CodingKeys: String, CodingKey {
    case popularTracks = "popular_tracks"
    case genres
    case styles
    case artists
    case moods
    case tracks
  }
}

Download audio file

Downloads a music track from a given URL and stores it in the specified directory.

Android

// Invoke method your background thread.
// remoteUri - audio track remote uri obtained from a track in BanubaMusicResponse
// audioDir - where to download tracks
// filename - track name without extension i.e. "tempTrack"
banubaMusicApi.download(remoteUri, audioDir, fileName) { result ->
           if (result.isSuccess) {
               // Success
                val downloadedUri = result.getOrNull()
            } else {
               // Failure
            }
        }