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

Это вопрос AudioKit:

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

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

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

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


person MichaelG    schedule 09.10.2017    source источник
comment
Это скорее вопрос разумного дизайна, чем вопрос программирования. Вы действительно должны подумать, из чего сделан звук светового меча; базовый звук (осцилляторы, сэмплы), развертки фильтра и т.д. Что касается использования информации гироскопа со звуком, у вас есть правильное представление.   -  person yun    schedule 09.10.2017
comment
Вопрос слишком широкий. Либо попросите конкретную помощь для повышения и понижения звука с помощью генератора / сэмплера AudioKit, либо попросите звуковой дизайн светового меча.   -  person mahal tertin    schedule 09.10.2017
comment
Хорошо, чтобы быть более конкретным, какой класс AudioKit я бы использовал, который позволил бы мне легко изменять высоту тона вверх и вниз на основе некоторого параметра / величины, например значения оси гироскопа? Я хочу иметь возможность изменять высоту тона вверх и вниз в реальном времени при изменении значений гироскопа. Спасибо.   -  person MichaelG    schedule 10.10.2017


Ответы (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
    }
}

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

person headkit    schedule 11.03.2018