gpt4 book ai didi

arrays - 如何从文件夹中创建 url 数组(swift、audio)

转载 作者:行者123 更新时间:2023-11-30 10:34:48 25 4
gpt4 key购买 nike

我正在寻找一种方法,从包含声音文件的文件夹的内容中创建一个 url 数组,以便我稍后可以使用 AVAudioplayer 调用它们。

我使用一个步进器和 3 个变量,第一个称为 nmbTracks 来定义可播放声音文件的数量,并保存步进器最大值第二个称为 currentActiveTrack 并定义播放器应播放哪个文件。第三个称为audioURL,用于向播放器提供信息以及检索输出到标签的文件的名称。然后,用户可以使用步进器逐步浏览声音文件。

到目前为止,我已经完成了处理我拥有的一些文件的所有操作,但我不知道如何制作网址数组,也不知道如何从文件夹的内容中获取网址,下一步是让用户导入他们的将自己的文件放入该文件夹中。

任何帮助将不胜感激,我相信还有更简单的方法来做到这一点

最佳答案

我有几个选择。第一个返回一个 URL 数组,如果获取文件夹时出错,则返回一个空数组。

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 数组,出错时返回 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 。 Apple还有一个非常有用的System-Declared Uniform Type Identifiers您可以检查一下,如果您只想要 mp3 文件,可以使用 kUTTypeMP3

关于arrays - 如何从文件夹中创建 url 数组(swift、audio),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58293052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com