[swift] 현재 재생 중인 사운드 정보 표시하기

AVAudioPlayer를 사용하여 사운드를 재생하고 있는 경우, 앱의 사용자에게 현재 재생 중인 사운드 정보를 표시하는 것은 유용합니다. 이를 위해 label을 사용하여 현재 재생 중인 사운드의 제목이나 정보를 표시할 수 있습니다.

1. 라벨 추가하기

우선 인터페이스 빌더에서 원하는 위치에 label을 추가합니다. 이 라벨은 현재 재생 중인 사운드의 정보를 표시할 공간입니다. 라벨을 선택한 후, Attributes inspector에서 적절한 속성(폰트, 색상 등)을 설정하세요.

2. AVAudioPlayer 속성 설정하기

AVAudioPlayer 객체에는 현재 재생 중인 사운드 정보를 얻어올 수 있는 몇 가지 속성이 있습니다. 제목이나 다른 정보를 가져오기 위해 다음과 같이 속성을 설정합니다.

let audioPlayer = AVAudioPlayer()

// 현재 재생 중인 사운드 제목을 저장하는 변수
var currentSoundTitle = ""

// AVAudioPlayerDelegate를 채택하고, delegate를 설정합니다.
class ViewController: UIViewController, AVAudioPlayerDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        audioPlayer.delegate = self
    }
    
    // 재생이 시작되면 호출되는 delegate 메서드
    func audioPlayerDidStartPlaying() {
        // 현재 사운드의 제목을 가져와서 currentSoundTitle 변수에 저장합니다.
        currentSoundTitle = audioPlayer.url?.lastPathComponent ?? "Unknown"
        updateLabel()
    }
    
    // 재생이 종료되면 호출되는 delegate 메서드
    func audioPlayerDidFinishPlaying() {
        // 재생이 종료되면 currentSoundTitle을 비웁니다.
        currentSoundTitle = ""
        updateLabel()
    }
    
    // 라벨을 업데이트하는 메서드를 정의합니다.
    func updateLabel() {
        // label의 text를 currentSoundTitle로 설정합니다.
        label.text = currentSoundTitle
    }
}

3. 사운드 재생 시점에 메서드 호출하기

사운드를 재생하는 코드를 구현한 이후에는 해당 시점에 위에서 작성한 메서드를 호출해야합니다.

// 사운드를 재생하는 메서드 예시
func playSound() {
    guard let soundURL = Bundle.main.url(forResource: "sound", withExtension: "mp3") else { return }
    do {
        audioPlayer = try AVAudioPlayer(contentsOf: soundURL)
        audioPlayer.prepareToPlay()
        audioPlayer.play()
        
        // 재생 시작 이벤트를 호출합니다.
        audioPlayerDidStartPlaying()
        
        // 재생이 종료된 후에 호출할 수도 있습니다.
        DispatchQueue.main.asyncAfter(deadline: .now() + audioPlayer.duration) {
            self.audioPlayerDidFinishPlaying()
        }
    } catch let error {
        print("Failed to play sound: \(error.localizedDescription)")
    }
}

위의 예시에서 playSound() 메서드를 호출하여 사운드를 재생할 때, audioPlayerDidStartPlaying() 메서드를 호출하게 됩니다.

이렇게 구현하면 재생 중인 사운드 정보가 label에 표시되어 앱의 사용자가 현재 재생 중인 사운드를 확인할 수 있게 됩니다.