x86 하드웨어 기반 Mac OS X 2008–2024 기술 아카이브
InfiniteMac OSx86 › OSx86 10.X 코어 아키텍처 및 부트 시스템 › 오디오 활용 팁: 통합 기기(Aggregate Device)로 아날로그 + S/PDIF…
212,798 reads · 2008-11-28 – 2011-11-13
기술 모노그래프 10.X 코어 아키텍처

오디오 활용 팁: 통합 기기(Aggregate Device)로 아날로그 + S/PDIF 동시 출력이 안 될 때 해결법

패치된 AppleHDA 환경에서 OS X 기본 오디오 MIDI 설정의 통합 기기(Aggregate Device)가 첫 번째 출력 포트로만 소리를 내보내고 볼륨 조절이 되지 않는 문제를 Soundflower(16채널 가상 오디오)와 Xcode의 AU Lab을 조합해 아날로그 라인 출력과 S/PDIF 광출력 동시 출력 및 소프트웨어 볼륨 제어로 해결하는 방법입니다.

주 저자
@Dies 게시일: 2008-11-28
소속 컬렉션
OSx86 10.X 코어 아키텍처 및 부트 시스템
아카이브 기록 규모
누적 조회 212,798회 · 선별된 필드 노트 5건 (원본 게시물 6건에서 추출) · 2008-11-28 – 2011-11-13
참여 및 검증 멤버 (5)
@Dies (2)@Ianxxx@fahrvergnuugen@mr_murder@zorro23
관련 하드웨어 참조
Mac USB Audio DACs ↗ SATA III & NVMe SSDs ↗ USB 3.2 Boot Flash Drives ↗
한국어 전문 번역 기술 문서 · 터미널 명령어, Kext 파일명, ACPI 노드 및 부트 플래그는 원문 그대로 보존됩니다영문 원본 보기 (Original English) →

이 현상이 제 특정 하드웨어나 환경에만 국한된 문제인지, 아니면 다른 분들도 똑같이 겪고 계신 문제인지는 잘 모르겠지만, 저와 비슷하게 다중 오디오 동시 출력을 구현하려는 분들께 이 원리가 도움이 될까 싶어 공유합니다.

적어도 제게는 관련 정보를 찾기가 무척 힘들었고, 가까스로 찾아낸 해결책마저도 너무 오래전 자료였습니다. 원래 참고했던 스레드 링크라도 여기에 남기고 싶었지만 안타깝게도 다시 찾을 수가 없네요...

비표준 PC 하드웨어에서 OS X를 구동할 때 제가 겪은 가장 큰 불편함 중 하나는 오디오 출력 라우팅이었습니다. 다른 주요 운영체제(Windows 등)들은 드라이버만 정상 설치되어 있으면 사용 가능한 모든 오디오 출력 단자로 동시에 소리를 내보내는 데 아무런 문제가 없는 반면, OS X는 이를 처리하는 구조가 사뭇 다릅니다. 물론 Apple이 의도한 규격 하드웨어가 갖춰진 상태에서는 훨씬 더 정교한 오디오 프레임워크일지 몰라도, 지금 같은 상황에서는 그리 친절하지 않더군요.

내장 HDA 사운드 패치를 마친 뒤 헤드폰 단자, 라인 출력(Line Out), S/PDIF 디지털 광출력, 마이크 입력까지 제가 필요한 모든 입출력 포트 자체는 완벽하게 인식되고 개별 작동도 잘 되었습니다. 여기까지는 아주 좋았습니다. 이제 제가 원했던 것은 단지 아날로그 라인 출력과 S/PDIF 디지털 출력 양쪽으로 동시에 소리가 나오게 만드는 것이었는데, 인터넷에서 찾아본 모든 글에서는 오디오 MIDI 설정에서 '통합 기기(Aggregate Device)'를 하나 만들기만 하면 아주 간단하게 "그냥 알아서 작동할 것"이라고 설명하고 있었습니다.

하지만 제가 실제로 겪은 결과는 다음과 같았습니다:

a.) 동시 출력이 전혀 작동하지 않았습니다. 무슨 짓을 해도 통합 기기 목록의 맨 첫 번째에 배치된 단일 출력 단자로만 소리가 나왔습니다.

b.) 게다가 디지털 출력(S/PDIF)은 OS X 특성상 소프트웨어 볼륨 조절이 비활성화되기 때문에, 설령 통합 기기가 작동한다 한들 시스템 전체의 소프트웨어 볼륨 제어를 전혀 쓸 수 없다는 문제가 있었습니다.

결국 제 환경에서 찾아낸 해답은 오픈소스 가상 오디오 드라이버인 Soundflower ↗와 Xcode 개발자 도구에 기본 포함된 AU Lab(/Developer/Applications/Audio/AU Lab)을 조합하는 것이었습니다. Soundflower를 설치하면 2채널과 16채널짜리 가상(Pseudo) 오디오 장치가 시스템에 추가되는데, 이 장치들은 혼자서는 아무 역할도 하지 않으며 AU Lab을 통해 신호를 어디로 보내라고 라우팅을 지정해 주어야 비로소 작동합니다.

Soundflower를 설치하고 재부팅한 뒤, '오디오 MIDI 설정(Audio/MIDI Setup)'을 열고 제 디지털 출력(S/PDIF), 아날로그 라인 출력(Line Out), 그리고 새로 생성된 Soundflower 16채널 장치를 하나로 묶어 'Surround Sound'라는 이름의 통합 기기를 만들었습니다. 그런 다음 AU Lab을 실행하여 이 새 장치들을 연결해 주었습니다. 앱을 처음 열면 뜨는 설정 창의 출력(Outputs) 탭에서 라인 출력용과 S/PDIF 출력용으로 출력 스트림들을 추가했습니다.

그다음 입력(Inputs) 섹션에서는 단 하나의 입력만 필요합니다.

여기서부터가 핵심인데, 입력 채널(Input Channels)을 클릭하고 방금 만든 통합 기기 내부의 Soundflower 16채널 장치를 입력 소스로 선택했습니다.

그리고 출력 채널(Output Channels)을 클릭하여 앞서 생성해 둔 'Surround Sound' 통합 기기를 선택한 뒤 완료(Done)를 눌렀습니다.

그러면 첨부한 스크린샷과 같은 믹서 라우팅 창이 완성됩니다.

여기에 추가로 걸어둔 Bus 1과 Bus 2는 일종의 증폭기(Amplifier) 역할을 하여 소리를 한층 더 크고 선명하게 만들어 주며, 옆에 비워둔 미사용 출력 채널은 이상하게도 저것을 빼면 간헐적으로 끔찍한 하울링(피드백 노이즈)이 발생하길래 방지용으로 남겨둔 것입니다.

솔직히 말해 우아한 해결책과는 거리가 멀고 진정한 분리형 서라운드 사운드가 아닌 스테레오 복제 출력이지만, 제 목적에는 완벽하게 부합합니다. 이제 7개의 스피커와 서브우퍼 전체에서 동시에 빵빵하게 소리가 나오며, 무엇보다 마스터 소프트웨어 볼륨 조절까지 완벽하게 작동합니다! 이 AU Lab 설정 파일을 저장해 두고 계정의 로그인 항목(Login Items)에 등록해 두면 부팅 시 자동으로 실행되므로 창을 최소화하거나 우클릭해 가리기(Hide)만 해주면 되어 실사용에 큰 불편함도 없습니다.

부디 저와 같은 문제를 겪고 계신 다른 분들께도 유용한 팁이 되기를 바랍니다.

커뮤니티 실측 및 기술 필드 노트

총 6개의 원본 스레드 응답 중 기술적 가치가 높은 5개의 필드 노트 수록

필드 노트 #1 @Ianxxx 2008-12-17

정말 끝내주게 잘 작동하네요, 감사합니다!
부팅할 때마다 매번 AU Lab 창을 수동으로 최소화하지 않아도 되는 꼼수를 하나 찾아냈습니다.
저장한 `.trak`(AU Lab 설정) 파일을 TextMate 같은 텍스트 에디터로 열고 맨 아래쪽으로 스크롤하여 다음 부분을 찾습니다:

<key>Window Frame</key>
<string>{{388, 40}, {355, 577}}</string>
<key>Window Max</key>
<string>{2560, 1622}</string>
<key>Window Min</key>
<string>{360, 540}</string>

이 값을 다음과 같이 1x1 픽셀 크기로 바꿔줍니다:

<key>Window Frame</key>
<string>{{1, 1}, {1, 1}}</string>
<key>Window Max</key>
<string>{2560, 1622}</string>
<key>Window Min</key>
<string>{1, 1}</string>

이렇게 해두면 실행되어도 화면에 창이 거의 보이지 않습니다. 다만 문서를 먼저 닫지 않고 앱을 바로 종료할 때 비정상 종료 경고 창이 뜨는 게 옥에 티이긴 하지만, 모든 걸 다 가질 순 없으니까요.

좀 더 우아한 상용 솔루션을 찾자면 Soundflower를 만든 바로 그 회사(Cycling '74)에서 내놓은 Upmix라는 프로그램이 있는데, 안타깝게도 유료일뿐더러 가격이 무려 미화 500달러에 육박하더군요.

모더레이터 편집 메모: 미안합니다 Ianxxx 님, 실수로 게시물 앞부분 일부를 잘라먹었네요. 혹시 다시 내용을 보충해 주실 수 있을까요? 사과드립니다.

괜찮습니다 :-) - Ian

필드 노트 #2 @fahrvergnuugen 2009-04-03

오로지 이 글에 감사 인사를 남기려고 회원 가입까지 했습니다. 제 Mac에서 두 개의 사운드 카드로 동시에 소리를 내보내려고 꼬박 이틀을 날렸는데, 이렇게 간단한 작업이 OS X에서는 이토록 어려울 줄은 꿈에도 몰랐네요.

필드 노트 #3 @mr_murder 2009-04-25 ↳ Re: @Dies

멋진 가이드입니다 (Y) 감사합니다. 언젠가는 좀 더 "깔끔한" 커널 레벨의 해결책이 나오길 기대해 봅니다... 현재로선 VoodooHDA 쪽이 꽤 유망해 보이더군요.

@Diesa.) 동시 출력이 전혀 작동하지 않았습니다. 무슨 짓을 해도 통합 기기 목록의 맨 첫 번째에 배치된 단일 출력 단자로만 소리가 나왔습니다.

그 현상은 일반 2채널 스테레오 음원을 재생할 때 나타나는 정상적인 동작입니다. OS X에는 윈도우 사운드 드라이버 같은 자체 '스피커 채우기(Speaker Fill / 스테레오 업믹싱)' 옵션이 없기 때문에, 원본 미디어에 지정된 정확한 개별(Discrete) 채널 번호로만 오디오 신호를 그대로 보냅니다. 혹시 Perian 코덱 설정에서 다중 채널 출력을 켜고 AC3 5.1채널 오디오가 들어간 동영상 파일을 재생해 보셨나요? 참고로 Apple 순정 DVD 플레이어는 오직 S/PDIF(디지털 광출력)를 통해서만 5.1채널을 내보내므로, 아날로그 멀티채널로 영화를 보려면 대신 VLC 플레이어를 사용해야 합니다.

@Diesb.) 게다가 디지털 출력(S/PDIF)은 OS X 특성상 소프트웨어 볼륨 조절이 비활성화되기 때문에, 설령 통합 기기가 작동한다 한들 시스템 전체의 소프트웨어 볼륨 제어를 전혀 쓸 수 없다는 문제가 있었습니다.

원래 S/PDIF 디지털 광출력에서는 소프트웨어 볼륨 조절이 안 되는 게 정상 아닌가요? 오디오 신호를 소프트웨어에서 가공하는 게 아니라 디지털 신호 그대로 패스스루(Pass-thru)해서 내보내는 방식이니까요.

저도 아날로그 라인 출력 3개를 하나로 묶어 5.1채널 통합 기기(ALC888)로 만들어 쓰고 있는데, 마찬가지로 통합 기기 자체에는 마스터 볼륨 조절 기능이 비활성화되더군요. 이건 통합 기기(Aggregate Device) 아키텍처 자체의 한계인 것 같습니다.
대신 저는 AU Lab 없이 Soundflower에 동봉된 가벼운 메뉴 바 앱인 **Soundflowerbed**만을 이용해 5.1채널 소프트웨어 볼륨 조절을 강제로 활성화하는 간단한 방법을 찾아냈습니다. 같은 문제를 겪는 분들은 아래 순서를 따라 해 보세요:
1) 시스템 환경설정의 사운드 패널에서 묶으려는 각 개별 아날로그 출력 포트들의 볼륨을 모두 최대치(100%)로 올려둡니다.
2) 오디오 MIDI 설정에서 평소처럼 통합 기기(Aggregate Device)를 생성하고 5.1채널 스피커 배치를 지정합니다.
3) Soundflower에 포함된 **Soundflowerbed**를 실행한 뒤, Soundflower (16ch)의 처음 6개 채널(Channel 1~6)을 방금 만든 통합 기기의 1~6번 출력 채널에 각각 1:1로 매핑합니다.
4) 시스템 기본 사운드 출력 장치를 **Soundflower (16ch)**로 선택하고, 오디오 MIDI 설정에서 Soundflower (16ch)의 스피커 구성을 5.1 다중 채널 출력으로 맞춰줍니다.
5) 이제 5.1채널 시스템 전체에서 키보드 볼륨 키와 메뉴 바 마스터 볼륨 조절이 완벽하게 작동합니다!

누군가에게 도움이 되기를 바랍니다...

저자 업데이트 #1 @Dies 2009-04-27 ↳ Re: @mr_murder
@mr_murder원래 S/PDIF 디지털 광출력에서는 소프트웨어 볼륨 조절이 안 되는 게 정상 아닌가요? 오디오 신호를 소프트웨어에서 가공하는 게 아니라 디지털 신호 그대로 패스스루(Pass-thru)해서 내보내는 방식이니까요.

순수하게 기술적인 관점에서만 보면 님 말씀이 백번 맞습니다. 디지털 신호를 넘겨받는 외부 리시버나 최종 출력 기기 쪽에 자체 볼륨 조절기가 달려 있을 테니까요.

하지만 적어도 제 경험상 다른 주요 운영체제(Linux, Windows 등)들은 디지털 출력을 포함한 모든 가용 출력 단자에 대해 OS 차원의 소프트웨어 마스터 볼륨 제어 기능을 기본으로 제공해 줍니다.

필드 노트 #4 @zorro23 2011-11-13

다중 출력 시 특정 기기의 사운드 딜레이(지연) 문제

이제 최신 OS X Lion에서는 오디오 MIDI 설정에서 '다중 출력 기기(Multi-Output Device)'를 기본 지원해서 여러 출력 단자로 동시에 소리를 내보내기가 무척 쉬워졌습니다.

저는 해킨토시의 기본 아날로그 라인 출력(Line-out)에는 스테레오 앰프를 연결하고, 그래픽 카드의 HDMI 출력에는 LG LCD TV(내장 소형 스테레오 스피커)를 동시에 연결해 쓰고 있습니다.
문제는 LCD TV 자체의 영상/음성 처리 시간 때문에 아날로그 앰프 쪽보다 TV 스피커 쪽 소리가 미세하게 늦게 나오는(Sound delay) 현상이 발생한다는 점입니다.

양쪽 스피커에서 정확히 동시에 소리가 나도록 디지털 출력(HDMI)은 그대로 두고 아날로그 라인 출력(Line-out) 쪽에만 인위적으로 오디오 딜레이(지연 시간)를 걸어 싱크를 맞출 수 있는 해결책을 찾고 있습니다.

혹시 좋은 아이디어 있으신 분 계신가요?

출처 및 기여자 이력 (등록된 기여자 5명 · 원본 스레드 #1645)
사용자명기여 역할게시물 수활동 기간
@Dies주 저자22008-11-28 → 2009-04-27
@Ianxxx기여 멤버12008-12-17
@fahrvergnuugen기여 멤버12009-04-03
@mr_murder기여 멤버12009-04-25
@zorro23기여 멤버12011-11-13

언어 선택 · Choose your language