AudioKit: изменить звук, основываясь на данных гироскопа / качающемся телефоне?

Это вопрос AudioKit:

Я действительно новичок в AudioKit и аудио в целом.

У меня вопрос: как я могу использовать AudioKit для создания звука, который меняется при перемещении телефона? Я уже знаю, как получить информацию о гироскопе, поэтому допустим, что я могу принимать значения гироскопа в диапазоне от 0 до 10, ноль - отсутствие движения, а 10 - много движения телефона. Я хочу перевести это в звуки, которые соответствуют тому, как сильно / быстро перемещается телефон. Для начала просто переместите звук выше по высоте при увеличении скорости, понизьте высоту звука до нуля. Звучит легко, да?

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

Спасибо! Майкл

1 ответ

Вы должны написать свой собственный AKOperationGenerator.

enum PitchEnvVCOSynthParameter: Int {
    case frequency, gate
}

struct PitchEnvVCO {
    static var frequency: AKOperation {
        return AKOperation.parameters[PitchEnvVCOSynthParameter.frequency.rawValue]
    }
    static var gate: AKOperation {
        return AKOperation.parameters[PitchEnvVCOSynthParameter.gate.rawValue]
    }
}

extension AKOperationGenerator {
    var frequency: Double {
        get { return self.parameters[PitchEnvVCOSynthParameter.frequency.rawValue] }
        set(newValue) { self.parameters[PitchEnvVCOSynthParameter.frequency.rawValue] = newValue }
    }
    var gate: Double {
        get { return self.parameters[PitchEnvVCOSynthParameter.gate.rawValue] }
        set(newValue) { self.parameters[PitchEnvVCOSynthParameter.gate.rawValue] = newValue }
    }
}

а также

let generator = AKOperationGenerator { parameters in
    let oscillator = AKOperation.squareWave(
        frequency: PitchEnvVCO.frequency
    )
    return oscillator
}

а затем сделать вашу переменную контролировать частоту

var vco1Freq: Double = 440.0
{
    didSet {
        generator.parameters[PitchEnvVCOSynthParameter.frequency.rawValue] = vco1Freq
    }
}

Получить данные гироскопа и заставить его контролировать вашу переменную, как описано здесь

Другие вопросы по тегам