[swift] 스위프트에서 미디어 재생할 때 배경음악 자동 중지하기

앱을 개발하다 보면 미디어를 재생할 때 다른 소리를 자동으로 중지해야 하는 경우가 있습니다. 예를 들어 앱에서 배경음악을 재생 중일 때 전화가 오면 배경음악을 일시 중지해야 합니다. 이번 포스트에서는 스위프트로 이러한 기능을 구현하는 방법에 대해 알아보겠습니다.

AVAudioSession 활용

AVAudioSession은 오디오 세션을 관리하고 앱의 오디오 동작을 제어하는 클래스입니다. 먼저 AVAudioSession을 사용하여 오디오 세션을 설정하고 앱의 다른 오디오 소스와의 상호 작용을 관리합니다.

import AVFoundation

// 오디오 세션을 설정합니다
do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
} catch {
    print("오디오 세션을 설정하는 데 문제가 발생했습니다")
}

위의 코드에서 우리는 AVAudioSession을 사용하여 앱의 오디오 세션 카테고리를 Ambient로 설정했습니다. 이를 통해 다른 오디오 소스와의 상호 작용을 허용하면서 배경음악을 자동으로 중지할 수 있는 환경을 조성합니다.

AVAudioPlayer 활용

이제 배경음악을 재생하는 AVAudioPlayer 인스턴스를 만들고, 필요에 따라 재생, 일시 정지 및 중지를 관리합니다.

import AVFoundation

var player: AVAudioPlayer?

if let url = Bundle.main.url(forResource: "backgroundMusic", withExtension: "mp3") {
    do {
        player = try AVAudioPlayer(contentsOf: url)
        player?.prepareToPlay()
        player?.play()
    } catch {
        print("배경음앥을 재생하는 데 문제가 발생했습니다")
    }
}

위의 코드에서 우리는 AVAudioPlayer를 사용하여 “backgroundMusic.mp3” 파일을 재생합니다. 이제 앱이 실행 중에 다른 소리를 재생해야 할 때 이러한 오디오 플레이어를 일시 중지시키는데 필요한 로직을 추가할 수 있습니다.

전화 등의 이벤트 처리

마지막으로 우리는 앱 내부에서 발생하는 이벤트(예: 전화 수신)를 처리하여 배경음악을 자동으로 중지시킬 수 있습니다.

func handleIncomingCall() {
    player?.pause()
}

func handleCallEnd() {
    player?.play()
}

위의 코드에서는 전화 수신 및 종료와 같은 이벤트를 처리하는 함수를 정의하고, 이러한 이벤트가 발생했을 때 배경음악 플레이어를 일시 중지하거나 다시 재생하도록 구현했습니다.

이제 스위프트를 사용하여 미디어 재생 중에 배경음악을 자동으로 중지하고 다른 소리를 처리하는 방법에 대해 알아보았습니다. AVAudioSession과 AVAudioPlayer를 적절히 활용하면 더 다양한 오디오 관련 기능을 구현할 수 있을 것입니다.

더 많은 정보나 자세한 내용이 필요하다면 Apple Developer Documentation를 참고하십시오.