如何使用 AudioKit Sequencer 配置节拍器的拍号?
How to use AudioKit Sequencer to configure time signature for a metronome?
感谢 AudioKit!
我是 Swift 和 AudioKit 的初学者,所以这可能是一个简单的问题:
我想构建一个节拍器应用程序。从 Audiokit 的新 CookBook 和旧的 AKMetronome() 中的示例,我可以看到如何使用 AudioKit 构建一个简单的节拍器。但我不知道如何用复合拍号(3/8、7/8 等)演奏节拍。这里的两个例子都使用了一个拍号,4 作为固定的底部数字,顶部数字可以改变(即我们可以有 1/4、3/4、6/4,但不能有 3/8、6/8)。
有没有办法改变底部的数字?
Link 对于 AKMetronome:https://audiokit.io/docs/Classes/AKMetronome.html#/s:8AudioKit11AKMetronomeC5resetyyF
AudioKit Cookbook 的摇床节拍器:
https://github.com/AudioKit/Cookbook/blob/main/Cookbook/Cookbook/Recipes/Shaker.swift
我对 Shaker 节拍器的代码做了一些更改,以说明如何创建一个节拍器来播放不同的拍号,例如 6/8、5/8、7/8 等等。
首先我在ShakerMetronomeData
结构中添加了一些信息:
enum Figure: Double {
case quarter = 1.0
case eighth = 0.5
}
struct ShakerMetronomeData {
var isPlaying = false
var tempo: BPM = 120
var timeSignatureTop: Int = 4
var downbeatNoteNumber = MIDINoteNumber(6)
var beatNoteNumber = MIDINoteNumber(10)
var beatNoteVelocity = 100.0
var currentBeat = 0
var figure: Figure = .quarter
var pattern: [Int] = [4]
}
那么,updateSequences
函数中播放节拍器的部分将变为:
func updateSequences() {
var track = sequencer.tracks.first!
track.length = Double(data.timeSignatureTop)
track.clear()
var startTime: Double = 0.0
for numberOfBeatsInGroup in data.pattern {
track.sequence.add(noteNumber: data.downbeatNoteNumber, position: 0.0, duration: 0.4)
startTime += data.figure.rawValue
let vel = MIDIVelocity(Int(data.beatNoteVelocity))
for beat in 1 ..< numberOfBeatsInGroup {
track.sequence.add(noteNumber: data.beatNoteNumber, velocity: vel, position: startTime, duration: 0.1)
startTime += data.figure.rawValue
}
}
}
这些将是结构中不同拍号的 figure
和 pattern
成员的值:
/*
Time signature Figure Pattern
4/4 .quarter [4]
3/4 .quarter [3]
6/8 .eighth [3,3]
5/8 .eighth [5]
7/8 .eighth [2,2,3]
*/
请注意,我尚未测试此代码,但它说明了如何使用复合拍号演奏节拍。
这可以通过使用三种不同的声音而不是两种来改进:一种用于每个小节的开始,一种用于每组的开始,一种用于强拍。
感谢 AudioKit!
我是 Swift 和 AudioKit 的初学者,所以这可能是一个简单的问题:
我想构建一个节拍器应用程序。从 Audiokit 的新 CookBook 和旧的 AKMetronome() 中的示例,我可以看到如何使用 AudioKit 构建一个简单的节拍器。但我不知道如何用复合拍号(3/8、7/8 等)演奏节拍。这里的两个例子都使用了一个拍号,4 作为固定的底部数字,顶部数字可以改变(即我们可以有 1/4、3/4、6/4,但不能有 3/8、6/8)。
有没有办法改变底部的数字?
Link 对于 AKMetronome:https://audiokit.io/docs/Classes/AKMetronome.html#/s:8AudioKit11AKMetronomeC5resetyyF
AudioKit Cookbook 的摇床节拍器: https://github.com/AudioKit/Cookbook/blob/main/Cookbook/Cookbook/Recipes/Shaker.swift
我对 Shaker 节拍器的代码做了一些更改,以说明如何创建一个节拍器来播放不同的拍号,例如 6/8、5/8、7/8 等等。
首先我在ShakerMetronomeData
结构中添加了一些信息:
enum Figure: Double {
case quarter = 1.0
case eighth = 0.5
}
struct ShakerMetronomeData {
var isPlaying = false
var tempo: BPM = 120
var timeSignatureTop: Int = 4
var downbeatNoteNumber = MIDINoteNumber(6)
var beatNoteNumber = MIDINoteNumber(10)
var beatNoteVelocity = 100.0
var currentBeat = 0
var figure: Figure = .quarter
var pattern: [Int] = [4]
}
那么,updateSequences
函数中播放节拍器的部分将变为:
func updateSequences() {
var track = sequencer.tracks.first!
track.length = Double(data.timeSignatureTop)
track.clear()
var startTime: Double = 0.0
for numberOfBeatsInGroup in data.pattern {
track.sequence.add(noteNumber: data.downbeatNoteNumber, position: 0.0, duration: 0.4)
startTime += data.figure.rawValue
let vel = MIDIVelocity(Int(data.beatNoteVelocity))
for beat in 1 ..< numberOfBeatsInGroup {
track.sequence.add(noteNumber: data.beatNoteNumber, velocity: vel, position: startTime, duration: 0.1)
startTime += data.figure.rawValue
}
}
}
这些将是结构中不同拍号的 figure
和 pattern
成员的值:
/*
Time signature Figure Pattern
4/4 .quarter [4]
3/4 .quarter [3]
6/8 .eighth [3,3]
5/8 .eighth [5]
7/8 .eighth [2,2,3]
*/
请注意,我尚未测试此代码,但它说明了如何使用复合拍号演奏节拍。
这可以通过使用三种不同的声音而不是两种来改进:一种用于每个小节的开始,一种用于每组的开始,一种用于强拍。