sound 관련 잡설

proilline·2023년 2월 25일
0

발단

22년 10월, 전역 기념으로 데스크탑을 한번 엎었을때 일이다.(이때 gentoo -> nix -> gentoo라는 희대의 뻘짓을 저질렀는데, 이건 나중에 시간날때 썰을 풀어보도록 하겠다.)

언제나처럼 pulseaudio를 깔고 오디오 설정을 하던 와중에, sndio가 포착되고 만 것이다. (문제의 reddit 링크)

시스템 자원도 적게 먹고, 레이턴시도 거의 없다 그러고, 코드베이스도 작고(gentoo쓰다보면 은근 신경쓰인다)... 사실 다 필요없고 힙해서 써본거다.

문제는 리눅스에서 sndio를 쓰는 사람이 거의 없었다는 것.

세팅을 하려고 해도 bsd 관련 자료만 죽어라 나오고, 당시에는 oss나 alsa가 뭔지 아에 몰랐기 때문에 삽질을 너무 많이 했다.

/dev/snd0이 /dev/audio0과 매핑된다고? 그딴 디바이스 없는데? 뭐지?

이런 웃기지도 않는 삽질을 하면서 3일 가까이 날린걸 생각하면 진짜... 아직도 치가 떨린다.

덕택에 리눅스에서 sound 관련된 잡다한 지식을 알게 되었으니 뭐, 좋은게 좋은거 아닐까.

아무튼간에, 이만 본론으로 넘어가도록 하자.

alsa는 무엇일까

alsa는 advanced linux sound architecture의 약자이고, 이거 그냥 커널의 일부이다.

sound card같은 애들이랑 상호작용하기 위한 인터페이스? 정도로 이해하믄 된다. sound 관련된 추상화 레이어의 맨 밑바닥이라고 생각해도 될 것이다.(뭐 드라이버를 직접 짤 일이 생긴다면 또 모르겠지만... 일단은 그렇다)

어떤식의 인터페이스를 제공하는가? 는 이 글의 alsa 부분을 참조하시길. 너무 복잡하고 길어서 설명하기 좀 그렇다.

어찌됐든 alsa만 가지고도 기본적인 소리 출력이나 간단한 믹싱 정도는 가능하지만, 그 이상을 바랄 수는 없다.

뭐, 앱별로 볼륨을 조정한다던가 이퀼라이저를 먹인다거나 하는 좀 복잡한 기능이 필요하다면, sound server의 힘을 빌려야 한다.

sound server란?

말했다시피, alsa는 sound card를 조작하기 위한 인터페이스에 불과하니만큼, 부족한 기능이 제법 많다. 그런 기능을 제공하는 daemon 형태의 프로그램을 통칭 sound server라고 부른다.

리눅스의 de facto standard는 pulseaudio, bsd에서는 주로 sndio를 쓴다.

번외 - OSS

유닉스 버전 alsa라고 이해하면 될 듯하다.

리눅스도 한때 oss 인터페이스를 제공하던 시절이 있었지만, 이런저런 이유로 현재는 alsa가 되었다.

alsa에 oss-compatible layer가 있긴 한데, 대부분의 배포판에선 저 옵션이 꺼져있다보니 써먹으려면 좀 귀찮을 수 있다.

지난번에 sndiod 설정하다가 제대로 엿먹었던것 이거 때문. 모든 doc이 bsd 기준으로(그러니까 oss 기준으로)되어있었는데, 그걸 멋모르고 리눅스에서 그-대로 따라하는바람에 그만...


참고한 글들

0개의 댓글