AVAudioFormat 정리
AVAudioFormat에 대해서 정리하며 연관된 지식도 모두 함께 정리.
목차
- AVAudioFormat
- AVAudioFormat의 프로퍼티들
- Getting the Audio Stream Description
- streamDescription
- Getting Audio Format Values
- sampleRate
- channelCount
- channelLayout
- formatDescription
- Determining the Audio Format
- isInterleaved
- isStandard
- commonFormat
- settings
- magicCookie
- Getting the Audio Stream Description
- AVAudioFormat과 AudioStreamBasicDescription의 비교 정리
- Channel과 ChannelLayout의 차이
- AVAudioCommonFormat 정리
AVAudioFormat
오디오 포맷의 표현을 설명하는 객체
샘플 레이트, 채널 수 등을 포함하는 속성들을 포함하여 오디오 데이터가 어떤 구조로 구성되어 있는지를 알려주는 객체.
iOS 8.0+
iPadOS 8.0+
Mac Catalyst 13.1+
macOS 10.10+
tvOS 9.0+
visionOS 1.0+
watchOS 2.0+

Overview
AVAudioFormat 클래스는 Core Audio의 AudioStreamBasicDescription을 감싸는 래퍼.
Core Audio에서 표준으로 사용하는 디인터리브(Deinterleaved)된 32비트 부동소수점(Float32) 포맷을 포함
일반적인 오디오 포맷을 손쉽게 다룰 수 있도록 여러 초기화 메서드와 접근자를 제공
해당 클래스의 인스턴스 프로퍼티를 초기화 후에는 변경할 수 없음 (Immutable)
AVAudioFormat의 프로퍼티들
streamDescription
- 오디오 데이터 스트림의 오디오 포맷 속성
- 하위 레벨 오디오 API에서 사용할 수 있는 AudioStreamBasicDescription을 반환
var streamDescription: UnsafePointer<AudioStreamBasicDescription> { get }
sampleRate
- 오디오 포맷의 샘플링 레이트(Hz 단위)
var sampleRate: Double { get }
channelCount
- 오디오 데이터의 채널 수
- AVAudioChannelCount는 UInt32로 이보다 큰 경우 런타임 에러가 발생할 수 있음.
var channelCount: AVAudioChannelCount { get }
channelLayout
- 기본 오디오 채널 레이아웃
- 2채널을 초과하는 포맷에서만 채널 레이아웃이 필요
var channelLayout: AVAudioChannelLayout? { get }
formatDescription
- Core Media API와 함께 사용할 오디오 포맷
var formatDescription: CMAudioFormatDescription { get }
isInterleaved
- 샘플이 하나의 스트림으로 믹스되는지 여부를 나타내는 불리언 값.
- 이 값은 PCM 포맷에서만 유효.
var isInterleaved: Bool { get }
isStandard
- 포맷이 디인터리브드(deinterleaved)된 네이티브 엔디안(float) 상태인지 여부를 나타내는 불리언 값
- 이 값은 포맷이 AVAudioCommonFormat.pcmFormatFloat32일 경우 true를 반환
- 그 외의 경우는 false를 반환
var isStandard: Bool { get }
commonFormat
- AVAudioCommonFormat 식별자 인스턴스
var commonFormat: AVAudioCommonFormat { get }
settings
- 이 설정에 들어가는 딕셔너리는 AudioStreamBasicDescription이 표현하는 모든 형식을 지원하지 않음.
- 따라서 해당 포맷을 지원하지 않는 경우 이 속성은 nil을 반환
var settings: [String : Any] { get }
magicCookie
- 인코더와 디코더가 필요로 하는 메타데이터를 포함한 객체.
- 인코더는 magicCookie 객체를 생성하며 일부 디코더는 이를 통해 올바르게 디코딩을 수행할 수 있음.
- 참고로 magicCookie는 AAC, ALAC 같은 일부 코덱은 압축 형식에 대한 추가 정보가 있어야 제대로 디코딩 할 수 있음.
- 인코더는 이 정보를 생성해서 디코더에 전달해야 함.
var magicCookie: Data? { get set }
AVAudioFormat과 AudioStreamBasicDescription의 비교 정리
AVAudioFormat
- AVFAduio 프레임워크에 속하며 오디오 엔진(API: AVAudioEngine, AVAudioPlayerNode 등)
- Swift 환경에서 오디오 포맷을 다룰 때
- 안전한 오디오 처리 로직을 구성할 때
목적: 오디오 포맷을 쉽게 다룰 수 있게 하는 추상화된 인터페이스
AudioStreamBasicDescription(ASBD)
- Core Audio 프레임워크에 속하는 저수준 API을 위해서 사용
- 직접 버퍼 관리, PCM 데이터 처리
- 압축 및 비압축 오디오의 실제 패킷 구조를 다뤄야 하는 상황
목적: 하드웨어 수준에서 오디오 데이터를 정확히 기술하기 위한 로우 레벨 데이터 구조
Channel과 ChannelLayout의 차이
채널(Channel): 오디오 트랙 하나를 의미
- 채널 레이아웃(Channel Layout): 채널이 물리적으로 어디에 배치되는지 나타냄
- 5.1채널 이상이면 각 채널의 위치 정보가 필요합니다.
채널(Channel): 오디오 트랙 하나를 의미
- 예: 모노 → 1채널
- 스테레오 → 2채널 (왼쪽, 오른쪽)
- 서라운드 5.1 → 6채널 (앞왼, 앞오, 중앙, 서브우퍼, 뒤왼, 뒤오)
- 경우에 따라 다르지만 우퍼는 저음으로 방향이 존재하지 않아서 .1을 붙임.
채널 레이아웃(Channel Layout): 채널이 물리적으로 어디에 배치되는지 나타냄
- 단순히 “채널 수 = 6”이라고 해도, 어떤 채널이 앞, 뒤, 좌, 우인지를 정의하지 않으면 스피커 배치가 올바르지 않을 수 있음
- 그래서 2채널 이상일 때만 필요
- 2채널 스테레오는 일반적으로 왼쪽과 오른쪽이 명확하기 때문에 레이아웃이 필수가 아니지만, 5.1채널 이상이면 각 채널의 위치 정보가 필요
AVAudioCommonFormat 정리
일반적인 오디오 포맷을 설명하는 포맷 옵션으로 Enum으로 설정.
- otherFormat
- AVAudioCommonFormat에서 정의하고 있는 것 외에 다른 형식
- pcmFormatFloat32
- 표준 형식을 네이티브 엔디언의 부동소수점(float) 형태로 표현한 형식
- pcmFormatFloat64
- 네이티브 엔디언(double) 형식으로 표현한 포맷
- pcmFormatInt16
- 서명된 16비트 네이티브 엔디언 정수(signed 16-bit native-endian integer)로 표현한 포맷
- pcmFormatInt32
- 서명된 32비트 네이티브 엔디언 정수(signed 32-bit native-endian integer)로 표현한 포맷
'apple > Video, Audio, DRM' 카테고리의 다른 글
| AVAudioEngine, AVAudioNode 정리 (0) | 2025.11.26 |
|---|---|
| AudioStreamBasicDescription 정리 (0) | 2025.11.24 |
| AVAudioPCMBuffer 정리 (0) | 2025.11.24 |
| Adaptive Bit Streaming (0) | 2025.10.23 |
| [HLS] Creating a Multivariant Playlist (0) | 2024.12.05 |