2015-02-24 43 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