gpt4 book ai didi

ios - 合并MP3会导致持续时间错误( objective-c )

转载 作者:行者123 更新时间:2023-12-02 23:53:44 24 4
gpt4 key购买 nike

合并多个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

MP3在iTunes上的时长错误

http://oi43.tinypic.com/vcsy2t.jpg

最奇怪的是,这个问题不会一直发生,在某些情况下,最终文件显示的正确时间...

最佳答案

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

鉴于您获得不同的播放长度,您可能会组合具有不同比特率和/或VBR编码文件的MP3。如果您确实获得了正确的播放时间,则可能是CBR文件,并且每个原始组件文件使用的比特率都相同。

关于ios - 合并MP3会导致持续时间错误( objective-c ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20245245/

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