簡體   English   中英

如何使用 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)。

有沒有辦法改變底部的數字?

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 Metronome 的代碼進行了一些更改,以說明如何創建一個節拍器來播放不同的拍號,例如 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 function 中播放節拍器咔噠聲的部分將變為:

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

這些將是不同時間簽名的結構的figurepattern成員的值:

/*
    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]
*/

請注意,我沒有測試過這段代碼,但它說明了如何使用復合拍號演奏節拍。

這可以通過使用三種不同的聲音而不是兩種來改進:一種用於每個小節的開始,一種用於每組的開始,另一種用於強拍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM