回答編集履歴

6

訂正

2020/06/19 05:35

投稿

退会済みユーザー
test CHANGED
@@ -8,13 +8,11 @@
8
8
 
9
9
 
10
10
 
11
- で、原因startとstop実装の仕方だと思います。start2回タップすとおかなる
11
+ で、不具合音を鳴らす画面から他画面に遷移時、音止め処理を実行しない場合に起こよう
12
12
 
13
- 適当でおすすめしませんが↓回避はできま
13
+ きちんと音を止める処理をれば、遷移しても正常に作動るようです。
14
14
 
15
- MediaPlayerのループの制御の仕方調べほうが後々ると思います。
15
+ goMenu通らずにもどっり、他画面遷移するとかの処理が入っているとうので、原因はそのへんではなでしょうか?
16
-
17
-
18
16
 
19
17
 
20
18
 
@@ -22,61 +20,65 @@
22
20
 
23
21
 
24
22
 
25
- class SoundViewController: UIViewController {
23
+ class SViewContoroller: UIViewController {
26
-
27
- // アウトレットをつないで
28
-
29
- @IBOutlet weak var startBtn: UIButton!
30
24
 
31
25
 
32
26
 
33
27
  var soundID: Int = 1000
34
28
 
35
-
36
29
 
37
- @IBAction func startBtnDidTap() {
38
30
 
39
- let systemSoundID = SystemSoundID(soundID)
31
+ override func viewDidAppear(_ animated: Bool) {
40
32
 
41
- AudioServicesAddSystemSoundCompletion(systemSoundID, nil, nil, { (systemSoundID, nil) -> Void in
33
+ super.viewDidAppear(animated)
42
34
 
43
- AudioServicesPlaySystemSound(systemSoundID)
35
+ self.startSystemSound()
44
-
45
- }, nil)
46
-
47
- AudioServicesPlaySystemSound(systemSoundID)
48
-
49
-      // 再生中はタップできなくする
50
-
51
- startBtn.isEnabled = false
52
36
 
53
37
  }
54
38
 
55
39
 
56
40
 
57
- @IBAction func stopBtnDidTap() {
41
+
58
42
 
43
+ @IBAction func transition() {
44
+
59
- stopSystemSound()
45
+ self.stopSystemSound()
46
+
47
+ let fVC = self.storyboard?.instantiateViewController(withIdentifier: "FViewController") as! FViewController
48
+
49
+ self.present(fVC, animated: true, completion: nil)
50
+
51
+
60
52
 
61
53
  }
62
54
 
63
55
 
64
56
 
57
+ func startSystemSound() {
58
+
59
+ let systemSoundID = SystemSoundID(soundID)
60
+
61
+ AudioServicesAddSystemSoundCompletion(systemSoundID, nil, nil, { (systemSoundID, nil) -> Void in
62
+
63
+ AudioServicesPlaySystemSound(systemSoundID)
64
+
65
+ }, nil)
66
+
67
+ AudioServicesPlaySystemSound(systemSoundID)
68
+
69
+ }
70
+
71
+
72
+
65
73
  func stopSystemSound() {
74
+
75
+ // 画面遷移する際に必ずこの処理を通せば音の再生に限定すれば支障はなさそう
66
76
 
67
77
  AudioServicesRemoveSystemSoundCompletion(SystemSoundID(soundID))
68
78
 
69
- AudioServicesDisposeSystemSoundID(SystemSoundID(soundID))
79
+ //AudioServicesDisposeSystemSoundID(SystemSoundID(soundID))
70
-
71
-      // 停止させたらタップできるようにする
72
-
73
- startBtn.isEnabled = true
74
80
 
75
81
  }
76
-
77
-
78
-
79
-    
80
82
 
81
83
  }
82
84
 

5

訂正

2020/06/19 05:35

投稿

退会済みユーザー
test CHANGED
@@ -9,3 +9,75 @@
9
9
 
10
10
 
11
11
  で、原因はstartとstopの実装の仕方だと思います。startを2回タップするとおかしくなるので。
12
+
13
+ 適当でおすすめしませんが↓で回避はできますね。
14
+
15
+ MediaPlayerのループの制御の仕方を調べたほうが後々のたになると思います。
16
+
17
+
18
+
19
+
20
+
21
+ ```swuft
22
+
23
+
24
+
25
+ class SoundViewController: UIViewController {
26
+
27
+ // アウトレットをつないで
28
+
29
+ @IBOutlet weak var startBtn: UIButton!
30
+
31
+
32
+
33
+ var soundID: Int = 1000
34
+
35
+
36
+
37
+ @IBAction func startBtnDidTap() {
38
+
39
+ let systemSoundID = SystemSoundID(soundID)
40
+
41
+ AudioServicesAddSystemSoundCompletion(systemSoundID, nil, nil, { (systemSoundID, nil) -> Void in
42
+
43
+ AudioServicesPlaySystemSound(systemSoundID)
44
+
45
+ }, nil)
46
+
47
+ AudioServicesPlaySystemSound(systemSoundID)
48
+
49
+      // 再生中はタップできなくする
50
+
51
+ startBtn.isEnabled = false
52
+
53
+ }
54
+
55
+
56
+
57
+ @IBAction func stopBtnDidTap() {
58
+
59
+ stopSystemSound()
60
+
61
+ }
62
+
63
+
64
+
65
+ func stopSystemSound() {
66
+
67
+ AudioServicesRemoveSystemSoundCompletion(SystemSoundID(soundID))
68
+
69
+ AudioServicesDisposeSystemSoundID(SystemSoundID(soundID))
70
+
71
+      // 停止させたらタップできるようにする
72
+
73
+ startBtn.isEnabled = true
74
+
75
+ }
76
+
77
+
78
+
79
+    
80
+
81
+ }
82
+
83
+ ```

4

訂正

2020/06/18 04:05

投稿

退会済みユーザー
test CHANGED
@@ -5,3 +5,7 @@
5
5
 
6
6
 
7
7
  ![イメージ説明](c55c91469d726fcfcec161e5edd8e2f7.png)
8
+
9
+
10
+
11
+ で、原因はstartとstopの実装の仕方だと思います。startを2回タップするとおかしくなるので。

3

訂正

2020/06/18 03:38

投稿

退会済みユーザー
test CHANGED
@@ -1,7 +1,7 @@
1
+ 音はなりますね。
2
+
1
- https://developer.apple.com/documentation/audiotoolbox/system_sound_services#//apple_ref/doc/uid/TP40007916
3
+ 私なりに解釈すると[こうなりますが](https://github.com/tyobigoro/tPresent)、メモリの限界に挑戦するものを作りたくはありませんね。これでいいのでしょうか?
2
4
 
3
5
 
4
6
 
5
- 同時に一個しか再生できないって。
6
-
7
- で、遷移で永遠に進んでるからじゃないの?
7
+ ![イメージ説明](c55c91469d726fcfcec161e5edd8e2f7.png)

2

訂正

2020/06/18 03:21

投稿

退会済みユーザー
test CHANGED
@@ -4,4 +4,4 @@
4
4
 
5
5
  同時に一個しか再生できないって。
6
6
 
7
- で、繊維で永遠に進んでるからじゃないの?
7
+ で、遷移で永遠に進んでるからじゃないの?

1

訂正

2020/06/18 02:39

投稿

退会済みユーザー
test CHANGED
@@ -1,23 +1,7 @@
1
- 戻ったら鳴らなくなるってのは、SoundViewControllerdismissされるからじゃないですか?
1
+ https://developer.apple.com/documentation/audiotoolbox/system_sound_services#//apple_ref/doc/uid/TP40007916
2
-
3
- SoundViewControllerに↓でも貼って消えてることを確認してください。
4
2
 
5
3
 
6
4
 
7
- ```swift
5
+ 同時に一個しか再生できないって。
8
6
 
9
- override func viewDidDisappear(_ animated: Bool) {
10
-
11
- super.viewDidDisappear(animated)
12
-
13
- print("消えました")
14
-
15
- }
16
-
17
- ```
18
-
19
-
20
-
21
- 音を鳴らし続けたいなら、消えないところで鳴らすようにしてください。
22
-
23
- たとえばMenuViewController
7
+ 繊維で永遠に進んでるからじゃないの?