我是iPhone编程新手。我有3个音频文件,一个接一个播放,但我想连续显示进度条。
例如,第一音频持续时间为5秒,第二音频为6秒,第三音频为10秒。总持续时间为21,这一个很好。使用下面的代码总持续时间进度条在播放第一个音频时很好。同时播放第二个音频再次显示进度从开始吧。但我想继续第一音频,第二音频,第三音频同一进度条
请帮我解决这个问题。
self.newtimerr1 = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateProgressBar1:) userInfo:nil repeats:YES];
- (void)updateProgressBar:(NSTimer *)timer
{
NSTimeInterval playTime = [self.audioPlayer currentTime];
NSTimeInterval duration = 21;
float progress = playTime/duration;
[self.progressView1 setProgress:progress];
}
答案 0 :(得分:2)
除此之外,还要保留音频文件的轨道。将音频文件的持续时间保留在一个数组中,并保留另一个变量,如audioIndex。 在.h,
NSArray *durationArray;
int audioIndex;
在您的实施中,
durationArray = [NSArray arrayWithObjects:@"5.0", @"6.0", @"10.0", nil];
相应地更新音频索引。然后更新您的方法,如
- (void)updateProgressBar:(NSTimer *)timer
{
NSTimeInterval playTime = 0;
for(int i = 0; i < audioIndex; i++)
{
playTime += [[durationArray objectAtIndex:i] doubleValue];
}
playTime += [self.audioPlayer currentTime];
NSTimeInterval duration = 21;
float progress = playTime/duration;
[self.progressView1 setProgress:progress];
}
答案 1 :(得分:2)
将此代码放入.h文件
@interface ViewController : UIViewController
{
float count;
}
在.m文件中
count = 0.0;
self.newtimerr1 = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateProgressBar1:) userInfo:nil repeats:YES];
- (void)updateProgressBar1:(NSTimer *)timer
{
count += 0.1;
NSTimeInterval duration = 21;
float progress = count/duration;
[self.progressView1 setProgress:progress];
if (!self.audioPlayer.playing) {
[timer invalidate];
}
}
答案 2 :(得分:0)
获取所有3个文件的总持续时间,如
AVURLAsset* audioAsset = [AVURLAsset URLAssetWithURL:audioFileURL options:nil];
CMTime audioDuration = audioAsset.duration;
float audioDurationSeconds = CMTimeGetSeconds(audioDuration);
获取一个NSTimeInterval的类变量,如totalPlayedTime来固定总花费时间,然后简单地
这样做
float progress = playTime/duration;
[self.progressView1 setProgress:progress];
这将为你做我希望