我正在使用AVAudioPlayer框架,当我进入一个区域时,我选择播放一首歌(我使用的是Core Location框架,并在使用didEnterRegion
函数时调用此函数)。
...
var audioPlayer = AudioPlayer()
...
func playMusic(regionIdentifier: String!){
//Get Documents Directory
let documentsDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
//Get region label with music file
var musicFile = db.selectRegion(regionIdentifier)
//If music file exists, play specified music file.
if(musicFile != ""){
var error:NSError?
var musicFilePath = documentsDirectory + "/" + musicFile
audioPlayer = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: musicFilePath), error:&error)
audioPlayer.prepareToPlay()
audioPlayer.play()
}
else{
NSLog("File is not in Database.")
}
}
首次进入某个地区时,音频播放器会播放音乐剪辑。然而,似乎当我想要重播我以前播放过的一首歌时(我正在访问我以前访问过的地区),我的歌曲不会重播。我知道函数didEnterRegion
被正确调用,我试图找到第二次播放歌曲时AVAudioPlayer
中是否有错误,但似乎没有产生任何错误。关于为什么我的歌曲不能再次播放的任何想法?谢谢!我也看了AVAudioPlayer won't play existing file a second time并试图将NSURL转换为NSData类型,但我仍然收到了相同的结果。
编辑:我甚至试图打印出play()
函数返回true并确实返回true。
答案 0 :(得分:0)
在播放之前尝试重置音频播放器:
audioPlayer.stop()
audioPlayer.currentTime = 0
audioPlayer.play()
答案 1 :(得分:0)
创建2个函数,第一个用于在audioPlayer中加载声音文件,第二个用于播放声音:
var audioPlayer = AVAudioPlayer()!
func LoadSoundFile(regionIdentifier: String!){
//Get Documents Directory
let documentsDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
//Get region label with music file
var musicFile = db.selectRegion(regionIdentifier)
//If music file exists, play specified music file.
if(musicFile != ""){
var error:NSError?
var musicFilePath = documentsDirectory + "/" + musicFile
audioPlayer = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: musicFilePath), error:&error)
}
else{
NSLog("File is not in Database.")
}
}
在playSound函数中写下:
func playSound(){
audioPlayer.stop()
audioPlayer.prepareToPlay() // Not necessary
audioPlayer.play()
}
可以通过动作(按下按钮)调用playSound函数