2022년 10월 16일 일요일

우분투 22.04에서 Qsynth-QjackCtl을 쓰기가 더욱 편리해졌다(USB 건반 연결)

우분투가 설치된 컴퓨터에 USB MIDI keyboard controller를 연결한 다음 FluidSynth를 연주하려면 몇 가지 사전 작업이 필요했었다. 예를 들어 명령행 환경이라면 FluidSynth를 실행한 다음 aconnect 명령으로 건반과 FluidSynth를 연결해 주어야 한다(다음의 명령어 사례). 컴퓨터에 연결된 MIDI 기기의 연결을 위해 입출력 포트 번호를 확인하려면 'aplaymidi -l' 또는 'aconnect [-i|-o]' 명령을 사용한다.

$ fluidsynth --server --audio-driver=alsa /usr/share/sounds/sf2/FluidR3_GM.sf2
$ aplaymidi -l
  Port    Client name                      Port name
 14:0    Midi Through                     Midi Through Port-0
 24:0    iCON iKeyboard 5 Nano V1.06      iCON iKeyboard 5 Nano V1.06 MID
128:0    FLUID Synth (5439)               Synth input port (5439:0)
$ aconnect -i
client 0: 'System' [type=커널]
    0 'Timer           '
    1 'Announce        '
client 14: 'Midi Through' [type=커널]
    0 'Midi Through Port-0'
client 24: 'iCON iKeyboard 5 Nano V1.06' [type=커널,card=2]
    0 'iCON iKeyboard 5 Nano V1.06 MID'
$ aconnect -o
client 14: 'Midi Through' [type=커널]
    0 'Midi Through Port-0'
client 24: 'iCON iKeyboard 5 Nano V1.06' [type=커널,card=2]
    0 'iCON iKeyboard 5 Nano V1.06 MID'
client 128: 'FLUID Synth (5439)' [type=사용자,pid=5439]
    0 'Synth input port (5439:0)'
$ aconnect 24:0 128:0  # 각 포트에 속한 디바이스가 하나뿐이므로 ':0'는 없어도 된다.

JACK을 쓰는 경우라면 QjackCtl에서 창을 열고 직접 연결을 해야만 했다. 그러나 사전 설정 과정에서 'a2jmidid -e' 명령어가 구동하도록 만들어야 했던 것으로 기억한다.

이러한 불편함이 우분투 22.04 LTS(Jammy Jellyfish) 에서는 많이 사라진 것 같다. Qsynth(v0.9.6, Qt GUI interface for FluidSynth)를 실행한 다음 건반을 두드려 보았다. 사운드폰트 파일이 제대로 로드되었는지만 확인하고 다른 작업은 아무것도 하지 않았으므로 오디오 드라이버는 ALSA로 맞추어진 상태이다. 그런데 소리가 단박에 잘 난다! 지금까지 이렇게 손쉽게 건반 입력을 통한 Fluidsynth 소리를 낸 적은 없었으므로 너무나 이상하다는 생각마저 들었다. QjackCtl(v0.9.6)을 실행하여 '그래프' 창을 클릭하여 연결 상태를 확인해 보자. JACK은 당연히 중지된 상태이다.

이번에는 Qsynth의  'Setup'을 클릭하여 연 다음 'Audio' 탭에서 오디오 드라이버를 jack으로 바꾸어 보자. 새로 바뀐 설정은 FluidSynth 엔진을 재시작해야 적용되므로 엔진을 지금 재시작하겠느냐고 묻는다. 'Yes'를 클릭한다.

QjakcCtl 메인창으로 돌아와서 '시작'을 클릭하면 연결 그래프의 상태는 다음과 같이 바뀐다. 나중에 언급하겠지만 QjackCtl에서 '시작'을 클릭했는지의 여부와 관계없이 FluidSynth 엔진을 재시작할 때 이미 JACK이 기동되기 시작한다. JACK에서 오디오 인터페이스 지정 등 기본 설정은 해 놓은 상태이다. JACK 설정 자체는 절대로 자동으로 이루어지는 일은 없다. 왜냐하면 오디오 인터페이스와 샘플링 레이트 등 컴퓨터가 알아서 결정할 수 없는 사항이 있기 때문이다.

ALSA 드라이버를 쓸 때와 비교하면 약간 더 복잡한 모습의 그래프가 되었다.

QjackCtl은 바로 직전에 사용했던 설정 상태를 기억하고 있음을 유의하자. 정확히 표현하자면 설정 파일($HOME/.config/rncbc.org/QjackCtl.conf)에 내용을 기록해 두었다가 다음번 실행할 때 이를 읽어들어서 적용하는 것이다.

Qsynth가 JACK을 오디오 드라이버로 사용하도록 설정이 맞추어진 상태라면, Qsynth를 실행할 때 알아서 JACK을 띄운다. 사용자가 jackd 명령어를 직접 실행하지 않았으나, Qsynth를 실행하면 자동적으로 다음과 같은 상황이 된다.

$ ps aux | grep jack
hyjeong    10466  2.3  0.1 291596 136060 ?       SLsl 10:14   0:00 /usr/bin/jackd -T -ndefault -dalsa -dhw:CODEC -r44100

따라서 우분투에 건반을 연결하여 연주하려면 Qsynth를 실행하는 것으로 드라이버 구동 및 기기 연결 작업이 이루어지는 것이다. JACK 설정이 제대로 되어 있다는 가정 하에서 말이다. 우분투 20.04 LTS(Focal Fossa)에서는 이렇게 간단하지는 않았었다. LTS가 아닌 21.04에서는 확인을 해 보지 않았기에 상황이 어떠한지는 잘 모르겠다.

이렇게 쉽게 되는 것을 보니 지난 2년 동안의 삽질은 도대체 무슨 의미가 있었는지 허탈해진다(삽질 기록 1, 기록 2). 아니, 어쩌면 그런 경험이 있었기에 이번의 작업이 이렇게 쉽게 느껴지는 것일지도 모른다.

2022년 10월 17일 업데이트

컴팩 CQ61 노트북 컴퓨터에 우분투 22.04를 설치한 다음 추가 패키지로서 qjackctl, qsynth 및 audacity를 설치한 다음 위에서 기술한 사항을 그대로 따라서 해 보았다. 역시 아무런 문제 없이 그대로 재현이 되었다. 

 


댓글 없음: