【초보자용】Swift3로 폭속 코딩 그 5(사운드와 델리게이트)

Playground에 의한 코딩입니다.
첫 분은 아래를 참고하십시오.

제1회: 【초보자용】Swift3로 폭속 코딩 그 1(화면 작성과 Snippets의 사용법)
제2회: 【초보자용】Swift3로 폭속 코딩 그 2(UIView와 문자 표시)
제3회: 【초보자용】Swift3로 폭속 코딩 그 3(버튼 클릭과 이벤트)
제4회: 【초보자용】Swift3로 폭속 코딩 그 4(화상과 애니메이션)

소스 코드



이번의 모든 소스 코드입니다.
import UIKit
import AVFoundation

class ViewController: UIViewController,AVAudioPlayerDelegate {

    var audioPlayer : AVAudioPlayer!
    var button : UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()


        // 再生する音源のURLを生成
        let soundFilePath : String = Bundle.main.path(forResource: "sound", ofType: "mp3")!
        let fileURL : URL = URL(fileURLWithPath: soundFilePath)


        do{
            // AVAudioPlayerのインスタンス化
            audioPlayer = try AVAudioPlayer(contentsOf: fileURL)

            // AVAudioPlayerのデリゲートをセット
            audioPlayer.delegate = self


        }
        catch{
        }

        //ボタンの生成
        button = UIButton()
        button.frame = CGRect(x:0,y:0,width:100, height:30)
        button.setTitle("▶︎", for: UIControlState.normal)
        button.setTitleColor(UIColor.black, for: .normal)
        button.backgroundColor = UIColor.green
        button.layer.masksToBounds = true
        button.layer.cornerRadius = 10.0
        self.view.addSubview(button)
        button.addTarget(self, action: #selector(self.onClick(_:)), for: UIControlEvents.touchUpInside)

    }

    // ボタンがタップされた時に呼ばれるメソッド
    func onClick(_ sender: UIButton) {

        // playingプロパティがtrueであれば音源再生中
        if audioPlayer.isPlaying == true {

            // audioPlayerを一時停止
            audioPlayer.pause()
            sender.setTitle("▶︎", for: .normal)
        } else {

            // audioPlayerの再生
            audioPlayer.play()
            sender.setTitle("■", for: .normal)
        }
    }

    // 音楽再生が成功した時に呼ばれるメソッド
    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
        print("Music Finish")

        // 再度myButtonを"▶︎"に設定
        button.setTitle("▶︎", for: .normal)
    }

    // デコード中にエラーが起きた時に呼ばれるメソッド
    func audioPlayerDecodeErrorDidOccur(_ player: AVAudioPlayer, error: Error?) {
        print("Error")
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)


    }

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

}

let viewController = ViewController()
viewController.view.backgroundColor = UIColor.white


import PlaygroundSupport


PlaygroundPage.current.liveView = viewController
PlaygroundPage.current.needsIndefiniteExecution = true

미리보기



재생 버튼을 누르면 사운드를 재생합니다.



대리자



delegate는 처리를 양도하는 기능입니다.
개념적으로는 Java와의 인터페이스에 가깝습니다.
delegate를 상속한 클래스는 delegate 메서드를 구현해야 합니다. (optional 메서드는 구현 선택 사항입니다)
이번에는 AVAudioPlayer 클래스의 이벤트 처리를 위해 AVAudioPlayerDelegate를 사용합니다.
class ViewController: UIViewController,AVAudioPlayerDelegate {

ViewDidLoad에서 대리자를 설정합니다.
// AVAudioPlayerのデリゲートをセット
audioPlayer.delegate = self

이번에는 audioPlayerDidFinishPlaying 메서드와 audioPlayerDecodeErrorDidOccur 메서드를 구현합니다.
// 音楽再生が成功した時に呼ばれるメソッド
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) 
// デコード中にエラーが起きた時に呼ばれるメソッド
func audioPlayerDecodeErrorDidOccur(_ player: AVAudioPlayer, error: Error?) 

소리



사운드 주변의 라이브러리를 사용하려면 AVFoundation 프레임워크를 가져옵니다.
import AVFoundation

사운드 파일(sound.mp3)을 추가합니다.
적절한 사운드 파일을 준비하십시오.
추가 방법은 이미지와 동일하므로 제 4 회를 참조하십시오



사운드 파일을 로드합니다.
// 再生する音源のURLを生成
let soundFilePath : String = Bundle.main.path(forResource: "sound", ofType: "mp3")!
let fileURL : URL = URL(fileURLWithPath: soundFilePath)


do{
    // AVAudioPlayerのインスタンス化
    audioPlayer = try AVAudioPlayer(contentsOf: fileURL)            
    // AVAudioPlayerのデリゲートをセット
    audioPlayer.delegate = self            

}
catch{

}

버튼을 누르면 onClick 메서드가 호출되고,
사운드를 재생합니다. 재생중이라면 일시정지가 됩니다.
버튼과 컨트롤의 이벤트 처리에 관해서는 제3회를 참고해 주세요
// playingプロパティがtrueであれば音源再生中
if audioPlayer.isPlaying == true {

   // audioPlayerを一時停止
   audioPlayer.pause()
   sender.setTitle("▶︎", for: .normal)

} else {

   // audioPlayerの再生
   audioPlayer.play()
   sender.setTitle("■", for: .normal)
}


재생이 끝나면 대리자의 메서드가 콜백됩니다.
델리게이트의 메소드는 이렇게 콜백 메소드가 대부분입니다.
// 音楽再生が成功した時に呼ばれるメソッド
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) 

좋은 웹페이지 즐겨찾기