首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 3多重AVAudioPlayer

Swift 3多重AVAudioPlayer
EN

Stack Overflow用户
提问于 2017-01-04 12:57:20
回答 2查看 1.6K关注 0票数 2

斯威夫特是个新手,所以请原谅我的问题太天真了。

我已经建立了一个非常简单的应用程序,有3个按钮,每个按钮播放不同的声音。它工作得很好,但是代码不是很有效,因为我已经为每个要播放的声音创建了一个播放器,所以我想知道如何只使用播放器的一个实例来播放所有的声音。这是我的密码:

代码语言:javascript
复制
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.
    }

}

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-04 13:03:48

请您检查一下这个:

代码语言:javascript
复制
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.
    }

}
票数 0
EN

Stack Overflow用户

发布于 2017-01-04 13:26:22

尝尝这个!

代码语言:javascript
复制
import UIKit
import AVFoundation
class ViewControllerDup: UIViewController {  
var audioPlayerArray         = [AVAudioPlayer]()

@IBAction func playU3(_ sender: Any) {
   playSound("sound-3.mp3")
}

@IBAction func playU2(_ sender: Any) {
    playSound("sound-2.mp3")
}
@IBAction func playU1(_ sender: Any) {
    playSound("sound-1.mp3")
}

override func viewDidLoad() {
    super.viewDidLoad()

}

func playSound(_ soundName: String)
{

    var audioPlayer        = AVAudioPlayer()
    let alertSound = URL(fileURLWithPath: Bundle.main.path(forResource: soundName, ofType: nil)!)

    do{
        audioPlayer = try AVAudioPlayer(contentsOf: alertSound )
        audioPlayerArray.append(audioPlayer)

        audioPlayer.prepareToPlay()
        audioPlayer.play()
    }
    catch{
        print("error")
    }  
}    
 override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
 }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41464417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档