2023년 7월 24일 월요일

PortAudio란 무엇인가? LMMS에서 ASIO4ALL을 쓰는 것이 옳은가? FlexASIO는?

PortAudio란 무엇인가? 사실 나도 잘 모른다. 나의 제한된 지식에 의하면 PortAudio란 Audacity나 LMMS의 오디오 드라이버 설정에서 보이는 항목이라는 것이 전부이다. 

PortAudio is a free, cross-platform, open-source, audio I/O library. (출처)

Audio I/O를 위하여 PortAudio를 사용하는 프로그램의 목록이 여기에 있다. LMMS가 빠진 것을 보면, 이 목록에 있는 것 말고도 많은 응용프로그램이 PortAudio에 의존하고 있을 것이다. 그러나 내가 보기에 Windows 계열에서 소위 '주류'를 이루는 오디오 관련 응용프로그램을 사용할 때 PortAudio를 꼭 이용해야 할 일은 그다지 많지 않은 것 같다.

Windows의 오디오 관련 소프트웨어 설정에서 흔히 접하는 WASAPI는 Windows Audio Session API의 약자로서 Windows Vista부터 등장하였다고 한다. 요즘은 성능이 좋아진 WASAPI 덕분에 ASIO(forALL)을 사용할 필요가 없다는데... 'WASAPI vs. ASIO' 부류의 글은 구글에서 조금만 찾으면 나온다.

WASAPI와 ASIO는 동등한 레벨에서 일을 하는 도구로 여겨지는데, 나는 개발자도 아니고 아직 공부가 부족한 관계로 PortAudio와 이들과의 관계를 완벽하게 이해하지 못하였다. PortAudio API Overview에서 소개한 그림을 보면 PortAudio는 응용프로그램과 드라이버?(ASIO, WASAPI, ALSA...)의 사이를 연결하는 역할을 하는 것 같다.

Mac OS X에서는 오디오 신호 처리 관련 체계가 얼마나 단순한가! 그림 출처: PortAudio API Overview

다음 이미지에서 보였듯이 Audacity와 LMMS 설정 창에서 'PortAudio'를 만나게 된다.

Audacity의 설정 창. '호스트'에서 고를 수 있는 대상은 MME, Windows DirectSound, Windows WASAPI이다. 어느 것을 선택해도 PortAudio V19.7.0-devel이 사용 중인 것으로 나타난다.



LMMS 1.2.2의 설정 창.

공식 웹사이트에 설명에 의하면 "PortAudio is a free, cross-platform, open-source, audio I/O library"라 하였다.

왜 PortAudio 등에 관심을 갖는가? IK Multimedia가 무료로 제공하는 SampleTank 4 Custom Shop의 악기 소리가 매우 마음에 들어서 요즘 이를 이용하여 간단한 녹음을 하기 시작하였다. 주로 활용하는 녹음용 소프트웨어는 Audacity인데 여기에서는, 내장 소프트웨어 악기의 출력을 리듬 트랙과 분리하기가 어렵다. 전부 loopback 하나로 되돌아오는 소리이기 때문이다. 제대로 된 오디오 인터페이스와 제조사가 제공하는 ASIO 드라이버가 있다면 혹시 Audacity 수준에서 가능한지도 모르겠다. 리눅스에서 JACK을 사용할 때에는 이를 분리하여 녹음하는 것이 가능했던 것으로 기억한다.

LMMS에서 VeSTige를 사용하면 SampleTank를 VSTi로 로딩하는 것이 가능한데, 작동이 매끄럽지 않다. Sf2 player를 쓸 때에는 별다른 문제가 없었으나, SampleTank는 Sf2 형태로 사용할 수가 없다. Waveform Free에서 SampleTank를 로드하면 화면이 너무 작아서 알아보기 힘들고 마우스 포인터가 이상한 곳으로 간다. Cakewalk by BandLab에서는 ASIO4ALL을 거부하는 것 같다... Cakewalk은 다음 제품(유료화)이 나오면 더 이상 지원이 되지 않는다는 슬픈 소식도 들린다.

혹시 LMMS에서 ASIO4ALL을 쓰게 만들면 VeSTige 작동이 원활하게 될까? 이미 작년 가을에 작성할 글(LMMS에서 ASIO4ALL 드라이버를 쓰려면, 그리고 MIDI 신호 녹음의 문제)에서 PortAudio 라이브러리를 가져다가 ASIO4ALL이 제대로 동작하게 만드는 방법을 기술한 일이 있다. libportaudio64bit.dll 파일을 새로 가져다가 기존의 libportaudio-2.dll로 바꿔치기한 뒤에 LMMS를 다시 실행하면 다음의 창이 자동적으로 뜬다.


PORTAUDIO에 대한 설정에서 BACKEND를 클릭하면 비로소 'ASIO'가 나타난다.

LMMS의 설정을 변경하면 다음번 실행 때에 적용이 됨을 잊지 말자. 일단 종료를 한 뒤 다시 LMMS를 실행하면, 드디어 모니터 오른쪽 아래에 ASIO가 기동함을 알리는 작은 창이 나타난다.


그러나 아직 끝나지 않았다. ASIO 제어판을 열어서 WDM Device List에 보이는 다음의 두 사운드카드 중 내장(Realtek)을 무력화하고 idle 상태인 USB 오디오 인터페이스(Behringer)를 살려야 하는데 그게 잘 안된다. 공식 online help를 읽어봐도 영 아리송하다.

Realtek 옆의 ▷를 끄고 USB CODEC의 것을 켜야 하는데 그게 잘 안된다!

몇 차례의 시행착오 끝에 방법을 알아냈다. ASIO4ALL의 WDM Device List에서 ON/OFF에 해당하는 버튼을 클릭하여 원하는 설정을 만든 뒤 LMMS를 재실행해야 USB 오디오 인터페이스가 활성 상태에 들어간다. 제어판 자체에는 ASIO4ALL 재시작 기능이 없으니, 그럴 만도 하다. ASIO를 사용하는 프로그램이 재시작해야 ASIO의 바뀐 설정 상태가 적용된다는 간단한 원리를 잊지 말도록 하자.

ASIO4ALL을 절대 사용하지 말아야 하는 5가지 이유!라는 무시무시한 글까지 보이는 이 마당에 쓸데없이 ASIO4ALL에 집착하는 것은 아닌지 모르겠다. 돈 들이지 않고 녹음을 하려니 참으로 애로 사항이 많다.


Windows 환경의 Audacity에서 ASIO를 쓸 수 있는가?

독일 기업 Steinberg가 갖고 있는 ASIO의 라이선스 정책 때문에 이 기능을 포함하여 Audacity를 빌드하면 배포를 하지 못하고 개인 용도로만 써야 한다. Audacity 공식 문서 중 ASIO Audio Interface의 시작 부분을 자동 번역한 뒤 약간 고쳐서 인용해 본다.

독점적인 ASIO 인터페이스 표준은 짧은 대기 시간(latency) 녹음 및 재생을 위해 Windows에서 필수적입니다. 또한 일반적으로 Windows에서 다중 채널 녹음을 만드는 가장 좋은 방법입니다. 라이센스 제한으로 인해 출시된 Audacity 버전에서 ASIO 지원을 포함할 수 없지만, Audacity는 개인용, 비배포용 ASIO 지원으로 컴파일할 수 있습니다. 이 페이지에는 ASIO 라이센스 문제와 ASIO 지원으로 Audacity를 컴파일하는 단계가 요약되어 있습니다.

ASIO and Audacity라는 문서에서 용기 있는 자들을 위한 빌드 요령을 설명하고 있다. 읽어보니 조금 가졌던 용기가 다 사라지고 말았다. Audacity 포럼에 2021년 올라온 글 "Building Audacity 3.0.3 with ASIO on Windows"라는 글에서 약간의 희망을 주는 성공 사례를 소개하였지만, 그 행운이 나에게도 올까? Step-by-step tutorial에 보다 가까운 문서가 있어서 소개해 둔다. 이 글에서는 Audacity 3.3.2를 위한 빌드 전용 스크립트를 제공한다. 곧 시도해 볼 생각이다(그리고 2023년 7월 27일, 빌드에 성공하였다! 관련 글 링크).

[GitHub] Build your own Audacity for Windows with ASIO driver support

Building Audacity라는 공식 문서도 읽어보도록 하자.

Audacity에서 ASIO를 지원하도록 컴파일한다면, JACK Router를 통해서 매우 다양한 일을 할 수 있을 것으로 예상된다. 즉 Audacity 안에서 미리 생성한 리듬 트랙(메트로놈 소리)을 들으면서 가상 악기를 실시간 연주하여 오버더빙을 한다든지. 

정 아쉬우면 리눅스를 쓰면 된다....  

(사족) FlexASIO("the flexible universal ASIO driver")는 또 무엇인가? ASIO4ALL보다 나은가? reddit.com에 포스팅된 글에 의하면 그렇다고 한다. ASIO4ALL을 삭제하고 FlexASIO를 설치해 보았다. LMMS를 실행한 상태에서 유튜브의 재생음을 들을 수 있다!


FlexASIO의 설정은 텍스트로 된 configuration file을 건드려야 하는데, 친절하게도 별도로 개발된 FlexASIO GUI 프로그램이 있어서 도움이 된다. 세상에는 참 고마운 사람들이 많다. 오늘 하루 동안 별 것을 다 경험해 본다.

국어로 만들어진 FlexASIO 활용 자료도 제법 있는 것을 보니 쓸모가 많아 보인다. 다음은 "ASIO4ALL 오류나는 분들을 위한 대체 프로그램 FlexASIO 사용법"이라는 동영상이다. USB 마이크로폰을 사용하여 OBS에서 녹음을 하다가 간혹 장치 출동 오류를 겪는 사람에게 도움이 된다.



댓글 없음: