在合并多个MP3文件后,我的AVAudioPlayer出现了一些奇怪的行为,我一直称之为“[AVAudioPlayer setCurrentTime:anyValueAfter260]”当前时间总是设置为260,这是因为MP3持续时间信息错误。任何人都有一些线索如何更换MP3上的信息,或者我的合作是否有问题 这是我的合并代码:
NSMutableData *original = original = [[NSMutableData alloc] init];
for (int i=0; i< [self.filesPath count]; i++) {
NSString *fileName = [self.filesPath objectAtIndex:i];
NSMutableData *part=[NSMutableData dataWithContentsOfURL:[NSURL fileURLWithPath:fileName]];
[original appendData:part];
}
if(original!=nil){
[original writeToURL:[[NSURL alloc] initWithString: self.finalPath ] atomically:YES];
}
截图的
左侧没有问题合并文件,右侧文件合并错误的持续时间
http://oi44.tinypic.com/9pm07c.jpg
在iTunes上播放时间不正确的MP3
http://oi43.tinypic.com/vcsy2t.jpg
最奇怪的是这个问题不会一直发生,在某些情况下最终文件会显示正确的时间......
答案 0 :(得分:0)
MP3持续时间不容易确定。如果你知道文件是CBR(恒定比特率),那只需要弄清楚第一个mp3数据帧的大小,然后就是简单的数学:
length of song = length of file
----------------- * 0.028
size of 1st frame
每个MP3帧的播放持续时间为0.028秒。但是如果文件是VBR编码的(可变比特率),那么这个数学就会崩溃。你将拥有“长”帧和“短”帧。确定VBR文件播放长度的唯一方法是扫描整个文件,计算有多少帧,然后重复数学运算:
length of song = number of frames * 0.028 seconds per frame
鉴于您获得了不同的播放长度,您可能会将MP3与不同的比特率和/或VBR编码的文件组合在一起。您获得正确播放时间的情况,可能是CBR文件,每个原始组件文件使用相同的比特率。