方式一:AVURLAsset
AVURLAsset*audioAsset = [AVURLAsset URLAssetWithURL:audioFileURL options:nil];`
CMTime audioDuration = audioAsset.duration;
float audioDurationSeconds = CMTimeGetSeconds(audioDuration);
方式二:AVAudioPlayer
//在使用过程中发现一个问题,安卓端传过来的音频文件的时长计算出来只有实际时长的三分之一,后发现安卓端的采样频率为8000,估计AVAudioPlayer在计算时是按照25600的频率进行计算的。将ios端的录音采样频率设置为16000后,发现时长只有只有真实时长的1.6分之1 。所以估计是采样频率的原因导致的时长计算不对。
AVAudioPlayer* player = [[AVAudioPlayer alloc] initWithData:data error:nil];
double duration = player.duration;
AVAudioFormat* format = player.format;
NSLog(@"音频时长:%lf",player.duration);
NSLog(@"音频声道数:%u",format.channelCount);
NSSLog(@"采样频率==%lf",format.sampleRate);////默认为:25600,所以也是按照这个频率来计算的
duration = duration*(25600/format.sampleRate);
网友评论