显示图像并将其 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" 音频并播放。
我将不胜感激任何形式的帮助,
拉杜
- 通过在顶部添加此行来导入 AV Foundation:
import AVFoundation
- 将MP3、WAV文件拖到主项目目录
- 勾选“如果需要复制项目”和“添加到目标”中的应用名称
使用此代码播放声音
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.mp3
、sound2.mp3
、sound3.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()
我正在尝试为一些孩子制作一个简单的应用程序。我想显示一张照片,然后 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" 音频并播放。
我将不胜感激任何形式的帮助, 拉杜
- 通过在顶部添加此行来导入 AV Foundation:
import AVFoundation
- 将MP3、WAV文件拖到主项目目录
- 勾选“如果需要复制项目”和“添加到目标”中的应用名称
使用此代码播放声音
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.mp3
、sound2.mp3
、sound3.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()