音频未播放Xcode 10.1 Swift 4

问题描述 投票:-1回答:2

我终于开始学习播放声音,但是我没有成功在我的应用程序中播放声音。我仍在使用Xcode 10.1 / Swift4(不是4.2),因为我还不能升级到Mojave / Catalina。我读了很多关于.setCategory(.playback, mode: .default)带有Xcode 10.1错误的文章,但是找到的解决方案是针对Swift 4.2的。另外category:mode:的类型应为String,但在docs上,该函数的解释为:

func setCategory(_类别:AVAudioSession.Category,模式:AVAudioSession.Mode,选项:AVAudioSession.CategoryOptions = [])抛出

并且它们不是String类型。我在这里迷路了。

我的代码没有引发任何编译错误,但是在控制台上运行时,我得到了:

AVAudioSessionUtilities.mm:106:getUInt32:-类别值转换器找不到与字符串“环境”匹配的内容]

我在这里想念什么?能否请您指出正确的方向以理解此类别问题?一如既往,非常感谢您的时间和帮助。

这是应该播放声音的功能:

static func playOnceSound(soundToPlay: String) {
       var player: AVAudioPlayer?
        guard let url = Bundle.main.url(forResource: soundToPlay, withExtension: "mp3") else { return }



        do {
//            try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default) // Error: Type 'String' has no member 'playback'

            try AVAudioSession.sharedInstance().setCategory("ambient", mode: "default", options: .defaultToSpeaker)
            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.numberOfLoops = 1
            player.volume = 1.0
            player.play()

        } catch let error {
            print(error.localizedDescription)
        }
    }
ios swift avaudiosession
2个回答
0
投票

您是否尝试过以这种方式输入环境和默认值,而不是使用字符串?同样,在setCategory之前实例化音频会话对象:

var audioSession: AVAudioSession?

func setup() {
    audioSession = AVAudioSession.sharedInstance()

    do {
        try audioSession.setCategory(AVAudioSession.Category.ambient, mode: .default, options: .defaultToSpeaker)
        try audioSession.setActive(true)
    }
    catch {
        print("Failed to set category", error.localizedDescription)
    }
}

0
投票
@IBAction func doPlay1(_ sender: AnyObject) {
    do{
        self.audioPlayer = try AVAudioPlayer(contentsOf: URL.init(string: url)!)
        self.audioPlayer.prepareToPlay()
        self.audioPlayer.delegate = self
        self.audioPlayer.play()
    }catch{
        print(error.localizedDescription)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.