【问题标题】:Adding metadata to generated audio file将元数据添加到生成的音频文件
【发布时间】:2018-08-10 19:43:56
【问题描述】:

我正在以编程方式生成一个音频文件,并且我想向其中添加元数据,例如标题和艺术家。我并不特别关心文件是用什么格式写入的,只要 AVPlayer 会读取它并将其发送到播放设备即可。 (整个目标是将生成的音频及其音轨名称发送到蓝牙设备。我很高兴探索在 iPhone 上实现这一目标的更简单方法,无需写入文件或直接将元数据添加到文件中。)

到目前为止,我发现 AVAssetWriter 通常只会丢弃它不理解的元数据,而不会产生错误,所以我在尝试找出可以接受的文件格式和键的组合时有点磕磕绊绊。到目前为止,我还没有找到可以自动生成 AVAssetWriter 将添加任何元数据的文件格式。例如:

let writer = try AVAssetWriter(outputURL: output, fileType: .aiff)  
let title = AVMutableMetadataItem()  
title.identifier = .commonIdentifierTitle  
title.dataType = kCMMetadataBaseDataType_UTF8 as String  
title.value = "The Title" as NSString  
writer.metadata = [title]  
// setup the input and write the file.  

我还没有找到将在文件中包含此元数据的标识符或文件类型(我实际上可以生成)的任何组合。

我目前的做法是将文件创建为 AIFF,然后使用 AVAssetExportSession 将其重写为 m4a。使用它我已经能够添加足够的元数据,iTunes 将显示标题。但是,Finder 的“文件信息”无法读取标题(它适用于 iTunes m4a 文件)。我的假设是,如果它甚至没有出现在“文件信息”中,它就不会通过蓝牙发送(我很快就会对此进行测试,但我手边没有我需要的硬件)。

研究 iTunes m4a 文件,我发现了一些无法用 AVMetadataItem 重新创建的标签。例如,排序名称 (sonm)。我不知道如何编写不是已知标识符之一的标签(我已经测试了所有 263 个 AVMetadataIdentifiers)。

有了这个背景,我的核心问题:

  • AVPlayer 读取哪些元数据标签并将其发送到蓝牙设备(即 AVRCP)?
  • 是否可以使用 AVAssetWriter 直接将元数据写入支持线性 PCM(或其他一些易于生成的格式)的文件格式?
  • 给定一个与任何 AVMetadataIdentifiers 都不匹配的已知标记/值),是否可以将其写入 AVAssetExportSession 中?

我稍后会探索第三方 id3 框架,但如果可能的话,我想用 AVFoundation(或其他内置框架)来实现它。

【问题讨论】:

  • 如果我没记错的话,它与value的格式有关。我不确定您是否不应该将Data 放在那里(utf8 编码字符串)。还要确保设置keySpace
  • 一个想法 - AVRCP 承载的标题信息是否有可能通过MPNowPlayingInfoCenternowPlayingInfo 发送? AVPlayer 对蓝牙配置文件了解这么多让我有点害怕。
  • @Sulthan 谢谢;是的,我试过了。我认为这不是问题,因为我可以让它将元数据存储在 m4a(通过导出)中,而无需转换为数据。
  • @RhythmicFistman 通过 Twitter,我认为你真的很感兴趣。这将是我的下一个探索。再次感谢。 twitter.com/cocoaphony/status/969610237761159168
  • 嘿@RobNapier 解决方案是什么? :)

标签: ios avfoundation id3 avrcp


【解决方案1】:

我已经能够使用AVAssetWriter 使用 iTunes 密钥空间将元数据值存储在 .m4a 文件中:

let songID = AVMutableMetadataItem()
songID.value = "songID" as NSString
songID.identifier = .iTunesMetadataSongID

let songName = AVMutableMetadataItem()
songName.value = "songName" as NSString
songName.identifier = .iTunesMetadataSongName

您可以通过在设置输入对象时指定正确的设置,直接使用AVAssetWriter 编写压缩的 .m4a 文件,因此无需使用中间 AIFF 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    相关资源
    最近更新 更多