🧑‍💻/Swift

iOS AVAudioPlayer 사용하기

유리맥 2021. 6. 22. 00:58
반응형

프로그래머스의 뮤직 플레이어 앱 개발 도중 mp3 파일을 재생하기 위해 AVAudioPlayer를 사용할 기회가 생겼습니다.

AVAudioPlayer는 다음 기능을 제공합니다.

  • 파일 또는 버퍼의 모든 구간에 대해 오디오 재생
  • 재생되는 오디오의 볼륨, 패닝, 속도 및 반복 동작 제어
  • 재생 수준 측정 데이터에 액세스
  • 여러 플레이어의 재생을 동기화하여 여러 사운드를 동시에 재생

 


 

먼저 AVAudioPlayer를 사용하기 위해서는 AVFoundation 프레임워크를 import 합니다.

import AVFoundation


AVAudioPlayer(contentsOf:) 또는 AVAudioPlayer(data:) 로 플레이어를 생성할 수 있습니다.
네트워크 상 존재하는 파일의 경우
URL로부터 Data를 추출하고 AVAudioPlayer(data:)로 생성하니 문제가 발생하지 않았습니다. getDataFrom(url:) 메서드를 참고해 주세요.

 

 

 

AVAudioPlayer 함수


func prepareToPlay() -> Bool
오디오 재생 전 로드하여 딜레이를 최소화 합니다.

func play() -> Bool
오디오를 재생

func play(atTime: TimeInterval) -> Bool
지정된 지점에서 오디오를 비동기적으로 재생합니다.

func pause()
오디오를 일시 정지

func stop()
오디오를 정지하고 설정을 초기화합니다.

 

 

AVAudioPlayer 변수


var isPlaying: Bool
오디오의 재생 여부

var volume: Float
오디오 볼륨 값 0.0 ~ 1.0

var enableRate: Bool
재생 속도를 조절할 수 있는 지 여부

var rate: Float
재생 속도. 기본 값 1.0

var numberOfLoops: Int
재생 반복 횟수

var currentTime: TimeInterval
오디오의 현재 재생 시각(초)

var duration: TimeInterval
오디오의 전체 시간(초)

이외에도 다른 설정은 Apple 공식 문서를 참고하세요.

 

 

오디오 재생 시간, 남은 재생 시간

재생 화면을 구현하다 보니 현재 오디오의 재생 시간, 남은 시간을 표시해줘야 했습니다.
플레이어의 currentTime을 3600으로 나누면 , 60으로 나누면 , 그 나머지를 로 나타낼 수 있습니다.
24시간 이내의 오디오를 재생한다면 1970년 1월 1일을 기준으로 하는 Date(timeIntervalSince1970:)나 2001년 1월 1일을 기준으로 하는 Date(timeIntervalSinceReferenceDate:)를 사용해 간단하게 문자열을 얻을 수 있습니다.

 

💡오디오가 재생되는 동안 재생 시간을 변경하고 싶다면 Timer를 이용해 보세요.

 

오디오 구간 선택 (재생 시점 변경)

UISlider를 사용해 재생 시점을 변경하고자 합니다.
play(atTime:)은 비동기적으로 재생해서인지 원하는 대로 변경되지 않더라구요.
currentTime 값을 변경해 재생 시점을 변경 할 수 있었습니다. 중요한 점은 변경 전에 일시 정지하고, 변경 후 다시 재생해줘야 한다는 점입니다.

player.pause()
player.currentTime = 10
player.play()


currentTime에는 오디오의 전체 시간(duration)에 UISlider value를 곱한 값을 넣습니다.
실제 UISlider과 결합하여 작업 시 Slider 값이 변경된 뒤 currentTime 값을 업데이트 했습니다.

 

 

 


참고

반응형