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.
// null if your token(license) does not allow to use BanubaMusic
val banubaMusicApi = BanubaMusicApiProvider(context).provide()
**// 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
)
Fetches music metadata (track list, categories, etc.) from the backend.
// 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>,
)
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
}
}
Result<BanubaMusicResponse, Error>
Downloads a music track from a given URL and stores it in the specified directory.
// 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
}
}