我遇到了一个问题,DynamicOscillator()是在应用程序启动后第一次使用时发出点击声音的。听起来就像淡入不起作用,但我不明白为什么。
这是我的代码:
import SwiftUI
import AVFoundation
import AudioKit
import SoundpipeAudioKit
struct Exercise1View: View {
let osc = DynamicOscillator() //Oscillator from AudioKit
let audioEngine = AudioEngine()
var body: some View {
Button {
osc.setWaveform(Table(.sine)) // set osc-type to sine-wave
osc.$frequency.ramp(to: 440, duration: 0) // set frequency of osc
osc.amplitude = 0 // set amplitude to 0
osc.start()
osc.$amplitude.ramp(to: 1, duration: 0.01) //fade in, so there is no click sound
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { // wait 1 second
osc.$amplitude.ramp(to: 0, duration: 0.01) //fade out, so there is no click sound
}
} label: { Text("play tone") }
.onAppear {
audioEngine.output = osc
do {
try audioEngine.start()
} catch {
print("could not start audioengine")
}
}
}
}如果你有什么想法,请告诉我。非常感谢!
发布于 2022-07-21 01:52:37
将振荡器的振幅设置为零,然后在启动音频引擎时启动。
struct Exercise1View: View {
let osc = DynamicOscillator(amplitude: 0) // Set amplitude to zero here
let audioEngine = AudioEngine()
var body: some View {
Button {
osc.setWaveform(Table(.sine))
osc.$frequency.ramp(to: 440, duration: 0)
osc.$amplitude.ramp(to: 1, duration: 0.01)
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
osc.$amplitude.ramp(to: 0, duration: 0.01)
}
} label: { Text("play tone") }
.onAppear {
audioEngine.output = osc
do {
osc.start() // Start Oscillator right away, manage playback with amplitude
try audioEngine.start()
} catch {
print("could not start audioengine")
}
}
}
}https://stackoverflow.com/questions/73015444
复制相似问题