【问题标题】:Swift 2.2: creating random playlist for AVAudioPlayerSwift 2.2:为 AVAudioPlayer 创建随机播放列表
【发布时间】:2016-05-20 12:18:01
【问题描述】:

我正在尝试从一组声音中创建一个包含 4 个项目的随机播放列表,用户可以播放/暂停、向前跳过和向后跳过。

我是 Swift 和面向对象编程的新手(对不起!)。目前使用 Xcode 7.3.1。

我的代码:

class ViewController: UIViewController {

var E1Audio: AVPlayerItem?
var E2Audio: AVPlayerItem?
var E3Audio: AVPlayerItem?
var E4Audio: AVPlayerItem?
var E5Audio: AVPlayerItem?
var E6Audio: AVPlayerItem?

struct playlist {
    var initialitems: [AVPlayerItem] = []
    var shuffleditems: [AVPlayerItem] {
     initialitems.shuffle
    }
    var instanceplaylist: [AVPlayerItem]{
     shuffleditems[0...3]
    }
}

var EnvPlaylist: [AVPlayerItem] = playlist(initialitems: [E1Audio, E2Audio, E3Audio, E4Audio, E5Audio, E6Audio])
let EnvPlayer = AVPlayer()
var currentTrack = 0

@IBAction func envPreviousTrack() {
    if currentTrack-1 < 0 {
        currentTrack = (EnvPlaylist.count - 1) < 0 ? 0 : (EnvPlaylist.count - 1)
    } else {
        currentTrack-1
    }
}

@IBAction func envNextTrack() {
    if currentTrack+1 > EnvPlaylist.count {
        currentTrack = 0
    } else {
        currentTrack+1;
    }
}

@IBAction func envPlayTrack() {
    if EnvPlaylist.count > 0 {
        EnvPlayer.replaceCurrentItemWithPlayerItem(InstancePlaylist2[currentTrack])
        EnvPlayer.play()

override func viewDidLoad() {
    super.viewDidLoad()
let E1Audio = AVPlayerItem.init(URL: NSBundle.mainBundle().URLForResource("E1Audio", withExtension: "wav")!)
let E2Audio = AVPlayerItem.init(URL: NSBundle.mainBundle().URLForResource("E2Audio", withExtension: "wav")!)
let E3Audio = AVPlayerItem.init(URL: NSBundle.mainBundle().URLForResource("E3Audio", withExtension: "wav")!)
let E4Audio = AVPlayerItem.init(URL: NSBundle.mainBundle().URLForResource("E4Audio", withExtension: "wav")!)
let E5Audio = AVPlayerItem.init(URL: NSBundle.mainBundle().URLForResource("E5Audio", withExtension: "wav")!)
let E6Audio = AVPlayerItem.init(URL: NSBundle.mainBundle().URLForResource("E6Audio", withExtension: "wav")!)

    }
}
}

这给出了错误:实例成员“E1Audio”不能用于类型“ViewController”。

如果我将 EnvPlaylist 的声明移至 viewDidLoad(),则无法在类级别定义函数 envPreviousTrack()、envNextTrack() 和 envPlayTrack(),然后链接到我的 UI 按钮。

我该如何解决这个问题?提前致谢。对不起,如果这是一个愚蠢的问题。

【问题讨论】:

    标签: ios swift random avaudioplayer playlist


    【解决方案1】:

    你不能像那样直接声明变量。这样做:

    class ViewController: UIViewController {
        var E1Audio = AVPlayerItem()
        override func viewDidLoad() {
            super.viewDidLoad()   
            E1Audio = AVPlayerItem.init(URL: NSBundle.mainBundle().URLForResource("E1Audio", withExtension: "wav")!)
        }
    }
    

    对所有音频项目重复此操作。

    【讨论】:

    • 谢谢。已更新问题以反映变化;在 Xcode 中仍然遇到同样的错误?
    • @OliverMcCallion 在 vi​​ewDidLoad 方法中,去掉 E1Audio 前面的 let。您不想重新创建变量。
    猜你喜欢
    • 2023-01-23
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 2012-03-11
    相关资源
    最近更新 更多