포스트

Xylophone (1)

  1. UIbutton을 만들어준다. (control & drag)

  2. 그리고 버튼을 눌렀을때 소리가 나는 코드를 작성해준다. (stackflow에 있다) ```swift import UIKit import AVFoundation

class ViewController: UIViewController {

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var player: AVAudioPlayer!

override func viewDidLoad() {
    super.viewDidLoad()
}

@IBAction func keyPressed(_ sender: UIButton) {
    playSound()
}

func playSound() {
    let url = Bundle.main.url(forResource: "C", withExtension: "wav")
    player = try! AVAudioPlayer(contentsOf: url!)
    player.play()
            
} }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
여러 버튼을 하나의 IBaction으로 이을 수 있다.

![](https://velog.velcdn.com/images/haroldfromk/post/e7f445e3-8dda-4544-8be4-4f7c7bb6b4cc/image.png){: width="50%" height="50%"}

![](https://velog.velcdn.com/images/haroldfromk/post/12281840-a385-4513-8a90-55df4f43cf23/image.png)

print(sender....)를 통해
![](https://velog.velcdn.com/images/haroldfromk/post/3da56299-26db-4b3e-8a68-028f8998bc09/image.png){: width="50%" height="50%"}
버튼을 눌렀을때 어떤 값 각 버튼의 title을 확인 할 수있다.

---
그렇다면 현재 func playsound에 forResource가 C로 되어있어 어떤 버튼을 눌러도 C.wav의 file만 재생이된다.

위의 sender.currentTitle을 이용하여, 각 버튼을 눌렀을때 그에 해당하는 음의 파일이 재생되도록 만들어 보자.

---
before
```swift
import UIKit
import AVFoundation

class ViewController: UIViewController {
    
    var player: AVAudioPlayer!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func keyPressed(_ sender: UIButton) {
        
        print(sender.currentTitle)
        
        playSound()
    }
    
    func playSound() {
        let url = Bundle.main.url(forResource: "C", withExtension: "wav")
        player = try! AVAudioPlayer(contentsOf: url!)
        player.play()
                
    }
}


after (내가작성한 코드)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import UIKit
import AVFoundation

class ViewController: UIViewController {
    
    var player: AVAudioPlayer!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func keyPressed(_ sender: UIButton) {
        
        //print(sender.currentTitle)
        
        playSound(sender)
    }
    
    func playSound(_ sender: UIButton) {
        let url = Bundle.main.url(forResource: sender.currentTitle, withExtension: "wav")
        player = try! AVAudioPlayer(contentsOf: url!)
        player.play()
                
    }
}


after(강의에서의 코드)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import UIKit
import AVFoundation

class ViewController: UIViewController {
    
    var player: AVAudioPlayer!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func keyPressed(_ sender: UIButton) {
        
        //print(sender.currentTitle)
        
        playSound(soundName: sender.currentTitle!)
    }
    
    func playSound(soundName: String) {
        let url = Bundle.main.url(forResource: soundName, withExtension: "wav")
        player = try! AVAudioPlayer(contentsOf: url!)
        player.play()
                
    }
}

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.