我正在寻找一种方法,可以从包含声音文件的文件夹的内容中创建一组 url,以便我稍后可以使用 AVAudioplayer 调用它们。
我使用步进器和 3 个变量,第一个称为 nmbTracks 来定义可播放声音文件的数量,并保存步进器最大值,第二个称为 currentActiveTrack 并定义播放器应播放的文件。第三个称为audioURL,用于为播放器提供信息以及检索输出到标签的文件的名称。然后用户可以使用步进器逐步浏览声音文件。
到目前为止,我已经使用我拥有的一些文件完成了所有工作,但我无法弄清楚如何制作一组 url 或如何从文件夹的内容中获取 url,下一步是让用户将他们自己的文件导入那个文件夹。
任何帮助将不胜感激,我相信也有更简单的方法来做到这一点
我有几个选择。第一个返回一个URL
s数组,如果获取文件夹时出错,则返回一个空数组。
func getFolderContentsURLs(_ folderPath: String) -> [URL] {
let fm = FileManager()
guard let contents = try? fm.contentsOfDirectory(atPath: folderPath) else { return [] }
return contents.compactMap { URL.init(fileURLWithPath: $0) }
}
您可以像这样显示结果:
let songsURLs = getFolderContentsURLs("/")
songsURLs.forEach {
print($0.absoluteString)
}
第二个选项返回一个可选的URL
s数组,错误返回 nil
func getFolderContentsURLsOrNil(_ folderPath: String) -> [URL]? {
let fm = FileManager()
guard let contents = try? fm.contentsOfDirectory(atPath: folderPath) else { return nil }
return contents.compactMap { URL.init(fileURLWithPath: $0) }
}
要查看结果,您可以这样做:
if let songsURLs2 = getFolderContentsURLsOrNil("NotExistingPath") {
songsURLs2.forEach {
print($0.absoluteString)
}
} else {
print("Unable to fetch contents")
}
响应@user12184258 关于仅返回音频文件的评论,您可以在获取文件夹内容后应用过滤器。过滤器可以检查每个文件使用UTTypeConformsTo
来自MobileCoreServices
let contentsFolder = getFolderContentsURLs("/path/to/folder")
let audioFiles = contentsFolder
.filter { path in
// Try to create uniform type identifier using file's extension
guard let uti =
UTTypeCreatePreferredIdentifierForTag(
kUTTagClassFilenameExtension,
path.pathExtension as CFString, nil) else { return false }
// Checks conformance of UTI with kUTTypeAudio (abstract type for audio)
return UTTypeConformsTo((uti.takeRetainedValue()), kUTTypeAudio)
}
我在这里找到了这个方法。此外,Apple 有一个非常有用的System-Declared Uniform Type Identifiers您可以检查,如果您只想要 mp3 文件,您可以使用kUTTypeMP3
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句