Как изменить значение переменной с помощью UISwitch? - PullRequest
0 голосов
/ 14 февраля 2019

Я новичок в стремительности и стараюсь ориентироваться.В настоящее время я работаю над переключателем для включения / выключения громкости для этих объектов осциллятора, которые я сделал с помощью AudioKit.У меня нет проблем с компонентом AudioKit, но я просто не могу понять, как с помощью UISwitch изменить переменные громкости с абсолютных 0 на их включенные уровни.

Пожалуйста, помогите!

Я пробовал несколько вещей, но после долгих поисков я дошел до этого.Я решил объявить переменные для каждого регулятора громкости их значениями on, а затем добавил UISwitch и использовал оператор if для переключения громкости.

class ViewController: UIViewController {

    var Fsys = 5.00

    //VOLUMES HERE:
    var volumeMono = 0.2
    var volumeBinaural = 0.6

    var A1 = 54.00
    var A2 = 108.00

    @IBAction func `switch`(_ sender: UISwitch) {
        if sender.isOn {
            volumeMono = (volumeMono) * (1)
            volumeBinaural = (volumeBinaural) * (1)
        }
        else {
            volumeMono = (volumeMono) * (0)
            volumeBinaural = (volumeBinaural) * (0)
            }
    }


    override func viewDidLoad() {
        super.viewDidLoad()

        let generator = AKOperationGenerator(channelCount: 2) { _ in


            let leftOutput = AKOperation.sineWave(frequency: A2, amplitude: volumeBinaural)
            let rightOutput = AKOperation.sineWave(frequency: A2 + Fsys, amplitude: volumeMono)

            return [leftOutput, rightOutput]
        }

        AudioKit.output = generator
        AKSettings.playbackWhileMuted = true
        try! AudioKit.start()
        do {
            try AudioKit.start()
        } catch {
            AKLog("AudioKit did not start!")
        }

        generator.start()
    }


}

Я надеялся, что это умножит переменные на 0, когда выключатель будет выключен (остановка звука осцилляторов), а когда он был включен, функция переключателя умножит переменные на 1,приведение аудио выхода в соответствие с объявленными переменными.

Когда я запускаю сборку, система по умолчанию использует тома, объявленные в начале, и коммутатор ничего не делает.

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 14 февраля 2019

viewDidLoad вызывается ровно один раз при загрузке ViewController.На этом этапе вы создаете генератор, используя синтаксис конечного замыкания.Закрытие будет захватывать значения volumeMono и volumeBinaural в то время.Они будут 0,2 и 0,6 соответственно.Поскольку замыкание захватило эти значения, leftOutput и rightOutput генератора никогда не изменятся.

Если ваш коммутатор должен был работать, логика ошибочна.Если вы умножите значения на 0, они всегда будут равны 0. Я не знаю достаточно о AudioKit, чтобы рекомендовать создание нового генератора при переключении переключателя или о том, можно ли настроить некоторые значения, но это причина, по которой ваш переключатель не существует.не оказывает никакого влияния.

...