1

i'hv added 10 audio files (1.m4a,2.m4a,...,10.m4a) in my local project and i convert first part into data and append into NSMutableData then load in player. working good. Now i have button, onClick of button i append 3 parts of music files, but its now playing in avaudioplayer. Does anyone know how can i do this?

 func loadFirstnPlay() {
    if let url = Bundle.main.url(forResource: "1", withExtension: "m4a"){
        if let rawData = NSData(contentsOf: url) {
            arrSongsData.append(rawData as Data)
            do {
                avAudioPlyer = try AVAudioPlayer(data: arrSongsData as Data)
                avAudioPlyer.prepareToPlay()
                avAudioPlyer.delegate = self
                avAudioPlyer.play()
                print("Play")
            }catch{
                print("Error : ",error)
            }
        }
    }
}

onButtonClick

 func onButtonClick() {
    for i in 2...4{
        if let url = Bundle.main.url(forResource: "\(i)", withExtension: "m4a"){
            if let rawData = NSData(contentsOf: url) {
                arrSongsData.append(rawData as Data)
                print("\(i) : ",arrSongsData.length)
            }
        }
    }
}
Pratik Prajapati
  • 1,137
  • 1
  • 13
  • 26

1 Answers1

0

If you want to play audio one by one then you can also use AVQueuePlayer with AVPlayerItem.

var arrSongItem:[AVPlayerItem] = []
var avQueuePlayer:AVQueuePlayer!

func loadFirstnPlay() {
    for i in 1...10 {
        if let url = Bundle.main.url(forResource: "\(i)", withExtension: "m4a"){
            let item = AVPlayerItem.init(url: url)
            arrSongItem.append(item)
        }
    }
    avQueuePlayer = AVQueuePlayer(items: arrSongItem)
    avQueuePlayer.play()
}

You can also insert items, remove items and next the current item using AVQueuePlayer object.

Ref : AVQueuePlayer

Jayesh Thanki
  • 2,037
  • 2
  • 23
  • 32