3

我正在尝试让这个游乐场在 iOS 上运行:http: //audiokit.io/playgrounds/Analysis/Tracking%20Amplitude/

这是我的视图控制器,我使用 mandolin 物理模型创建音符,然后运行 ​​fft 和amplitudeTracker。但我没有从他们那里得到任何价值。你可以看到下面的输出:

var fft: AKFFTTap!
var amplitudeTracker: AKAmplitudeTracker!


override func viewDidLoad() {
    super.viewDidLoad()

    let mandolin = AKMandolin()
    mandolin.detune = 1
    mandolin.bodySize = 1
    let pluckPosition = 0.2

    let scale: [MIDINoteNumber] = [72, 74, 76, 77, 79, 81, 83, 84]
    let delay = AKDelay(mandolin)
    let mix = AKMixer()
    mix.connect(delay)

    let reverb = AKReverb(mix)
    amplitudeTracker = AKAmplitudeTracker(mix)
    fft = AKFFTTap(mix)

    AudioKit.output = reverb
    AudioKit.start()

  for note in scale {

        let note1: MIDINoteNumber = note
        let octave1: MIDINoteNumber = 4
        let course1 = 2
        let count = 25

        mandolin.fret(noteNumber: note1 + octave1, course: course1 - 1)
        mandolin.pluck(course: course1 - 1, position: pluckPosition, velocity: 127)

        print("plying note")

        let fftData = self.fft.fftData
        let lowMax = fftData[0 ... (count / 2) - 1].max() ?? 0
        let hiMax = fftData[count / 2 ... count - 1].max() ?? 0
        let hiMin = fftData[count / 2 ... count - 1].min() ?? 0
        let amplitude = Float(self.amplitudeTracker.amplitude * 65)
        print("amplitude \(amplitude)")
        print("lowMax \(lowMax)")
        print("hiMax \(hiMax)")
        print("hiMin \(hiMin)")

        sleep(1)
    }

}

这是我运行它时得到的输出:

2017-09-26 12:43:27.724706-0700 AK[9467:1161171] 957: AUParameterSet 2 (1/8): err -10867
2017-09-26 12:43:28.177699-0700 AK[9467:1161171] 957: AUParameterSet 2 (1/8): err -10867
playing note
amplitude 0.0
lowMax 0.0
hiMax 0.0
hiMin 0.0
playing note
amplitude 0.0
lowMax 0.0
hiMax 0.0
hiMin 0.0
...
4

2 回答 2

2

这里的主要问题是频率跟踪器节点不是信号链的一部分。AudioKit(和 Apple 的底层 AVAudioEngine)在拉模型上工作,除非下游节点请求音频,否则不会通过节点拉音频。这基本上意味着来自 AudioKit.output 节点的所有内容都将通过它们获取字节。

但是,在这里,混响被用作输出,因此跟踪器本身不会获得任何数据通过它。将其更改为AudioKit.output = amplitudeTracker将使数据通过节点。

幅度跟踪器充当直通,因此音频也可以通过。如果您不想要音频,则可以通过助推器将跟踪器的输出固定,这会将音量降低到零。

于 2017-10-02T03:32:11.710 回答
0

在尝试重新初始化具有一堆轨道/采样器/等的 AKSequencer 变量时,我遇到了这个 -10867 错误。

我将它们存储在数组中,在重新初始化之前调用了以下内容,并且 -10867 错误消失了:

private var samplers = [AKMIDISampler]()
private var tracks = [AKMusicTrack]()
private var mixer = AKMixer()

...

public func cleanSequencer() {
    for track in tracks { 
        track.clear() 
    }
    for sample in samplers {
        sample.disconnectOutput()
        sample.destroyEndpoint()
    }
    mixer.detach()
}

希望这可以帮助!

------- 更新:01 -------

这产生了一些意想不到的效果,主要是使用这种方法后没有声音播放。

但是,现在好奇是否有人知道为什么 -10867 会消失并发出声音?

于 2018-06-09T16:44:19.780 回答