5

を使用してID3タグをファイルに書き込んでいますAVMetaDataItem

var soundFileMetadata = [AVMetadataItem]()

soundFileMetadata.append(createMetadata(AVMetadataiTunesMetadataKeyArtist, "MyArtist")!)
soundFileMetadata.append(createMetadata(AVMetadataiTunesMetadataKeySongName, "MySong")!)
soundFileMetadata.append(createMetadata(AVMetadataiTunesMetadataKeyAlbum, "MyAlbum")!)
soundFileMetadata.append(createMetadata(AVMetadataiTunesMetadataKeyUserGenre, "MyGenre")!)
soundFileMetadata.append(createMetadata(AVMetadataiTunesMetadataKeyComposer, "MyComposer")!)

createMetadata便利な方法は次のとおりです。

func createMetadata(tagKey: String, _ tagValue: AnyObject?,
                    keySpace:String = AVMetadataKeySpaceiTunes) -> AVMutableMetadataItem? {
    if let tagValue = tagValue {       
        let tag = AVMutableMetadataItem()
        tag.keySpace = keySpace
        tag.key = tagKey
        tag.value = (tagValue as? String) ?? (tagValue as? Int)
        return tag
    }
    return nil
}

次に、年のタグも書き込もうとしましたが、成功しませんでした:

let comps = NSDateComponents()
comps.year = 2010;

let yearTag = AVMutableMetadataItem()
yearTag.keySpace = AVMetadataKeySpaceID3
yearTag.key = AVMetadataID3MetadataKeyYear
yearTag.value = NSCalendar.currentCalendar().dateFromComponents(comps)

soundFileMetadata.append(yearTag)

この場合、次のエラーが発生します。

FigMetadataCreateConverter signalled err=-12482 (kFigMetadataConverterError_UnsupportedFormat) (Unsupported format conversion) at /SourceCache/CoreMedia/CoreMedia-1562.238/Prototypes/Metadata/Converters/FigMetadataConverterCommon.c line 118

これはコンソールに表示される単純なエラーであり、例外ではないことに注意してください!

Stringまた、 a 、Into でも aとして書くとFloat、同じエラーが発生します。トラック/ディスク数、トラック/ディスク番号タグも同様です。

最初の質問は:それらをどのように書くか?

また、別の質問があります。

現在AVAudioRecorder、レコーダーの出力ファイルにタグを直接書き込む方法が見つからなかったので、レコーダーファイルをコミットして開き、AVURLAsset次のコマンドで再エクスポートしAVAssetExportSessionます。

self.recorder.stop()

let urlAsset = AVURLAsset(URL: srcSoundFileURL)
let assetExportSession: AVAssetExportSession! = AVAssetExportSession(asset: urlAsset, presetName: AVAssetExportPresetPassthrough)

assetExportSession.outputFileType = AVFileTypeAppleM4A
assetExportSession.outputURL = tmpSoundFileURL
assetExportSession.metadata = soundFileMetadata

assetExportSession.exportAsynchronouslyWithCompletionHandler({ 
         ....

})

2 番目の質問は、この 2 段階のアクションを回避する方法はありますか?

4

1 に答える 1

1

いくつかの変更を加えて、コードに年タグを追加することができました。

let yearTag = AVMutableMetadataItem()
yearTag.keySpace = AVMetadataKeySpaceiTunes
yearTag.key = AVMetadataiTunesMetadataKeyReleaseDate
yearTag.value = "2123"

ID3 キーで動作させることができなかったので、これが問題である可能性があると考えました。実際、これらの iTunes キーで動作します。また、値は日付オブジェクトではなく、文字列 (または NSString) でなければなりません。

ここに画像の説明を入力

于 2015-11-10T14:16:49.787 に答える