Chapter 15

LE 오디오 프로파일: PACS·ASCS·BAP·CAP

Core가 주는 것은 CIS·BIS라는 등시성 통로(14장)까지다. 그 위에서 “이어폰이 어떤 코덱을 할 수 있는지 묻고, 설정을 합의하고, 소리를 흘리기 시작하고, 멈추는” 약속은 GATT 기반의 프로파일·서비스 사양들이 정한다. 이 장은 Core 밖이다. 근거는 Bluetooth SIG가 공개한 PACS 1.0.1, ASCS 1.0, BAP 1.0.1 원문이고, 각 사양의 표 번호를 달았다.

누가 무엇을: 사양 지도

사양종류맡는 일
PACS서비스“나는 이런 코덱·샘플링 주파수·프레임 길이를 받고 보낼 수 있다”(PAC 레코드), 오디오 위치(왼쪽·오른쪽), 지금 쓸 수 있는 오디오 맥락(미디어, 대화 등)
ASCS서비스서버의 오디오 스트림 끝점(ASE)과 그 상태 기계, 클라이언트가 조작하는 ASE Control Point
BAP프로파일유니캐스트(ASCS로 CIS 설정)와 방송(BIG·BASE) 절차, 필수 코덱·QoS 설정 표
CAP프로파일좌우 이어폰처럼 여러 기기를 한 세트로 묶어(CSIP) 함께 시작·멈춤
BASS서비스방송 도우미(휴대폰)가 수신기(보청기)에게 “이 방송을 들어라”, 방송 코드(9장)를 대신 넣어 줌. PAST(5장)로 동기 정보도 건넴
공연장의 무대 감독

PACS는 연주자의 이력서(“이 악기, 이 음역을 할 수 있다”)다. ASCS는 무대 하나하나(ASE)의 준비 상태판이다. 비어 있음 → 악보 정함(코덱) → 자리 배치 정함(QoS) → 막 올리는 중 → 연주 중. BAP는 감독이 그 상태판을 어떤 순서로 넘겨야 하는지 정한 진행표이고, CAP는 오케스트라 여러 무대를 한꺼번에 움직이는 총감독이다.

PACS v1.0.1, ASCS v1.0, BAP v1.0.1(Bluetooth SIG, 공개 HTML 판) · CAP·CSIP·BASS는 같은 SIG 사양 목록 · 코덱 LC3과 LTV 형식의 값은 Assigned Numbers 문서

ASE 상태 기계

서버(이어폰)는 방향마다 ASE를 가진다. 소리를 받는 Sink ASE, 마이크 소리를 내보내는 Source ASE. 각 ASE는 일곱 상태 중 하나다. Idle(0x00), Codec Configured(0x01), QoS Configured(0x02), Enabling(0x03), Streaming(0x04), Disabling(0x05, Source ASE만), Releasing(0x06). 클라이언트(휴대폰)는 ASE Control Point에 동작을 써서 상태를 옮긴다.

opcode동작할 수 있는 상태
0x01Config CodecIdle, Codec Configured, QoS Configured
0x02Config QoSCodec Configured, QoS Configured
0x03EnableQoS Configured
0x04Receiver Start ReadyEnabling. 오디오를 받는 쪽(Audio Sink)만: Sink ASE는 서버가 스스로, Source ASE는 클라이언트가
0x05DisableEnabling, Streaming
0x06Receiver Stop ReadyDisabling (Source ASE만)
0x07Update MetadataEnabling, Streaming
0x08ReleaseCodec Configured ~ Disabling

Config QoS, Enable, Receiver Stop Ready는 클라이언트만 시작할 수 있고, Released(Releasing → Idle 또는 코덱 설정을 남겨 두는 Codec Configured)는 서버만 한다. 끊김 규칙이 중요하다. CIS가 끊기면 Streaming·Disabling의 ASE는 곧바로 QoS Configured로 돌아가고(다시 Enable만 하면 된다), LE-ACL이 끊기면 어느 상태든 Releasing으로 간다.

SIMULATOR

ASE 하나 조작해 보기 (ASCS Table 3.2)

ASE 종류
누가
현재 상태—
버튼은 지금 상태와 “누가”에서 허용되는 동작만 켜진다(ASCS v1.0 Table 3.2, Receiver Start Ready는 §5.4의 “Audio Sink인 쪽만” 규칙까지). 해볼 것: ① 휴대폰으로 Config Codec → Config QoS → Enable → Receiver Start Ready(Sink ASE에서는 오디오를 받는 쪽이 이어폰이므로 “서버”로 바꿔 누른다). ② Streaming에서 “CIS 끊김”을 누르면 QoS Configured로, “LE-ACL 끊김”이면 Releasing으로. ③ Source ASE에서 Disable을 누르면 Disabling을 거쳐, 휴대폰의 Receiver Stop Ready 뒤 QoS Configured로.

ASE 상태(Table 3.1)·전이(Table 3.2)·끊김 규칙: ASCS v1.0 §3.1·§3.2 · ASE Control Point 동작(Table 4.6): §4.2 · 동작별 절차: §5.1~§5.9 · BAP의 같은 규칙: BAP §5.6.3.2

Idle0x00 Codec Configured0x01 QoS Configured0x02 Enabling0x03 Streaming0x04 ConfigCodec Config QoS Enable ReceiverStart Ready Disabling0x05 · Source만 Disable Receiver Stop Ready Disable (Sink) Releasing0x06 Released (코덱 설정 남김) Release: Codec Configured ~ Disabling에서 Releasing으로 · CIS 끊김 → QoS Configured · LE-ACL 끊김 → Releasing
그림 15-1. ASCS의 ASE 상태 기계. 클라이언트(휴대폰)가 ASE Control Point에 Config Codec → Config QoS → Enable을 써서 올리고, 받는 쪽이 준비되면 Receiver Start Ready로 Streaming이 된다. 멈출 때 Sink ASE는 QoS Configured로 바로 돌아가고, Source ASE는 Disabling을 거쳐 Receiver Stop Ready로 돌아간다. Release는 Releasing을 거쳐 Idle로, 또는 코덱 설정을 남긴 Codec Configured로 간다. 이 상태 기계는 Core 밖의 ASCS 사양에 있다.

BAP 설정 이름 읽기

BAP는 서로 다른 회사 기기가 반드시 맞출 수 있도록 코덱·QoS 설정에 이름을 붙였다. 16_2_1은 “16 kHz, 설정 2(10 ms 프레임, 40옥텟), QoS 1(낮은 지연)”이다. 마지막 숫자 1은 낮은 지연(재전송 2~5, 최대 전송 지연 8~31 ms), 2는 높은 신뢰도(재전송 13, 75~100 ms)다. 16_2_1은 유니캐스트 클라이언트·서버 모두 필수다. 비트레이트는 SDU 크기 × 8 ÷ SDU 간격이다.

CALCULATOR

BAP QoS 설정 (BAP v1.0.1 Table 5.2)

SDU 간격 · 프레임—
SDU 크기 → 비트레이트—
재전송 · 최대 전송 지연—
표시 지연 · 요구—
44.1 kHz 설정(441_x_x)은 SDU 간격이 8,163 µs·10,884 µs라 ISO 간격의 정수배가 될 수 없어 프레임 있는 PDU를 쓴다(14장). 나머지는 7.5 ms·10 ms로 프레임 없는 PDU. 표의 비트레이트는 검증 스크립트가 SDU 크기와 간격으로 다시 계산해 맞춘다.
예측해 보기

이어폰과 휴대폰이 둘 다 BAP를 지원한다. 회사가 달라도 반드시 함께 쓸 수 있는 설정은?

Table 5.2에서 클라이언트·서버 둘 다 M인 줄은?

16_2_1만 양쪽 필수(M)다. 나머지는 조건부(C)라 PACS로 서로의 능력을 확인한 뒤 고른다. 그래서 LE 오디오의 최소 공통분모는 16 kHz 음성 품질이고, 음악은 각 기기가 광고한 능력에 달려 있다.

QoS 설정 표와 요구(M/C): BAP v1.0.1 Table 5.2 · 코덱 설정 표: BAP Table 3.5·3.11 · 유니캐스트 절차: BAP §5

묶어서 다루기: CAP와 방송 도우미

좌우 이어폰은 서로 다른 두 기기이고 각자 ASE를 가진다. CAP는 두 기기가 같은 조정 세트(CSIP로 서로를 알아봄)라는 것을 알고, 두 기기의 ASE를 같은 CIG 안의 두 CIS로 묶어 함께 Enable하게 한다. 그래야 왼쪽만 먼저 나오거나 한쪽만 멈추지 않는다. 등시성 그룹의 공통 동기점(CIG_Sync_Delay, 14장)이 두 귀의 소리를 같은 순간에 내게 한다.

방송(Auracast)에서는 휴대폰이 방송 도우미가 된다. 보청기 대신 스캔해서 방송을 찾고, BASS로 보청기에 “이 방송 묶음(SID)을 들어라”를 쓰고, 필요하면 방송 코드를 넣어 주고, PAST로 주기적 광고 동기 정보를 넘긴다(5장). 보청기는 스캔 없이 BIG에 동기화해 BIS를 받는다(9장).

CAP·CSIP·BASS(Bluetooth SIG 사양) · BIG 동기와 PAST: [Vol 6] Part B §4.4.6, §5.1.13 · 방송 코드: [Vol 3] Part C §3.2.6

핵심 정리

  1. Core 밖: PACS(능력), ASCS(ASE 상태 기계), BAP(절차와 설정 표), CAP(세트 묶기), BASS(방송 도우미).
  2. ASE 상태: Idle → Codec Configured → QoS Configured → Enabling → Streaming, Source ASE는 Disabling, 끝은 Releasing.
  3. Config QoS·Enable·Receiver Stop Ready는 클라이언트만, Released는 서버만. Receiver Start Ready는 오디오를 받는 쪽(Sink ASE면 이어폰, Source ASE면 휴대폰)만 한다.
  4. CIS가 끊기면 QoS Configured로, LE-ACL이 끊기면 Releasing으로.
  5. BAP 이름 = 주파수_설정_QoS. 16_2_1(16 kHz, 10 ms, 40옥텟, 32 kbps)만 양쪽 필수. 44.1 kHz는 프레임 있는 PDU.

확인 퀴즈

Enable 동작을 쓸 수 있는 ASE 상태는?

ASCS Table 4.6: “Valid only if ASE_State = 0x02 (QoS Configured).”

Streaming 중 CIS가 끊기면 ASE는?

ASCS §3.2. LE-ACL이 끊겼다면 Releasing이다.

48_4_2의 SDU 간격과 크기는?

48 kHz 설정 4 = 10 ms, 120옥텟(96 kbps). 끝의 2는 높은 신뢰도(재전송 13, 최대 지연 100 ms).

Disabling 상태가 있는 ASE는?

Sink ASE는 Disable하면 곧바로 QoS Configured로 간다.