如何使用 UISwitch 更改变量的值?
How to change the value of a variable using a UISwitch?
我是 swift 的新手,正在努力了解自己的方位。我目前正在研究一个开关,以切换我使用 AudioKit 制作的这些振荡器对象的音量 on/off。我对 AudioKit 部分没有任何问题,但我似乎无法弄清楚如何使用 UISwitch 将 'volume' 变量从绝对 0 更改为它们的 'on' 级别。
请帮忙!
我已经尝试了很多事情,但经过大量搜索后,我已经到了这一点。我决定将每个音量控制的变量声明为其 'on' 值,然后添加 UISwitch 并使用 if 语句来切换音量。
class ViewController: UIViewController {
var Fsys = 5.00
//VOLUMES HERE:
var volumeMono = 0.2
var volumeBinaural = 0.6
var A1 = 54.00
var A2 = 108.00
@IBAction func `switch`(_ sender: UISwitch) {
if sender.isOn {
volumeMono = (volumeMono) * (1)
volumeBinaural = (volumeBinaural) * (1)
}
else {
volumeMono = (volumeMono) * (0)
volumeBinaural = (volumeBinaural) * (0)
}
}
override func viewDidLoad() {
super.viewDidLoad()
let generator = AKOperationGenerator(channelCount: 2) { _ in
let leftOutput = AKOperation.sineWave(frequency: A2, amplitude: volumeBinaural)
let rightOutput = AKOperation.sineWave(frequency: A2 + Fsys, amplitude: volumeMono)
return [leftOutput, rightOutput]
}
AudioKit.output = generator
AKSettings.playbackWhileMuted = true
try! AudioKit.start()
do {
try AudioKit.start()
} catch {
AKLog("AudioKit did not start!")
}
generator.start()
}
}
我希望当开关关闭(停止振荡器的声音)时,这会将变量乘以 0,而当它打开时,开关函数会将变量乘以 1,从而使音频输出匹配声明的变量。
当我 运行 构建时,系统默认使用开始时声明的卷,并且开关不执行任何操作。
提前感谢您的帮助!
viewDidLoad
在 ViewController 加载时恰好被调用一次。此时,您正在使用尾随闭包语法创建生成器。闭包将捕获当时 volumeMono 和 volumeBinaural 的值。它们分别为 0.2 和 0.6。由于闭包捕获了这些值,因此生成器的 leftOutput 和 rightOutput 永远不会改变。
如果你的开关可以工作,那么逻辑就有缺陷。一旦你将这些值乘以 0,它们将始终为 0。我对 AudioKit 的了解不够,无法建议在切换开关时创建一个新的生成器,或者你是否可以调整一些值,但这就是你的开关不可用的原因没有任何影响。
我是 swift 的新手,正在努力了解自己的方位。我目前正在研究一个开关,以切换我使用 AudioKit 制作的这些振荡器对象的音量 on/off。我对 AudioKit 部分没有任何问题,但我似乎无法弄清楚如何使用 UISwitch 将 'volume' 变量从绝对 0 更改为它们的 'on' 级别。
请帮忙!
我已经尝试了很多事情,但经过大量搜索后,我已经到了这一点。我决定将每个音量控制的变量声明为其 'on' 值,然后添加 UISwitch 并使用 if 语句来切换音量。
class ViewController: UIViewController {
var Fsys = 5.00
//VOLUMES HERE:
var volumeMono = 0.2
var volumeBinaural = 0.6
var A1 = 54.00
var A2 = 108.00
@IBAction func `switch`(_ sender: UISwitch) {
if sender.isOn {
volumeMono = (volumeMono) * (1)
volumeBinaural = (volumeBinaural) * (1)
}
else {
volumeMono = (volumeMono) * (0)
volumeBinaural = (volumeBinaural) * (0)
}
}
override func viewDidLoad() {
super.viewDidLoad()
let generator = AKOperationGenerator(channelCount: 2) { _ in
let leftOutput = AKOperation.sineWave(frequency: A2, amplitude: volumeBinaural)
let rightOutput = AKOperation.sineWave(frequency: A2 + Fsys, amplitude: volumeMono)
return [leftOutput, rightOutput]
}
AudioKit.output = generator
AKSettings.playbackWhileMuted = true
try! AudioKit.start()
do {
try AudioKit.start()
} catch {
AKLog("AudioKit did not start!")
}
generator.start()
}
}
我希望当开关关闭(停止振荡器的声音)时,这会将变量乘以 0,而当它打开时,开关函数会将变量乘以 1,从而使音频输出匹配声明的变量。
当我 运行 构建时,系统默认使用开始时声明的卷,并且开关不执行任何操作。
提前感谢您的帮助!
viewDidLoad
在 ViewController 加载时恰好被调用一次。此时,您正在使用尾随闭包语法创建生成器。闭包将捕获当时 volumeMono 和 volumeBinaural 的值。它们分别为 0.2 和 0.6。由于闭包捕获了这些值,因此生成器的 leftOutput 和 rightOutput 永远不会改变。
如果你的开关可以工作,那么逻辑就有缺陷。一旦你将这些值乘以 0,它们将始终为 0。我对 AudioKit 的了解不够,无法建议在切换开关时创建一个新的生成器,或者你是否可以调整一些值,但这就是你的开关不可用的原因没有任何影响。