如何在iOS中为3个音频文件显示相同的进度条

时间:2013-11-26 04:42:11

标签: ios iphone objective-c

我是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];
}

3 个答案:

答案 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];

这将为你做我希望