首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AudioKit-振荡器从点击声开始,这是第一次启动。

AudioKit-振荡器从点击声开始,这是第一次启动。
EN

Stack Overflow用户
提问于 2022-07-17 21:20:25
回答 1查看 94关注 0票数 2

我遇到了一个问题,DynamicOscillator()是在应用程序启动后第一次使用时发出点击声音的。听起来就像淡入不起作用,但我不明白为什么。

这是我的代码:

代码语言:javascript
复制
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")
            }
        }
    }
}

如果你有什么想法,请告诉我。非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2022-07-21 01:52:37

将振荡器的振幅设置为零,然后在启动音频引擎时启动。

代码语言:javascript
复制
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")
            }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73015444

复制
相关文章

相似问题

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