如何在iOS 11的Swift中获取FLAC文件元数据? [英] How can I get FLAC file metadata in Swift on iOS 11?
本文介绍了如何在iOS 11的Swift中获取FLAC文件元数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要获取FLAC文件的元数据.我尝试了以下代码:
I need to get metadata of an FLAC file. I tried following code:
let item = AVPlayerItem(url: URL(fileURLWithPath: path))
let commonMetadata = item.asset.commonMetadata
songInfo[ARTIST_NAME] = "Unknown"
songInfo[GENRE_NAME] = "Unknown"
songInfo[ALBUM_NAME] = "Unknown"
songInfo[PLAY_COUNT] = "0"
for metadataItem in commonMetadata {
switch metadataItem.commonKey?.rawValue ?? "" {
case "type":
songInfo[GENRE_NAME] = metadataItem.stringValue
case "albumName":
songInfo[ALBUM_NAME] = metadataItem.stringValue
case "artist":
songInfo[ARTIST_NAME] = metadataItem.stringValue
default: break
}
}
但这不适用于FLAC文件.任何帮助将不胜感激.
But this is not working for a FLAC file. Any help will be appreciated.
推荐答案
只需使用 AudioToolbox API:
func audioFileInfo(url: URL) -> NSDictionary? {
var fileID: AudioFileID? = nil
var status:OSStatus = AudioFileOpenURL(url as CFURL, .readPermission, kAudioFileFLACType, &fileID)
guard status == noErr else { return nil }
var dict: CFDictionary? = nil
var dataSize = UInt32(MemoryLayout<CFDictionary?>.size(ofValue: dict))
guard let audioFile = fileID else { return nil }
status = AudioFileGetProperty(audioFile, kAudioFilePropertyInfoDictionary, &dataSize, &dict)
guard status == noErr else { return nil }
AudioFileClose(audioFile)
guard let cfDict = dict else { return nil }
let tagsDict = NSDictionary.init(dictionary: cfDict)
return tagsDict
}
示例输出:
- 0 : 2 elements
* key : artist
* value : Blue Monday FM
- 1 : 2 elements
* key : title
* value : Bee Moved
- 2 : 2 elements
* key : album
* value : Bee Moved
- 3 : 2 elements
* key : approximate duration in seconds
* value : 39.876
- 4 : 2 elements
* key : source encoder
* value : reference libFLAC 1.2.1 win64 200807090
这篇关于如何在iOS 11的Swift中获取FLAC文件元数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文