私は音楽プレーヤーアプリを開発しています。また、再生中に再生/一時停止ボタンとプログレスバーを使用します。 NSTimerを使ってプログレスバーを更新するメソッドを呼び出しています。私が必要とするのは、進行状況バーを一時停止し、中断したところから再開することです。NSTimer iOSのオーディオプレーヤーを一時停止/再生する目的C
私はリンクから参照コードと同様にプログレスバーをタイマーを一時停止することができます 1. How to pause a NSTimer? 2. How to Pause/Play NSTimer?
しかし、私はIIがオフに残っていたところ、それを再開するに苦労しています。私はまた、オーディオに基づいてプログレスバーを更新する必要があります。
私のコードは以下の通りです:
AVAudioPlayer *audioPlayer;
NSTimer *audioTimer;
BOOL play;
BOOL ispaused;
int seconds1;
int minutes1;
int hours1;
NSDate *pauseStart, *previousFireDate;
再生/一時停止ボタンアクション:
- (IBAction)playSoundTapped:(id)sender
{
songUrl = [NSURL URLWithString:@"http://www.stephaniequinn.com/Music/Allegro%20from%20Duet%20in%20C%20Major.mp3"];
self.playerItem = [AVPlayerItem playerItemWithURL:songUrl];
self.player = [AVPlayer playerWithPlayerItem:self.playerItem];
self.player = [AVPlayer playerWithURL:songUrl];
if (play==YES)
{
if (ispaused == YES)
{
float pauseTime = -1*[pauseStart timeIntervalSinceNow];
[audioTimer setFireDate:[NSDate dateWithTimeInterval:pauseTime sinceDate:previousFireDate]];
audioTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateProgress) userInfo:nil repeats:YES];
[self.player play];
ispaused = NO;
}
else
{
audioTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateProgress) userInfo:nil repeats:YES];
[self.player play];
ispaused = NO;
}
_playImg.image=[UIImage imageNamed:@"Pause.png"];
play=NO;
}
else
{
[self.player pause];
ispaused = YES;
pauseStart = [NSDate dateWithTimeIntervalSinceNow:0];
previousFireDate = [audioTimer fireDate];
[audioTimer setFireDate:[NSDate distantFuture]];
_playImg.image=[UIImage imageNamed:@"Play.png"];
play=YES;
}
}
アップデートプログレスバー:
- (void)updateProgress
{
if (ispaused == NO)
{
seconds1 += 1;
if (seconds1 == 60)
{
seconds1 = 0;
minutes1++;
if (minutes1 == 60)
{
minutes1 = 0;
hours1++;
}
}
float duration = CMTimeGetSeconds([_playerItem duration]);
float actDuration = duration/100;
float currentTime = CMTimeGetSeconds([_player currentTime]);
float minutes = currentTime/60;
//float seconds = (currentTime - minutes) * 60;
NSLog(@"Duration: %.2f",actDuration);
NSLog(@"Current Time: %.2f",minutes);
NSString *durStr = [NSString stringWithFormat: @"%f",duration];
if ([durStr isEqual: @"nan"])
{
NSLog(@"Nan");
}
else
{
[self setProgress:minutes animated:YES];
}
}
else
{
NSLog(@“Paused”);
}
}
再開する代わりにオーディオを再起動しています。私はiOSの初心者なので、どこで間違っているのか分かりません。 誰でも助けてくれますか...。?
現在の時間を使用する必要はなく、一時停止した時間を追跡することもできます。オーディオが動作しているときの経過時間と、一時停止していないときの時間を単に増やすだけです。 – Paulw11
@ Paulw11使用するサンプルコードを教えてもらえますか? –
ケタンの答えはよさそうだ。オーディオプレーヤーから現在の時刻を使用するだけです。再生するときに一時停止して起動するとタイマーが無効になります。 – Paulw11