在 Xcode 中播放音效

Posted

技术标签:

【中文标题】在 Xcode 中播放音效【英文标题】:Playing sound effect in Xcode 【发布时间】:2020-08-05 17:35:56 【问题描述】:

我在 Xcode 中创建了一个播放短音效的按钮。我无法在播放时重新触发按钮/声音。因此,我必须等到声音消失才能重复效果。我的意图是每次按下按钮时,声音效果都会开始播放,即使它仍在淡出。有谁知道如何实现这一目标?我正在使用 XCode 11.6。我的代码如下。非常感谢。

导入 UIKit 导入 AVFoundation

类视图控制器:UIViewController

var audioPlayer = AVAudioPlayer()

override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    
    do 
        audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: "1", ofType: "mp3")!))
        audioPlayer.prepareToPlay()
     catch 
        print(error)
    


@IBAction func Play(_ sender: Any) 
    audioPlayer.play()

【问题讨论】:

你想在播放的时候暂停音效,暂停的时候再播放一遍吗? 我希望它在再次按下按钮时继续播放,也就是说声音相互重叠。 【参考方案1】:

您可以在Play 方法中初始化audioPlayer 而不是viewDidLoad

override func viewDidLoad() 
    super.viewDidLoad()


@IBAction func Play(_ sender: Any) 
    do 
        audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: "1", ofType: "mp3")!))
        audioPlayer.prepareToPlay()
        audioPlayer.play()
     catch 
        print(error)
    

【讨论】:

感谢您的快速回答。如果我复制代码并粘贴它,它会说“只有实例方法可以声明@IBAction”。 你把这个粘贴到哪里了?您必须用我上面提供的方法替换代码中的方法。 我已将部分代码替换为您的代码(与您发布的顺序相同)。请原谅,我是编码新手。 只有在顶层ViewController 之外发布上述代码时,您才会收到此错误。如果你这样做了,把它放在ViewController中。【参考方案2】:

如果我理解正确,您想在播放声音时阻止再次播放,而在播放完毕后只播放声音 您可以根据声音是否播放来设定条件 (在您的按钮操作中尝试):

 if audioPlayer.isPlaying()
   // your statement when sound is playing in other word nothing to do
 else
   // your statement when sound is not playing and you want to start play
      audioPlayer.play()
 

https://developer.apple.com/documentation/avfoundation/avaudioplayer/1390139-isplaying

【讨论】:

以上是关于在 Xcode 中播放音效的主要内容,如果未能解决你的问题,请参考以下文章

安卓多米音乐播放器怎么设置音效

iOS在播放完成前播放相同的音效

如何在 Android 中播放音效

iOS学习笔记23-音效与音乐

如何在 AVAudioPlayer 中播放 0.5 秒的 1 秒音效?

Soundpool vs Mediaplayer 用于播放多种音效