gpt4 book ai didi

ios - 如何使用 swift 遍历目录中的多个(音频/mp3)文件? - Swift, iOS8 Soundboard AVPlayer

转载 作者:搜寻专家 更新时间:2023-10-31 23:04:59 25 4
gpt4 key购买 nike

我正在尝试使用 Swift 创建一个音板来摆弄和了解 swift/iOS8。

这是我目前在 tableViewController 中所做的:

var soundPath = NSBundle.mainBundle().pathForResource("RandomSound", ofType: "m4a")
var soundURL = NSURL.fileURLWithPath(soundPath!)
self.audioPlayer = AVAudioPlayer(contentsOfURL: soundURL, error: nil)
self.audioPlayer.play()

这可以按预期播放声音。现在为了有更多的声音并在 tableView 中显示它们,我创建了一个 Sound 类数组,如下所示:

class Sound {
var name: [String]
var fileURL = NSURL()
// more fields as required
}

然后像这样使用它:

var sounds: [Sound] = []
sounds.name = "RandomSound"
sounds.fileURL = soundURL!

但是,我想要一些东西来让它更好地扩展。假设我在一个文件夹中有一堆 mp3 文件(例如 100 个)。

在这种情况下我想要一些机制,通过它我可以简单地指向目录和/或文件类型,然后剩下的繁重工作比如遍历目录中的每个文件并找到名称/artist/和其他信息将从 mp3 文件 ID3 标签(或类似的东西)中提取。

如果不是所有细节,至少应该可以自动填充名称/URL 字段并遍历目录中的所有文件,但我无法理解我应该查看的内容实现这一目标。

编辑

这部分允许我扫描目录中给定文件类型的所有文件。就我而言,我正在寻找 mp3。这是我想出的:

soundArray: [soundElement] = []
let fileManager = NSFileManager.defaultManager()
let directoryPath = "/path/to/directory/containing/my/sound/files"
let enumerator:NSDirectoryEnumerator = fileManager.enumeratorAtPath(directoryPath)!
while let element = enumerator.nextObject() as? String {
if element.hasSuffix("mp3") { // checks the extension
// DO my sound path stuff here
//println(element)
let soundURL = NSURL.fileURLWithPath(directoryPath + element)

//Of course I'll not be playing them directly here, (I don't see why) but if I needed to ...
//self.audioPlayer = AVAudioPlayer(contentsOfURL: soundURL, error: nil)
//self.audioPlayer.play()
//Instead it just makes sense to populate some array/dict containing all the sounfURLs
soundElement.name = String(element)
soundElement.fileURL = soundURL
self.soundArray.append(soundElement)

}
}

class soundElement {
var name = " "
var fileURL = NSURL()
}

我仍然不清楚如何快速从 mp3 文件中获取 ID3 信息。 我已经在 https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAsset_Class/index.html#//apple_ref/occ/cl/AVAsset 引用了 AVAsset 信息。但目前还不清楚如何使用它。

最佳答案

我查看了 AVAsset ( https://developer.apple.com/reference/avfoundation/avasset#//apple_ref/occ/cl/AVAsset ) 文档,发现其中有一个元数据属性 ( https://developer.apple.com/reference/avfoundation/avasset/1386884-metadata )。

它是一个 AVMetadataItems ( https://developer.apple.com/reference/avfoundation/avmetadataitem) 数组,因此您可以检查这些项目是否包含您要查找的元数据( key 通常类似于 key 空间 AVMetadataKeySpaceiTunes 中的 AVMetadataiTunesMetadataKeySongNameAVMetadataKeySpaceID3 中的 AVMetadataID3MetadataKeyAlbumTitle

如果你想要一个更简单的解决方案,你可以从这个人那里查看 ID3Edit 库:https://github.com/philiphardy/ID3Edit

我会尝试以下操作:

  • 将您的歌曲作为 AVAsset 加载
  • 遍历每首歌曲的元数据数组
  • 打印出项目的键和值,以识别您感兴趣的项目

熟悉元数据的结构后,就可以开始检索所需的元数据了。

希望对你有帮助

关于ios - 如何使用 swift 遍历目录中的多个(音频/mp3)文件? - Swift, iOS8 Soundboard AVPlayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26217272/

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