Swift和MIDI输出

时间:2016-08-09 02:17:34

标签: swift midi

我试图开始使用我想写的音乐应用程序,但我无法完成第一步 - 播放一个音符。我最终希望能够播放一系列音符,但一次只能做一件事......

我在Swift中使用Xcode工作。我知道Swift内置了一些内置的MIDI功能,但我主要使用的是AudioKit 3.

那说......我完全迷失了。这个帖子已经有了类似的帖子,我试过那个。它运行,但没有声音出来。没有错误。我只能假设swift自发布以来已经以某种方式发生了变化。我发现的其他例子只使用AKOscillator而不是音库,但振荡器听起来很糟糕,我不能使用它。我更喜欢它听起来像钢琴,小号,或远程音乐的东西。

有没有人有一些只播放单个音符的工作示例代码?

以下是我在网上发现的两个最接近的代码,我认为这样做的东西就像我想要的那样。

let sampler = AKSampler()
sampler.loadWav("Sounds/fmpia1")
let ampedSampler = AKBooster(sampler, gain: 3.0)
var delay  = AKDelay(ampedSampler)
delay.time = pulse * 1.5
delay.dryWetMix = 0.0
delay.feedback = 0.0
    let cMajor = [72, 74, 76, 77, 79, 81, 83, 84]
var mix = AKMixer(delay)
var reverb = AKReverb(mix)
AudioKit.output = reverb
AudioKit.start()
for note in cMajor {
        sampler.playNote(note)
        sleep(1)
}

第一个问题是我对第2行中加载的文件一无所知.sampler.loadWav(" Sounds / fmpia1")?如果我有这个文件,或者至少知道它是什么类型的文件,这可能会有效。

在第二个例子中,我实际上有一个有问题的文件的副本(gs_instruments.dls),并且以下代码成功运行而没有错误,但它实际上无法产生声音。不知道为什么。这是我在stackoverflow上找到的那个。

class PlaySomething{
    init(){
        initAudio()
    }

    func initAudio(){
        let engine = AVAudioEngine()
        let sampler = AVAudioUnitSampler()
        engine.attachNode(sampler)
        engine.connect(sampler, to: engine.outputNode, format: nil)
        guard let soundbank = NSBundle.mainBundle().URLForResource("gs_instruments", withExtension: "dls") else {
            print("Could not initalize soundbank.")
            return
        }
        let melodicBank:UInt8 = UInt8(kAUSampler_DefaultMelodicBankMSB)
        let gmHarpsichord:UInt8 = 6
        do {
            try engine.start()
            try sampler.loadSoundBankInstrumentAtURL(soundbank, program: gmHarpsichord, bankMSB: melodicBank, bankLSB: 0)
        }catch {
            print("An error occurred \(error)")
            return
        }
        sampler.startNote(60, withVelocity: 64, onChannel: 0)
    }
}

0 个答案:

没有答案