개발 창고/iOS

[SwiftUI] How to Use "Ringtone"

로이제로 2023. 11. 27. 22:00
반응형

 

How to Use "Ringtone"

이 글은 Asset에 음원 파일을 접근하여 재생하는 방법에 대해 알아봅니다.

 

1. Asset 추가

Project의 Target에서 Assets을 클릭하면 아래와 같이 Asset을 관리하는 화면이 나옵니다. 여기에서 원하는 mp3파일을 추가해 줍니다.

 

2. doRingtone

/**
 * @description 벨소리 실행
 */
func playRingtone () {
    let assetName = "time_alarm"
    
    guard let audioData = NSDataAsset(name: assetName)?.data else {
        fatalError("Unable to find asset \(assetName)")
    }
    
    do {
        var player = try AVAudioPlayer(data: audioData)
        player!.play()
    } catch {
        fatalError(error.localizedDescription)
    }
}

 

AVAudioPlay를 이용하기 위해서는 AVFoundation을 import 해주어야 합니다.

페이지 상단에 AVFoundation import

 

assetName에 내 mp3파일 명(확장자 제외)을 입력해 주고 위와 같이 NSDataSet으로 불러온 후 AVAudioPlayer로 선언합니다.

이후 play()로 재생해 주면, 해당 mp3 파일이 재생되게 됩니다.

추가적으로 재생 중인지 여부는 player!.isPlaying

재생 중지는 player!.stop()

으로 제어 가능합니다.

때문에, player를 전역변수로 두고 필요시마다 재생 / 중지를 가능하게 됩니다.

@State private var player: AVAudioPlayer?   // 벨소리 플레이어

/**
 * @description 벨소리 재생
 */
func playRingtone () {
    let assetName = "time_alarm"
    
    guard let audioData = NSDataAsset(name: assetName)?.data else {
        fatalError("Unable to find asset \(assetName)")
    }
    
    do {
        var player = try AVAudioPlayer(data: audioData)
        player!.play()
    } catch {
        fatalError(error.localizedDescription)
    }
}

/**
 * @description 벨소리 중지
 */
func stopRingtone () {
    if(player!.isPlaying){
        player!.stop()
    }
}

 

반응형