غير قادر على تنفيذ الإجراء إلى الأمام في Avaudioplayer

StackOverflow https://stackoverflow.com/questions/2006757

  •  18-09-2019
  •  | 
  •  

سؤال

أنا أستخدم AvaudioPlayer لتشغيل بعض الملفات الصوتية. لدي بعض الضوابط مثل الأمام والرجعة.

الترجيع يعمل بشكل صحيح ولكن إلى الأمام ليس كذلك.

- (void)rewind
{
    AVAudioPlayer *player = _rewTimer.userInfo;
    player.currentTime-= SKIP_TIME;
    [_rewTimer invalidate];
    _rewTimer=nil;
    [self updateCurrentTime];
}

- (void)ffwd
{
    AVAudioPlayer *player = _ffwTimer.userInfo;
    player.currentTime-= SKIP_TIME;
    [player setCurrentTime:cTime];
    [_ffwTimer invalidate];
    _ffwTimer=nil;

    [self updateCurrentTime];
}

بمجرد النقر فوق الزر إلى الأمام، يبدأ ملف الصوت للتوكل من البداية.

لقد اتبعت تطبيق Avtouch App من Apple.

هل كانت مفيدة؟

المحلول

ربما تكون قد قمت بإعلان الممتلكات الخاص ب Avaudioplayer * Player؛ في ملف H وكذلك توليفه. الآن للأمام، فقط تفعل،

- (void)ffwd
{
    NSTimeInterval *time = [player currentTime];
    time+=SKIP_TIME;
    [player setCurrentTime:time];    

}

هل وبالمثل للروج +

أو

 - (void)ffwd{
    NSTimeInterval time = avPlayer.currentTime;
 time+=SKIP_TIME;
    if (time > avPLayer.duration)
    {
       //nothing to do

    }
    else
        [player setCurrentTime:time];
    }

يبدو أن هذا هو أفضل طريقة، أيضا للترجيع مقارنة 0 بدلا من المدة

نصائح أخرى

أبسط تفسير هو ذلك cTime ينتهي إما أكبر من إجمالي الوقت إلى الملف الصوتي أو أنه ينتهي سلبيا بطريقة أو بأخرى. كلاهما سيؤدي إلى تحديد مثيل اللاعب currentTime الممتلكات إلى الصفر.

بقلم جانبا، أعتقد أن وجود اللاعب في قاموس UserInfo في الموقت هش. ما لم يكن هناك مطلقا فقط مدمج في الموقت، وأود أن نقلته إلى خاصية الفصل بحيث يمكن لجميع الطرق الوصول إليها بسهولة. لا يزال بإمكان الموقت الاتصال بالطرق ولكنك لن تقوم بتشغيل خطر فقدان اللاعب أثناء تبادل من مؤقت إلى Timer.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top