✏️ AVFoundation
AVFoundation은 애플 플랫폼에서 시청각 미디어의 capture, process, synthesize, control, import, export 6개의 주요 기술 영역을 지원하는 프레임워크이다.
그러니까, 미디어 파일을 다룰 때 이 프레임워크를 이용하면 되는 것 같다!
참고로 아래에서 다룰 AVAudioPlayer 클래스는 AVFoundation에 선언되어있고, Timer 클래스는 UIKit에 선언되어있다.
(하나씩 주석 처리하고 어디서 에러가 발생하는지 확인해봄...)
✏️ AVAudioPlayer
음성 데이터를 파일이나 어떤 버퍼로부터 재생(또는 기타 기능)시킬 수 있는 객체(Object)
- AVAudioPlayer를 이용하여
- 시간제한 없이(Any duration) 파일(또는 버퍼)로 부터 음성파일 재생 가능
- 볼륨, 속도, 스테레오 포지셔닝(Panning), 반복 재생 기능 등을 조절 가능
- 현재 재생 정보 얻기 가능(access playback-level metering data)
- 동시에 여러 플레이어를 통해 여러 개의 음성 재생 가능(싱크 맞춰서)
- AVAudioPlayer의 주료 프로퍼티 및 메서드
var isPlaying: Bool
var volume: Float // 0.0~1.0
var rate: Float // 1: normal, 0.5: half, 2: doubled
var numberOfLoops: Int // 음수 설정시 무한반복(stop()으로 종료, 기본 0: 1회 재생 후 종료
var duration: TimeInterval // [s]
var currentTime: TimeInterval // [s]
func init(contentOf: URL)
func init(data: Data)
func play()
func play(atTime: TimeInterval)
func pause()
func stop()
✏️ Timer
어떤 인터벌의 시간이 지나면, 특정 메시지를 타깃 객체에 전달하는 클래스
Timer는 run loops라는 것과 함께 동작한다는데, Run Loop라는라는 것이 초보자인 나에게는 조금 생소한 개념이다. 조금 더 알고 난 후에 공부해볼 필요가 있을 것 같다. (아래 링크 참조!)
- Timer의 특징
- Run loop에서 동작한다.
- 생성할 때 반복 여부를 결정한다.
반복 타이머의 경우 특정 TimeInterval간격으로 실행되며, 기능을 정지하려면 invalidate() 메서드를 호출해야 하며, 비 반복 타이머의 경우 한 번 실행된 다음 자동으로 invalid상태가 된다.
- Timer의 주요 프로퍼티 및 메서드
var isValid: Bool // 타이머가 유효한지?
var fireDate: Date // 다음에 시행될 시각
var timeInterval: TimeInterval // 실행 간격
// 1. 타이머 생성과 동시에 run loop에 default mode로 등록하는 메서드
class func scheduledTimer(withTimeInterval: TimeInterval, repeats: Bool, block: (Timer) -> Void)
class func scheduledTimer(timeInterval: TimeInterval, target: Any, selector: Selector, userInfo: Any?, repeats: Bool)
class func scheduledTimer(timeInterval: TimeInterval, invocation: NSInvocation, repeats: Bool)
// 2. 타이머 생성 후 수동으로 객체를 add(_: forMode: )메서드를 통해 run loop에 추가해줘야하는 메서드
func init(timeInterval: TimeInterval, invocation: NSInvocation, repeats: Bool)
func init(timeInterval: TimeInterval, target: Any, selector: Selector, userInfo: Any?, repeats: Bool)
func init(fireAt: Date, interval: TimeInterval, target: Any, selector: Selector, userInfo: Any?, repeats: Bool)
🤔 unowned reference
코드를 보다 보니 [unowned self] (timer: Timer) 이런 전혀 이해가 되지 않는 부분이 있어서 대~충 구글링을 해보니 Unowned reference(미소유 참조)라는 개념이다.
ARC부분을 참고해야겠다.
'공부 > [iOS&Swift]' 카테고리의 다른 글
[iOS] Xcode - Target, Project, Scheme, Build setting 에 대하여 (0) | 2022.02.07 |
---|---|
[Swift] ARC(Automatic Reference Counting) - 1 (0) | 2022.02.05 |
[iOS] 애플 개발자 문서 읽기 팁(from iOS boost course) (0) | 2022.01.31 |
[iOS] AutoLayout을 코드로 작성하는 기본적인 방법에 대하여 (0) | 2022.01.26 |
[Swift] Protocol에 대하여 (0) | 2022.01.24 |
댓글