快速自动播放声音
Posted
技术标签:
【中文标题】快速自动播放声音【英文标题】:Playing sound automatically in swift 【发布时间】:2016-03-02 15:13:29 【问题描述】:大家好,我正在尝试在我的 xcode 游戏中自动启动时快速播放声音,并且我尝试了很多不同的代码。我能够在 Objective-C 中编写和运行它,就像下面在 viewdidload 方法中一样,我为声音本身创建了一个方法并在 viewdidload 中调用它。
-(void)Loadingsound
AudioservicesPlaySystemSound(Loadingsound);
-(void)viewDidLoad
[super viewDidLoad];
NSURL *LoadingSound = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Tap Sound" ofType:@"wav"]];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)LoadingSound, &Loadingsound);
[self Loadingsound];
但现在我试图快速复制相同的内容,但我无法这样做。我在另一个关于堆栈溢出的问题中看到了下面的这段代码,但由于现在这是在 Xcode 7.2.1 和 Swift 2.0 上,是否有可能有一种新的方法来编写它?这是我尝试过的代码,游戏开始时声音不加载。
override func viewDidLoad()
super.viewDidLoad()
if let soundURL = NSBundle.mainBundle().URLForResource("Tap Sound", withExtension: "wav")
var mySound: SystemSoundID = 0
AudioServicesCreateSystemSoundID(soundURL, &mySound)
// Play
AudioServicesPlaySystemSound(mySound);
我尝试运行代码的另一种方法是......
覆盖 func viewDidLoad()
super.viewDidLoad()
var loadingsound = NSURL(fileURLWithPath:
NSBundle.mainBundle().pathForResource("Tap Sound", ofType: "wav"))
var audioPlayer = AVAudioPlayer()
audioPlayer = AVAudioPlayer(contentsOfURL: loadingsound, error: nil)
audioPlayer.prepareToPlay()
audioPlayer.play()
在这个方法中,当我尝试运行它时,编译失败并显示一个错误,告诉我输入一个“!”在输入“wav”并在其后放置支架后签名。在我输入感叹号后,它告诉我替换下面的“错误”一词并输入“filetypeHint”。有人请帮我解决这个问题。原件在objective-c中运行良好,有人可以帮我将确切的代码翻译成swift。我看到的其他示例显示错误。
谢谢!
【问题讨论】:
【参考方案1】:检查您的“Tap Sound”声音文件是否在您的项目目标中。您需要通过URLForResource
加载,就像我的情况一样,不要设置扩展类型。您只需要文件名。你可以把它放在这样的方法中。
func playMusic(_ filename: String)
var audioPlayer: AVAudioPlayer?
let url = Bundle.main.url(forResource: filename, withExtension: nil)
if (url == nil)
print("Could not find file: \(filename)")
return
do
try audioPlayer = AVAudioPlayer(contentsOf: url!)
let player = audioPlayer
// From Documentation: Negative integer value to loop the sound indefinitely until you call the stop method.
player!.numberOfLoops = -1
player!.prepareToPlay()
player!.play()
catch _
audioPlayer = nil;
// call the function with your soundfile
playMusic("Tap Sound")
【讨论】:
非常感谢!我尝试了您的代码,并像您所说的那样使用 playMusic("Tap Sound") 在 viewdidload 中运行了该方法,并且在应用程序启动时它起作用了!在它无法在目标中找到文件之前,现在它是。非常感谢你的帮助兄弟! 是的,很高兴它有效并且我可以帮助你。 @GianmarcoBelmonte 从非常旧的 Swift 升级时,请不要忘记方法签名中的_
。以上是关于快速自动播放声音的主要内容,如果未能解决你的问题,请参考以下文章