菜鸟教程小白 发表于 2022-12-11 19:53:10

ios - AudioKit:如何在两个不同的 AKOperationGenerator-Oscillators 之间切换


                                            <p><p>我想使用 AKOperation.squareWave() 和 AKOperation.triangleWave() 构建一个在方波和三角波之间进行模式切换的振荡器。当我尝试如下构建它时,它不起作用。怎么了?谢谢!</p>

<pre><code>import AudioKitPlaygrounds
import AudioKit

let osc_square = AKOperationGenerator { parameters in
    return AKOperation.squareWave(
      frequency: parameters,
      amplitude: parameters
    )
}
let osc_tri = AKOperationGenerator { parameters in
    return AKOperation.triangleWave(
      frequency: parameters,
      amplitude: parameters
    )
}
var currentOsc: AKOperationGenerator = osc_square
var currentMode:Int = 1

AudioKit.output = currentOsc
try AudioKit.start()

setCurrentVCOParameters()
currentOsc.play()



let playgroundWidth = 500

import AudioKitUI
class LiveView: AKLiveViewController {

    override func viewDidLoad() {
      addTitle(&#34;Switch AKOperationGenerator&#34;)
      let button = AKButton(title: &#34;Mode \(currentMode)&#34;) { _ in
            if currentMode == 1 {
                setVCOMode(2)
            }
            else if currentMode == 2 {
                setVCOMode(1)
            }
      }
      addView(button)
    }
}

func setVCOMode(_ modeIndex: Int) {
    currentMode = modeIndex
    setCurrentVCO()
}

func setCurrentVCO() {
    currentOsc.stop()
    switch currentMode {
    case 1:
      currentOsc = osc_square
    case 2:
      currentOsc = osc_tri
    default:
      currentOsc = osc_square
    }
    setCurrentVCOParameters()
    currentOsc.start()
}
func setCurrentVCOParameters() {
    currentOsc.parameters = 110.0
    currentOsc.parameters = 0.5
}

import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
PlaygroundPage.current.liveView = LiveView()
</code></pre>

<p>在启动时 OSC 的方波运行良好,但是当我触摸切换开关时会出现静音。切换回来会带回正方形。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>似乎不可能那样做。我现在可以并行运行不同的振荡器,当我需要它们运行/停止时启动/停止我需要的振荡器</p>

<pre><code>var currentVCO1Mode: VCOMode = .sqr
let allVCO1Generators: !
enum CurrentVCO1: Int {
    case sqr, tri
}
var currentVCO1:CurrentVCO1

func setCurrentVCO1() {
    vco1_square.stop()
    vco1_tri.stop()
    switch currentVCO1Mode {
      case .sqr:
            vco1_square.start()
            currentVCO1 = .sqr
      case .tri:
            vco1_tri.start()
            currentVCO1 = .tri
    }
    setCurrentVCO1Parameters()
    setCurrentVCO2()
}
</code></pre>

<p>等等</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - AudioKit:如何在两个不同的 AKOperationGenerator-Oscillators 之间切换,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/49351258/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/49351258/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - AudioKit:如何在两个不同的 AKOperationGenerator-Oscillators 之间切换