質問編集履歴

3

コード

2018/11/19 14:30

投稿

torkia
torkia

スコア24

test CHANGED
File without changes
test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  バックグラウンド再生させるために、以下のコードをmp3を再生させるメソッド内の audioPlayer.play()の手前で記述。
22
22
 
23
- (capabilitiesでBackground Modesの設定済み)
23
+
24
24
 
25
25
  try?AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback,
26
26
 
@@ -30,16 +30,14 @@
30
30
 
31
31
 
32
32
 
33
+ (「capabilities」で「Background Modes」をONにして、「Audio,AirPlay, and Picture in Picture」にチェック済み)
34
+
33
35
 
34
36
 
35
37
  ### できていること・できないこと
36
38
 
37
39
  アプリをバックグラウンドにした時点では、再生は継続されているのですが、自動ロック(スリープ状態)に入ると、スリープ状態に入ったときのページのデータ分が再生し終えたら、次ページにいかず、終了してしまいます。
38
40
 
39
- ちなみに、終了してしまってもiPhoneを触るなどして、ロック解除画面が表示されると、次ページのデータは再生され始めます。(終了してから5秒以内ぐらいに触れれば次ページmp3が再生されるが、10秒後ぐらいに触れても次ページmp3は再生されない)
40
-
41
-
42
-
43
41
  どうやら、スリープ状態にならなければ、バックグラウンド再生は継続されるみたいなのですが、スリープ状態でも再生を継続させたいです。
44
42
 
45
43
 
@@ -106,6 +104,10 @@
106
104
 
107
105
  autoPlayNext = userDefaults.integer(forKey: "autoPlayNext")
108
106
 
107
+
108
+
109
+
110
+
109
111
  // 自動連続再生
110
112
 
111
113
  if autoPlayNext == 1 {
@@ -114,9 +116,123 @@
114
116
 
115
117
  let index = 0
116
118
 
119
+ soundPlay(index: index) // mp3再生メソッド呼出し
120
+
121
+ userDefaults.set(0, forKey: "autoPlayNext")
122
+
123
+ }
124
+
125
+ }
126
+
127
+ }
128
+
129
+
130
+
131
+ // ボタンタップイベント
132
+
133
+ func buttonEventSound(sender: UIButton) {
134
+
135
+ let index = sender.tag
136
+
137
+ soundPlay(index: index)
138
+
139
+ }
140
+
141
+
142
+
143
+ // mp3再生メソッド
144
+
145
+ func soundPlay(index: Int) {
146
+
147
+ let audioPath = Bundle.main.path(forResource: "(soundArray[index])", ofType:"mp3")!
148
+
149
+ let audioUrl = URL(fileURLWithPath: audioPath)
150
+
151
+
152
+
153
+ do {
154
+
155
+ audioPlayer = try AVAudioPlayer(contentsOf: audioUrl)
156
+
157
+ audioPlayer.delegate = self
158
+
159
+ // バックグラウンド再生
160
+
161
+ try?AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: .mixWithOthers)
162
+
163
+ try? AVAudioSession.sharedInstance().setActive(true)
164
+
165
+ audioPlayer.prepareToPlay()
166
+
167
+ audioPlayer.enableRate = true
168
+
169
+ audioPlayer.rate = soundRate
170
+
171
+ } catch {
172
+
173
+ print("エラー")
174
+
175
+ }
176
+
177
+ (略)
178
+
179
+ audioPlayer.play()
180
+
181
+ currentPlayer = audioPlayer
182
+
183
+ currentButtonIndex = index
184
+
185
+ }
186
+
187
+
188
+
189
+
190
+
191
+ // 音楽再生が成功した時に呼ばれるメソッド
192
+
193
+ func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
194
+
195
+ currentPlayer = nil
196
+
197
+ if autoPlaySetting == 1 { // 自動再生するとき
198
+
199
+ let index = currentButtonIndex! + 1
200
+
201
+ if index < soundArray.count {
202
+
117
203
  soundPlay(index: index)
118
204
 
205
+ if autoPlayScrollSetting == 1 { // 自動スクロールするとき
206
+
207
+ (略)
208
+
209
+ }
210
+
211
+ if autoPlayNextSetting == 1 { // 全ページ自動再生するなら
212
+
213
+ if index >= soundArray.count { // 最後のボタンの再生が終わったら
214
+
215
+ if pageIndex < 19 { // 19までは次ページも自動連続再生する
216
+
217
+ let pvc = self.parent as! PageViewController
218
+
219
+ let nextIndex = pageIndex + 1
220
+
221
+ pvc.setViewControllers([pvc.contentVCs[nextIndex]], direction: .forward, animated: true, completion: nil)
222
+
223
+ pvc.currentIndex += 1
224
+
225
+ autoPlayNext = 1 // 次ページも自動再生させる
226
+
119
- userDefaults.set(0, forKey: "autoPlayNext")
227
+ userDefaults.set(autoPlayNext, forKey: "autoPlayNext")
228
+
229
+ } else if pageIndex == 19 {
230
+
231
+ print("音終了")
232
+
233
+ }
234
+
235
+ }
120
236
 
121
237
  }
122
238
 
@@ -126,118 +242,4 @@
126
242
 
127
243
 
128
244
 
129
- // ボタンタップイベント
130
-
131
- func buttonEventSound(sender: UIButton) {
132
-
133
- let index = sender.tag
134
-
135
- soundPlay(index: index)
136
-
137
- }
138
-
139
-
140
-
141
- // mp3再生メソッド
142
-
143
- func soundPlay(index: Int) {
144
-
145
- let audioPath = Bundle.main.path(forResource: "(soundArray[index])", ofType:"mp3")!
146
-
147
- let audioUrl = URL(fileURLWithPath: audioPath)
148
-
149
-
150
-
151
- do {
152
-
153
- audioPlayer = try AVAudioPlayer(contentsOf: audioUrl)
154
-
155
- audioPlayer.delegate = self
156
-
157
- // バックグラウンド再生
158
-
159
- try?AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: .mixWithOthers)
160
-
161
- try? AVAudioSession.sharedInstance().setActive(true)
162
-
163
- audioPlayer.prepareToPlay()
164
-
165
- audioPlayer.enableRate = true
166
-
167
- audioPlayer.rate = soundRate
168
-
169
- } catch {
170
-
171
- print("エラー")
172
-
173
- }
174
-
175
- (略)
176
-
177
- audioPlayer.play()
178
-
179
- currentPlayer = audioPlayer
180
-
181
- currentButtonIndex = index
182
-
183
- }
184
-
185
-
186
-
187
-
188
-
189
- // 音楽再生が成功した時に呼ばれるメソッド
190
-
191
- func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
192
-
193
- currentPlayer = nil
194
-
195
- if autoPlaySetting == 1 { // 自動再生するとき
196
-
197
- let index = currentButtonIndex! + 1
198
-
199
- if index < soundArray.count {
200
-
201
- soundPlay(index: index)
202
-
203
- if autoPlayScrollSetting == 1 { // 自動スクロールするとき
204
-
205
- (略)
206
-
207
- }
208
-
209
- if autoPlayNextSetting == 1 { // 全ページ自動再生するなら
210
-
211
- if index >= soundArray.count { // 最後のボタンの再生が終わったら
212
-
213
- if pageIndex < 19 { // 19までは次ページも自動連続再生する
214
-
215
- let pvc = self.parent as! PageViewController
216
-
217
- let nextIndex = pageIndex + 1
218
-
219
- pvc.setViewControllers([pvc.contentVCs[nextIndex]], direction: .forward, animated: true, completion: nil)
220
-
221
- pvc.currentIndex += 1
222
-
223
- autoPlayNext = 1 // 次ページも自動再生させる
224
-
225
- userDefaults.set(autoPlayNext, forKey: "autoPlayNext")
226
-
227
- } else if pageIndex == 19 {
228
-
229
- print("音終了")
230
-
231
- }
232
-
233
- }
234
-
235
- }
236
-
237
- }
238
-
239
- }
240
-
241
-
242
-
243
245
  ```

2

コード

2018/11/19 14:30

投稿

torkia
torkia

スコア24

test CHANGED
File without changes
test CHANGED
@@ -44,17 +44,7 @@
44
44
 
45
45
 
46
46
 
47
- 参考にしたサイトなど
47
+
48
-
49
- [[Swift]バックグラウンドでも処理を続ける方法](https://qiita.com/SatoTakeshiX/items/8e1489560444a63c21e7)
50
-
51
- [[Swift] iOSのバックグラウンド処理について](https://qiita.com/teamhimeH/items/51efb4fc68d3f1d2ebb9)
52
-
53
- [Swift でミュージックを取り込むアプリを作る時のノウハウ 5 つ](https://qiita.com/pika_shi/items/838315c7c8e264c9bb97)
54
-
55
- [かゆいところに手が届きそうな〜](https://qiita.com/yimajo/items/c30c4d5f5eab06172028)
56
-
57
- 〜などなど・・・
58
48
 
59
49
 
60
50
 

1

コード記述

2018/11/14 14:12

投稿

torkia
torkia

スコア24

test CHANGED
File without changes
test CHANGED
@@ -34,7 +34,11 @@
34
34
 
35
35
  ### できていること・できないこと
36
36
 
37
- アプリをバックグラウンドにした時点では、再生は継続されているのですが、自動ロック(スリープ状態)に入ると、スリープ状態に入ったときのページのデータ分が再生し終えたら、次ページにいかず、終了してしまいます。終了してしまっても、iPhoneを触るなどして、ロック解除画面が表示されると、次ページのデータは再生され始めます。
37
+ アプリをバックグラウンドにした時点では、再生は継続されているのですが、自動ロック(スリープ状態)に入ると、スリープ状態に入ったときのページのデータ分が再生し終えたら、次ページにいかず、終了してしまいます。
38
+
39
+ ちなみに、終了してしまってもiPhoneを触るなどして、ロック解除画面が表示されると、次ページのデータは再生され始めます。(終了してから5秒以内ぐらいに触れれば次ページmp3が再生されるが、10秒後ぐらいに触れても次ページmp3は再生されない)
40
+
41
+
38
42
 
39
43
  どうやら、スリープ状態にならなければ、バックグラウンド再生は継続されるみたいなのですが、スリープ状態でも再生を継続させたいです。
40
44