如何从 Swift 文件管理器播放音频文件?
Posted
技术标签:
【中文标题】如何从 Swift 文件管理器播放音频文件?【英文标题】:How do I play an audio file from Swift File Manager? 【发布时间】:2021-05-05 03:51:41 【问题描述】:我正在尝试播放从 S3 下载的文件,在找到该文件并将 URL 传递给音频播放器后,音频文件将无法播放/丢失。
这是完整的fileURL
: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.")
【问题讨论】:
如果您想从设备播放音频,请使用MPMediaItem
。它将从设备中检索所有音频。
还有一件事我想知道你会在这条线上找到正确的道路吗? //print("路径是 (String(describing: path))")
@RB's - 是的,它打印/返回上面指出的完整文件 URL。
var soundClip: AVAudioPlayer?
将其更改为 var soundClip = AVAudioPlayer()
您可以查看此解决方案是否适用于 Swift 4+ ***.com/a/55149648/2125010
【参考方案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()
这可能无法解决您的所有问题,但如果您不这样做,您肯定永远听不到声音。
【讨论】:
以上是关于如何从 Swift 文件管理器播放音频文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 3 中使用 AVAudioPlayer 播放 .ogg 音频文件?
如何在 Xcode11 中的 Swift 中随机播放数组中的音频文件?
swift Swift Playground展示了如何使用AVAudioPlayerNode,AVAudioMixerNode,AVAudioEng在背景音频文件上播放多个wav文件