如何播放/停止背景音乐和音效?

Posted

技术标签:

【中文标题】如何播放/停止背景音乐和音效?【英文标题】:How to Play/Stop background music and sound effects? 【发布时间】:2016-02-23 20:40:28 【问题描述】:

我有 2 种音效,我无法阻止它们,但我的背景音乐完美无缺。

我的音效属于不同的类别 - 它们在 GameScene 中,我从那里运行它们。

我怎样才能正确地停止我的声音效果?

例如: 我有 CatchObjectSound 并且我创建了我需要的函数。但是当我点击按钮时我仍然可以听到音效。


我想做什么?

我想停止我的音效。

SKTA音频类:

import UIKit
import AVFoundation

public class Singleton 


    // Initialize
     public var backgroundMusicPlayer: AVAudioPlayer?
     public var soundEffectCatchObject: AVAudioPlayer?
     //public var soundEffectGameOver: AVAudioPlayer?
     //public var soundEffectClickedButton: AVAudioPlayer?



    public class func sharedInstance() -> Singleton 
        return SingletonInstance
    


    // ---------------------------------------------
    // Play Background Music
    // ---------------------------------------------

    func playBackgroundMusic() 
        let url = NSBundle.mainBundle().URLForResource("Unity.mp3", withExtension: nil)
        guard let newURL = url else 
            print("Could not find file: \("Unity.mp3")")
            return
        
        do 
            backgroundMusicPlayer = try AVAudioPlayer(contentsOfURL: newURL)
            backgroundMusicPlayer!.numberOfLoops = -1
            backgroundMusicPlayer!.prepareToPlay()
            backgroundMusicPlayer!.play()
         catch let error as NSError 
            print(error.description)
        
    

    func pauseBackgroundMusic() 
        backgroundMusicPlayer!.pause()
    

    func resumeBackgroundMusic() 
        backgroundMusicPlayer!.play()
    


    // ---------------------------------------------
    // Play Sound Effect Catch Object
    // ---------------------------------------------

    func playSoundEffectCatchObject() 
        let url = NSBundle.mainBundle().URLForResource("Magical Echo Spell 03.wav", withExtension: nil)
        guard let newURL = url else 
            print("Could not find file: \("Magical Echo Spell 03.wav")")
            return
        
        do 
            let error: NSError? = nil
            soundEffectCatchObject = try! AVAudioPlayer(contentsOfURL: newURL)
            if let player = soundEffectCatchObject 
            player.numberOfLoops = 0
            player.prepareToPlay()
            player.play()
             else 
            print("Could not create audio player: \(error!)")
        
    

    func pauseSoundEffectCatchObject() 
        if let player = soundEffectCatchObject 
        if player.playing 
           player.pause()
        
    


    func resumeSoundEffectCatchObject() 
        if let player = soundEffectCatchObject 
            if player.playing 
               player.play()
    
            
        
    


let SingletonInstance = Singleton()

我在主场景中有暂停/恢复的按钮。 按钮效果很好,但我无法停止我的音效,我试过了。

主要场景

if(SoundOnOff.containsPoint(location)) 

            if  (Singleton.sharedInstance().backgroundMusicPlayer?.playing == true) 
                Singleton.sharedInstance().pauseBackgroundMusic()
               Singleton.sharedInstance().pauseSoundEffectCatchObject()
                self.SoundOnOff.texture = SKTexture(imageNamed:"MusicOff.png")

             else 
               Singleton.sharedInstance().resumeBackgroundMusic()
               Singleton.sharedInstance().resumeSoundEffectCatchObject()
                self.SoundOnOff.texture = SKTexture(imageNamed:"MusicOn.png")
            
        

【问题讨论】:

【参考方案1】:

所以创建一个声音播放单例。给它方法来启动和停止 2 声音效果。由于它是一个单例,您可以在程序中的任何位置调用它。

【讨论】:

我的音效无法静音 AVAudioPlayer 没有我知道的静音功能,但您可以轻松地暂停或停止它。你有什么问题? 我的问题现在在我的 if 语句中。 老兄,你需要学会提供足够的信息。 “我的 if 语句中现在的问题”是什么意思?您是否尝试过在调试器中单步执行您的代码以查看发生了什么?

以上是关于如何播放/停止背景音乐和音效?的主要内容,如果未能解决你的问题,请参考以下文章

Unity SKFramework框架Audio音频管理器

同时播放两个声音c#

iOS,swift:无延迟播放背景音乐和音效

安卓多米音乐播放器怎么设置音效

如何制作背景音乐?

Monogame - 音乐和音效不能同时播放