簡體   English   中英

AudioKit swift 平移

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM