Computer Science
탄탄한 기반 실력을 위한
전공과 이론 지식 모음
Today I Learned!
배웠으면 기록을 해야지
TIL 사진
Flutter 사진
Flutter로 모바일까지
거꾸로캠퍼스 코딩랩 Flutter 앱개발 강사
스파르타코딩클럽 즉문즉답 튜터
카카오테크캠퍼스 3기 학습코치
프로필 사진
박성민
임베디드 세계에
발을 들인 박치기 공룡
임베디드 사진
EMBEDDED SYSTEM
임베디드 SW와 HW, 이론부터 실전까지
ALGORITHM
알고리즘 해결 전략 기록
🎓
중앙대학교 소프트웨어학부
텔레칩스 차량용 임베디드 스쿨 3기
애플 개발자 아카데미 1기
깃허브 사진
GitHub
프로젝트 모아보기
Instagram
인스타그램 사진

Develop/iOS 개발

[Swift 개념] AVAudioPlayer 클래스 - 음악 재생과 제어

sm_amoled 2019. 7. 28. 21:30

[Swift 개념] AVAudioPlayer 클래스 - 음악 재생과 제어

지금 부스트코스에서 iOS 프로그래밍 강좌를 들으면서 Swift를 공부하는 중이예요. 확실히 작은 프로젝트지만 직접 만들어보면서 공부를 하는게 눈에 보이는 결과물도 나오고 따라갈 이정표가 있어서 공부하기 좋은 것 같네요! 계정 가입절차가 까다로운 것도 아니고 강의 자체도 무료공개라서 저처럼 iOS 개발 공부를 시작하시는 분은 들어보면 좋을 것 같아요.

지금 강좌를 수강하면서 만들고 있는 음악플레이어에 들어가는 AVAudioPlayer 클래스에 대해 더 자세히 찾아보고자 이 글을 포스팅합니다!


AVAudioPlayer

AVFoundation에 포함되어있는 클래스로, 파일이나 메모리에 저장된 음악을 재생하는 장치와 제어하는 역할을 한다.

Apple Developer Documents 기준으로 다음과 같은 역할을 수행할 수 있네요.

  • Play sounds of any duration
  • Play sounds from files or memory buffers
  • Loop sounds
  • Play multiple sounds simultaneously, one sound per audio player, with precise synchronization
  • Control relative playback level, stereo positioning, and playback rate for each sound you are playing
  • Seek to a particular point in a sound file, which supports such application features as fast forward and rewind
  • Obtain data you can use for playback-level metering

AVAudioPlayer 초기화

AVAudioPlayer의 Init 방법은 크게보면 두 가지의 생성 방법이 있다. 일단 음악을 재생하는 역할을 하기에 음악파일을 인자로 전달해줘야하고, 그 방식이 데이터를 주는 방식 / 주소를 주는 방식 으로 나뉘어있다.

var player : AVAudioPlayer!
player = AVAudioPlayer(data: Data)
player = AVAudioPlayer.init(data: Data)

player = AVAudioPlayer(url: Url)
player = AVAudioPlayer.init(url: Url)

첫번째 방법은 미리 load 해둔 오디오파일을 가져와 player에 넣어주는 것이고, 두번째 방법은 찾아둔 url 타입의 주소를 전달해 오디오파일을 player에 넣어주는 것이다.

재생과 제어

기본 함수들

  • func play() -> Bool 를 통해 넣어둔 사운드의 재생이 가능하다.
  • func play(atTime: TimeInterval) -> Bool 를 통해 원하는 시점부터 재생이 가능하다.
  • func pause() 일시정지
  • func stop() 정지 + 초기화
  • func prepareToPlay() -> Bool 사운드 재생전에 미리 로드해두고 딜레이를 최소화할 수 있다.
  • func setVolume(Float, fadeDuration: TimeInterval) 지정해준 시간동안 볼륨을 지정한 크기로 천천히 이동한다.

TimeInterval은 특별한 타입이 아니예요.시간간격을 나타낼 때 사용하는 Double타입의 별명이라고 보면 편할 것 같네요. 처음 코드를 마주했을때는 이게 별도의 타입이라고 생각했는데, 그냥 시점과 시점사이의 간격을 초 단위로 Double 형으로 나타낸 것이라고 생각하면 됩니다!

기본 변수들

  • isPlaying: Bool 현재 재생중인지 Boolean 값으로 가져올 수 있다.
  • volume: Float 소리의 크기 값에 해당 (0.0~1.0)
  • rate: Float 재생속도 (1.0이 정상 속도에 해당!)
  • numberOfLoops: Int 반복횟수 설정
  • duration: TimeInterval AVAudioPlayer에 등록된 사운드 파일의 총 실행시간
  • currentTime: TimeInterval AVAudioPlayer에서 재생중인 사운드 파일의 현재 재생되는 시각

참고자료

https://developer.apple.com/documentation/avfoundation/avaudioplayer

https://zeddios.tistory.com/269

320x100