我在iOS(11.3)上使用带声音的AKMIDISampler,但我无法获得音频输出。 目前,设置很少:
midiSampler = AKMIDISampler()
samplerVolume = AKBooster(midiSampler)
mixer.connect(input: samplerVolume)
let bundlePath = Bundle.main.bundlePath
let soundPath = ("\(bundlePath)/Sounds/GigaPiano")
do { _ = try self.midiSampler.loadSoundFont(soundPath, preset: 0, bank: 0) }
catch { print("Error loading soundfont") }
mixer.start()
AudioKit.output = mixer
do {
_ = try AudioKit.engine.start()
} catch {
print("AudioKit wouldn't start!")
}
midiSampler.enableMIDI()
在AKMIDISampler.handleMIDI()中设置断点表示MIDI数据已到达那里,因此它似乎必定是音频问题。没有错误加载声音。此外,我添加了AKBooster绝望,只是因为它出现在一个示例应用程序;没有它就一样。
有关如何调试此内容的任何提示?
更新
正如评论中所述,我确实有音频,但非常安静,扭曲,不通过主iPhone扬声器 - 只有耳机。我目前的最小代码(在声音加载方面有一些防御性)是:
midiSampler = AKMIDISampler()
mixer = AKMixer(midiSampler)
let bundlePath = Bundle.main.bundlePath
let soundPath = ("\(bundlePath)/Sounds/KorgTritonPiano")
do { _ = try self.midiSampler.loadSoundFont(soundPath, preset: 0, bank: 0) }
catch {
print("Failed in loadSoundFont. Try loadMelodicSoundFont...")
do { _ = try self.midiSampler.loadMelodicSoundFont(soundPath, preset: 0) }
catch { print("Error loading soundfont") }
}
AudioKit.output = mixer
do { try AKSettings.setSession(category: .playAndRecord, with: .mixWithOthers) }
catch { print("Can't update session info...") }
do {
_ = try AudioKit.start()
} catch {
print("AudioKit wouldn't start!")
}
midiSampler.enableMIDI()
正如评论中所提到的,最小的AKOscillator,AKEnvelope直接连接到AudioKit.output,确实会从扬声器产生声音。所以它与AKMIDISampler或AKSampler(?)有关。我注意到这个问题在过去已经出现并且已经关闭,但是iOS 11.3可能会重新打破这个问题?
由于GitHub页面要求我们在这里确认问题,我真的希望AudioKit的某些人能够回复(所以我可以避免发布到GitHub)。我一直在上课和下课,试图弄清楚它可能会失败的地方,但我什么都没有。
如果它有帮助,我使用的是iOS 11.3(测试版15E5201e),Xcode 9.3 beta 4,macOS 10.13.4 beta 4.由于11.3和10.13.4现在似乎已经发布,我今晚会更新。如果iOS或Xcode版本是一个已知问题,我认为会出现在GitHub上,但没有记录。
更新2 :将Xcode,iOS,macOS更新为最新版本,无需更改。
更新3 :在 AVAudioSession.sharedInstance().currentRoute.outputs
内的中使用AKMIDIPlayer.handleMIDI()
记录设备,表示已选择扬声器。我完全难过了。这可能是Apple的错误吗?
更新4:故意将输出设置为PlayAndRecord
(即<Device: Receiver (Built-In Receiver)>
)输出任何内容,并将其设置为扬声器输出到接收器。也许我的开发电话中风... SubUpdate:没有,在另一部iPhone上验证了相同的行为。我受够了。将看看我是否可以从我的项目中取出AK并从直接的AVFoundation构建采样器。与我所看到的没什么不同。至少那时我肯定知道AK是否参与其中。
更新5:基于AVAudioUnitSampler对完全非AudioKit版本进行编码。同样的问题。同样奇怪的是session.currentRoute
报告它正在向演讲者播放(事实并非如此)。是否有可能Xcode项目中的某些内容可能导致此问题?如果有人有任何想法或想法,任何和所有的帮助仍然会非常感激。
答案 0 :(得分:0)
AudioKit 4.2中的新AKSampler解决了我的问题!也许不完全是一个“答案”,但绝对是一个解决方案,绝对是一个“采样器”,绝对是在AudioKit。希望对其他人有所帮助。