如何使用 Swift 3.0 播放附加到图像数组的声音?

Posted

技术标签:

【中文标题】如何使用 Swift 3.0 播放附加到图像数组的声音?【英文标题】:How to play a sound attached to an Image Array using Swift 3.0? 【发布时间】:2017-12-02 22:07:09 【问题描述】:

在下面的Image Array中调用Image-5时是否可以播放声音

这是完整的代码,包括设置 AVAudioPlayer

ImageArray 和您建议的代码:

import UIKit
import AVFoundation

class ViewController: UIViewController 

    var player:AVAudioPlayer = AVAudioPlayer()

    @IBOutlet weak var imageView: UIImageView!

    override func viewDidLoad() 
        super.viewDidLoad()    

    var imagesName = ["Image-1.png","Image-2.png","Image-3.png","Image-4.png","Image-5.png","Image-6.png","Image-7.png","Image-8.png","Image-9.png","Image-10.png"]

            var images = [UIImage]()

            for i in 0..<imagesName.count

                images.append(UIImage(named: imagesName[i])!)

            

            imageView.animationImages = images
            imageView.animationDuration = 0.5
            imageView.animationRepeatCount = 1
            imageView.startAnimating()

            do
    
        let audioPath = Bundle.main.path(forResource: "song", ofType: "mp3")
        try player = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: audioPath!) as URL)
    
    catch
    
        //ERROR
    

    let whichImage: Int = 5
    let when = DispatchTime.now() + imageView.animationDuration * TimeInterval(whichImage-1)
    DispatchQueue.main.asyncAfter(deadline: when) 
        self.player.play()
        // Play sound here
    

【问题讨论】:

【参考方案1】:

由于您的间隔是固定的,您已经知道 Image-5 什么时候会被触发,所以试试这个:

let whichImage: Int = 5
let when = DispatchTime.now() + imageView.animationDuration * TimeInterval(whichImage-1)
DispatchQueue.main.asyncAfter(deadline: when) 
    // Play sound here

【讨论】:

嗨 - 感谢您的帮助。我已经更新了上面的完整代码,但是在显示 Image-5 时,song.mp3 不会触发 - 它会在动画完成几秒钟后触发 每张图片使用 0.5 秒,因此延迟应该是 2.5 秒,而不是 5 秒。但是,声音播放开始可能无法与显示图像完美同步。 嗨 Ruslan Serebriakov - 我已经尝试过您建议的代码(请参见上文),但您第一次使用 AVAudioPlayer 播放音频文件时似乎有 2-3 秒的延迟,您有其他想法? 嗨@DuncanC - 您对如何更好地同步 AVAudioPlayer 有任何想法吗?

以上是关于如何使用 Swift 3.0 播放附加到图像数组的声音?的主要内容,如果未能解决你的问题,请参考以下文章

Swift:如何附加到 NSObject 数组?

Swift 3.0 中的 Spotify SDK:如何知道歌曲何时结束

Swift 2:为数组中的不同图像播放声音

使用 getdatainbackground 从 Parse 检索多个图像(IOS - Swift)

如何从 C 中将新的字符串元素附加到 Swift 中的数组

如何在 Swift 3.0 中使用 keysSortedByValue?