Add web mixer with native input volume and output selection

This commit is contained in:
jsahn
2026-10-12 18:45:43 +09:00
parent ceef64dfed
commit 5fbece12bb
19 changed files with 696 additions and 34 deletions
+55 -3
View File
@@ -17,15 +17,58 @@ Mac/iPhone의 AirPlay 2 ── Shairport Sync ─┐
Loopback → Bluetooth 헤드폰/스피커
```
- AirPlay 2: Shairport Sync **5.5.2**, NQPTP **1.2.8**, 공유 메모리 규격 smi10.
- AirPlay 2: Shairport Sync **5.5.2**, NQPTP **1.2.8**, 공유 메모리 규격 smi10. 웹 제어용 D-Bus 지원과 네이티브 볼륨 패치를 포함합니다.
- Bluetooth: Debian의 BlueALSA 패키지. 기준 보드 버전 **4.3.1**.
- 수신과 송신은 A2DP 음악 프로필을 사용합니다. 기준 보드에서는 SBC로 연결됐습니다.
- SBC 송신 품질은 medium입니다. 기준 보드에서 high로 동시 수신·송신 시 끊겨
전송량을 줄였습니다. 송신 버퍼는 500 ms이며 안정성은 청취 검증이 필요합니다.
- DAC 출력은 44.1 kHz / 스테레오 / 16비트, 블루투스용 가상 믹서는 48 kHz입니다.
- 각 입력을 6 dB 낮춰 두 입력을 합칠 여유를 둡니다. 세 입력 이상은 각 기기 볼륨을
추가로 낮추세요. 지연 없는 실시간 녹음/악기 모니터링용 구성은 아닙니다.
- 각 입력을 3 dB 낮춥니다. 여러 입력의 큰 소리가 겹쳐 찢어지면 입력 볼륨을 낮추세요. 지연 없는 실시간 녹음/악기 모니터링용 구성은 아닙니다.
- 각 송신 기기의 볼륨으로 믹스 비율을 바꿉니다.
- 출력은 DAC 또는 블루투스 중 하나를 선택합니다. 양쪽 동시 출력은 구현하지 않았습니다.
## 웹 믹서
설치 후 브라우저에서 **`http://보드IP:8088`**을 여세요.
현재 보드는 `http://192.168.10.83:8088`이며, USB 관리 연결에서는
주소가 유지돼 있다면 `http://10.55.0.1:8088`을 사용합니다.
- AirPlay 및 연결된 Bluetooth 입력별 볼륨·음소거.
- AirPlay는 Shairport Sync의 **기존 네이티브 볼륨**을 사용합니다.
별도 ALSA softvol이나 추가 감쇠 단계는 만들지 않았습니다.
- Bluetooth 볼륨 API는 A2DP 입력 PCM만 허용하며 DAC/헤드폰 출력 볼륨을 거부합니다.
- DAC 선택, 등록한 Bluetooth 헤드폰·스피커 선택, 새 출력 장비 검색·페어링.
- 출력 전환은 비동기로 실행하고 결과를 화면에 표시합니다.
- LAN용 화면입니다. 인터넷 포트 개방은 하지 않습니다.
같은 네트워크의 접속자는 화면에서 제어할 수 있으며 별도 로그인은 없습니다.
상태 변경에는 요청 토큰과 동일 출처 검증을 사용합니다.
- 새 휴대폰을 Bluetooth 입력으로 페어링하는 절차는 아래의 기존 CLI를 사용합니다.
- 웹 서버는 `radxa-mixer-web.service`로 자동 시작합니다.
명령어도 계속 사용할 수 있습니다:
```bash
sudo radxa-audio inputs
sudo radxa-audio volume airplay 60
sudo radxa-audio mute airplay on
sudo radxa-audio mute airplay off
sudo radxa-audio volume AA:BB:CC:DD:EE:FF 70
sudo radxa-audio mute AA:BB:CC:DD:EE:FF on
sudo radxa-audio output dac --pcm hw:CARD=Audio,DEV=0
```
AirPlay의 볼륨은 원래 프로토콜 범위 −30~0 및 음소거 −144를 0~100으로 표시합니다.
Bluetooth는 원래 입력 PCM의 볼륨을 사용합니다. 송신 기기의 볼륨 변경도 같은 입력에
적용됩니다. 출력 장비 볼륨과 이퀄라이저는 웹 화면에 제공하지 않습니다.
`sudo radxa-audio apply`는 출력 장비가 꺼져 있어도 **이미 저장한 출력 경로**를
다시 적용할 수 있습니다. 새 출력 장비 선택에는 여전히 연결 확인이 필요합니다.
기존 보드에서 웹 기능을 추가하려면 전체 `install.sh`로 D-Bus 빌드를 설치하거나,
이미 D-Bus 지원 바이너리가 설치돼 있다면 `sudo bash scripts/install-web.sh` 후
`sudo radxa-audio apply`를 실행합니다. 전체 설치는 기본 DAC 출력으로 설정하므로
이후 원하는 Bluetooth 출력을 다시 선택하세요.
## 1. 새 보드 준비
1. Debian 13 기반 Armbian을 설치하고 인터넷에 연결합니다.
@@ -110,6 +153,12 @@ sudo radxa-audio pair AA:BB:CC:DD:EE:FF --output
이 명령은 페어링 → 신뢰 등록 → 음악 프로필 연결 → 출력 전환을 진행합니다.
이후 다른 헤드폰으로 바꾸려면 새 헤드폰을 검색하고 같은 명령을 실행하면 됩니다.
`bluetoothctl info 주소`에서 `Paired: yes`여도 `Bonded: no`이면 임시 연결입니다.
재부팅 후 등록을 유지하려면 장비를 페어링 모드로 켠 뒤
`sudo radxa-audio pair 주소 --output --bond`를 사용하세요. 웹의 새 장비 등록도
영구 등록 성공을 확인하며, 인증 실패는 성공으로 표시하지 않습니다.
이미 영구 등록된 장비는 다시 페어링하지 않습니다.
이미 등록한 장비로 전환:
```bash
@@ -175,6 +224,9 @@ apt로 추가한 의존 패키지와 블루투스 페어링 기록은 유지합
|---|---|
| `install.sh` | 새 보드 설치, 빌드, 서비스 설정, 실패 시 복구 |
| `scripts/radxa-audio.py` | 페어링/출력/이름/DAC 관리 |
| `scripts/web_server.py`, `scripts/input_controls.py`, `scripts/web/` | 웹 화면/API 및 입력 전용 볼륨 제어 |
| `scripts/install-web.sh` | 웹 서비스 설치/갱신 |
| `sources/shairport-native-volume.patch` | 기존 AirPlay 볼륨을 현재 세션에 적용 |
| `scripts/backup.py` | 설치 전 백업/복원 |
| `scripts/check-build.sh` | 서비스 변경 없이 고정 소스 빌드 확인 |
| `sources/*.bundle`, `manifest.json` | 공식 Git 소스, 릴리스 태그, 커밋, SHA-256 |