2021년 1월 20일 수요일

[우분투의 사운드와 MIDI] 갑자기 jack_control이 작동하지 않는다! 대안 제시, 그리고 Audacity의 멀티트랙 녹음을 싱크하기

퇴근 후의 일상. 오피스텔 방구석 생활도 얼마 남지 않았다.

우분투에서 음악을 다루는 일(애플리케이션을 통한 단순한 파일/스트리밍 재생, 외부 MIDI 기기 제어, 녹음 등)에 좀 더 익숙해지고자 거의 매일 '실습'을 하고 있다. 얼마 전에 구입한 USB 마이크까지 있으니 다양한 장비를 골라서 사용하는 재미도 있다.

이제 어느 정도는 익숙해졌다고 생각하던 며칠 전부터 갑자기 jack_control이 작동하지 않게 되었다. JACK이 작동하지 않으면 오디오 녹음이 매우 불편하다. Cheese나 Guvcview와 같은 웹캠 녹화 및 녹음에는 지장이 없다. 최소한 PulseAudio는 살아 있기 때문이다. 그러나 Audacity나 Rosegarden을 이용한 작업을 JACK 없이 하는 것은 상상하기 어렵다.

$ jack_control start
--- start
DBus exception: org.jackaudio.Error.Generic: Failed to open server

내 노트북 컴퓨터에서 몇 달 동안 저 메시지를 보지 못했었는데 갑자기 문제를 일으키고 있다. 어쩌면 최근에 PulseAudio 및 관련 패키지를 새로 설치하면서 설정이 아주 미묘하게 뒤틀린 것일지도 모른다. 이것은 매우 잘 알려진 에러이다. 그러나 아무리 검색을 통해서 고치는 방법을 적용해 보아도 해결이 되지 않았다. 

jackdbus(jack_control)를 이용하지 않고 jackd 명령으로 구동을 할 수는 있다. 하지만 이를 구현하는 audio 스크립트에서는 시작과 동시에 pasuspender가 실행되면서 PulseAudio가 잠시 멈춘다. 이런 상태에서 유튜브를 재생하면 소리가 나질 않는다. PulseAudio Jack Sink가 작동해야 이를 들을 수 있고 Audacity에서 녹음도 되는데 이를 구현하려면 약간 성가시다. WalkThrough User Pulse on Jack 웹문서를 참조하여 JACK1에 대한 방법을 참조하여 겨우 성공하였다. 실제로 내 노트북에 깔린 JACK은 JACK2에 해당한다. 테스트를 통해 웹문서에 있는 방법을 조금 변형하여 PulseAudio 출력을 Jack Sink로 보내는데 성공하였다.

  • $HOME/.asoundrc는 만들지 않아도 된다.
  • /etc/pulse/default.pa도 건드릴 필요가 없다. 맨 끝의 두 줄에서 set-default-sink와 source가 각각 jack-out과 jack-in으로 가리키도록 코멘트를 해제해 둔 것이 전부이다.
  • audio 스크립트에 이어서 다음을 실행한다. 별도의 스크립트를 만들면 된다.
$ pactl load-module module-jack-sink channels=2
$ pactl load-module module-jack-source channels=2
$ pacmd set-default-sink jack_out

맨 아래 명령은 /etc/pulse/default.pa의 맨 마지막 부분에 선언이 되어 있으니 불필요한 것인지도 모른다. 사실 이 기능은 /etc/pulse/default.pa에 이미 존재한다. 차이점이 있다면 jackdbus만을 경유하여 작동하는 것처럼 보인다는 것.

### Automatically connect sink and source if JACK server is present
.ifexists module-jackdbus-detect.so
.nofail
load-module module-jackdbus-detect channels=2
.fail
.endif

나도 더 이상은 모르겠다. jackdbus와 관련한 설정이 살짝 뒤틀렸음은 자명하다. 어쨌든 qjackctl을 쓰지 않고  명령행에서 jackd를 사용하는 것이 훨씬 편하다. 유튜브에서 원하는 음악을 틀어놓고 실시간으로 키보드(Qsynth)를 두드리는 재미 때문에 PulseAudio Jack Sink를 버릴 수가 없다!

Audacity에서 멀티 트랙 녹음 테스트를 해 본다. 나중에 녹음한 트랙이 먼저 녹음한 것보다 조금 더 빨리 재생이 됨을 발견하였다. 레이턴시도 아니고 이건 무슨 일일까? 한 문제를 해결하니 또다른 문제가 생긴다. 공부할 거리가 또 튀어나왔다!

2021년 1월 22일 업데이트

Audacity에서 멀티트랙 녹음을 했는데 재생을 해 보면 각 트랙이 서로 싱크(sync)하지 않음을 확인하였다. 이를 해결하려면 time shift tool을 써서 마우스로 녹음된 데이터를 움직이면 된다. 다음의 짧은 동영상(Audacity Tutorial Multitrack Recording How to Keep Tracks in Sync)를 보면 해결 방법을 누구나 쉽게 이해할 수 있다.
'jack_control start'를 실행했을 때 DBus exception 에러가 날 때도 있고 그렇지 않을 때도 있다. 이제는 컴퓨터에 충격이 갔던 것이 원인일지도 모른다는 생각이 든다. 재현성이 현저히 떨어지는 문제는 해결하기가 정말 어렵다.

댓글 없음: