맨위로가기

고급 리눅스 사운드 아키텍처

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

고급 리눅스 사운드 아키텍처(ALSA)는 리눅스 운영체제에서 사운드 카드와 같은 사운드 장치를 위한 드라이버를 제공하는 소프트웨어 프레임워크이다. 1998년 야로슬라프 키셀라가 Gravis Ultrasound 사운드 카드용 리눅스 장치 드라이버를 기반으로 개발을 시작하여, 2002년 리눅스 커널에 통합되었다. ALSA는 하드웨어 MIDI 합성, 하드웨어 믹싱, 전이중 통신, 스레드 안전 장치 드라이버 등 OSS(Open Sound System)가 지원하지 않던 기능들을 제공하며, 사용자 공간 라이브러리를 통해 커널 드라이버와 직접 연동하지 않고 고수준 API를 사용하여 드라이버 기능을 활용할 수 있도록 지원한다. ALSA는 최대 8개의 카드를 지원하며, 각 카드는 장치, 하위 장치, 인터페이스, 스트림으로 구성된다. 또한, alsactl, amixer, arecord/aplay, alsamixer와 같은 명령줄 도구와 다양한 GUI를 제공하며, 임베디드 시스템을 위한 ALSA SoC 레이어, OSS 에뮬레이션, QNX와의 관계 등 구현 관련 정보도 포함한다.

더 읽어볼만한 페이지

  • 리눅스 커널 인터페이스 - 장치 파일
    유닉스 및 유닉스 계열 운영 체제에서 하드웨어 장치 접근을 위해 사용되는 특수 파일 시스템 객체인 장치 파일은 문자 장치와 블록 장치로 나뉘며 주 번호와 부 번호로 식별되고, 물리 장치 외에 가상 장치도 존재하며 다른 운영 체제에서도 유사한 개념으로 특정 포트와 장치에 접근하는 데 사용된다.
  • 리눅스 커널 인터페이스 - 리눅스 기본 규격
    리눅스 기본 규격(LSB)은 리눅스 배포판 간 호환성 증진을 목표로 하는 표준으로, 다양한 발전을 거쳤으나 비판과 제한적인 적용 사례가 있다.
  • 1998년 소프트웨어 - OpenSSL
    OpenSSL은 1998년에 설립된 암호화 도구 프로젝트로, 다양한 암호화 알고리즘과 프로토콜을 지원하며, 아파치 라이선스를 채택했고, 보안 문제와 API 호환성 문제 등의 비판을 받았다.
  • 1998년 소프트웨어 - 야후! 메신저
    야후! 메신저는 야후!에서 제공한 인스턴트 메신저 서비스로, VoIP, 파일 공유, 오프라인 메시징, 플러그인 확장 등 다양한 기능을 지원하고 여러 운영체제용 클라이언트를 제공했으며 윈도우 라이브 메신저와 상호 운용되기도 했다.
  • API - Tk (소프트웨어)
    Tk는 Tcl 스크립팅 언어의 크로스 플랫폼 GUI 툴킷으로, 다양한 플랫폼 이식과 여러 프로그래밍 언어 바인딩을 지원하며 사용자 정의 가능한 위젯들을 제공한다.
  • API - ASIO
    ASIO는 독일 스타인버그에서 개발한 오디오 입출력 API 규격으로, 낮은 지연 시간과 멀티 채널 I/O를 지원하며 윈도우 운영체제에서 주로 사용된다.
고급 리눅스 사운드 아키텍처 - [IT 관련 정보]에 관한 문서
일반 정보
유형오디오 장치 드라이버, 커널 모듈
라이선스GPL-2.0-or-later, LGPL-2.1-or-later
웹사이트ALSA 프로젝트 웹사이트
개발
저자야로슬라프 키셀라
개발자ALSA 팀
릴리스 정보
최초 릴리스1998년
최신 안정화 버전1.2.10
최신 안정화 버전 출시일2023년 9월 1일
기술 정보
프로그래밍 언어C
운영 체제리눅스

2. 역사

ALSA 개발 프로젝트는 야로슬라프 키셀라가 이끌었으며, Gravis Ultrasound 사운드 카드용 리눅스 장치 드라이버를 기반으로 했다. 1998년에 시작되었고, 리눅스 커널과는 별개로 개발되다가 2002년 커널 2.5 개발 버전(2.5.4–2.5.5)에 포함되었다.[5]

리눅스 커널 2.6 버전부터는 이전의 사운드 시스템인 OSS를 기본으로 대체하게 되었다(다만, 하위 호환성을 위한 계층은 유지되었다).[6]

ALSA는 OSS에 비해 API가 더 크고 복잡하여, ALSA를 이용하는 응용 프로그램을 개발하는 것이 상대적으로 어려울 수 있다. ALSA는 OSS 에뮬레이션 기능을 제공하도록 설정할 수 있지만, 많은 리눅스 배포판에서는 이 기능이 더 이상 지원되지 않거나 기본적으로 설치되어 있지 않은 경우가 많다.

3. 기능

ALSA는 초기 설계 시 OSS가 지원하지 못했던 여러 기능을 포함하도록 개발되었다. 예를 들어 하드웨어 기반의 MIDI 합성, 여러 채널의 하드웨어 믹싱, 전이중 작동, 그리고 멀티프로세싱 환경에 적합한 스레드 안전 장치 드라이버 지원 등이 개선되었다.

이러한 고급 기능들을 지원하기 위해 ALSA는 OSS에 비해 더 크고 복잡한 API를 가지게 되었으며, 이로 인해 애플리케이션 개발 난이도가 상대적으로 높아졌다. 하지만 개발 편의성을 위해 OSS 에뮬레이션 레이어를 제공하여 기존 OSS API를 활용할 수도 있다.

ALSA는 사운드 장치 드라이버 외에도 사용자 공간 라이브러리를 함께 제공한다. 이 라이브러리는 개발자가 커널 드라이버와 직접 상호작용하는 대신, 더 높은 수준의 API를 통해 드라이버 기능을 사용할 수 있도록 돕는다. 또한, 이 라이브러리는 다양한 하드웨어 간의 차이를 추상화하여 가능한 한 표준화된 인터페이스를 제공하는 것을 목표로 한다.

3. 1. 하드웨어 지원

ALSA는 초기에 OSS가 지원하지 못했던 여러 하드웨어 관련 기능을 지원하도록 설계되었다. 주요 기능은 다음과 같다.

  • 하드웨어 기반의 MIDI 합성
  • 여러 채널의 하드웨어 믹싱
  • 전이중 작동
  • 멀티프로세서 환경에 적합한 스레드 안전 장치 드라이버


ALSA는 사운드 장치 드라이버뿐만 아니라, 사용자 공간 라이브러리도 함께 제공한다. 이 라이브러리는 응용 프로그램 개발자가 커널 드라이버와 직접 상호작용하는 것보다 더 높은 수준의 인터페이스를 통해 드라이버 기능을 사용할 수 있게 해준다. 커널 API가 하드웨어의 기능을 직접 반영하는 반면, ALSA의 사용자 공간 라이브러리는 다양한 하드웨어 간의 차이를 추상화하여 가능한 한 표준화된 인터페이스를 제공하는 것을 목표로 한다.

이러한 목표는 소프트웨어 플러그인을 통해 부분적으로 달성된다. 예를 들어, 많은 최신 사운드 카드나 내장 사운드 칩에는 하드웨어 자체적으로 '마스터 볼륨' 조절 기능이 없는 경우가 있다. 이런 장치들을 위해 사용자 공간 라이브러리는 'softvol' 플러그인을 통해 소프트웨어 방식으로 볼륨 조절 기능을 제공한다. 따라서 응용 프로그램 소프트웨어는 특정 기능이 하드웨어에서 직접 지원되는지, 아니면 소프트웨어 에뮬레이션을 통해 제공되는지 신경 쓸 필요 없이 일관된 방식으로 사운드 기능을 사용할 수 있다.

3. 2. 소프트웨어 지원

ALSA는 초기 설계 단계부터 오픈 사운드 시스템(OSS)에서 지원하지 못했던 여러 기능을 포함하도록 만들어졌다. 주요 기능은 다음과 같다.

  • 하드웨어 기반의 MIDI 합성 및 연주
  • 여러 채널의 하드웨어 믹싱
  • 전이중 통신 (동시에 소리를 내보내고 입력받는 기능)
  • 멀티프로세싱 환경에 적합한 스레드 안전 장치 드라이버


이러한 고급 기능들을 지원하기 위해 ALSA는 OSS보다 훨씬 크고 복잡한 API를 가지고 있다. 이 때문에 ALSA를 직접 사용하여 애플리케이션을 개발하는 것은 상대적으로 난이도가 높다. 하지만 ALSA는 OSS 에뮬레이션 레이어를 제공하여, 개발자들이 더 단순하고 이식성이 높은 OSS API를 사용할 수도 있게 한다. 다만, 일부 리눅스 배포판에서는 이 에뮬레이션 기능이 빠져 있거나 기본적으로 활성화되어 있지 않을 수 있다.

ALSA는 사운드 장치 드라이버뿐만 아니라, 사용자 공간 라이브러리도 함께 제공한다. 이 라이브러리는 개발자들이 커널 드라이버와 직접 상호작용하는 대신, 더 높은 수준의 API를 통해 드라이버 기능을 사용할 수 있도록 돕는다. 커널 API가 하드웨어의 기능을 직접 반영하는 경향이 있는 반면, ALSA 사용자 공간 라이브러리는 다양한 하드웨어 장치 간의 차이를 최대한 숨기고 일관된 인터페이스를 제공하는 것을 목표로 한다.

이러한 추상화는 플러그인을 통해 부분적으로 구현된다. 예를 들어, 많은 최신 사운드 카드나 내장 사운드 칩에는 하드웨어 자체에 '마스터 볼륨' 조절 기능이 없는 경우가 많다. 이런 경우, ALSA 사용자 공간 라이브러리는 'softvol'이라는 소프트웨어 플러그인을 통해 소프트웨어적으로 볼륨 조절 기능을 제공한다. 결과적으로, ALSA를 사용하는 애플리케이션 소프트웨어는 볼륨 조절 기능이 하드웨어에서 직접 제공되는지, 아니면 소프트웨어적으로 에뮬레이션되는지 신경 쓸 필요 없이 동일한 방식으로 볼륨을 제어할 수 있다.

4. ALSA 개념

ALSA는 오픈 사운드 시스템(OSS)에서 지원하지 못했던 몇 가지 기능을 포함하여 설계되었다. 주요 기능으로는 하드웨어 기반 MIDI 합성, 여러 채널에 대한 하드웨어 믹싱, 전이중 통신, 멀티프로세싱 환경에 적합한 스레드 안전 장치 드라이버 등이 있다.

이러한 고급 기능들을 지원하기 위해 ALSA는 OSS에 비해 더 크고 복잡한 API를 가지고 있어, 이를 직접 사용하는 애플리케이션 개발은 상대적으로 난이도가 높을 수 있다. 하지만 ALSA는 OSS 에뮬레이션 레이어를 제공하므로, 개발자는 필요에 따라 더 간소하고 이식성이 높은 OSS API를 활용할 수도 있다.

또한 ALSA는 사운드 장치 드라이버뿐만 아니라, 사용자 공간 라이브러리도 제공한다. 이 라이브러리는 커널 드라이버와 직접 상호작용하는 것보다 더 높은 수준의 API를 제공하여 개발 편의성을 높인다. 사용자 공간 라이브러리의 중요한 특징 중 하나는 하드웨어 간의 차이를 추상화한다는 점이다. 예를 들어, 특정 사운드 카드에 '마스터 볼륨' 조절 기능이 없더라도, 라이브러리는 'softvol'과 같은 소프트웨어 플러그인을 통해 소프트웨어적으로 볼륨 조절 기능을 제공할 수 있다. 이를 통해 애플리케이션 소프트웨어 개발자는 하드웨어의 구체적인 차이를 신경 쓰지 않고 일관된 방식으로 사운드 기능을 구현할 수 있다.[16][17][18]

4. 1. 카드와 장치

이 절에서는 ALSA와 관련된 기본 개념에 대한 개요를 제공한다.[16][17][18]

일반적으로 ALSA는 0부터 7까지 번호가 매겨진 최대 8개의 카드를 지원한다. 각 카드는 입력 및 출력을 수행할 수 있는 물리적 또는 논리적 커널 장치이다. 또한 각 카드는 "헤드셋" 또는 "ICH9"와 같은 설명 문자열인 id로 주소를 지정할 수도 있다.

카드는 0부터 시작하는 번호가 매겨진 장치를 갖는다. 장치는 컴퓨터에서 소리를 출력하는 재생 유형일 수도 있고, 캡처, 제어, 타이머 또는 시퀀서와 같은 다른 유형일 수도 있다.[19] 특정 장치가 지정되지 않으면 기본적으로 장치 번호 0이 사용된다.

장치에는 0부터 시작하는 번호가 매겨진 하위 장치가 있을 수 있다. 하위 장치는 스피커 쌍과 같이 장치에 대한 관련 사운드 엔드포인트를 나타낸다. 하위 장치가 지정되지 않거나 하위 장치 번호 -1이 지정되면 사용 가능한 모든 하위 장치가 사용된다.

카드의 인터페이스는 카드를 액세스하기 위한 ALSA 프로토콜에 대한 설명이다. 가능한 인터페이스에는 hw, plughw, default, plug:dmix가 있다. hw 인터페이스는 커널 장치에 직접 액세스할 수 있지만 소프트웨어 믹싱 또는 스트림 어댑테이션 지원은 제공하지 않는다. plughwdefaulthw 인터페이스에서 오류가 발생하면 사운드 출력을 활성화한다.

응용 프로그램은 일반적으로 다음과 같은 형태를 갖는 장치 문자열을 사용하여 앞서 언급한 모든 사양을 결합하여 사운드 출력을 설명한다(대소문자 구분):

  • interface:card,device,subdevice
  • interface:CARD=1,DEV=3,SUBDEV=2.


ALSA 스트림은 소리를 나타내는 데이터 흐름이다. 가장 일반적인 스트림 형식은 하드웨어의 특성 또는 매개변수와 일치하도록 생성되어야 하는 PCM이며, 다음과 같은 사항을 포함한다.

  • 샘플링 속도: 가정용 스테레오에서는 44.1 kHz, 홈 시어터에서는 48 kHz가 일반적이지만 하이파이 오디오 제작 또는 재생의 경우 88.2 kHz, 96 kHz 또는 192 kHz까지 가능하다.
  • 샘플 너비: 샘플당 비트 수(예: 8, 16, 24 또는 32비트/샘플)로 측정
  • 샘플 인코딩: 바이트 순서 등
  • 채널 수: 모노는 1, 스테레오는 2, AC-3/IEC958은 6

4. 2. 인터페이스

ALSA는 사운드 장치 드라이버 외에도, 사용자 공간 라이브러리를 제공하여 커널 드라이버와 직접 상호작용하는 것보다 더 높은 수준의 API를 통해 드라이버 기능을 사용할 수 있게 한다. 커널 API가 하드웨어 기능을 직접 반영하는 것과 달리, ALSA의 사용자 공간 라이브러리는 서로 다른 하드웨어 간에도 가능한 한 동일하게 처리될 수 있도록 추상화된 인터페이스를 제공하며, 일부 기능은 소프트웨어 플러그인 형태로 구현된다. 예를 들어, 많은 사운드 카드나 사운드 칩에는 '마스터 볼륨' 조절 기능이 없지만, 사용자 공간 라이브러리는 'softvol' 플러그인을 통해 소프트웨어적으로 볼륨 조절 기능을 제공한다. 이를 통해 애플리케이션 소프트웨어는 하드웨어 간의 구체적인 차이를 신경 쓸 필요가 없어진다.[16][17][18]

ALSA는 일반적으로 0부터 7까지 번호가 매겨진 최대 8개의 '''카드'''(card)를 지원한다. 각 카드는 소리 입출력을 수행할 수 있는 물리적 또는 논리적 커널 장치이다. 카드는 "헤드셋"이나 "ICH9"와 같은 설명 문자열인 '''id'''로도 주소를 지정할 수 있다.

카드는 0부터 시작하는 번호가 매겨진 '''장치'''(device)를 가진다. 장치는 컴퓨터에서 소리를 출력하는 '재생'(playback) 유형일 수도 있고, 소리를 입력받는 '캡처'(capture), 또는 '제어'(control), '타이머'(timer), '시퀀서'(sequencer)와 같은 다른 유형일 수도 있다.[19] 특정 장치가 지정되지 않으면 기본적으로 장치 번호 0이 사용된다.

장치에는 0부터 시작하는 번호가 매겨진 '''하위 장치'''(subdevice)가 있을 수 있다. 하위 장치는 스피커 한 쌍과 같이 장치에 대한 관련된 소리 출력 지점(endpoint)을 나타낸다. 하위 장치가 지정되지 않거나 하위 장치 번호 -1이 지정되면 사용 가능한 모든 하위 장치가 사용된다.

카드의 '''인터페이스'''(interface)는 해당 카드를 사용하기 위한 ALSA 프로토콜을 설명한다. 가능한 인터페이스에는 'hw', 'plughw', 'default', 'plug:dmix' 등이 있다. 'hw' 인터페이스는 커널 장치에 직접 접근하지만, 소프트웨어 믹싱이나 스트림 변환 기능은 제공하지 않는다. 'plughw'와 'default' 인터페이스는 'hw' 인터페이스 사용 시 오류가 발생할 경우 소리 출력을 가능하게 해주는 역할을 한다.

애플리케이션은 일반적으로 다음과 같은 형태의 '''장치 문자열'''(device string)을 사용하여 사운드 출력을 지정한다(대소문자를 구분한다):

  • ''interface:card,device,subdevice''
  • ''interface:CARD=1,DEV=3,SUBDEV=2''


ALSA '''스트림'''(stream)은 소리를 나타내는 데이터의 흐름이다. 가장 일반적인 스트림 형식은 PCM(Pulse Code Modulation)이며, 하드웨어의 특성이나 매개변수에 맞춰 생성되어야 한다. 주요 매개변수는 다음과 같다.

  • '''샘플링 속도'''(sampling rate): 초당 샘플링 횟수. 일반적인 스테레오에서는 44.1 kHz, 홈 시어터에서는 48 kHz가 사용되며, 고음질 오디오 작업이나 재생 시에는 88.2 kHz, 96 kHz 또는 192 kHz까지 사용될 수 있다.
  • '''샘플 너비'''(sample width): 샘플당 비트 수 (예: 8, 16, 24, 32 비트/샘플). 비트 깊이와 관련된다.
  • '''샘플 인코딩'''(sample encoding): 데이터 표현 방식, 예를 들어 바이트 순서 등.
  • '''채널 수'''(number of channels): 모노는 1개, 스테레오는 2개, AC-3/IEC958 형식은 6개 채널을 사용한다.


ALSA는 초기 설계 당시 OSS(Open Sound System)가 지원하지 못했던 몇 가지 기능을 포함하도록 설계되었다.

  • 하드웨어 기반 MIDI 합성
  • 여러 채널에 대한 하드웨어 믹싱
  • 전이중(Full-duplex) 통신
  • 멀티프로세싱 환경에 적합한 스레드 세이프(thread-safe) 장치 드라이버


이러한 기능들을 지원하기 위해 ALSA는 OSS보다 더 크고 복잡한 API를 가지게 되었다. 이로 인해 ALSA를 사용하여 애플리케이션을 개발하는 것이 OSS를 사용하는 것보다 어려울 수 있다. 하지만 ALSA는 OSS 에뮬레이션 레이어를 제공하여, 개발자가 원한다면 더 간단하고 이식성 높은 OSS API를 사용할 수도 있다.

4. 3. 장치 문자열

ALSA는 일반적으로 0부터 7까지 번호가 매겨진 최대 8개의 '''카드'''를 지원한다.[16][17][18] 각 카드는 입출력을 수행할 수 있는 물리적 또는 논리적 커널 장치이며, "''헤드셋''"이나 "''ICH9''"와 같은 설명 문자열인 ''id''로도 주소를 지정할 수 있다.

카드는 0부터 시작하는 번호가 매겨진 '''장치'''를 가진다. 장치는 소리를 출력하는 ''재생'' 유형이거나, ''캡처'', ''제어'', ''타이머'', ''시퀀서''와 같은 다른 유형일 수 있다.[19] 특정 장치가 지정되지 않으면 기본적으로 장치 번호 0이 사용된다.

장치에는 0부터 시작하는 번호가 매겨진 '''하위 장치'''가 있을 수 있다. 하위 장치는 스피커 쌍처럼 장치에 대한 관련 사운드 출력 지점을 나타낸다. 하위 장치가 지정되지 않거나 하위 장치 번호 -1이 지정되면 사용 가능한 모든 하위 장치가 사용된다.

카드의 '''인터페이스'''는 카드를 사용하기 위한 ALSA 프로토콜을 설명한다. 가능한 인터페이스에는 ''hw'', ''plughw'', ''default'', ''plug:dmix'' 등이 있다. ''hw'' 인터페이스는 커널 장치에 직접 접근하지만, 소프트웨어 믹싱이나 스트림 변환 지원은 제공하지 않는다. ''plughw''와 ''default''는 ''hw'' 인터페이스에서 오류가 발생할 경우 사운드 출력을 가능하게 한다.

애플리케이션은 일반적으로 이러한 사양들을 조합하여 사운드 출력을 지정하는데, 이때 대소문자를 구분하는 '''장치 문자열'''을 사용한다. 장치 문자열의 형식은 다음과 같다.

  • ''interface:card,device,subdevice''
  • ''interface:CARD=1,DEV=3,SUBDEV=2''


ALSA '''스트림'''은 소리를 나타내는 데이터 흐름이다. 가장 일반적인 스트림 형식은 PCM이며, 하드웨어의 특성이나 매개변수에 맞춰 생성되어야 한다. 여기에는 다음과 같은 요소들이 포함된다.

  • '''샘플링 속도''': 가정용 스테레오에서는 44.1 kHz, 홈 시어터에서는 48 kHz가 일반적이며, 하이파이 오디오 제작이나 재생 시에는 88.2 kHz, 96 kHz 또는 192 kHz까지 사용될 수 있다.
  • '''샘플 너비''': 샘플당 비트 수로 측정하며, 8, 16, 24 또는 32비트/샘플 등이 있다.
  • '''샘플 인코딩''': 바이트 순서 등을 포함한다.
  • '''채널 수''': 모노는 1, 스테레오는 2, AC-3/IEC958은 6채널이다.

4. 4. 스트림

ALSA '''스트림'''은 소리를 나타내는 데이터 흐름이다. 가장 일반적인 스트림 형식은 PCM이며, 하드웨어의 특성 또는 매개변수에 맞춰 생성되어야 한다. 주요 특성은 다음과 같다.

  • '''샘플링 속도''': 가정용 스테레오에서는 44.1 kHz, 홈 시어터에서는 48 kHz가 일반적이지만, 하이파이 오디오 제작 또는 재생의 경우 88.2 kHz, 96 kHz 또는 192 kHz까지 사용될 수 있다.
  • '''샘플 너비''': 샘플당 비트 수로 측정하며, 예를 들어 8, 16, 24 또는 32 비트/샘플 등이 있다.
  • '''샘플 인코딩''': 바이트 순서 등을 포함한다.
  • '''채널 수''': 모노는 1개, 스테레오는 2개, AC-3/IEC958은 6개 채널을 사용한다.

5. 응용 프로그램

ALSA는 오픈 사운드 시스템(OSS)에 비해 훨씬 복잡하고 많은 양의 API를 제공하므로, ALSA를 음향 기술로 사용하여 애플리케이션을 개발하는 데 어려움이 따른다. ALSA를 OSS 에뮬레이션 레이어를 제공하도록 설정할 수도 있지만, 많은 리눅스 배포판에서는 이 기능이 포함되지 않거나 사용 불가능한 경우가 많다.

이러한 복잡성을 완화하기 위해 ALSA는 사운드 장치 드라이버 외에도 사용자 공간 라이브러리를 제공한다. 이 라이브러리는 커널 드라이버와 직접 상호작용하는 것보다 더 높은 수준의 API를 제공하여 개발자들이 드라이버 기능을 쉽게 사용할 수 있도록 돕는다. 하드웨어 기능에 직접 접근하는 커널 API와 달리, ALSA의 사용자 공간 라이브러리는 다양한 하드웨어 간의 차이를 추상화하여 가능한 한 일관된 인터페이스를 제공한다. 일부 기능은 소프트웨어 플러그인 형태로 구현되기도 한다. 예를 들어, '마스터 볼륨' 조절 기능이 없는 사운드 카드나 사운드 칩을 위해 사용자 공간 라이브러리는 'softvol' 플러그인을 통해 소프트웨어적으로 볼륨 조절 기능을 제공한다. 이를 통해 소프트웨어 개발자는 특정 하드웨어의 세부적인 차이를 신경 쓰지 않고 애플리케이션을 개발할 수 있다.

ALSA 프로젝트는 리눅스 커널 내부의 소프트웨어 프레임워크 외에도 다양한 명령줄 도구와 유틸리티를 제공한다.[10]

도구 종류이름설명
명령줄 유틸리티alsactl[11]사운드 카드 설정을 저장하고 불러오는 유틸리티
명령줄 인터페이스amixer[12]ALSA 믹서 컨트롤을 위한 명령줄 인터페이스
명령줄 유틸리티arecord / aplay오디오 녹음 및 재생을 위한 명령줄 유틸리티
텍스트 사용자 인터페이스(TUI)alsamixer[7][8][9]ncurses 기반의 텍스트 환경 믹서



또한, 제3자 개발자들이 개발한 다양한 그래픽 사용자 인터페이스(GUI) 애플리케이션도 존재한다.

GUI 애플리케이션기반 라이브러리/환경주요 기능
GNOME-ALSAmixer[13]GTK / GNOMEGNOME 데스크톱 환경을 위한 ALSA 믹서
Kmix[13]Qt / KDEKDE 데스크톱 환경을 위한 믹서
XFCE4-mixerGTK / XfceXfce 데스크톱 환경을 위한 믹서
LXpanelGTK / LXDELXDE 데스크톱 환경의 패널에 포함된 믹서 기능
QasHctlQtALSA 하드웨어 컨트롤(HCTL) 인터페이스 GUI
QasMixerQtALSA 믹서 GUI
PavucontrolGTKPulseAudio 볼륨 컨트롤러 (ALSA 백엔드 사용 가능)
AconnectGUI[14]ALSA 시퀀서 연결 관리 GUI
tapiir[14]ALSA 시퀀서 연결 관리 GUI
polarbear[14]ALSA 시퀀서 연결 관리 GUI
ALSAmixerGUI[15]FLTKFLTK 기반의 ALSA 믹서 GUI
ZynAddSubFX소프트웨어 신시사이저 (ALSA 출력 지원)
YoshimiZynAddSubFX 기반의 소프트웨어 신시사이저 (ALSA 출력 지원)


6. 구현

ALSA는 오픈 사운드 시스템(OSS)이 지원하지 못했던 몇 가지 기능을 포함하여 설계되었다. 주요 목표는 하드웨어 기반 미디 합성, 여러 개의 채널에 대한 하드웨어 믹싱, 전이중 통신, 그리고 다중 처리 환경에 적합한 스레드 안전 장치 드라이버를 지원하는 것이었다.

ALSA는 OSS에 비해 훨씬 더 복잡한 API를 제공하기 때문에, 이를 사용하여 애플리케이션을 개발하는 것은 상대적으로 난이도가 높을 수 있다. 이러한 복잡성을 완화하기 위해, ALSA는 사운드 장치 드라이버뿐만 아니라 사용자 공간 라이브러리도 함께 제공한다. 이 라이브러리는 커널 드라이버와 직접 상호작용하는 것보다 더 높은 수준의 API를 제공하며, 다양한 하드웨어 간의 차이를 추상화하여 개발자가 특정 하드웨어에 얽매이지 않고 소프트웨어를 개발할 수 있도록 돕는다. 예를 들어, 많은 사운드 카드에는 하드웨어적인 '마스터 볼륨' 조절 기능이 없지만, 사용자 공간 라이브러리의 'softvol' 플러그인을 통해 소프트웨어적으로 볼륨 조절 기능을 제공하여 이러한 차이를 감출 수 있다.

ALSA 개발 프로젝트는 야로슬라프 키셀라가 주도했으며, Gravis Ultrasound 사운드 카드용 리눅스 장치 드라이버를 기반으로 1998년에 시작되었다. 초기에는 리눅스 커널과 별도로 개발되다가 2002년 커널 2.5 개발 시리즈(2.5.4–2.5.5)에 통합되었다.[5] 이후 리눅스 커널 2.6 버전부터는 이전의 OSS를 기본 사운드 시스템으로 대체하게 되었으며, 기존 OSS와의 호환성을 위한 계층도 제공한다.[6]

6. 1. SoC (System on Chip)

ALSA SoC(System on Chip) 레이어는 시스템 온 칩 (SoC) 설계를 사용하는 임베디드 시스템에서 ALSA에 대한 더 나은 지원을 제공하는 것을 목표로 한다.[20]

6. 2. OSS 에뮬레이션

ALSA는 오픈 사운드 시스템(OSS)를 에뮬레이션하는 레이어를 제공하도록 설정할 수 있다. 하지만 많은 리눅스 배포판에서는 이 기능이 빠져 있거나 사용 불가능한 경우가 많다.

반대로, 오픈 사운드 시스템 버전 4는 ALSA를 에뮬레이트할 수 있다.[21]

한편, QNX는 ALSA에서 파생되었지만 직접 호환되지 않는 사운드 시스템을 사용한다. 헤더 파일과 라이브러리 이름은 ALSA와 동일하게 "asound"이다.[22] QNX에서 ALSA API 사용 방식 중 `ioctl()` 호출은 허용되지 않는다.[23]

6. 3. QNX

QNXALSA에서 파생되었지만 직접 호환되지 않는 사운드 시스템을 사용한다.[22] 헤더 파일과 라이브러리 이름은 ALSA 이름과 동일하게 "asound"이다.[22] ALSA API는 QNX 커널에서 허용되지 않는 방식으로 ioctl() 호출을 사용한다.[23]

참조

[1] 웹사이트 Jaroslav Kysela - Perex soft https://www.perex.cz[...]
[2] 간행물 Alsa Team http://www.alsa-proj[...] alsa-project.org 2012-01-08
[3] 간행물 ALSA http://www.ohloh.net[...] Ohloh 2012-01-08
[4] 웹사이트 Introduction http://www.alsa-proj[...] alsa-project.org 2012-01-08
[5] 간행물 Linux 2.5.5 release notes https://www.kernel.o[...] 2012-01-08
[6] 간행물 OSS Emulation http://www.alsa-proj[...] 2012-07-07
[7] 웹사이트 Alsa-project/Alsa-tools https://github.com/a[...] 2022-04-03
[8] 웹사이트 Alsa-tools - ALSA wiki http://alsa.opensrc.[...] 2022-01-12
[9] 웹사이트 ALSA User Info - AlsaProject https://www.alsa-pro[...]
[10] 웹사이트 Alsa-utils https://github.com/a[...] 2022-05-04
[11] 웹사이트 Category:Alsa-utils - ALSA wiki http://alsa.opensrc.[...] 2022-01-12
[12] 웹사이트 How to Use ALSA Utilities to Manage Linux Audio from the Terminal https://www.maketech[...] 2018-05-14
[13] 웹사이트 AlsaMixers - ALSA wiki http://alsa.opensrc.[...] 2022-01-12
[14] 웹사이트 maarten's homepage http://www.iua.upf.e[...] 2021-07-18
[15] 웹사이트 AlsaMixerGui http://www.iua.upf.e[...] Universitat Pompeu Fabra 2021-07-18
[16] 간행물 Introduction to Sound Programming with ALSA http://www.linuxjour[...] 2012-01-08
[17] 간행물 A User's Guide to ALSA http://www.linuxjour[...] 2012-01-08
[18] 간행물 Alsa C library Doxygen documentation http://www.alsa-proj[...] 2012-01-08
[19] 웹사이트 ALSA project - the C library reference: Sequencer interface https://www.alsa-pro[...] 2019-04-30
[20] 간행물 ALSA SoC Layer https://www.kernel.o[...] kernel.org 2017-07-13
[21] 웹사이트 Tips And Tricks - Open Sound System http://www.opensound[...]
[22] 웹사이트 Audio Architecture (QNX 6.4.1) https://www.qnx.com/[...]
[23] 웹사이트 ALSA and libasound.so https://www.qnx.com/[...]
[24] 웹사이트 Admin Guide README https://git.kernel.o[...]
[25] 웹사이트 Main Page News http://www.alsa-proj[...] 2023-11-21
[26] 문서 Linux 2.5.5 release notes http://www.kernel.or[...]
[27] 문서 alsa-project.org - Alsa Team http://www.alsa-proj[...]
[28] 웹인용 Analysis Summary – ALSA http://www.ohloh.net[...] Ohloh 2010-10-28
[29] 문서 http://www.kernel.or[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com