如何播放/停止背景音乐和音效?
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 语句中现在的问题”是什么意思?您是否尝试过在调试器中单步执行您的代码以查看发生了什么?以上是关于如何播放/停止背景音乐和音效?的主要内容,如果未能解决你的问题,请参考以下文章