如何从文件夹(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】:

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

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)

第二个选项返回URLs的可选数组,错误返回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的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 javascript 从 Audio Element 录制音频

如何从swift将一组浮点数组传递给C++函数

如何在 Mac 上测试 Apple Audio Unit?

HTML5 Audio 播放本地 mp3 文件的播放列表

如何在swift中从文档目录中获取特定文件的NSURL

如何制作一个从地址swift 4返回坐标的函数