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