按下按钮后立即停止并启动声音
Posted
技术标签:
【中文标题】按下按钮后立即停止并启动声音【英文标题】:Have a sound stop and start immediately on button press 【发布时间】:2015-07-18 14:07:13 【问题描述】:我正在制作一个有趣的小应用程序来测试我的学习情况,并且我已经掌握了大部分内容,但我提出的解决方案有一点需要注意。
每次点击屏幕时,应用程序都会播放喇叭声。但这应该允许您连续快速连续按下它,并且每次都会播放喇叭声。它还应该停止之前的喇叭声,这样就不会有重叠的声音。
这是我到目前为止所做的事情
import UIKit
import AVFoundation
class ViewController: UIViewController
var horn:AVAudioPlayer = AVAudioPlayer()
override func viewDidLoad()
super.viewDidLoad()
prepareAudios()
@IBAction func buttonPressed(sender: AnyObject)
horn.stop()
horn.currentTime = 0
horn.play()
func prepareAudios()
var path = NSBundle.mainBundle().pathForResource("horn", ofType: "mp3")
horn = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: path!), error: nil)
horn.prepareToPlay()
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
它确实有效。它会停止声音并将其设置回开头,但是如果您单击得非常快,它会跳过并且有时不会播放。我想尝试解决这个问题,但我在谷歌上找不到太多。有没有更好的解决方案可以让我快速播放这种声音?
更新
根据 Duncan 的回答,我尝试创建两个声音实例来播放并在它们之间切换,但我似乎无法让它们在每次触摸屏幕时正确启动声音快速继承。这是我尝试过的代码
class ViewController: UIViewController
var horn1:AVAudioPlayer = AVAudioPlayer()
var horn2:AVAudioPlayer = AVAudioPlayer()
override func viewDidLoad()
super.viewDidLoad()
prepareAudios()
var bool = true
@IBAction func butonPressed(sender: AnyObject)
if(bool)
horn1.play()
horn2.stop()
horn2.currentTime = 0
bool = false
else
horn2.play()
horn1.stop()
horn1.currentTime = 0
bool = true
func prepareAudios()
var path = NSBundle.mainBundle().pathForResource("horn", ofType: "mp3")
horn1 = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: path!), error: nil)
horn2 = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: path!), error: nil)
horn1.prepareToPlay()
horn2.prepareToPlay()
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
每次按下按钮时,声音播放前都会稍有延迟。我希望声音立即重新开始。我希望喇叭能够像此视频中一样发出声音
https://www.youtube.com/watch?v=Ks5bzvT-D6I
【问题讨论】:
【参考方案1】:比这简单得多!如果您希望音频在按钮被按下后准确开始,您应该在将按钮连接到代码时将事件更改为“Touch Down”。就是这样!对于按钮来说这就足够了:
@IBAction func buttonPressed(sender: AnyObject)
horn.currentTime = 0
horn.play()
【讨论】:
【参考方案2】:尝试创建 2 个喇叭播放器实例,并每次调用 prepareToPlay。然后,当您单击按钮时,停止正在播放的按钮,启动新按钮,然后在您停止的按钮上调用 prepareToPlay 以使其准备就绪。您需要构建一些程序逻辑来实现它。
【讨论】:
以上是关于按下按钮后立即停止并启动声音的主要内容,如果未能解决你的问题,请参考以下文章