gpt4 book ai didi

ios - 将元数据添加到生成的音频文件

转载 作者:可可西里 更新时间:2023-11-01 03:34:49 27 4
gpt4 key购买 nike

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

到目前为止,我发现 AVAssetWriter 通常会丢弃它不理解的元数据,而不会产生错误,因此我在尝试找到可接受的文件格式和 key 组合时遇到了一些困难。到目前为止,我还没有找到可以自动生成 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 个 AVMetadataIdentifier)。

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

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

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

最佳答案

我已经能够使用 AVAssetWriter 使用 iTunes key 空间将元数据值存储在 .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 文件。

关于ios - 将元数据添加到生成的音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49071731/

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