1

aac、mp3、または mp4 ファイルの trackNumber を取得しようとしています。commonMetadata には含まれていないので、他のメタデータ キーを調べ始めました。似たようなものを見つけましたが、まだ読めず、意味がわかりません。生データでさえ私には意味がありません。

現時点では、次の基本的なコードを使用して取得しようとしています。

    NSArray *meta = [asset metadataForFormat:AVMetadataFormatiTunesMetadata];
    for ( AVMetadataItem* item in meta ) {
        id key = [item key];
        NSString *value = [item stringValue];
        NSLog(@"key = %@, value = %@", key, value);
    }

AVMetadataiTunesMetadataKeyTrackNumber を探していることを知っています。

4

3 に答える 3

0

この質問はかなり古いですが、同様の問題があったので、まだ解決策が必要な人のために見つけました。次のコードを使用して、総トラック数とトラック数を取得する方法を見つけました。

NSString *value = @"<0000000a 00140000>" //[item stringValue] (in this case 10/20)
NSString *track_no_hex = [[value componentsSeparatedByString:@" "][0] stringByReplacingOccurrencesOfString:@"<" withString:@""];
NSString *total_track_no_hex = [[value componentsSeparatedByString:@" "][1] stringByReplacingOccurrencesOfString:@">" withString:@""];

NSString *track_no = @"";
for(int k=0;k<=4;k+=4){
    unsigned result = 0;
    NSScanner *scanner = [NSScanner scannerWithString:[track_no_hex substringWithRange:NSMakeRange(k, 4)]];
    [scanner scanHexInt:&result];
    if(result == 00){

    }
    else{
         track_no = [NSString stringWithFormat:@"%@%u",track_no,result];
    }
}

NSString *total_track_no = @"";
for(int k=0;k<=4;k+=4){
    unsigned result = 0;
    NSScanner *scanner;
    if(k+4<=[total_track_no_hex length]){
        scanner = [NSScanner scannerWithString:[total_track_no_hex substringWithRange:NSMakeRange(k, 4)]];
    }
    else{

    }
    [scanner scanHexInt:&result];
    if(result == 00){

    }
    else{
       total_track_no = [NSString stringWithFormat:@"%@%u",total_track_no,result];
    }
}
NSLog(@"%@/%@",track_no, total_track_no); // Output 10/20

これは、iTunes の最大トラック番号が 999 であることを考慮すると、十分な大きさの 14461 未満のトラック番号で問題なく機能します。

于 2013-07-04T08:48:13.363 に答える
0

トラックに ID3 メタデータがある場合、トラック番号の numberValue を簡単に取得できます。トラックに iTunesMetadata がある場合、取得できるのは dataValue だけです。intValue は自分で推測する必要があります。

これまでのところ、私はここにいます。バイト部分にもっと取り組む必要があると確信しています。

    NSArray *meta = [asset metadataForFormat:AVMetadataFormatiTunesMetadata];
    NSArray *itfilteredKeys = [AVMetadataItem metadataItemsFromArray:meta withKey:AVMetadataiTunesMetadataKeyTrackNumber keySpace:nil];
    for ( AVMetadataItem* item in itfilteredKeys ) {
        NSData *value = [item dataValue];
        unsigned char aBuffer[4];
        [value getBytes:aBuffer length:4];
        unsigned char *n = [value bytes];
        int value1 = aBuffer[3];
        NSLog(@"trackNumber from iTunes = %i", value1);
    }
于 2012-04-25T07:00:38.423 に答える