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 持续时间和经过时间

ios中的音频流持续时间

如何确定与 AVAudioPlayer 关联的音频文件的长度

如何持续检查 AVAudioplayer 是不是已在 Swift 中播放完毕?

AVAudioPlayer currentTime 超过持续时间

AVAudioPlayer 播放大量音频文件后停止播放:kAudio_TooManyFilesOpenError