试图按一个按钮,然后按顺序播放音频或随机播放
我试图按一个按钮,音频文件播放一个接一个。试图按一个按钮,然后按顺序播放音频或随机播放
这是我的代码如下。我按播放键,两个声音同时播放。 我试图按播放按钮,声音开始并停止,然后另一个声音文件开始和停止。按下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.
}
}
当然,你不能在循环中做到这一点!
接连播放声音文件的正确方法是使用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
}
太棒了。谢谢。这将给我肉食咀嚼。我很欣赏这一点。是的,我确实想玩先玩家1。 –
@MichaelContreras如果您认为我的答案回答了您的问题,请考虑通过点击该选中标记来接受它! – Sweeper
好的。我看到了。我现在要运行它。 –
完成后播放第二个声音,您可以使用AVAudioPlayer的代理来播放声音播放完成与否。 –
我忘了说。我是一个新手。谢谢rohit –
访问此链接https://developer.apple.com/library/mac/documentation/AVFoundation/Reference/AVAudioPlayerClassReference/index.html#//apple_ref/occ/cl/AVAudioPlayer关于它的详细说明 –