Как я могу извлечь метаданные из mp3 файла в разработке ios
Я работаю на музыкальном плеере ios с облачным хранилищем.
Мне нужно извлечь информацию о музыке, такую как название, исполнитель, произведение искусства.
У меня есть действие playit, которое воспроизводит и приостанавливает mp3-файл. Он также должен заполнить некоторые UILables и UIImage метаданными, которые связаны с mp3-файлом. Проблема в том, что я не смог извлечь метаданные из более чем 25 разных mp3 файлов. Вот мой код:
URL-адрес файла правильный, потому что аудиоплеер может его найти и воспроизвести, но я не знаю, почему avmetadataitem не может получить метаданные.
- (IBAction)playIt:(id)sender {
AVAudioPlayer *audioPlayer;
AVAsset *assest;
NSString * applicationPath = [[NSBundle mainBundle] resourcePath];
NSString *secondParentPath = [applicationPath stringByDeletingLastPathComponent];
NSString *soundFilePath = [[secondParentPath stringByAppendingPathComponent:@"fisal1407"] stringByAppendingPathComponent:[musicFiles objectForKey:@"show_id"] ];
NSURL *fileURL = [NSURL URLWithString:[soundFilePath stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];
assest = [AVURLAsset URLAssetWithURL:fileURL options:nil];
NSArray *metadata = [assest commonMetadata];
for (NSString *format in metadata) {
for (AVMetadataItem *item in [assest metadataForFormat:format]) {
if ([[item commonKey] isEqualToString:@"title"]) {
filename.text = (NSString *)[item value];
NSLog(@" title : %@", (NSString *)[item value]);
}
if ([[item commonKey] isEqualToString:@"artist"]) {
show_id.text = (NSString *)[item value];
}
if ([[item commonKey] isEqualToString:@"albumName"]) {
// _albumName = (NSString *)[item value];
}
if ([[item commonKey] isEqualToString:@"artwork"]) {
NSData *data = [(NSDictionary *)[item value] objectForKey:@"data"];
UIImage *img = [UIImage imageWithData:data] ;
imageView.image = img;
continue;
}
}
}
if (audioPlayer == nil) {
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error];
audioPlayer.numberOfLoops = -1;
[audioPlayer play];
[sender setImage:[UIImage imageNamed:@"player_044.gif"] forState:UIControlStateNormal];
}
else
{
if (audioPlayer.isPlaying)
{
[sender setImage:[UIImage imageNamed:@"player_04.gif"] forState:UIControlStateNormal];
[audioPlayer pause];
} else {
[sender setImage:[UIImage imageNamed:@"player_044.gif"] forState:UIControlStateNormal];
[audioPlayer play];
}
}
}
1 ответ
Пытаться
for (NSString *format in [asset availableMetadataFormats])
Вместо
NSArray *metadata = [assest commonMetadata];
for (NSString *format in metadata) {