如何从文件夹(swift,audio)制作一组url
Posted
技术标签:
【中文标题】如何从文件夹(swift,audio)制作一组url【英文标题】:how to make an array of urls from a folder (swift, audio) 【发布时间】:2019-10-08 19:42:10 【问题描述】:我正在寻找一种方法,从包含声音文件的文件夹的内容中创建一个 url 数组,以便以后可以使用 AVAudioplayer 调用它们。
我使用步进器和 3 个变量, 第一个称为 nmbTracks 来定义可播放声音文件的数量,并保存 steppers 最大值 第二个称为 currentActiveTrack 并定义播放器应该播放的文件。 第三个称为 audioURL,用于为播放器提供信息以及检索输出到标签的文件的名称。 然后,用户可以使用步进器逐步浏览声音文件。
到目前为止,我的所有文件都可以处理我拥有的一些文件,但我不知道如何制作一个 url 数组,也不知道如何从文件夹的内容中获取 url,下一步是让用户导入他们的将自己的文件放入该文件夹中。
任何帮助将不胜感激,我相信还有更简单的方法可以做到这一点
【问题讨论】:
【参考方案1】:我有几个选择。第一个返回一个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 关于仅返回音频文件的评论,您可以在获取文件夹内容后应用过滤器。过滤器可以使用来自 MobileCoreServices
的UTTypeConformsTo
检查每个文件
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)
我找到了这个方法here。苹果还有一个非常有用的System-Declared Uniform Type Identifiers,你可以查看,如果你只想要mp3文件,你可以使用kUTTypeMP3
。
【讨论】:
如果我希望该功能仅显示可使用 avaudioplayer 播放的音频文件的结果? 我刚刚编辑了答案,对文件夹的内容结果使用了过滤器。以上是关于如何从文件夹(swift,audio)制作一组url的主要内容,如果未能解决你的问题,请参考以下文章