[英]AudioKit swift panning
我目前在 audioKit 的幫助下開發一個應用程序。 我試圖平移音頻,使其一次只能在一只耳朵中播放。 有什么想法可能是錯的嗎?
聲音正在播放,但它同時在雙耳中播放。
func createTone(freq: Double, dB: Int, isLeftEar: Bool){
currentFreq = Int(freq)
currentdB = dB
isAudioOn = true
osciliator.frequency = freq
osciliator.amplitude = calculateVolume(dB: dB)
osciliator.rampDuration = 0.25
let leftPan = AKPanner(osciliator, pan: -1)
let rightPan = AKPanner(osciliator, pan: 1)
if(isLeftEar){
AudioKit.AKManager.output = leftPan
}else{
AudioKit.AKManager.output = rightPan
}
do{
try AudioKit.AKManager.start()
}catch{
print("could not start AudioKit.")
}
if isLeftEar {
leftPan.start()
}else{
rightPan.start()
}
osciliator.start()
sleep(2)
do{
try AudioKit.AKManager.stop()}
catch{
print("AudioKit could not stop")
}
通常,節點在 class 級別聲明,而不是作為局部變量。 所以你會有類似的東西:
class ViewController: UIViewController {
var panner: AKPanner!
func createTone(freq: Double, dB: Int, isLeftEar: Bool){
// ...
panner = AKPanner(oscillator, pan: (isLeftEar) ? -1 : 1)
// ...
}
此外,絕不應該在主線程中調用sleep
。 您應該使用DispatchQueue.main.asyncAfter
:
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
do{
try AKManager.stop()}
catch{
print("AudioKit could not stop")
}
}
我使用 AudioKit 4.10.1 測試了以下代碼,它確實可以正確平移到左聲道。
var panner: AKPanner!
var oscillator: AKOscillator!
func createTone(){
oscillator = AKOscillator()
panner = AKPanner(oscillator, pan: -1)
AKManager.output = panner
do{
try AudioKit.AKManager.start()
}catch{
print("could not start AudioKit.")
}
panner.start()
oscillator.start()
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 20.0) {
do {
try AudioKit.AKManager.stop()
} catch {
print("AudioKit could not stop")
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.