ios - 一个带有按钮的 ViewController 中的多个音频文件
问题描述
想同时播放多个音频文件ViewController
。当用户点击应该加载到Button1
和当用户点击播放相同应该播放和应该加载和播放。file1.mp3
ViewController
button2 file2.mp3
我知道如何为单个文件执行此操作,但对于多个文件,我必须ViewController
一次又一次地创建,这太难了。这是我的单个文件代码
@IBAction func buttonPressed(_ sender: UIButton) {
if player.isPlaying {
player.stop()
sender.setImage(UIImage(named:"play.png"),for: .normal)
} else {
player.delegate = self
player.play()
player.numberOfLoops = 107
sender.setImage(UIImage(named:"pause.png"),for: .normal)
}
}
do {
let audioPlayer = Bundle.main.path(forResource: "chalisa", ofType: "mp3")
try player = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: audioPlayer!) as URL)
}catch {
//ERROR
}
解决方案
您可以使用 Tableview 列出所有歌曲名称和播放按钮用于在一个视图控制器中使用多个音频文件
import AVFoundation
//MARK:- Variable Declaration
var player: AVAudioPlayer?
func playMusic() {
guard let url = Bundle.main.url(forResource: "chalisa", withExtension: "mp3") else { return }
do {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
try AVAudioSession.sharedInstance().setActive(true)
player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.mp3.rawValue)
/* iOS 10 and earlier require the following line:
player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileTypeMPEGLayer3) */
guard let player = player else { return }
player.play()
} catch let error {
print(error.localizedDescription)
}
}
推荐阅读
- amazon-web-services - AWS - 安全组报告 powershell
- sql - HiveQL:如何编写查询以根据嵌套的 JSON 数组值选择和过滤记录
- julia - Julia:将行向量转换为列向量
- java - 您可以使用 Dropwizard 的配置框架而无需启动网络服务器吗?
- javascript - 为什么 jQuery 的 .on() 可以工作,而原生 JavaScript 的 .addEventListener() 却不行?
- java - 如何从java中的对象数组的循环中打印出函数
- shopware - 自定义 cms 元素 SW6
- pandas - 木星笔记本中的 ImportError Pandas - 不查看 venv 包
- javascript - 如何在不改变容器的情况下更改数组值(对象数组内部)?javascript
- php - get_magic_quotes_gpc() 在我的代码中返回未定义