0

这是一个 AudioKit 问题:

总的来说,我对 AudioKit 和音频真的很陌生。

我的问题是:我如何使用 AudioKit 来创建随着我移动手机而变化的声音?我已经知道如何获取陀螺仪信息,所以可以说我可以将陀螺仪值取在 0-10 之间,零表示手机没有移动,10 表示手机有很多移动。我想将其翻译成与手机移动的力度/速度相对应的声音。首先,随着速度的增加,将声音调高,将低调调低至零。听起来很容易是吗?

我只是没有足够的经验知道要使用哪个 AudioKit 类或如何使用它来实现我的结果。

谢谢!迈克尔

4

1 回答 1

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
    }
}

获取陀螺仪数据并使其控制您的变量,如此处所述

于 2018-03-11T20:10:32.830 回答