ios - Swift 3 多个 AVAudioPlayer

标签 ios iphone swift3

对 Swift 很陌生,所以请原谅我的问题很幼稚。
我构建了一个非常简单的应用程序,其中包含 3 个按钮,每个按钮播放不同的声音。它工作正常,但代码不是很有效,因为我已经为每个要播放的声音创建了一个播放器,所以我想知道如何只使用播放器的一个实例来播放所有声音。这是我的代码:

import UIKit
import AVFoundation

class ViewController: UIViewController {

    var player1 = AVAudioPlayer()
    var player2 = AVAudioPlayer()
    var player3 = AVAudioPlayer()

    @IBAction func playU3(_ sender: Any) {
        player3.play()
    }

    @IBAction func playU2(_ sender: Any) {
        player2.play()
    }
    @IBAction func playU1(_ sender: Any) {
        player1.play()
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        let audioPath3 = Bundle.main.path(forResource: "sound-3", ofType: "mp3")
        let audioPath2 = Bundle.main.path(forResource: "sound-2", ofType: "mp3")
        let audioPath1 = Bundle.main.path(forResource: "sound-1", ofType: "mp3")


        do {

            try player3 = AVAudioPlayer(contentsOf: URL(fileURLWithPath: audioPath3!))
            try player2 = AVAudioPlayer(contentsOf: URL(fileURLWithPath: audioPath2!))
            try player1 = AVAudioPlayer(contentsOf: URL(fileURLWithPath: audioPath1!))


        } catch {
            print(error)
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

提前致谢

最佳答案

你能检查一下吗:

import UIKit
import AVFoundation

class ViewController: UIViewController {

    var player : AVAudioPlayer!

    @IBAction func playU3(_ sender: Any) {
        let audioPath = Bundle.main.path(forResource: "sound-3", ofType: "mp3")
        do {

            try player = AVAudioPlayer(contentsOf: URL(fileURLWithPath: audioPath!))
            player.play()
        } catch {
            print(error)
        }
    }

    @IBAction func playU2(_ sender: Any) {
        let audioPath = Bundle.main.path(forResource: "sound-2", ofType: "mp3")
        do {

            try player = AVAudioPlayer(contentsOf: URL(fileURLWithPath: audioPath!))
            player.play()
        } catch {
            print(error)
        }
    }
    @IBAction func playU1(_ sender: Any) {
        let audioPath = Bundle.main.path(forResource: "sound-1", ofType: "mp3")
        do {

            try player = AVAudioPlayer(contentsOf: URL(fileURLWithPath: audioPath!))
            player.play()
        } catch {
            print(error)
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

关于ios - Swift 3 多个 AVAudioPlayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41464417/

相关文章:

objective-c - 按层次结构消除 UINavigationController 中所有呈现的 ViewControlelrs

iOS:从命令行运行单个单元测试

ios - 应用程序关闭后如何保存引脚注释(Swift)

iPhone 麦克风高通滤波器

iphone - UIAlertView 在 iPhone 中被调用两次

ios - 单击文本字段以从 DatePickerDialog 获取日期时键盘卡住

ios - 自定义 View - uiview 的子类不能调整大小

iphone - 来自 Web url 的 IOS 应用程序上的 SWF

iphone - 如何在表格单元格上添加可点击按钮?

ios - 使用 Swift 3 中的代码查看 Controller 背景颜色转换为十六进制颜色