Swift - 带有振荡器的 AudioKit 音序器(AKOscillatorBank).频率不会在更高的范围内播放(MidiNote 120+)
Posted
技术标签:
【中文标题】Swift - 带有振荡器的 AudioKit 音序器(AKOscillatorBank).频率不会在更高的范围内播放(MidiNote 120+)【英文标题】:Swift - AudioKit Sequencer with Oscillator (AKOscillatorBank). Frequencies wont play at higher range (MidiNote 120+) 【发布时间】:2020-01-09 03:41:01 【问题描述】:我正在学习如何使用 AudioKit。我正在尝试使用音序器和振荡器。一切正常,但我注意到,当我向音序器轨道中的振荡器提供更高的频率时,它会为这种频率(MidiNote)和所有更高的频率呈现相同的效果。如果将相同的频率传递给振荡器,您可以看到差异。
我的初始设置
let oscillator = AKOscillatorBank()
let oscillatorTrackIndex = 0
let sequencer = AKAppleSequencer()
let midi = AKMIDI()
var scale: [Int] = []
let sequenceLength = AKDuration(beats: 8.0)
func setupTracks()
let midiNode = AKMIDINode(node: oscillator)
_ = sequencer.newTrack()
sequencer.setLength(trueLength)
AudioKit.output = midiNode
try! AudioKit.start()
midiNode.enableMIDI(midi.client, name: "midiNode midi in")
sequencer.setTempo(currentTempo)
sequencer.enableLooping()
sequencer.play()
我的方法
func generateSequence(_ stepSize: Float = 1/4, clear: Bool = true)
if clear sequencer.tracks[oscillatorTrackIndex].clear()
let numberOfSteps = Int(Float(sequenceLength.beats) / stepSize)
for i in 0 ..< numberOfSteps //4
if i%4 == 0
sequencer.tracks[0].add(noteNumber: 140, velocity: 127, position: AKDuration(beats: Double(i)), duration: AKDuration(beats: 0.5))
else
sequencer.tracks[0].add(noteNumber: 200, velocity: 127, position: AKDuration(beats: Double(i)), duration: AKDuration(beats: 0.5))
如您所见,我使用的是注释编号 140 和 200。当音序器播放这些音符时,它们会渲染出相同的音频。如果我使用.midiNoteToFrequency()
并通过振荡器本身将这些馈入,那么您可以听到差异。
谢谢!
【问题讨论】:
【参考方案1】:在 MIDI 规范中,音符编号只有 7 位,允许值介于 0-127 之间。据推测(这可能在 Apple 的 MusicSequence 内部发生,因为我不认为 AKAppleSequencer
或 AKMusicTrack
明确地这样做),超出此范围的值被限制在此范围内以避免意外崩溃。
【讨论】:
谢谢@c_booth!!我怀疑这有点像我只需要一个理智的检查和解释:)以上是关于Swift - 带有振荡器的 AudioKit 音序器(AKOscillatorBank).频率不会在更高的范围内播放(MidiNote 120+)的主要内容,如果未能解决你的问题,请参考以下文章
Swift AVAssetWriter 将带有麦克风音频和设备音频的视频录制成带有一个音轨 AVAssetTrack 的视频