【问题标题】:How to use AudioKit Sequencer to configure time signature for a metronome?如何使用 AudioKit Sequencer 为节拍器配置拍号?
【发布时间】:2021-06-02 13:35:47
【问题描述】:

感谢 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

【问题讨论】:

    标签: ios swift mobile-application audiokit


    【解决方案1】:

    我对 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 函数中播放节拍器的部分将变为:

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

    请注意,我尚未测试此代码,但它说明了如何使用复合拍号演奏节拍。

    这可以通过使用三种不同的声音而不是两种来改善:一种用于每个小节的开始,一种用于每组的开始,另一种用于强拍。

    【讨论】:

    • 谢谢!我会试试这个。
    • 这段代码有一些错误。但我想我明白了。
    猜你喜欢
    • 2018-10-16
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    相关资源
    最近更新 更多