要望全て反映させると「コード依頼」への回答となり、質問も回答も望ましい形ではないため、とりあえずヒントになりそうなコードだけご提示します。
以下の例では、3つのボタンを追加し、押したボタンによって曲が選択できるようになっています。
現状では、曲選択ボタンを押すと現時点で演奏されている曲は停止します。
また、スタートボタンを押すと、表示が選択状態(isSelected = true
)となりますが、それ以外にもバックグラウンドの色を変更するなど、いろいろ考えられると思います。
下記のコードをお試しになり、またisSelected
やbackgroundColor = .red
などを変更することで、少しでも期待されるようなアプリになればと思います。
プログラミングは実験の繰り返しなので、ぜひいろいろ変更してみて、その原理をご理解頂ければと思います。
ちなみに、下記のコードはもうすこし簡潔に書けますし、インスタンスの使い回しももっと別の方法がありそうですが、今の時点では触れずにおきます。
Swift
1import UIKit
2import AVFoundation
3
4class ViewController: UIViewController {
5 // MARK: 配列に曲のURLを入れておく
6 let musicPaths = [
7 Bundle.main.bundleURL.appendingPathComponent("01 Positron.mp3"),
8 Bundle.main.bundleURL.appendingPathComponent("3562.mp3"),
9 Bundle.main.bundleURL.appendingPathComponent("3866.mp3")
10 ]
11 // MARK: どの曲が選ばれているのかを示す変数
12 var selectedMusic = 0
13
14 @IBOutlet weak var startButton: UIButton!
15 @IBOutlet weak var stopButton: UIButton!
16
17 var musicPlayer = AVAudioPlayer()
18
19 @IBOutlet weak var labelRate: UILabel!
20 @IBOutlet weak var sliderRate: UISlider!
21
22 @IBAction func sliderRateMove(_ sender: UISlider) {
23 musicPlayer.rate = sliderRate.value
24 labelRate.text = String(format: "%.1f倍速",sliderRate.value)
25 }
26
27 override func viewDidLoad() {
28 super.viewDidLoad()
29 // Do any additional setup after loading the view.
30 musicPlayer = AVAudioPlayer()
31 musicPlayer.enableRate = true
32
33 // MARK: STOPボタンを選択できないようにする
34 stopButton.isEnabled = false
35 }
36
37 @IBAction func start(_ sender: Any) {
38 do {
39 // 配列に入っている URL のうち、選択している曲の URL を渡す
40 musicPlayer = try AVAudioPlayer(contentsOf: musicPaths[selectedMusic])
41 musicPlayer.enableRate = true
42 } catch {
43 print("エラー")
44 }
45
46 //numberOfLoopsに-1を指定すると無限ループする。
47 musicPlayer.numberOfLoops = -1
48 musicPlayer.play()
49
50 // MARK: STARTボタンを選択された状態にする
51 startButton.isSelected = true
52 //startButton.backgroundColor = .red
53 // MARK: STOP ボタンを選択できるようにする
54 stopButton.isEnabled = true
55
56 }
57
58 @IBAction func stop(_ sender: Any) {
59 musicPlayer.stop()
60 // MARK: START ボタンの状態を戻す
61 startButton.isSelected = false
62 // MARK: STOP ボタンを選択できないようにする
63 stopButton.isEnabled = false
64 }
65
66 // MARK: 押したボタンによって選択する曲を変える
67 // 今回は曲を変更したら現在演奏している曲は停止させる
68 @IBAction func selectOne(_ sender: Any) {
69 selectedMusic = 0
70 musicPlayer.stop()
71 }
72
73 @IBAction func selectTwo(_ sender: Any) {
74 selectedMusic = 1
75 musicPlayer.stop()
76 }
77
78 @IBAction func selectThree(_ sender: Any) {
79 selectedMusic = 2
80 musicPlayer.stop()
81 }
82}