大家好我想尝试在我的xcode游戏中快速播放声音并自动启动,我尝试了一堆不同的代码。我能够在下面的viewdidload方法中使用Objective-C编写和运行它,我创建了一个声音本身的方法,并在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];
但是现在我试图在swift中复制它,但我无法这样做。我在下面的另一个问题中看到了这个代码在堆栈溢出问题,但是现在这是在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中工作得非常好,有人可以帮助我快速翻译那些确切的代码。我看到的其他示例显示错误。
谢谢!
答案 0 :(得分:2)
检查您的“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")