Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从Swift file Manager播放音频文件?_Ios_Swift_Iphone_Audio - Fatal编程技术网

Ios 如何从Swift file Manager播放音频文件?

Ios 如何从Swift file Manager播放音频文件?,ios,swift,iphone,audio,Ios,Swift,Iphone,Audio,我正在尝试播放我从S3下载的一个文件,在找到该文件并将URL传递给音频播放器后,音频文件将不会播放/丢失 这是完整的文件URL:file:///var/mobile/Containers/Data/Application/61F2FC20-4C62-4263-B147-0010805BC0FA/Documents/Dump%20Trucks.mp3 这是我的密码: func playAudio(){ var soundClip: AVAudioPlayer?

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

这是完整的
文件URL
file:///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.")
        }
    }
}

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

所以

变成

var soundClip: AVAudioPlayer?
func playAudio(){

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

如果您想从设备播放音频,请使用
MPMediaItem
。它将从设备中检索所有音频。还有一件事我想知道,您将在这条线路中获得正确的路径//print(“路径是(字符串(描述:path))”)@RB's-是的,它打印/返回上述完整的文件URL。
var-soundClip:AVAudioPlayer?
使用
var-soundClip=AVAudioPlayer()
更改此选项,您可以为Swift 4检查此解决方案+
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")
        }
    }
}
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")
        }
    }
}