使用不同的 swift 文件播放音频
Posted
技术标签:
【中文标题】使用不同的 swift 文件播放音频【英文标题】:play audio using different swift file 【发布时间】:2017-10-16 21:01:17 【问题描述】:下面是代表音频播放器文件的代码。我正在尝试利用它在我的程序中播放声音。我不想在每个视图控制器中放置一个 AVPlayer 函数来播放可重复的声音,所以我正在寻找一种将所有内容放在一个地方并在需要时调用特定函数(音乐、点击、介绍)的方法
import UIKit
import AVFoundation
class player: UIViewController
var music:Bool = true
var sound:Bool = true
var intro:Bool = true
var soundPlayer: AVAudioPlayer?
var clickPlayer: AVAudioPlayer?
var musicPlayer : AVAudioPlayer?
get
let appDelegate = UIApplication.shared.delegate as! AppDelegate
return appDelegate.musicPlayer
set
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.musicPlayer = newValue
func playSound(title: String, format: String)
if sound == true
guard let url = Bundle.main.url(forResource: title, withExtension: format)
else return
do
try AVAudiosession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
soundPlayer = try AVAudioPlayer(contentsOf: url)
soundPlayer?.play()
catch let error
print(error.localizedDescription)
func playClick()
if sound == true
guard let url = Bundle.main.url(forResource: "click", withExtension: "mp3")
else return
do
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
let clickPlayer = try AVAudioPlayer(contentsOf: url)
clickPlayer.play()
catch let error
print(error.localizedDescription)
func playMusic()
if music == true
guard let url = Bundle.main.url(forResource: "ambientMusic", withExtension: "mp3")
else return
do
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
musicPlayer = try AVAudioPlayer(contentsOf: url)
musicPlayer?.play()
musicPlayer?.numberOfLoops = -1
catch let error
print(error.localizedDescription)
不同的文件:
@IBAction func play(_ sender: Any)
player().playClick()
performSegue(withIdentifier: "menuToIntro", sender: self)
但它不播放任何东西。只打印日志 AQDefaultDevice (173): skipping input stream 0 0 0x0
【问题讨论】:
【参考方案1】:从讨论 here 这是 Xcode 模拟器的一个错误,你应该尝试去 Edit Scheme > Run > Arguments 和 添加环境变量 OS_ACTIVITY_MODE,值 disable。
【讨论】:
好吧,我清除了控制台内的日志,是的,但这并没有解决问题【参考方案2】:好的,发现一个问题。在我的情况下,有必要将播放器存储为不会被破坏的属性或其他变量。这就是为什么播放日志 - 声音但立即终止的原因。我通过在 AppDelegate 中声明 AVAudioPlayers 来修复它
【讨论】:
以上是关于使用不同的 swift 文件播放音频的主要内容,如果未能解决你的问题,请参考以下文章