한국어
Linux Programming
 

리눅스 오디오 스택과 아키텍처

makersweb 2020.09.02 22:37 조회 수 : 2828

고급 Linux 사운드 아키텍처

 

ALSA (Advanced Linux Sound Architecture)는 응용 프로그램이 시스템의 실제 하드웨어와 상호 작용할 수 있는 가장 낮은 수준의 인터페이스다. 사운드 관련 하드웨어 (오디오 인터페이스, 사운드 카드 등…)에 대한 액세스를 추상화하는 드라이버로 간주 할 수 있다. 대부분의 기존 오디오 장치를 즉시 지원한다. 가장 간단한 방법으로 ALSA는 PCM (= Pulse-Coded-Modulation) 신호를 입력으로 받아 하드웨어로 직접 보낸다.

 

ALSA는 대부분의 DAC 칩의 한계로 인해 한 번에 하나의 채널 만 하드웨어로 전송하게 되는데 이로 인해 단일 응용 프로그램 만 ALSA에 한 번에 소리를 보낼 수 있다. 즉, 미디어 플레이어의 음악과 메신저의 알림 음을 동시에 받을 수 없다. ALSA 개발자는 이 것을 개선하기 위해 Mixer를 구현하였고 여러 가상 오디오 채널을 단일 채널로 결합 할 수 있게 한 것이 alsalib 이다.

 

이것이 꽤 괜찮아 보일 수 있으나 라이브러리 수준의 믹싱 방식은 데스크톱 환경에서 여전히 문제가 남아있었다. 라이브러리를 사용하면 믹싱 할 수 있지만 단일 응용 프로그램 만 오디오를 출력 할 수 있다. 그리고 정확히 이 제한은 소위 "사운드 서버"의 등장으로 이어진다.

 

 

사운드 서버의 개념

 

최신 데스크톱에서 발생한 가장 큰 문제는 여러 응용 프로그램이 사운드를 병렬로 출력해야 한다는 것이다. 위에서 설명한 것처럼 이것은 일반 ALSA로는 불가능했다. 그래서 사운드 서버가 등장했다. 사운드 서버는 기본적으로 컴퓨터의 백그라운드에서 지속적으로 실행되는 서비스 즉, 데몬이다.

 

사운드 서버는 오디오를 스피커로 출력해야 하는 모든 애플리케이션에 믹서 슬롯을 제공한다. 응용 프로그램은 다양한 프로토콜을 통해 이 사운드 서버에 연결하고 다양한 형식의 오디오를 병렬로 스트리밍 할 수 있다. 그런 다음 사운드 서버는 들어오는 모든 오디오 슬롯을 함께 믹싱하고 이를 다시 ALSA로 전달한다 (따라서 이는 마스터 채널과 비슷해짐).

마침내 다양한 소스의 오디오를 병렬로 출력 할 수 있게 되었고, 이 개념은 애플리케이션 별 볼륨 제어 및 기타 효과와 같은 다른 기능도 함께 얻을 수 있었다.

 

 

리눅스 시스템…

 

리눅스 배포판의 대부분이 이 계층구조를 사용하기 때문에 이것을 아는 것은 큰의미가 있다.

linux-audiostack-with-pulseaudio.png

 

 

PulseAudio

 

PulseAudio는 거의 모든 Linux 배포판을 위한 사실상의 표준 사운드 서버다. PulseAudio는 거의 모든 오디오 관련 시나리오를 처리 할 수 있다. 일반적인 소스/싱크 접근 방식을 사용하여 설계를 이해하기 쉽고 또 확장 할 수 있다. 따라서 PulseAudio는 대부분의 사용자에게 가장 적합한 솔루션이 된다 (PulseAudio의 풍부한 기능은 오디오 지연 시간이 길어 지므로 지연 시간이 짧은 오디오를 요구하는 전문가에게는 적절하지 않을 수 있음).

pulseaudio-diagram.png

 

따라서 PulseAudio에 대해 좀 더 익숙해질 필요가 있다. 위의 그림에서 PulseAudio가 사운드카드와 상호 작용할 수 있음을 알 수 있다 (여기서 Soundcard는 PC에 연결하는 방법에 관계없이 오디오를 녹음하거나 재생할 수 있는 모든 장치의 일반적인 용어다).

 

Bluetooth 헤드셋으로 오디오를 출력하려면?

BlueZ5-Bluetooth-Stack과 직접 상호 작용할 수있는 Bluetooth의 A2DP (Advanced Audio Distribution) 프로파일 용 PulseAudio 싱크가 있다.

 

HDMI를 통해 TV / 모니터로 오디오를 출력하려면?

기본 ALSA 모듈에서 지원되지 않는 경우 PulseAudio에는 다양한 그래픽 카드에 대한 싱크도 있다.

 

녹음 된 오디오를 별도의 시스템으로 보내려면?

PulseAudio는 뛰어난 네트워크 기능을 갖추고 있으며 RTP를 통해 다른 SoundServer로 오디오를 스트리밍 할 수 있다. RTP는 실시간 전송 프로토콜이다. IP를 통해 오디오 및 비디오 데이터를 전송하는 잘 알려진 프로토콜이다.

 

https://blog.rtrace.io/2019/08/11/the-linux-audio-stack-demystified/

번호 제목 글쓴이 날짜 조회 수
44 리눅스 Qt 응용프로그램 AppImage 로 구축 makersweb 2024.01.07 452
43 GRUB의 timeout 설정 makersweb 2023.11.07 432
42 lubuntu 22.04 LTS 설치 file makersweb 2023.01.23 1236
41 시스템에서 사용 가능한 D-Bus 서비스를 보려면? makersweb 2022.12.29 1123
40 리눅스에서 네트워크 구성 makersweb 2022.06.11 2806
39 D-Bus ObjectManager file makersweb 2022.02.12 572
38 ifconfig 는 대부분 ip 명령으로 대체 makersweb 2022.02.12 1220
37 SocketCAN 유틸 사용방법 file makersweb 2022.02.05 6887
36 dbus-broker를 기본 DBus 구현으로 설정 makersweb 2021.01.20 1144
» 리눅스 오디오 스택과 아키텍처 file makersweb 2020.09.02 2828
34 wayland-scanner 를 통해 Wayland 프로토콜 코드생성 makersweb 2020.06.08 881
33 Wayland 의 Client Application 프로그래밍 기본 루틴 makersweb 2020.06.04 1594
32 Wayland 의 주요 객체들 makersweb 2020.06.04 845
31 Weston 의 설명 및 관련 컴포넌트 makersweb 2020.06.03 2428
30 64비트 리눅스에서 32비트 응용프로그램을 실행하려면 makersweb 2020.02.29 1733
29 initramfs (initial ram file system: 초기 램 파일 시스템) makersweb 2020.02.25 1983
28 플랫폼 디바이스 드라이버 개발 시 많이 사용되는 커널 API 및 매크로 makersweb 2020.01.28 4686
27 PATH에 새로운 경로 추가 makersweb 2019.09.19 387
26 리눅스 컴파일러 최신으로 업데이트 linux 2018.12.26 1889
25 libblkid - USB Storage의 정보 가져오기 makersweb 2018.10.18 662