【问题标题】:How do I play an audio file from Swift File Manager?如何从 Swift 文件管理器播放音频文件?
【发布时间】:2021-05-05 03:51:41
【问题描述】:

我正在尝试播放从 S3 下载的文件,在找到该文件并将 URL 传递给音频播放器后,音频文件将无法播放/丢失。

这是完整的fileURLfile:///var/mobile/Containers/Data/Application/61F2FC20-4C62-4263-B147-0010805BC0FA/Documents/Dump%20Trucks.mp3

这是我的代码:

    func playAudio(){
    
    var soundClip: AVAudioPlayer?
    
    if let directory = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.allDomainsMask, true).first{

        let path = NSURL(fileURLWithPath: directory).appendingPathComponent("Dump Trucks.mp3")

        print("The path is \(String(describing: path))")
        
        do {
            soundClip = try AVAudioPlayer(contentsOf: path!)
            soundClip?.play()
        } catch {
            print("Error: Audio File missing.")
        }
    }
}

【问题讨论】:

  • 如果您想从设备播放音频,请使用MPMediaItem。它将从设备中检索所有音频。
  • 还有一件事我想知道你会在这条线上找到正确的道路吗? //print("路径是 (String(describing: path))")
  • @RB's - 是的,它打印/返回上面指出的完整文件 URL。
  • var soundClip: AVAudioPlayer? 将其更改为 var soundClip = AVAudioPlayer()
  • 您可以查看此解决方案是否适用于 Swift 4+ stackoverflow.com/a/55149648/2125010

标签: ios swift iphone audio


【解决方案1】:
import Foundation
import AVFoundation

final class MediaPlayer {
    static var player = AVAudioPlayer()

    class func play() {
        do {
            let file = Bundle.main.url(forResource: "file_name", withExtension: "mp3")!
            player = try AVAudioPlayer(contentsOf: file)
            player.numberOfLoops = 0 // loop count, set -1 for infinite
            player.volume = 1
            player.prepareToPlay()

            try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
            try AVAudioSession.sharedInstance().setActive(true)

            player.play()
        } catch _ {
            print("catch")
        }
    }
}

【讨论】:

    【解决方案2】:

    问题是你的播放器是一个局部变量。这样你的方法就结束了,播放器在它有机会开始播放之前就被摧毁了!改为将其声明为实例属性。

    所以

    func playAudio(){
        var soundClip: AVAudioPlayer?
    

    变成

    var soundClip: AVAudioPlayer?
    func playAudio(){
    

    这可能无法解决您的所有问题,但如果您不这样做,您肯定永远听不到声音。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2021-09-05
      • 1970-01-01
      相关资源
      最近更新 更多