如何解决AudioKit v5输出问题,仅以非常低的音量传递给扬声器
在模拟器上正常运行后,我开始在11 Pro Max上进行调试。在MandolinString上弹奏音符时,来自(11 Pro Max或8)模拟器的声音很大且清晰。在真实的电话上,声音几乎是听不到的,只能从扬声器听到。它不会转到所连接的音频扬声器,而是HomePod或AirPods。这是v5错误吗?我需要对输出做些什么?
第二个不太重要的问题是,当我实例化此对象时,MandolinString会在不调用任何内容的情况下触发。额外的推子和延迟后增益从0重置为1会抑制这种声音。
private let engine = AudioEngine()
private let mic : AudioEngine.InputNode
private let mixer1 : Mixer
private let mixer2 : Mixer
private let silence : Fader
private let fader : Fader
private var pitchTap : PitchTap
private let startTime = NSDate.timeIntervalSinceReferenceDate
private let ampThreshhold: AUValue = 0.15
private let ampJumpSize: AUValue = 0.05
private var ampPrev: AUValue = 0.0
private var freqArray: [AUValue] = []
init() {
mic = engine.input
mixer1 = Mixer(mic)
silence = Fader(mixer1,gain: 0)
mixer2 = Mixer(silence)
pitchTap = PitchTap(mixer1,handler: {_,_ in })
//pluckedString = PluckedString(frequency: Float(NoteList.shared.minFreq),// amplitude: 1.0)
pluckedString = MandolinString()
fader = Fader(pluckedString,gain: 0.0)
mixer2.addInput(fader)
engine.output = mixer2
self.pitchTap = PitchTap(mic,handler:
{ freq,amp in
if (amp[0] > self.ampThreshhold) {
self.sample(freq: freq[0],amp: amp[0])
}
})
do {
try engine.start()
akStartSucceeded = true
} catch {
akStartSucceeded = false
}
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
// Put your code which should be executed with a delay here
self.fader.gain = 1.0
}
} // init
XCode 12,iOS 14,SPM。一切都是最新的
解决方法
很可能这本身不是AudioKit的问题,这与AVAudioSession有关,您可能需要在设备上将其设置为DefaultToSpeaker。与版本4相比,AudioKit 5的自动会话管理更少,因此选择了更少的假设并让开发人员可以控制。
,答案确实是为 AVAudioSession 添加代码。但是,它在我第一次放置的地方不起作用。当我把它放在 App 委托 didFINishLauchWithOptions 中时,它只对我有用。我在 AudioKit Cookbook 中找到了这个。这有效:
class AppDelegate: UIResponder,UIApplicationDelegate {
func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
#if os(iOS)
self.audioSetup()
#endif
return true
}
#if os(iOS)
func audioSetup() {
let session = AVAudioSession.sharedInstance()
do {
Settings.bufferLength = .short
try session.setPreferredIOBufferDuration(Settings.bufferLength.duration)
try session.setCategory(.playAndRecord,options: [.defaultToSpeaker,.mixWithOthers])
try session.setActive(true)
} catch let err {
print(err)
}
// Other AudioSession stuff here
do {
try session.setActive(true)
} catch let err {
print(err)
}
}
#endif
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。