[swift] 사운드 재생 완료 후 실행할 액션 설정하기

사운드를 재생하는 앱을 개발 중이라면, 사운드 재생이 완료된 후에 특정한 액션을 실행하고 싶을 수 있습니다. 이를 위해 Swift에서는 AVAudioPlayerDelegate 프로토콜을 사용하여 사운드 재생이 완료된 후에 원하는 동작을 수행할 수 있습니다. 이번 글에서는 이에 대해 알아보겠습니다.

1. AVAudioPlayerDelegate 프로토콜 구현

먼저, AVAudioPlayerDelegate 프로토콜을 구현하여 사운드 재생이 완료된 후에 호출될 메서드를 작성해야 합니다. 아래와 같은 메서드를 작성하여야 합니다.

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
    // 재생 완료 후 실행할 액션을 작성합니다.
}

이 메서드는 사운드 재생이 완료된 후에 자동으로 호출되며, player 매개변수에는 재생이 완료된 사운드를 재생하는 AVAudioPlayer 인스턴스가 전달됩니다. flag 매개변수는 사운드 재생이 성공적으로 완료되었는지를 나타내는 불리언 값입니다.

2. AVAudioPlayer 인스턴스 생성 및 delegate 설정

사운드를 재생하기 위해 AVAudioPlayer 클래스의 인스턴스를 생성해야 합니다. 그리고 해당 인스턴스의 delegate 속성을 설정하여 방금 작성한 프로토콜을 구현한 곳을 가리킵니다. 예시 코드는 아래와 같습니다.

import AVFoundation

class SoundPlayer: NSObject, AVAudioPlayerDelegate {
    var audioPlayer: AVAudioPlayer?
    
    func playSound() {
        guard let soundURL = Bundle.main.url(forResource: "sound", withExtension: "mp3") else {
            return
        }
        
        do {
            audioPlayer = try AVAudioPlayer(contentsOf: soundURL)
            audioPlayer?.delegate = self
            audioPlayer?.play()
        } catch {
            print("사운드 재생 오류: \(error)")
        }
    }
    
    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
        // 사운드 재생이 완료된 후에 실행할 액션을 작성합니다.
        print("사운드 재생 완료")
    }
}

위의 예시 코드에서는 SoundPlayer 클래스가 AVAudioPlayerDelegate 프로토콜을 구현하고 있습니다. playSound() 메서드에서는 사운드를 재생하고, audioPlayerDidFinishPlaying(_:_:) 메서드에서는 재생이 완료된 후에 실행할 액션을 작성할 수 있습니다.

3. 액션 실행하기

audioPlayerDidFinishPlaying(_:_:) 메서드 내에서 원하는 액션을 작성하여 실행할 수 있습니다. 예를 들어, 다음과 같이 액션을 설정할 수 있습니다.

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
    // 사운드 재생이 완료된 후에 실행할 액션을 작성합니다.
    print("사운드 재생 완료")
    
    // 다른 메서드 호출
    doSomething()
    
    // 다른 객체의 메서드 호출
    otherObject.doSomethingElse()
}

위의 예시에서는 audioPlayerDidFinishPlaying(_:_:) 메서드 내에서 print 함수를 통해 사운드 재생이 완료되었음을 출력한 후, 다른 메서드나 다른 객체의 메서드를 호출할 수 있습니다.

사운드 재생이 완료된 후에 실행할 액션은 해당 앱의 요구사항에 따라 다양하게 구현할 수 있습니다.

이렇게 Swift에서는 AVAudioPlayerDelegate 프로토콜을 사용하여 사운드 재생이 완료된 후에 실행할 액션을 설정할 수 있습니다. 이를 통해 앱의 사용자 경험을 개선하고, 원하는 기능을 구현할 수 있습니다.

참고 자료: