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
}
}
Получить данные гироскопа и заставить его контролировать вашу переменную, как описано здесь