首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >淡出AVAudioEngine AVAudioPlayerNode

淡出AVAudioEngine AVAudioPlayerNode
EN

Stack Overflow用户
提问于 2019-11-04 21:41:11
回答 1查看 233关注 0票数 0

我正在尝试用AVAudioEngine和AVAudioPlayerNode淡出一个mp3文件。我想不出来。有人能在Swift中帮忙吗?

我已经试过一些方法了。一切都运行得很好,但并不像我希望的那样顺利。

代码语言:javascript
复制
    var fadeOutPlayer: Float = playerVolume
            var fadeOutQuinte: Float = playerQuinteVolume
            while fadeOutPlayer > 0.0 {
                player.volume = fadeOutPlayer
                playerQuinte.volume = fadeOutQuinte
                fadeOutPlayer -= 0.001
                fadeOutQuinte -= 0.001
                usleep(100)
            }

我也尝试了计时器(它不会淡入淡出):

代码语言:javascript
复制
if !isTimerFadeOutRunning {
            player.volume = 0
            playerQuinte.volume = 0
            counter = 0
            timerFadeOut = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(runTimerFadeOut), userInfo: nil, repeats: true)
            isTimerFadeOutRunning = true
        }
    }

    @objc func runTimerFadeOut() {
        counter += 0.1
        if counter == 0.2 {
            player.pause()
            playerQuinte.pause()
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2020-09-21 20:47:47

在mainMixerNode之前,我已经将AVAudioUnitEQ附加到我的流中,然后控制了globalGain。下面的代码显示了这一想法:

代码语言:javascript
复制
private func manageFadeOut(volume: Double, fadeOutSecs: Double) {
    let timeSecs = 0.001
    DispatchQueue.main.asyncAfter(deadline: .now() + timeSecs) {
        if !self.isFadingOut { return }
        for fx in self.fadeOutEffects { fx.globalGain = Float(-96 * (1.0 - volume)) }
        if volume <= 0 {
            for player in self.players { player.stop() }
            self.isFadingOut = false
            return
        }
        let fade = timeSecs / fadeOutSecs
        self.manageFadeOut(volume: volume - fade, fadeOutSecs: fadeOutSecs)
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58694643

复制
相关文章

相似问题

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