如何从 iOS 上的音频文件中提取元数据

2024-02-16

我正在尝试使用 AVFoundation 框架从 mp3 和 m4a 文件中提取元数据。

这是测试代码:

+ (void)printMetadataForFileAtPath:(NSString *)path
{
    NSURL *url = [NSURL fileURLWithPath:path];
    AVAsset *asset = [AVURLAsset assetWithURL:url];
    NSArray *availableFormats = [asset availableMetadataFormats];
    NSLog(@"Available formats: %@", availableFormats);
    NSArray *iTunesMetadata = [asset metadataForFormat:AVMetadataFormatiTunesMetadata];
    for (AVMetadataItem *item in iTunesMetadata)
    {
        NSLog(@"%@ %x", item.key, [(NSNumber *)item.key integerValue]);

        if ([item.key isEqual:AVMetadataiTunesMetadataKeySongName])
        {
            NSLog(@"FOUND song name: %@", item.stringValue);
        }
    }
    NSLog(@"====================");
    NSLog(@"%@ %@ %@", AVMetadataiTunesMetadataKeySongName, AVMetadataiTunesMetadataKeyAlbum, AVMetadataiTunesMetadataKeyArtist);
}

这是输出:

Available formats: (
    "com.apple.itunes",
    "com.apple.quicktime.udta"
)
-1452383891 a96e616d
-1455336876 a9415254
1631670868 61415254
-1451789708 a9777274
-1453233054 a9616c62
-1452838288 a9677270
-1452841618 a967656e
1953655662 74726b6e
1684632427 6469736b
-1453039239 a9646179
-1453101708 a9636d74
1668311404 6370696c
1885823344 70676170
1953329263 746d706f
-1451987089 a9746f6f
com.apple.iTunes.iTun
com.apple.iTunes.Enco
1668249202 636f7672
-1452508814 a96c7972
====================
@nam @alb @ART

当解释为 4 个 ASCII 字符时:

© n a m
© A R T
a A R T
© w r t
© a l b
© g r p
© g e n
t r k n
d i s k
© d a y
© c m t
c p i l
p g a p
t m p o
© t o o

所以看来item.key is a NSNumber对象,但常量开头为AVMetadataiTunesMetadataKey... are NSString对象。获取元数据的正确方法是什么?当我使用[AVAsset commonMetadata]钥匙是NSString对象也是如此,并与AVMetadataCommonKey...常量按预期工作。


AVFoundation API 在处理元数据时相当混乱。

定义的键AVMetadataiTunesMetadataKey*值与 AVMetadataItem 的关键属性值不同。 AVMetadataiTunesMetadataKey* 键将与[AVMetadataItem metadataItemsFromArray:withKey:keySpace:AVMetadataKeySpaceiTunes]用于过滤掉具有特定 iTunes 密钥的元数据项目的 API。

AVMetadataItem 的键和值取决于资源文件的确切格式。除了用上面的函数过滤掉按键之外,我建议使用 item 的公用密钥属性,它提供了比其他属性更通用的“关键”属性。

更改示例代码以打印出来公用密钥以及该项目的value。 这里有些例子:

  • 公用密钥是“标题”-value是一个带有歌曲标题的 NSString
  • 公用密钥是“艺术家”-value是带有歌曲艺术家的 NSString
  • 公用密钥是“专辑名称”-value是一个带有专辑名称的 NSString

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 iOS 上的音频文件中提取元数据 的相关文章

  • Mac 上的 Delphi - 可能吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我负责一个 Delphi Win32 项目管理应用程序 我刚刚完成了向 Delphi 2009 的迁移
  • 所有 RestKit 项目在归档时都无法构建

    这个问题涉及RESTKIT 0 9 x 如果您是 Restkit 新手 请考虑使用较新的版本0 10 x https github com RestKit RestKit tree v0 10 1 branch 我最近继承了一个项目 使用r
  • 使用强光混合模式时突出显示伪影

    我正在 iPhone 应用程序中使用顶部图像的 HardLight 混合模式混合两个图像 它看起来像这样 UIGraphicsBeginImageContext size sourceImage drawInRect rectangle b
  • cellForRowAtIndexPath 中的框架没有变化

    我想改变x位置框架view细胞内的cellForRowAtIndexPath对于某些条件 我使用了以下代码 但并不改变看法x position frame void viewDidLoad super viewDidLoad UINib n
  • 存档期间的位码编译永远不会完成

    我正在准备一个通过 Test Flight 进行临时分发的应用程序 我已经 成功 完成了这篇 Ray Wenderlich 文章中的所有准备步骤 https www raywenderlich com 48750 testflight sd
  • 如何检测在 MapView 中选择了哪个注释

    我在地图内做了一些注释 当我点击它们时 我会看到一些信息 并且有一个打开地图的按钮 并且使用我无法接受的正确信息应该可以绘制出我的路线 这是我的代码 我有 2 个双精度数组用于我的经纬度 我从查询中填充了它们 var lat Double
  • iOS 无状态/无值进度条?

    我希望在 iOS 中获得无状态 无值的 UIProgressView 或其他类型的进度条 我尝试查找一些文档 但找不到与我的问题相关的任何内容 如果你们有任何建议 我很想听听 Thanks Shai iOS s UI进度视图 https d
  • 如何在 IOS 中以编程方式滚动 UICollectionViewCell?

    我有一个垂直的UICollectionView每个细胞占据整个self view frame我可以轻松地向上滑动以翻页到下一个单元格 但我想通过按按钮来执行相同的操作 我尝试过使用 void setContentOffset CGPoint
  • IOS 应用程序提交导出合规性:Firebase

    我准备将我的应用程序提交到应用程序商店 经过一些研究后 我似乎仍然无法在我的应用程序中找到有关 firebase 的任何信息 Firebase 是否可以豁免 我只用它来进行分析和 Admob 那么 Firebase 是否使用加密 如果使用
  • 将 Google 登录与两个目标结合使用

    我有一个问题一直无法解决 我到处都在寻找 我最近将 Google Sign in 添加到我的应用程序中 并且它在主目标上运行良好 但是 由于我使用多个目标来部署应用程序的辅助版本 因此无法将第二个包标识符添加到 GoogleService
  • ARC 禁止合成未指定所有权或存储的财产

    我创建了一个 property of UIColor property nonatomic UIColor color 然后我尝试合成它 synthesize color color 但我收到一个错误 ARC 禁止合成具有未指定所有权或存储
  • 将小箭头添加到 iPhone TableView 单元格中单元格的右侧

    这应该很简单 我有一个带有 TableView 的 iPhone 应用程序 如何将经典的小箭头添加到每个单元格的右侧 只需设置相应的附件类型的财产UITableViewCell cell accessoryType UITableViewC
  • 如果应用程序意外关闭,如何重新启动应用程序

    Skype 更新文本 http www iclarified com entry index php enid 21659包含下一个 如果意外关闭 应用程序会自动重新启动 如何通过 SDK 执行此操作 据我所知 某些类型的应用程序可以在后台
  • 如何更改 MGLPolyline 的颜色?

    如何更改 MGLPolyline 的颜色 我曾经看过here https stackoverflow com questions 32024464 customize mglpolyline using mapbox但答案不起作用 我还尝试
  • 自定义 URL 方案不是 Outlook 中的链接 (iOS/Android)

    我们的应用程序可以使用自定义 URL 方案启动 例如myapp mainpage param 123 当它作为链接包含在网页中时 此功能有效 而且 在 iOS 上 它可以在平台附带的邮件客户端中运行 用户注册并安装该应用程序后 他会收到一封
  • SwiftUI 键盘工具栏有条件

    不确定这是否是一个错误或者我是否做错了什么 但如果我使用 toolbar ToolbarItemGroup placement navigationBarLeading if isFocused zipCode Text Test 当等于
  • 按钮操作在 iPhone 中不起作用?

    我有一个 iPhone 应用程序 我在其中添加一个自定义视图 尽管有一个导航栏视图 在正常情况下 我隐藏该自定义视图 并在需要时取消隐藏它 现在 我正在向该自定义视图添加一个具有操作的按钮 但是当我点击它时 没有任何操作起作用 任何人都可以
  • 反应本机套接字 io 没有从客户端发出事件

    尝试将socket io client与react native 现在是ios 一起使用 到目前为止 连接 从客户端接收服务器端事件似乎工作正常 但是我似乎无法从客户端发出任何事件 Client var socket io http loc
  • 图像高斯模糊 - iOS 8

    我有一个移动的背景图像 我想模糊它的底部 我would只用 Photoshop 就能做到 但由于图像会移动 效果不太好 这就是我的意思 看图片底部 基本上就像底座对 iPhone 的影响一样 我使用的是 iOS 8 但不是 Swift 我根
  • NSData 不接受有效的 base64 编码字符串

    我正在 iOS 7 客户端实现 JSON Web Token 身份验证 效果很好 我的应用程序接收令牌 并可以使用它们对我的服务器进行经过身份验证的调用 现在 我希望我的客户端代码检查令牌的过期日期 以便它知道何时重新进行身份验证 检查 J

随机推荐