显示图像并将其链接到声音

时间:2017-06-17 10:22:33

标签: ios image audio swift3 xcode8

我正在尝试为一些孩子制作一个简单的应用程序。我想要显示照片并将该照片链接到声音。

当孩子点击“播放声音”时,它应播放代表图像的音频。

到目前为止,我只展示了我在Assets.xcassets中放置的图像,但我的问题是...... 如何将这些照片链接到某些音频文件并通过单击“播放声音”播放它们

以下是我在ViewController.swift中的代码:

 @IBOutlet weak var viewImage: UIImageView!
var images: [UIImage] = [
    UIImage(named: "photo1.png")!,
    UIImage(named: "photo2.png")!,
    UIImage(named: "photo3.png")!,
    UIImage(named: "photo4.png")!,
    UIImage(named: "photo5.png")!,
    UIImage(named: "photo6.png")!,
    UIImage(named: "photo7.png")!,
    UIImage(named: "photo8.png")!
]
var currentImagesIndex = 0

@IBAction func nextImage(_ sender: Any) {
    currentImagesIndex += 1
    let numberOfImages = images.count
    let nextImagesIndex = currentImagesIndex % numberOfImages

    viewImage.image = images[nextImagesIndex]

}

到目前为止,当我点击“下一张照片”时,它会显示一张新照片,并且工作正常。我现在想做的就是将“photo1-8”链接到音频并进行播放。

我会感激任何帮助, 拉杜

2 个答案:

答案 0 :(得分:0)

  1. 通过在顶部添加此行来导入AV Foundation:import AVFoundation
  2. 拖动主项目目录中的 MP3,WAV 文件
  3. 检查" 根据需要复制项目" &安培;应用名称在" 添加到目标"
  4. 使用此代码播放声音

    func playSound() {
    
     var btnSound: AVAudioPlayer!
    
     if let audioFileURL = Bundle.main.url(forResource: "fileName", withExtension: ".wav") {
        do{
            try btnSound = AVAudioPlayer(contentsOf: audioFileURL)
            btnSound.prepareToPlay()
            btnSound.play()
        } catch let err as NSError {
            print(err.debugDescription)
        }
     }
    
    }
    
    //call playSound function inside nextImage method
    
  5. xCode 8.3.2中 Swift 3.1 进行测试

答案 1 :(得分:0)

您应首先将所有声音文件添加到项目中。我假设你知道怎么做。添加文件后,您的项目导航器应该看起来像这样:

enter image description here

为方便起见,我会拨打您的8个声音文件sound1.mp3sound2.mp3sound3.mp3 ... sound8.mp3

在名为soundFiles的类中创建一个属性:

let soundFiles: [String] = [
    "sound1",
    "sound2",
    "sound3",
    "sound4",
    "sound5",
    "sound6",
    "sound7",
    "sound8"
]

还要创建一个名为player的属性来播放声音:

var player: AVAudioPlayer!

在“播放声音”按钮的@IBAction中,获取声音文件的文件路径并初始化播放器:

let numberOfImages = images.count
let nextImagesIndex = currentImagesIndex % numberOfImages
let soundFilePath = Bundle.main.url(forResource: soundFiles[nextImagesIndex], withExtension: ".mp3")!
player = try! AVAudioPlayer(contentsOf: soundFilePath)

然后您可以通过连续拨打prepareToPlay()play()播放声音:

player.prepareToPlay()
player.play()