Как воспроизвести аудио файлы из массива в случайном порядке в Swift в Xcode11? - PullRequest
0 голосов
/ 02 октября 2019

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

import UIKit
import AVFoundation
import AudioToolbox


class ViewController: UIViewController, AVAudioPlayerDelegate {

    var audioPlayerHyeeeehLong: AVAudioPlayer = AVAudioPlayer()
    var audioPlayerHyeeeehShort: AVAudioPlayer = AVAudioPlayer()
    var beWellAudioPlayer: AVAudioPlayer = AVAudioPlayer()

    @IBOutlet weak var beWellButton: UIButton!
    @IBOutlet weak var restoreMindBodyButton: UIButton!
    @IBOutlet weak var spiritualCleanseButton: UIButton!

    var randomIndex = 0
    var soundFiles = ["sound1", "sound2", "sound3", "sound4", "sound5"]

    override func viewDidLoad() {
        super.viewDidLoad()

        // play full spiritual cleanse
        let hyeeeeh = Bundle.main.path(forResource: "hyeeeeh", ofType: "m4a")
        do{
            audioPlayerHyeeeehLong = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: hyeeeeh!))
        }catch{
            print(error)
        }

        // play restore mind body
        let hyeeeehShort = Bundle.main.path(forResource: "hyeeeeh1", ofType: "m4a")
        do{
            audioPlayerHyeeeehShort = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: hyeeeehShort!))
        }catch{
            print(error)
        }

        // play be well
        randomIndex = Int(arc4random_uniform(UInt32(soundFiles.count)))
        let selectedFileName = soundFiles[randomIndex]
        let beWell = Bundle.main.path(forResource: selectedFileName, ofType: "m4a")
            do{
                beWellAudioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: beWell!))
            }catch{
                print(error)
            }

       }


    @IBAction func beWell(_ sender: Any) {
        print("Be Well Button Pressed")
        beWellAudioPlayer.play()


    }

    @IBAction func playShortHyeeh(_ sender: Any) {
        audioPlayerHyeeeehShort.play()
    }

    @IBAction func playFullHyeeeh(_ sender: Any) {
        audioPlayerHyeeeehLong.play()
    }
}

РЕДАКТИРОВАТЬ: Ниже приведен фиксированный код. Все работает! Спасибо за помощь, РБ Ниранджан!

import UIKit
import AVFoundation
import AudioToolbox


class ViewController: UIViewController, AVAudioPlayerDelegate {

    var audioPlayerHyeeeehLong: AVAudioPlayer = AVAudioPlayer()
    var audioPlayerHyeeeehShort: AVAudioPlayer = AVAudioPlayer()
    var beWellAudioPlayer: AVAudioPlayer = AVAudioPlayer()

    @IBOutlet weak var beWellButton: UIButton!
    @IBOutlet weak var restoreMindBodyButton: UIButton!
    @IBOutlet weak var spiritualCleanseButton: UIButton!

    var randomIndex = 0
    var soundFiles = ["sound1", "sound2", "sound3", "sound4", "sound5"]


    override func viewDidLoad() {
        super.viewDidLoad()

       }


    @IBAction func beWell(_ sender: Any) {
        randomIndex = Int(arc4random_uniform(UInt32(soundFiles.count)))
        let selectedFileName = soundFiles[randomIndex]
        let beWell = Bundle.main.path(forResource: selectedFileName, ofType: "m4a")
            do{
                beWellAudioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: beWell!))
            }catch{
                print(error)
            }
        if beWellAudioPlayer.isPlaying{
            beWellAudioPlayer.pause()
        }
        beWellAudioPlayer.currentTime = 0
        beWellAudioPlayer.play()

    }

    @IBAction func playShortHyeeh(_ sender: Any) {
        let hyeeeehShort = Bundle.main.path(forResource: "hyeeeeh1", ofType: "m4a")
        do{
            audioPlayerHyeeeehShort = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: hyeeeehShort!))
        }catch{
            print(error)
        }
        if audioPlayerHyeeeehShort.isPlaying{
            audioPlayerHyeeeehShort.pause()
        }
        audioPlayerHyeeeehShort.currentTime = 0
        audioPlayerHyeeeehShort.play()
    }

    @IBAction func playFullHyeeeh(_ sender: Any) {

        let hyeeeeh = Bundle.main.path(forResource: "hyeeeeh", ofType: "m4a")
               do{
                   audioPlayerHyeeeehLong = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: hyeeeeh!))
               }catch{
                   print(error)
               }
        if audioPlayerHyeeeehLong.isPlaying{
            audioPlayerHyeeeehLong.pause()
        }
        audioPlayerHyeeeehLong.currentTime = 0
        audioPlayerHyeeeehLong.play()
    }
}

1 Ответ

2 голосов
/ 03 октября 2019

Выбор случайного аудиофайла и воспроизведение должны быть сделаны одним нажатием кнопки.

@IBAction func beWell(_ sender: Any) {
        print("Be Well Button Pressed")
        randomIndex = Int(arc4random_uniform(UInt32(soundFiles.count)))
        let selectedFileName = soundFiles[randomIndex]
        let beWell = Bundle.main.path(forResource: selectedFileName, ofType: "m4a")
            do{
                beWellAudioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: beWell!))
            }catch{
                print(error)
            }
        beWellAudioPlayer.play()
}
...