2016-08-12 85 views
2

我試圖按一個按鈕,音頻文件播放一個接一個。試圖按一個按鈕,然後按順序播放音頻或隨機播放

這是我的代碼如下。我按播放鍵,兩個聲音同時播放。 我試圖按播放按鈕,聲音開始並停止,然後另一個聲音文件開始和停止。按下2個聲音文件按下的一個按鈕是我的目標。謝謝

我想在循環中,但它不工作。

import UIKit 
import AVFoundation 

class ViewController: UIViewController { 

    @IBOutlet weak var sliderValue: UISlider! 

    var player:AVAudioPlayer = AVAudioPlayer() 
    var player1:AVAudioPlayer = AVAudioPlayer() 

    @IBAction func play(_ sender: AnyObject) { 
      player.play() 
      player1.play() 
    } 

    @IBAction func pause(_ sender: AnyObject) { 
     player.pause() 
    } 
    @IBAction func stop(_ sender: AnyObject) { 
     player.stop() 
     player.currentTime = 0 
    } 
    @IBAction func sliderChanged(_ sender: AnyObject) { 
     player.volume = sliderValue.value 
    } 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     let audioPath = Bundle.main.path(forResource: "sound1", ofType: "mp3")! 
     let audioPath1 = Bundle.main.path(forResource: "sound2", ofType: "mp3")! 
     do { 
      try player = AVAudioPlayer(contentsOf: URL(fileURLWithPath: audioPath)) 
      try player1 = AVAudioPlayer(contentsOf: URL(fileURLWithPath: audioPath1)) 

     } catch{ 
      //Process Error here 
     }  
    } 
    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 
+0

完成後播放第二個聲音,您可以使用AVAudioPlayer的代理來播放聲音播放完成與否。 –

+0

我忘了說。我是一個新手。謝謝rohit –

+1

訪問此鏈接https://developer.apple.com/library/mac/documentation/AVFoundation/Reference/AVAudioPlayerClassReference/index.html#//apple_ref/occ/cl/AVAudioPlayer關於它的詳細說明 –

回答

0

當然,你不能在循環中做到這一點!

接連播放聲音文件的正確方法是使用AVAudioPlayerDelegate

在您的視圖控制器,符合AVAudioPlayerDelegate

class YourViewController: UIViewController, AVAudioPlayerDelegate { 
    // ... 
    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, 
         successfully flag: Bool) { 

    } 
} 

正如你可以看到,我添加了一個audioPlayerDidFinishPlaying的方法來控制。

所以你想先玩player,然後player1吧?

viewDidLoad,加入這一行:

player.delegate = self 

而且在我剛剛添加的方法,寫:

player1.play() 

而其他IBAction爲方法應該改變一點點:

@IBAction func play(_ sender: AnyObject) { 
     player.play() 
} 

@IBAction func pause(_ sender: AnyObject) { 
    if player.isPlaying { 
     player.pause() 
    } else if player1.isPlaying { 
     player1.pause() 
    } 

} 
@IBAction func stop(_ sender: AnyObject) { 
    if player.isPlaying { 
     player.stop() 
    } else if player1.isPlaying { 
     player1.stop() 
    } 
} 
@IBAction func sliderChanged(_ sender: AnyObject) { 
    player.volume = sliderValue.value 
    player1.volume = sliderValue.value 
} 
+0

太棒了。謝謝。這將給我肉食咀嚼。我很欣賞這一點。是的,我確實想玩先玩家1。 –

+0

@MichaelContreras如果您認爲我的答案回答了您的問題,請考慮通過點擊該選中標記來接受它! – Sweeper

+0

好的。我看到了。我現在要運行它。 –

0

如果你可以用另一個對象AVQueuePlayer來管理這個,你可以n找到文檔herehere的指南。

+0

好的,我也會考慮到這一點。非常感謝! –

+0

如果我的答案有幫助,請upvote它和標記爲正確的,如果它是你喜歡的方法,謝謝:) –

+0

我剛剛做了,但沒有顯示。 –