UIスライダを実装し音量を調整したい
現在教本の内容を元に拡張機能(UIスライダの音源の音量調整)
を実装しようとしています。
解決したい課題としては、現在音楽を再生(play()メソッドを実行)してから音量を調整することはできるのですが、
音楽再生する前にスライダで音量を調整しようとすると「Thread 1: EXC_BAD_ACCESS (code=1, address=0x48)」というエラーが出てきて処理が止まってしまいます。
半日かけてエラー解決に取り組んだのですが現状の自分の知識では解決の糸口が見えないため
質問させて頂きました。
どなたかご教示頂けると幸いです。
コードは下記に転載します。
足りない情報があれば追記致します。
import UIKit
import AVFoundation
import MediaPlayer
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func prepareToPlay() -> Bool {
return true
}
//シンバルの音源ファイル指定
let cymbalPath = Bundle.main.bundleURL.appendingPathComponent("cymbal.mp3")
//シンバル用のプレイヤーインスタンスを生成
var cymbalPlayer = AVAudioPlayer()
//ギターの音源ファイル指定
let guitarPath = Bundle.main.bundleURL.appendingPathComponent("guitar.mp3")
//シンバル用のプレイヤーインスタンスを生成
var guitarPlayer = AVAudioPlayer()
//バック音楽の音源ファイル指定
let backMusicPath = Bundle.main.bundleURL.appendingPathComponent("backmusic.mp3")
//バック音楽のプレイヤーインスタンスを生成
var backMusicPlayer = AVAudioPlayer()
@IBAction func cymbal(_ sender: Any) {
soundPlayer(player: &cymbalPlayer, path: cymbalPath, count: 0)
}
@IBAction func guitar(_ sender: Any) {
soundPlayer(player: &guitarPlayer, path: guitarPath, count: 1)
}
@IBAction func play(_ sender: Any) {
soundPlayer(player: &backMusicPlayer, path: backMusicPath, count: -1)
}
// stopボタンがタップされた時の処理
@IBAction func stop(_ sender: Any) {
soundPlayer(player: &backMusicPlayer, path: backMusicPath, count: 0)
backMusicPlayer.stop()
}
@IBOutlet weak var volume: UISlider!
@IBAction func volumeController(_ sender: UISlider) {
backMusicPlayer.volume = volume.value
}
//共通のプレイヤー再生処理
fileprivate func soundPlayer(player:inout AVAudioPlayer,path:URL, count:Int) {
do {
player = try AVAudioPlayer(contentsOf: path, fileTypeHint: nil)
player.play()
} catch {
print("エラーが発生しました!")
}
}
}