如何使用 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 3.0 中的 Spotify SDK:如何知道歌曲何时结束