2015-02-24 77 views
0

我使用AVAudioPlayer框架和我選擇當我進入的區域(我使用的是Core Location框架,當我使用didEnterRegion函數調用這個函數)來播放一首歌曲。用AVAudioPlayer重播音樂多重?

... 
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

嘗試正在重置的audioplayer,然後才能播放:

audioPlayer.stop() 
audioPlayer.currentTime = 0 
audioPlayer.play() 
+0

不幸的是,似乎不工作。我在播放audioPlayer的正下方添加了該代碼,但似乎無法解決此問題。 – user1871869 2015-02-24 10:06:11

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函數可以被調用通過一個動作(按下按鈕)

+0

你將如何加載聲音文件?你會簡單地調用prepareToPlay()函數嗎? – user1871869 2015-02-24 10:42:38

+0

再次看到我的帖子 – Masterfego 2015-02-24 10:55:23

+0

我想我很困惑,爲什麼這會有什麼不同,比我上面有什麼。另外,我想在進入特定區域時調用該功能,而不是按下按鈕。 – user1871869 2015-02-24 11:00:26