AVAudioPlayer 持续时间与音频文件的实际持续时间不匹配
Posted
技术标签:
【中文标题】AVAudioPlayer 持续时间与音频文件的实际持续时间不匹配【英文标题】:AVAudioPlayer duration is not matching with the actual duration of audio file 【发布时间】:2013-05-11 09:42:39 【问题描述】:我正在连接 2 个音频文件。然后我通过 AVAudioPlayer 播放该音频文件。连接的文件播放完美。但是,当我想获取 audioPlayer 的持续时间时,它会显示错误的持续时间,即 2 秒。但我连接的音频文件的实际持续时间是 7 秒。哪里有问题?提前感谢您的帮助。
-(void)playAudio
part1 = [NSMutableData dataWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"Mumu night its getting dark" ofType: @"mp3"]];
part2 = [NSMutableData dataWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"Mumu night did you study" ofType: @"mp3"]];
[part1 appendData: part2];
audioPlayer=[[AVAudioPlayer alloc] initWithData:part1 error:NULL];
audioPlayer.delegate = self;
[audioPlayer play];
duration = (int)audioPlayer.duration;
NSLog(@"audio duration: %d", duration);
【问题讨论】:
【参考方案1】:在获得持续时间之前尝试致电player.prepareToPlay()
。它将显示更准确的持续时间。
为了完全准确,请尝试:
CMTimeGetSeconds(AVURLAsset.init(url: myURL, options: nil).duration)
【讨论】:
"这是一个 Apple 错误" 您能否提供此声明的权威来源?想了解更多关于它的信息。 打开一个playground,创建一个AVAudioPlayer
并获取持续时间,它会给你不准确的结果,然后调用prepareToPlay
并再次检查,它会给你正确的;)跨度>
【参考方案2】:
你应该使用这个
https://developer.apple.com/documentation/avfoundation/avasynchronouskeyvalueloading/1387321-loadvaluesasynchronously
在示例中,只需将“commonMetadata”更改为“duration”。
【讨论】:
以上是关于AVAudioPlayer 持续时间与音频文件的实际持续时间不匹配的主要内容,如果未能解决你的问题,请参考以下文章
在 iPad 锁定屏幕(背景)上显示 AVAudioplayer 持续时间和经过时间
如何确定与 AVAudioPlayer 关联的音频文件的长度
如何持续检查 AVAudioplayer 是不是已在 Swift 中播放完毕?