iOS AudioKit AKAmplitudeTracker
iOS AudioKit AKAmplitudeTracker
我正试图在 iOS 上运行类似这个 playground 的东西:
http://audiokit.io/playgrounds/Analysis/Tracking%20Amplitude/
这是我的视图控制器,我在其中使用曼陀林物理模型创建音符,然后 运行 一个 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
...
这里的主要问题是 Frequency Tracker 节点不是信号链的一部分。 AudioKit(和 Apple 的底层 AVAudioEngine)在拉模型上工作,因为除非下游节点请求,否则音频不会通过节点拉。这基本上意味着从 AudioKit.output 节点开始的所有内容都将通过它们获取字节。
然而,在这里,混响被设为输出,因此跟踪器本身不会通过它获取任何数据。将其更改为 AudioKit.output = amplitudeTracker
将使数据通过节点。
amplitudeTracker 充当直通器,因此音频也可以通过。如果您不想要音频,则可以通过助推器将跟踪器的输出固定下来,这会将音量降至零。
我在尝试重新初始化具有一堆 tracks/samplers/etc.
的 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 会消失并发出声音?
我正试图在 iOS 上运行类似这个 playground 的东西: http://audiokit.io/playgrounds/Analysis/Tracking%20Amplitude/
这是我的视图控制器,我在其中使用曼陀林物理模型创建音符,然后 运行 一个 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
...
这里的主要问题是 Frequency Tracker 节点不是信号链的一部分。 AudioKit(和 Apple 的底层 AVAudioEngine)在拉模型上工作,因为除非下游节点请求,否则音频不会通过节点拉。这基本上意味着从 AudioKit.output 节点开始的所有内容都将通过它们获取字节。
然而,在这里,混响被设为输出,因此跟踪器本身不会通过它获取任何数据。将其更改为 AudioKit.output = amplitudeTracker
将使数据通过节点。
amplitudeTracker 充当直通器,因此音频也可以通过。如果您不想要音频,则可以通过助推器将跟踪器的输出固定下来,这会将音量降至零。
我在尝试重新初始化具有一堆 tracks/samplers/etc.
的 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 会消失并发出声音?