在iOS中按下特定按钮时播放特定声音

时间:2017-05-14 03:21:13

标签: ios swift audio

我是iOS开发的初学者,我正在尝试创建一个简单的应用程序,当按下特定按钮并使用两个分段控件进行选项时,播放特定声音(如下图所示)。我在YouTube,堆栈和其他网站上查找过很多教程,但是所有这些教程似乎都给了我很多错误,或者对我来说太难理解了(因为我太没经验了)。

我的一些尝试,但这只适用于1个按钮和1个声音。

import UIKit
import AVFoundation

class ViewController: UIViewController {
    // make sure to add this sound to your project
    var pianoSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("C", ofType: "m4a"))
    var audioPlayer = AVAudioPlayer()

    override func viewDidLoad() {
        super.viewDidLoad()
        audioPlayer = AVAudioPlayer(contentsOfURL: pianoSound, error: nil)
        audioPlayer.prepareToPlay()
    }

    @IBAction func PianoC(sender: AnyObject) {
        audioPlayer.play()
    }
}

请有人告诉我如何制作这个应用程序,如下图所示?

Arrow Function

必需:有三个按钮(猫,狗,鸟),每个按钮都有自己的声音。以及用于启用或禁用声音的第一个分段(声音),例如。当用户选择声音关闭选项时,即使单击按钮也没有声音,第二个分段用于启用或禁用背景音乐。

2 个答案:

答案 0 :(得分:2)

因此,创建一个按名称播放声音的方法,并让每个按钮动作调用该方法。在开始播放该声音之前,还要让每种方法检查播放声音开关的状态。

@IBOutlet weak playSoundSwitch: UISwitch!

var backgroundMusicPlayer: AVAudioPlayer?

@discardableResult func playSound(named soundName: String) -> AVAudioPlayer {
    var soundURL = NSURL(fileURLWithPath: 
      NSBundle.mainBundle().pathForResource(soundName, ofType: "m4a"))
    audioPlayer = AVAudioPlayer(contentsOfURL: soundURL, error: nil)
    ( it MUST be a class variable )
    audioPlayer.play()
    return audioPlayer
}

@IBAction func catButtonPressed(sender: AnyObject) {
  if playSoundSwitch.isOn {
    playSound("catSound")
  }
}

@IBAction func dogButtonPressed(sender: AnyObject) {
  if playSoundSwitch.isOn {
    playSound("dogSound")
  }
}

@IBAction func birdButtonPressed(sender: AnyObject) {
  if playSoundSwitch.isOn {
    playSound("birdSound")
  }
}

@IBAction func playBackgroundMusicSwitchChanged(sender: UISwitch) {
  if sender.isOn {
    backgroundMusicPlayer = playSound("backgroundSound")
  } else {
    backgroundMusicPlayer?.stop()
    backgroundMusicPlayer = nil
  }
}

以上假设您的背景音乐声音足够长,可以持续整个会话。如果你需要在每次结束时重复声音,那将会更复杂。您必须将自己设置为声音播放器的代表,并在每次结束时重新启动它。您使用audioPlayerDidFinishPlaying(_:successfully:)委托方法。

如果您希望播放声音开关尽早终止当前声音,则需要添加逻辑来处理它。同样,如果您想一次只允许一个动物声音,则必须为 添加逻辑。

(上面的代码在SO编辑器中被删除了。它可能包含需要清理的小错误语法错误。它只是作为指南,而不是复制/粘贴代码。)

最新语法..

import AVFoundation
class yourClass {
    var _sfx: AVAudioPlayer? // IT >MUST< BE a class variable
    func sound(named: String) {

        let u = Bundle.main.path(forResource: named, ofType: "m4a")!
        let s = URL(fileURLWithPath:u)
        do {
            _sfx = try AVAudioPlayer(contentsOf: s)
            _sfx.play()

            // note, you >CAN NOT< say here ..
            // let variable = try AVAudioPlayer(contentsOf: s)
            // IT >MUST< BE a class variable
        }
        catch { print("WOE!"); return }
        print("PLAYED \(named)")
    }

答案 1 :(得分:0)

Region var1 var2
Texas  XX   XX 
Texas  XX   XX