質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1216閲覧

ボタンを押して違うMP3ファイルを選択し再生できるようにしたい。

satoshi2019

総合スコア13

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/06/07 00:04

前回投稿させていただいたものです。
3種類(それ以上)のMP3ファイルを選択して演奏できるようにしたいです。
1イメージ画像のように
song1、song2、song3のボタンのどれかを押すことで
MP3ファイルを選択できます。(選択中はボタンの色が変わればベターです。)
2PLAYボタン、STOPボタンで選択したファイルをが再生・ストップが可能です。
3再生中・ストップの間にsong1〜3 ボタンを押せば再生が止まり、異なるsongファイルが選択でき、再生・ストップが可能になります。

以上をできるようにしたいです。よろしくお願いします。

イメージ説明

現在のところのコードは以下になります。

import UIKit
import AVFoundation

class ViewController: UIViewController {

let musicPath = Bundle.main.bundleURL.appendingPathComponent("samba.mp3") var musicPlayer = AVAudioPlayer() @IBOutlet weak var labelRate: UILabel! @IBOutlet weak var sliderRate: UISlider! @IBAction func sliderRateMove(_ sender: UISlider) { musicPlayer.rate = sliderRate.value labelRate.text = String(format: "%.1f倍速",sliderRate.value) } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. musicPlayer = AVAudioPlayer() musicPlayer.enableRate = true } @IBAction func start(_ sender: Any) { do { musicPlayer = try AVAudioPlayer(contentsOf: musicPat musicPlayer.enableRate = true } catch { print("エラー") } //numberOfLoopsに-1を指定すると無限ループする。 musicPlayer.numberOfLoops = -1 musicPlayer.play() } @IBAction func stop(_ sender: Any) { musicPlayer.stop() }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TsukubaDepot

2020/06/07 00:24

次回からはぜひコードを```で囲んでいただけますでしょうか。 ```Swift 実際のコード ``` という感じで使えます(「ここに言語名を入力」というところを「Swift」と書き換えます)。
guest

回答1

0

ベストアンサー

要望全て反映させると「コード依頼」への回答となり、質問も回答も望ましい形ではないため、とりあえずヒントになりそうなコードだけご提示します。

以下の例では、3つのボタンを追加し、押したボタンによって曲が選択できるようになっています。

現状では、曲選択ボタンを押すと現時点で演奏されている曲は停止します。

また、スタートボタンを押すと、表示が選択状態(isSelected = true)となりますが、それ以外にもバックグラウンドの色を変更するなど、いろいろ考えられると思います。

下記のコードをお試しになり、またisSelectedbackgroundColor = .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}

投稿2020/06/07 00:22

編集2020/06/07 08:38
TsukubaDepot

総合スコア5086

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

satoshi2019

2020/06/07 03:38

ありがとうございます。次回より気をつけます。
satoshi2019

2020/06/07 08:32

できました。ありがとうございました。これからも色々と試しながらやってみます。またよろしくお願いします。
TsukubaDepot

2020/06/07 08:38

動いたようでよかったです。 ここから先いろいろ発展が考えられるので、なにかお助けできればと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問