Как показать простой текст в зависимости от mp3 файла? - PullRequest
0 голосов
/ 22 октября 2019

Мое приложение воспроизводит mp3 файлы в последовательности. Наконец-то мне удалось воспроизвести mp3-файлы по очереди. Кроме того, мне нужно показать простой текст в моем приложении в зависимости от mp3-файла.

Например, при воспроизведении файла 0.mp3 textlabel.text показывает «привет» из текстового массива. после воспроизведения 0.mp3, когда воспроизводится файл 1.mp3, textlabel.text показывает «приятно познакомиться» из textarray.

Как отображать простые предложения на текстовой метке в зависимости от аудиофайла,один за другим?

textarray = ["привет", "приятно познакомиться", "меня зовут Джеймс", "сколько тебе лет?"]

@IBAction func autoplay(_ sender: Any) {

    var items : [AVPlayerItem] = []
    for number in myIndex..<arr.count {
        let url = Bundle.main.url(forResource: String(number), withExtension: "mp3")!
        items.append(AVPlayerItem(url: url))
        textlabel.text = textarry[number]

    }
     queue = AVQueuePlayer(items: items)
    queue.play()
}

1 Ответ

3 голосов
/ 22 октября 2019

Во многих ответах упоминается здесь о том, как получить обратный вызов после завершения воспроизведения видеоэлемента. Один из способов показать соответствующий текст видео, как показано ниже,

@IBAction func autoplay(_ sender: Any) {

    var items : [AVPlayerItem] = []
    for number in myIndex..<arr.count {
        let url = Bundle.main.url(forResource: String(number), withExtension: "mp3")!
        items.append(AVPlayerItem(url: url))
    }
    queue = AVQueuePlayer(items: items)
    queue.play()

    textlabel.text = textarry[myIndex]
}


override func viewDidLoad() {
    super.viewDidLoad()

    NotificationCenter.default.addObserver(
        self,
        selector: #selector(onVideoComplete),
        name: .AVPlayerItemDidPlayToEndTime,
        object: nil)

}   

@objc func onVideoComplete() {
    if let currentTitle = textlabel.text, let currentIndex = textarry.firstIndex(of: currentTitle) {
        self.textlabel.text = textarry[currentIndex.advanced(by: 1)]
    }
}
...