2

ユーザーからの音を録音して再生するボイスメモアプリに取り組んでいます。

録音部分は良好です。記録されたファイルは正常に保存され、ユーザーが保存されたファイルをタップすると、ファイルの再生が開始されます。

UISliderプレイの進行状況を示すために使用しています。今、私はUISlideruserInteractionEnabledプロパティをに無効にしましたNO。そのため、ユーザーがUISliderバーを操作することを許可しません。

必要なのは、このプロパティを有効にしてYES、オーディオを再生する場所を選択できるようにすることです。このために、スライダー コードに次の行を追加しました。

[mySlider addTarget:self action:@selector(sliderChanged:) forControlEvents:UIControlEventValueChanged];

上記の行を追加することで、sliderChanged:メソッド内のスライダーの位置を見つけることができます。しかし、選択した位置からプレーヤーを開始する方法がわかりません。各ファイルにはさまざまなサイズがあるため、再生時間も異なります。

利用可能なサンプルコードはありますか? あなたの助けが必要です。

ありがとう

4

5 に答える 5

1

次のコード サンプルで作業を開始できます。これにより、スライダーは進行状況インジケーターとして機能し、ユーザーはそれをスクラブして指定した位置から再生を開始できます。

/* SliderMoved は、スライダーの値が変更されたときに呼び出されます (ユーザーがスライダーをスクラブしたとき、またはオーディオ再生の進行に合わせて自動更新されたとき) */

-(void)sliderMoved:(id)sender
{
     [self.playbackTimer invalidate];
    self.playbackTimer = nil;
    NSInteger position = (NSInteger)self.slider.value * 60; // Assume the slider scale is in minutes- so convert to sec
    if (self.isPlaying)
    {
        [self.audioPlayer pause];
    }
    [self.audioPlayer setCurrentTime:position];
    if (self.isPlaying)
    {
        [self startOrResumePlaying];
    }
    [self updateSlider];

}

/* updateSlider は、スライダー値を更新するためのヘルパー関数です */

-(void)updateSlider
{
    float total= self.audioPlayer.duration;
    float f =  (self.audioPlayer.currentTime) ;
    self.slider.value = f/60.0;


    self.progressLabel.text = [NSString stringWithFormat:@"%.2f",self.slider.value];

}

/* startOrResumePlaying は、オーディオの再生を開始し、3 秒ごとに進行状況インジケーターを自動インクリメントするタイマーを初期化します */

-(void)startOrResumePlaying
{

    [self.audioPlayer prepareToPlay];
    [self.audioPlayer play];
    self.isPlaying = YES;
    self.playbackTimer=[NSTimer scheduledTimerWithTimeInterval:3.0
                                                        target:self
                                                      selector:@selector(handleTimer:)
                                                      userInfo:nil
                                                       repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:self.playbackTimer forMode:NSDefaultRunLoopMode];

}
于 2013-07-16T20:58:55.580 に答える