Колебание громкости AVAudioPlayer в Xcode

Я пытаюсь заставить громкость AVAudioPlayer колебаться во времени.

Пример: каждые 10 секунд регулируйте громкость до 0,5, затем до 1,0 и т. д.

Я пытался использовать NSTimer, но он работает только в первый раз и не зацикливается.

    oscillateTimer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(oscillateRun) userInfo:nil repeats:YES];

oscillateRun function

    - (void)oscillateRun {

    BOOL oscillation;
    oscillation = NO;

        if(oscillation = YES) {
            oscillation = NO;
            audioPlayer.volume = 0.50;
        }
        else {
            oscillation = YES;
            audioPlayer.volume = 1;
        }

}

Не знаю что делать, заранее спасибо!


person Steven Ritchie    schedule 07.05.2013    source источник
comment
что происходит, когда вы пытаетесь сделать это?   -  person Balu    schedule 07.05.2013


Ответы (1)


Здесь problem заключается в том, что каждый раз, когда вы создаете новую логическую переменную, и она принимает каждый раз NO, значение которой не изменяется в объеме AVPlayer.

создать объект колебаний глобально,

 BOOL oscillation;

вызовите этот метод как

  [self oscillateRun]; 

 - (void)oscillateRun {

            if(oscillation == YES) {
                oscillation = NO;
                [audioPlayer setVolume : 0.50];
            }
            else {
                oscillation = YES;
                [audioPlayer setVolume : 1.0];
            }
    [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(oscillateRun) userInfo:nil repeats:YES];
    }

РЕДАКТИРОВАТЬ:-

for camparing the two variables use '==' change this one in if condition then it'l works fine.
person Balu    schedule 07.05.2013
comment
Куда я кладу [self oscillateRun]? В настоящее время мой NSTimer находится в функции audioPlayer, вы рекомендуете перенести его в функцию oscillateRun? - person Steven Ritchie; 07.05.2013
comment
@Steven Ritchie: вы можете разместить его там, где хотите запустить AVPlayer (воспроизведение звука). - person Balu; 08.05.2013
comment
Это все еще не работает. Он снижает громкость после первого интервала, но не повышает ее после следующего интервала. Я также использую if(oscillation == YES), что было опечаткой в ​​моем исходном коде. - person Steven Ritchie; 09.05.2013
comment
@Steven Ritchie: однажды проверь мой ответ, и теперь он будет работать нормально. - person Balu; 09.05.2013
comment
Я понял это самостоятельно, помещая таймер в функцию, он создавал несколько экземпляров таймера параллельно, ломая его. Спасибо хоть! - person Steven Ritchie; 17.05.2013