首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AudioKit:如何在两个不同的AKOperationGenerator-Oscillator之间切换

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

Stack Overflow用户
提问于 2018-03-19 02:07:49
回答 1查看 105关注 0票数 2

我想使用AKOperation.squareWave()和AKOperation.triangleWave()构建一个可以在正方形和三角形波形之间切换模式的振荡器。当我尝试像下面这样构建它时,它不起作用。怎么了?太好了!

代码语言:javascript
复制
import AudioKitPlaygrounds
import AudioKit

let osc_square = AKOperationGenerator { parameters in
    return AKOperation.squareWave(
        frequency: parameters[0],
        amplitude: parameters[1]
    )
}
let osc_tri = AKOperationGenerator { parameters in
    return AKOperation.triangleWave(
        frequency: parameters[0],
        amplitude: parameters[1]
    )
}
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("Switch AKOperationGenerator")
        let button = AKButton(title: "Mode \(currentMode)") { _ 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[0] = 110.0
    currentOsc.parameters[1] = 0.5
}

import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
PlaygroundPage.current.liveView = LiveView()

在启动时,OSC的方波运行良好,但当我触摸切换开关时,会出现静音。切换回来会带回正方形。

EN

回答 1

Stack Overflow用户

发布于 2018-03-27 01:09:35

看起来那是不可能的。我现在可以并行运行不同的振荡器,当我需要它们运行/停止时启动/停止它们,如下所示

代码语言:javascript
复制
var currentVCO1Mode: VCOMode = .sqr
let allVCO1Generators: [AKOperationGenerator]!
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()
}

等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49351258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档