Swift 4 / Xcode 9.2 - 音频播放器

Swift 4 / Xcode 9.2 - Audio Player

为了播放音频,我在这里经历了更大的 post。现在得到最好的版本,但是:

        try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)

不起作用,在 .playback 上出现 String 成员错误。这是完整的代码:

import Foundation
import UIKit
import AVKit
import AVFoundation

class ViewController: UIViewController {


@IBAction func triggerSample(_ sender: Any) {
    playSound()
}

var player: AVAudioPlayer?

func playSound() {
    guard let url = Bundle.main.url(forResource: "soundName", withExtension: "mp3") else { return }

    do {
        try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
        try AVAudioSession.sharedInstance().setActive(true)

        /* The following line is required for the player to work on iOS 11. Change the file type accordingly*/
        player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.mp3.rawValue)

        /* iOS 10 and earlier require the following line:
         player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileTypeMPEGLayer3) */

        guard let player = player else { return }

        player.play()

    } catch let error {
        print(error.localizedDescription)
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

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

更新:解决方案写在上面注释掉的部分:关于这个,使用以下 playSound()for Xcode 9.2:

func playSound() {
    guard let url = Bundle.main.url(forResource: "MWSTW_Bowie", withExtension: "mp3") else { return }

    do {
        player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.mp3.rawValue)
        guard let player = player else { return }
        player.play()

    } catch let error {
        print(error.localizedDescription)
    } //end of do/catch

} // end of playSound()

效果很好。只需确保您的应用程序包中有一个名为 "soundName" 且类型为 .mp3

的 MP3