显示图像并将其 link 成声音

show an image and link it to a sound

我正在尝试为一些孩子制作一个简单的应用程序。我想显示一张照片,然后 link 将那张照片发声。

当孩子点击 "Play Sound" 时,它应该播放代表图像的音频。

到目前为止,我只展示了我放在 Assets.xcassets 中的图像,但我的问题是.. 我怎样才能 link 将这些照片制作成一些音频文件并通过单击 "Play Sound"

来播放它们

这是我在 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]

}

到目前为止,当我单击“下一张照片”时,它会显示一张新照片,而且一切正常。我现在想做的就是 link 和 "photo1-8" 音频并播放。

我将不胜感激任何形式的帮助, 拉杜

  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
    

xCode 8.3.2

中使用 Swift 3.1 进行了测试

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

为了方便起见,我将你的8个声音文件分别命名为sound1.mp3sound2.mp3sound3.mp3 ... sound8.mp3.

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

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

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

var player: AVAudioPlayer!

在"Play Sound"按钮的@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()