1
此代碼在輕按按鈕時播放聲音,但如果再次按下,則取消先前的聲音。我不希望發生這種情況,我希望在重複按下時重疊相同的聲音。我相信這可能是由於使用了與我在互聯網上看到的相同的AVAudioPlayer,但我對swift很陌生,並且想知道如何在每次該方法運行時創建新的AVAudioPlayer,以使聲音重疊。如何播放與AVAudioPlayer重疊的聲音?
func playSound(sound:String){
// Set the sound file name & extension
let soundPath = NSURL(fileURLWithPath:NSBundle.mainBundle().pathForResource(sound, ofType: "mp3")!)
do {
//Preperation
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
} catch _{
}
do {
try AVAudioSession.sharedInstance().setActive(true)
}
catch _ {
}
//Play the sound
var error:NSError?
do{
audioPlayer = try AVAudioPlayer(contentsOfURL: soundPath)
}catch let error1 as NSError {
error = error1
}
audioPlayer.prepareToPlay()
audioPlayer.play()
}
你的答案很好,並提供更多的問題,但如果我不知道我需要在代碼中的audioPlayers的數量。有沒有辦法聲明更多的「var playerBoom:AVAudioPlayer?」通過循環方法? AVAudioPlayer也是快速播放聲音的唯一方法嗎? –
如果您不知道聲音的數量(順便提一下,這是一個與您的問題不同的問題,即「播放*相同*聲音重疊」),那麼您不應該使用AVAudioPlayer來解決您的問題。因爲您必須爲每個聲音聲明一個播放器和變量,所以如果要重疊,則無法選擇:AVAudioPlayer一次只能播放一個聲音。那麼,你可以創建一個用聲音準備的AVAudioPlayers *數組,並且將數組保存在一個變量中,但是我不推薦這種解決方案,它很快就會變得混亂。恐怕你不得不尋找除AVAudioPlayer之外的其他方法。 – Moritz
我的意思是這是一個聲音,但誰知道它可以播放多少次,相對於聲音文件的長度和按下的時間。 (可能是10個或100個重疊的相同聲音)你有沒有用過另一種方式來播放聲音?無論如何感謝您的回答,這是及時和徹底的 –