2022년 4월 29일 금요일

폴 카임 박사의 세미나 참석기(2022년 4월 22일) - 계통유전체 분석을 통한 사회문제 해결 사례

2022년 4월 21일, 나는 코엑스에서 열렸던 저 세미나 자리의 두 번째 줄에 앉아 있었다(한국미생물학회의 세미나 안내문 링크). 강연이 끝난 뒤 키가 무척 큰 폴 카임 박사 바로 곁에서 사진을 찍은 것은 실수다!

출처: 뉴데일리경제(링크)
미국 Northen Arizona University의 Translational Genomics Research Institute에서 근무하는 그는 2001년 탄저균 테러 사건에서 포자의 출처를 밝히는데 큰 공헌을 한 사람이다. 반사회적인 의도를 가지고서 생물학적 작용제를 살포하는 나쁜 사람이나 단체(또는 국가)가 존재하는 것도 사실이지만, 기후 변동에 의하여 영구동토층이 녹으면서 얼음 속에 묻혀 있던 병원체가 되살아나 새로운 아웃브레이크를 유발하기도 한다. 2016년 시베리아 툰드라 지역에서 갑자기 탄저병이 돌아서 1명이 죽고 사슴 고기를 먹었던 72명이 갑자기 병원에 입원하는 일이 발생한 일이 있다. 이는 80년쯤 전에 탄저균에 의해 죽은 순록이 영구동토층에 갖혀 있다가 해동되면서 탄저균이 되살아난 때문이었다. 이 일로 인하여 수십만 마리의 순록을 도살하고 백신을 접종하는 등 한바탕 난리를 치러야만 했다(관련 기사 링크).


카임 박사는 미국 ITC에서 맞붙은 에볼루스-대웅제약 대 엘러간-메디톡스의 보툴리눔 균주 출처 분쟁에서 메디톡스 측이 선임한 전문가이기도 하다. 발표가 끝난 뒤 기자가 물었다. 왜 한국에는 이렇게 많은 보톡스 제조회사가 있을까요? 카임 박사의 대답은 간단했다.

"모르겠다."

보툴리눔 균주를 보유한 모든 기관으로부터 균주를 의무적으로 제출토록 하여 관리를 하는 방안이 담긴 「감염병의 예방 및 관리에 관한 법률」 일부개정안이 몇 달 전에 발의되어 곧 시행을 앞두고 있는 상태라고 들었는데, 현재 어떻게 진행 중인지는 알지 못한다. 대부분의 국내 업체들이 한국 환경에서 직접 균주를 분리하여 제품 개발에 이르렀다고 주장하고 있으니 실제로 유전체 분석을 해서 이를 서로 비교하게 된다면 어떤 결과가 나오게 될지 매우 흥미롭다. 만약 엘러간-메디톡스에서 사용하는 Hall A-hyper와 수십 SNP 정도로밖에 차이가 없다면, 그 기원을 과연 어떻게 설명할까?

미국에서 1920년대쯤에 분리된 균주와 동일한 것이 2000년대에 한국 땅에서 발견될 확률이 과연 얼마나 될까? 지구 반대편에서 처음 보고된 신종코로나바이러스의 변이체가 순식간에 우리나라에서도 발견되기도 한다. 이를 사람이나 물자의 이동에 의한 '유입'으로 해석하는 것은 너무나 당연하다. 우리나라에 원래 있던 변이체라거나 독자적으로 돌연변이가 생겨서 일치하게 되었다고 보지는 않는다.

우리나라의 보툴리눔독소증 발생 사례는 극히 드물다. 만약 한국의 바이오의약기업이 땅을 파서 상업적으로 개발이 가능한 수준의 Clostridium botulinum 균주를 채취할 수 있으려면, 국내에서도 매년 수십 명 정도의 보툴리눔독소증 환자가 나와 주어야 한다. 미국의 사례를 보자. 다음의 자료는 미국의 질병관리본부(CDC)에서 게시한 것이다.

An average of 110 cases of botulism is reported annually in the US. 링크

일본이나 중국도 결코 적지 않다. 그럼 우리나라는? 질병관리청 감염병포털을 캡쳐하였다.

출처 링크

음... 2003년 사례는 일가족이 같은 음식을 나누어 먹고 걸린 사례이다. 우리나라 최초의 영아 보툴리눔독소증 환자 분리균주의 유전학적 특성을 분석한 자료(링크)를 보면 전체 유전체가 아니라 독소 생성 유전자만을 분석한 것이라서 균주가 어디에서 유래했는지를 판단하기가 매우 어렵다. 연구자는 분명히 whole genome sequencing 결과를 갖고 있을텐데 왜 공개하지 않았을까? 이 균주는 환자의 분변 샘플에서만 확인된 것으로, 환자가 먹은 음식이나 주변 환경까지 철저히 뒤진 것 같지는 않다. 수입된 식품 원료에 포자가 오염되었을 가능성도 있다.

소를 마비시키는 보툴리눔독소증은 우리나라에서도 종종 보고된다(2021년 뉴스 링크). 하지만 가축병의 원인 세균과 보톡스 제품에 쓰이는 세균(대부분 type A toxin)은 번짓수 자체가 다르다.

「감염병의 예방 및 관리에 관한 법률」 개정안이 실행에 들어가면 아마도 가장 바쁜 곳은 질병관리청이 될 것이다. 신종코로나바이러스감염증으로 2년 넘게 고생을 한 정부부처가 또 짐을  짊어지게 될 터이니 안타까운 마음도 있지만, 국내 기업체에 널리 퍼져 있는 보톡스 제조용 균주의 기원을 속 시원하게 밝히는 계기가 될 것으로 믿는다.

부정한 방법으로 입수한 균주라고 해서 그로부터 만들어진 의약품의 약효나 안전성에 문제가 있을리 없다. 그러나 취득 과정에 거짓이 있었다면, 제품 허가를 취소할 수도 있다는 것이다. 몇년 동안 우리 사회를 뜨겁게 달구었던 '문서' 위조 문제 등을 생각해 보라. 위조한 문서를 이용하여 학교에 들어가고, 국가가 인정하는 자격을 받았다고 하자. 문서를 위조한 것으로 인정되어 학교 입학 자격을 박탈한다면, 국가가 인정하는 자격도 잃는 것이 논리에 맞을 것이다.

균주의 출처 문제를 가지고 다투는 메디톡스의 자세에 100% 동의하지는 않지만, 세계적으로도 유례가 없을 정도로 많은 국내 회사가 보톡스 산업화에 달려들고 있는 기이한 현상이 어디에서 비롯되었는지 정말 알고 싶다.

2022년 4월 27일 수요일

단어장을 정리하듯 파이썬 공부를 하다

매주 화요일 저녁에 빅데이터 분석 동영상 강의를 듣는다. 22주짜리 과정의 절반을 넘어간 상태이다. 매주 실습을 위한 자료는 쏟아지는데, 복습을 하지 않으니 실력이 잘 늘지 않는다. KNN이 어쩌고, random forest가 어쩌고... 그저 용어에만 익숙해지고 있을뿐, 내가 연구하는 분야의 실제 데이터를 투입하여 의미 있는 결과를 얻는 날은 언제나 올지 모르겠다. 올해가 마지막 기회라는 비장한 각오로 시작한 것은 좋은 일이지만.

데이터 분석 업무에 활용하겠노라고 R을 공부하기 시작한 것이 2013년. 이제는 Cookbook이나 인터넷에 돌아다니는 정보를 찾아보면서 필요한 분석을 진행할 수준은 겨우 되었다. 그러나 빅데이터 분석에서는 파이썬을 필수로 하고 있으니, 그동안 미루었던 파이썬 공부를 하지 않을 수 없게 되었다. 유전체 분석 실무에서 수도 없이 많은 종류의 파이썬 응용프로그램을 사용하고 있으면서도 설치와 실행에만 몰두했었다.

초보 수준을 갓 넘어선 R 문법에 파이썬까지 곁들이게 되니 그 혼란은 이루 말하기 어렵다. 한 언어만 알면 차라리 나을 것이라는 생각이 자주 들지만, 두 언어를 비교하면서 머릿속에 완벽한 패턴으로 자리잡도록 연습을 하면 결국 도움이 될 것이다.

예전에 참석했었던 파이썬 교육의 자료집을 오려서 휴대하기 좋은 크기로 만든 뒤 메모를 덧붙여 나가기 시작하였다. 코딩 실습은 Jupyter notebook 대신 일부러 Windows Terminal을 이용한다. Plot을 보려면 matplotlib.pyplot.show() 함수를 불러야 하는 약간의 귀찮음이 있지만, 손이 수고를 해야 더 오래 기억에 남는다는 것이 나의 지론이다.

매우 기초적인 문법 정도를 암기하기 위해 이런 방법을 택한 것이다. 예를 들어 pandas.DataFrame의 사용례를 익히려면 구글링을 하는 것이 바람직하다.

회의장에 와서 태블릿을 꺼내어 터치펜으로 메모를 하는 사람들을 보면 내가 참 구식 방식을 고수하고 있다는 생각이 든다. 세상과 나 사이에 항상 스마트한 그 무엇인가가 개입해야 한다고는 믿지 않는다. 손으로 글씨를 쓰고, 메모지를 오려 붙이고, 업무용 달력에 일정을 표시하는 구식 방법은 뇌를 더욱 건강하게 한다고 믿는다. 

'Smart'한 기기가 주변에 즐비하면, 사람은 더욱 'dumb'해진다... 



2022년 4월 26일 화요일

음악 작업 환경 바꾸기

Roland Sound Canvas SC-D70의 재발견. Windows 10에서 녹음 및 재생이 잘 됨을 확인하였다. 드라이버를 설치했었던 것을 잊고 있었다. Vista 64비트용 드라이버(다운로드 링크)가 Windows 10에서 정상적으로 돌아간다는 것이 얼마나 다행인가?


Tracktion의 Waveform Free는 설치를 해 놓았는데 아직 어떻게 쓰는 것인지 감을 잡지 못하는 상태이다. 데모곡만 겨우 들어 본 상황.

리눅스용 컴퓨터는 일단 Ubuntu Studio 21.04로 업그레이드를 해 보았다. 정말 오랜만에 만나는 KDE 환경('Plasmda' 데스크톱)이다. 아주 오래전에 설치했던 한컴리눅스가 KDE 데스크톱 기반이었던 것으로 기억이 난다. 뉴스를 검색해 보니 2001년! 리눅스용 한/글 3.0(3.0b였던가?)을 구입하러 유성에 있던 사무실을 직접 찾아갔던 기억이 어렴풋하게 난다. 그때에는 월평동에 망원경을 파는 곳도 있었는데...




우분투 스튜디오 21.04에서는 PulseAudio + JACK의 관계를 과연 질서정연하게 바로잡을 수 있을지?

2022년 5월 1일 업데이트

음악 작업 환경 변경을 선언한 뒤 거의 일주일. 사실 한 것은 아무것도 없다. 전주국제영화제의 한국형 영화 효과음원 사업('K-Sound Library') 부스에서 많은 영감을 얻은 것 말고는.

2022년 4월 22일 금요일

힌들리 스트리트 컨트리 클럽(Hindley Street Country Club, HSCC)의 음악을 들으며

힌들리 스트리트는 남호주의 수도인 애들레이드에 있는 길 이름이라고 한다. Hindely Street Country Club(HSCC)은 아마도 이 지명에서 이름을 땄을 것이다. 최근 유튜브를 통해서 알게 된 HSCC는 80년대 팝과 록 명곡을 커버하여 연주한 동영상을 통해 점점 큰 인기를 얻고 있는 것 같다. 물론 공연도 활발하게 하는 이 밴드는 핵심 멤버를 중심으로 하여 지역 뮤지션이 참여하는 독특한 구성으로 운영이 된다. 2017년에 결성되어 아직 국내에는 별로 알려지지 않았다. 구글이나 네이버를 뒤져보면 2021년 7월에 작성된 다음의 것이 HSCC의 유일한 국문 글로 나타난다. 따라서 내가 지금 쓰는 글이 아마도 국문으로 작성된 것으로는 두번째?

힌들리 스트리트 컨트리 클럽 'Afternoon Delight'

내가 HSCC를 처음 알게 된 것은 유튜브에서 맞춤 추천으로 올라온 'Car wash' 커버 영상을 통해서였다.


흠, 흥겨운데? 오리지널 곡이 아니라 이미 잘 알려진 '명곡'을 원본에 충실하게 커버하면서도 자신들의 색채를 넣어서 연주하는 것이 좋았고, 게다가 스튜디오도 아닌 클럽이나 공연장 같은 현장에서 이렇게 완벽한 사운드로 프로듀싱을 하는 것도 놀라웠다. 심지어 바닷가에서도!(Bill Withers의 'Lovely day' 커버 영상을 보라!)

갓 올라온 동영상인 Hall & Oates의 I can't go for that.


KiSS의 I was made for loving you 커버 영상(링크)에 달린 댓글이 재미있다('KISS should do a cover of this'). 거의 다 아는 곡들을 특별히 찾는 수고를 들이지 않고도 그저 구독을 해 놓고 나오는대로 들으면 된다.

녹음 연습을 이제 좀 해보려는 방구석 음악인으로서 항상 공연 현장에 대한 흥미를 갖고 있는 나에게 HSCC의 연주 동영상이 큰 자극이 되지 않을 수 없다. 창작곡을 만들어 발표하는 것도 중요하지만, 음악 산업의 '현장'에서는 이미 만들어진 명곡의 반복 혹은 재해석이 늘 필요하니까 말이다. 또한 현장의 완벽한 세팅과 녹음 후의 정교한 프로세싱이 동영상 제작 과정 뒤에 숨어 있을 것을 생각하면 더욱 그러하다. 나는 개인적으로 원곡에서 지나치게 멀어진 리메이크는 좋아하지 않는다. 예를 들어 원곡이 어떤 장르던지 몽땅 보사노바풍으로 만들어 버리는... European Jazz Trio는 예외로 해 둘까?

Starship의 'Sara' 커버 영상(링크)에 대해서 Harry Highpants라는 사람이 올린 댓글이 내가 HSCC에 대해서 갖고 있는 생각과 그대로 일치한다.

OK, so you guys normally do a cover with a little bit of your own take on it, which we all love - BUT - in this case you all have done a cover that is arguably BETTER than the original!!! Congratulations and thank you.

모처럼 유튜브의 순기능을 즐기며 오늘도 하루를 보낸다. 

2022년 4월 20일 수요일

[우분투의 사운드와 MIDI] JACK에서 두 개 혹은 그 이상의 사운드 카드 이용하기, 과연 그 결말은?

2년 전에 이미 이와 관련한 글을 블로그에 작성해 두었다가 음악 작업에서 거리가 멀어지면서 거의 잊고 있었다. 최근 들어서 다시 이 문제를 파고들다 보니 과거에 이해했던 것이 결코 완벽하지 않았다. 총정리를 하는 셈 치고 제대로 알아보고자 한다. 제목에서 말한 사운드 카드란 내장 사운드 카드, PCI(-E) 사운드 카드, USB 사운드 카드(혹은 오디오 인터페이스) 및 USB 마이크로폰 등 사운드 입출력을 담당하는 모든 주변기기를 뜻한다.

PulseAudio는 컴퓨터에 장착된 모든 사운드 관련 기기와 애플리케이션을 능수능란하게(프로페셔널한 녹음 작업은 제외) 제어한다. 반면 프로 오디오용 소프트웨어 개념의 JACK은 그렇지 않다. jackd 또는 jackdbus(qjackctl 또는 jack_control 사용)으로 JACK을 사용할 때에는 특정 사운드 카드 하나를 지정하게 된다. 만약 추가로 장착한 장비에서도 입출력이 이루어지게 만들려면 설정을 매만져야 한다.나의 경우는 별도로 꽂은 USB 장비에서 녹음 입력을 받고 싶었다.

오늘은 컴팩 CQ61 노트북 컴퓨터에서 연습을 해 보았다. Behringer UCA200 USB 오디오 인터페이스를 연결해 놓은 상태에서 각 사운드 카드에 어떤 식별자가 부여되었는지 알아보자.

$ cat /proc/asound/cards
 0 [Intel          ]: HDA-Intel - HDA Intel
                      HDA Intel at 0xd4500000 irq 27
 1 [CODEC          ]: USB-Audio - USB Audio CODEC
                      Burr-Brown from TI USB Audio CODEC at usb-0000:00:1a.7-4.4, full speed

내장 사운드 카드의 식별자는 Intel, UCA200은 CODEC이다. 아래 그림은 PulseAudio 볼륨 조절의 설정 탭을 보인 것이다. 위에 나타난 PCM2902가 바로 'CODEC'에 해당한다. UCA200으로는 입력을 받고 내장 오디오는 출력을 담당하게 만든 것이다.


이러한 나의 의도가 제대로 반영되었는지 다른 명령어(pactl)를 사용하여 default sink와 source를 확인해 보자.

$ pacmd list-sources | grep -e 'index:' -e device.string -e 'name:' 
  * index: 0
	name: <alsa_input.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00.analog-stereo>
		device.string = "front:1"
    index: 1
	name: <alsa_output.pci-0000_00_1b.0.analog-stereo.monitor>
		device.string = "0"
$ pacmd list-sinks | grep -e 'index:' -e device.string -e 'name:' 
  * index: 0
	name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
		device.string = "front:0"

UCA200이 default sink이므로, arecord 명령을 실행하면서 특별히 디바이스를 지정하지 않으면 여기에 연결된 신호가 녹음된다. '-d 60'은 60초 동안 녹음하라는 뜻이다.

$ arecord -f cd -d 60 test_one_minute.wav

만약 유튜브 재생음을 녹음하고 싶다면 arecord를 실행한 상태에서 PulseAudio 볼륨 조절의 녹음 탭을 열고 다음과 같이 'Monitor of 내장 오디오 아날로그 스테레오'를 선택한다.

PulseAudio 볼륨 조절은 바로 이전 실행 상태를 기억한다. 이것이 편리할 때도 있고 그렇지 않을 때도 있다. 마이크로 녹음을 하는데 전혀 소리가 기록되지 않았다면, 혹시 PulseAuio 볼륨 조절의 녹음 탭에서 'Monitor of ABC'가 선택된 상태 그대로인지 확인해 보라. 아직도 흔히 겪는 실수이다. 'pacmd list-soruces' 명령에서 여전히 USB 오디오 인터페이스가 default로 표시된다 하여도 PulseAudio 볼륨 조절의 녹음 설정이 우선한다. 그런 면에서 source를 명령행에서 자유자재로 선택할 수 있는 parec 명령이 더욱 사용하기에 편리하다고 볼 수도 있다.

더 간단하게는 명령행에서 parec 명령어를 이용하여 내장 사운드 카드의 모니터 출력에 해당하는 디바이스를 직접 지정해 버리는 것이다. pulse-recorder.bash라는 스크립트를 이용하는 방법도 있다. 커널 모듈인 snd-aloop를 이용하는 기법도 있다고 하는데 너무 복잡해서 이해하기 어렵다. 여기까지는 일단 워밍업 단계라고 생각하자. 지금까지 내 블로그나 위치에서도 한 두 차례 다루었었다.

그러면 내장 사운드 카드(Intel)를 JACK으로 구동해 본다. 사용한 명령어는 jackd(내가 만든 audio.qsynth 스크립트 사용)이다. JACK이 PulseAudio의 모든 기능을 앗아갔기 때문에 일반 애플리케이션에서 소리가 전혀 나지 않는다. QjackCtl의 화면을 보자.

소리를 되찾고 싶다면 PulseAudio Jack Sink/Source 모듈을 로드하면 된다(링크).  jack_control을 이용할 경우 이 모듈을 자동으로 올리는 것 같다. 모듈이 적재된 상태는 다음과 같이 나타난다.

파이어폭스를 열고 유튜브를 접속해 보면 소리가 내장 사운드 카드를 통해 소리가 나기 시작한다. 파이어폭스라는 애플리케이션은 PulseAudio으로만 오디오 출력을 보낼 수 있고 JACK에 대해서는 전혀 알지 못하므로 JACK 서버가 기동한 뒤에는 전혀 소리를 내지 못한다. 물론 우분투 스튜디오는 다수의 JACK-aware application을 포함한다. 그러나 이 모듈을 실행하게 되면 파이어폭스가 오디오 출력을 보내는 기본 출구인 PulseAudio (JACK) Sink가 비로소 system으로 연결되므로 우리는 소리를 들을 수 있는 것이다. JACK이 소리에 관련한 모든 것을 시스템을 장악한 상태에서는 위 그림에서 보이는 system을 통해서만 녹음용 신호를 넣거나(capture) 혹은 출력(playback)을 할 수 있다.

QjackCtl의 Connections  화면을 보고 있노라면 그림(마이크와 스피커)과 단어 사이의 연결이 과연 맞는 것인가 하는 의문이 들 수도 있다. 너무 과도하게 의심을 품지 말라. 현 상태가 옳다. 중간에 나타난 선이 진짜 오디오 케이블이라 생각하면 쉽다.

PulseAudio JACK Sink/Source 모듈을 적재한 상태에서는 일반 오디오 애플리케이션의 경우 JACK 기동 전과 다를 바 없이 그대로 실행하면 된다. 그리고 연결 상태가 QjackCtl의 Connections  창에 나타나지도 않는다. 예를 들어 FluidSynth를 ALSA 드라이버로 구동하여 MIDI 파일을 재생해 보라. 

$ fluidsynth -a alsa ~/sf2/FluidR3_GM.sf2 passport.mid 

뒤에서 묵묵히 돌아가고 있는 JACK의 존재를 전혀 느끼지 못할 것이다. 그리고 FluidSynth의 재생음을 녹음하기 위해 arecord를 실행한 상태에서 PulseAudio 볼륨 조절의 녹음 탭을 열어 보자. JACK 실행 전에는 2개였던 선택 항목(Monitor of '출력용 기본 사운드 카드' 및 USB 장치의 입력)이 4개로 늘어났을 것이다. 새로 늘어난 것은 다음과 같이 JACK과 관련한 것 2개이다.

  1. Monitor of 내장 오디오 아날로그 스테레오
  2. PCM2902 Audio Codec 아날로그 스테레오
  3. Monitor of Jack sink (PulseAudio JACK Sink)
  4. Jack source (PulseAudio JACK Source)

FluidSynth의 출력을 녹음하려는 것이므로 1번을 선택해야 한다. 3번을 선택해도 될 것만 같은 생각이 들지만, 실제로 해 보면 녹음이 되지 않는다. 3번과 4번은 JACK-aware application을 위한 것이지, arecord가 감당할 수 있는 출입구가 아닌 것 같다.

이번에는 JACK을 오디오 드라이버로 이용하여 FluidSynth를 실행해 보았다. '-a jack' 옵션을 특별히 주지 않아도 된다.

$  fluidsynth -l ~/sf2/FluidR3_GM.sf2 passport.mid 

QjackCtl의 Connections 창에서는 왼쪽에 fluidsynth가 나타났다.


그러나 소리가 들리지 않는다. 왜 그럴까? JACK이 사운드 시스템을 제어하는 동안에는 오른쪽 system(playback)으로 무엇인가 입력이 되어야 소리가 나기 때문이다. 따라서 다음 그림과 같이 fluidsynth와 system(playback)을 이어 주여야 소리를 들을 수 있다.

사실 매번 이렇게 연결하기는 상당히 귀찮다. FluidSynth는 JACK-aware application이므로 명령행에서 '--connect-jack-outputs' 옵션을 주면 자동으로 system 출력에 연결된다.

$ fluidsynth --connect-jack-outputs ~/sf2/FluidR3_GM.sf2 passport.mid 

자, 그러면 오늘의 제목으로 돌아가 보자. 두 개 이상의 사운드 카드를 JACK 환경에서 이용하고자 한다. 컴퓨터 자체의 소리, 즉 application의 출력은 내장 사운드 카드가 담당하되(JACK 구동 시 지정) USB 기기를 통한 아날로그 입력(외부 장비 또는 마이크)을 활용하고 싶은 상황이다. PulseAudio와는 달리 JACK은 아직 다른 사운드 기기가 연결되었다는 것을 알지 못한다. USB 기기로 입력되는 소리를 아무 application을 구동하지 않고 직접 듣고 싶다면

이제 명령행에서 다음과 같이 alsa_in을 실행해 본다.

... 그런데 ...

여기까지 글을 작성하고 이제 모든 것을 완벽하게 다 이해했노라고 자부심을 갖고 있었는데...


포기! 더 이상은 못 해먹겠다!

내가 아는 것은 제대로 아는 것이 아니었다. 어제 알았던 것이 오늘 재현되지 않으면 무슨 소용이 있겠는가? 녹음이 되다 말다를 반복하고 재생음도 마찬가지이다. Audacity에서는 JACK이 인식되는 것 같더니 또 어떤 상황에서는 되질 않는다. 차라리 Windows 환경에서 기능이 풍부한 DAW 프로그램을 설치하여 빨리 익숙해지는 것이 나을 것 같았다. 음악 본연의 작업을 하지 못하고 설정 작업에 이렇게 많은 시간을 들이다니 이만저만한 시간 낭비가 아니다.

그래서 선택한 소프트웨어는 tracktion의 WAVEFORM FREE였다. Cakewalk by BandLab은 아주 예전에 Cakewalk을 썼던 경험 때문에 비교적 익숙하게 시작할 수 있겠지만, 근무지에서는 인증서 문제로 설치가 완결되지 않았다.

그래서 오늘부터 시작한다! 



2022년 4월 16일 토요일

리눅스에서 음악(또는 오디오) 작업을 한다는 것은(2) - JACK에서 USB 마이크로폰 이용하기

내가 할 줄 아는 것과 모르는 것을 제대로 구별하지 못함을 고백하는 일이다...

구식 PCI 사운드 카드(사운드 블라스터 Live! CT4830; 재생 전용)를 장착한 컴퓨터에 USB 콘덴서 마이크로폰을 연결해 놓고 PulseAudio 환경에서 녹음이 잘 되는 것을 확인한 뒤, JACK을 이용하여 본격적으로 뭘 좀 해 보려 했으나 이제부터 시련의 연속이었다.

Audacity 동작도 제대로 되지 않고, Rosegarden도 매한가지였다. 리눅스용 DAW(digital audio workstation)로는 가장 뛰어난 것으로 알려진 Ardour는 JACK을 전혀 쓰지 않고 ALSA만으로도 녹음을 할 수 있다고 하는데, 사용법을 익히려니 도무지 엄두가 나지 않는다. 일단은 사운드 블라스터에 헤드셋을 연결하여 왕초보 수준의 음성 녹음을 하는 데에는 성공했지만, 저가 헤드셋에 붙은 다이나믹 마이크의 음질이 오죽하겠는가?

Ardour 웹사이트 화면 갈무리. 제대로 쓰는 방법을 알게 된다면 소원이 없겠네...

음성 입력은 USB 콘덴서 마이크로폰으로, 모니터링 등 출력은 사운드 블라스터로 하는 것이 이렇게 어려운 일인가? PulseAudio가 컴퓨터의 모든 사운드 관련 기능을 장악하고 있을 때에는 전혀 문제가 없었다. 이러한 상태에서 아래와 같이 화면을 녹화하여 유튜브에 올리기까지 했으니 말이다.

일단 시스템을 단순하게 만들기로 하였다. USB 마이크의 모니터링용 3.5mm 스테레오 단자에 헤드폰을 연결하고, 다른 사운드 기기는 잠시 잊어 버리기로 한다. JACK과 FluidSynth를 켜 놓고 Audacity와 Rosegarden을 테스트해 보았다. 오, 그렇지! Rosegarden 사용법을 많이 까먹었지만 녹음이 잘 이루어짐을 확인하였다.

물론 여기에도 많은 변수가 있다. JACK 기동을 jackd로 할 수도 있고, jack_control을 써서 할 수도 있다. 모든 경우의 수를 다 점검해 본 것은 아니다.

Rosegarden에서 FluidSynth를 통하여 MIDI 파일을 재생하면서 이를 오디오 트랙으로 녹음하는 경우를 생각해 보자. 혹은 Firefox에서 유튜브를 재생하면서 Audacity로 녹음하는 경우도 마찬가지이다. 둘 다 컴퓨터 내부에서 생성되는 소리를 녹음한다는 측면에서는 동등하다. USB 마이크로폰(그 자체가 일종의 USB 오디오 인터페이스이다. 단자를 통해 외부 아날로그 입력을 받아들이지 못할 뿐...)을 쓰는 것과 사운드 블라스터를 쓰는 것 사이에 최종적으로 만들어지는 오디오 파일의 음질에 차이가 얼마나 날까? 모니터링 출력의 음질은 당연히 사운드 블라스터의 단자를 이용하는 것이 백번 낫다. 그러나 컴퓨터 내부에서 만들어지는 소리의 녹음에서는 어느 기기가 더 좋은 음질의 파일을 만들어 내게 될까? 오디오 파일을 녹음하여 잡음이나 다이나믹 레인지 등 측정 프로그램을 돌려서 비교를 할 수도 있겠지만, 아직 나는 그런 정도의 수준에 이르지 못하였다.

사운드 블라스터를 장착하고 나서 jackd를 실행했을 때 나는 당연히 '-d hw:Live' 옵션을 주었었다. 그런데 가만히 생각을 해 보니 이런 상태에서는 JACK이 USB 마이크로폰의 존재를 알 수 없지 않겠는가? 소리에 대한 사용자(consumer 수준)의 모든 요구를 수용하여 사운드 기기와 ALSA 사이를 적절히 지휘하는 '다재다능한' PulseAudio의 입장에서는 전혀 문제가 되지 않는다. 그러나 professional audio를 지향하는 JACK은 그렇지 않을 것이라는 생각이 들었다. JACK이 겨냥하는 사용자층은 로우 레이턴시로 음악을 만들어야 하는 사람들이다. 상황에 따라서 온갖 USB 사운드 기기를 수시로 바꾸어 꽂는다거나, 단순히 웹 브라우저에서 유튜브 재생을 즐기는 사람들이 아니다. 그만큼 사용이 까다롭다고 보면 될 것이다.

검색을 통해서 Ardour 포럼으로부터 USB 마이크를 이용하여 Ardour에서 녹음이 되지 않는다고 호소하는 글을 발견하였다. 2012년에 올라온 글을 10년이 지난 2022년에 찾아보게 될 줄이야!

Ardour forum에서 발견한 글(링크)

Ardour 개발에서 큰 역할을 담당했던 Paul Davis가 올린 첫 댓글에는, USB 마이크로폰은 Ardour의 입력 기기로는 좋은 선택이 아니라고 한다. 원문은 다음과 같다. 

Regarding the use of a USB mic, this is not something we recommend. Please read http://jackaudio.org/faq/multiple_devices.html for more information on why its not a good idea. Ardour isn’t targetting the kind of work where USB microphones are appropriate input devices (though you can use them, its just not very good idea and is more complex than using the right equipment).

jackaudio 웹사이트 내의 문서(이미 여러 차례 읽었었음) 링크가 잘못되어서 바로잡았다. Audacity는 전통적인 방식, 즉 메인으로 쓰이는 사운드 카드에 마이크로폰이 직접 연결되어 있기를 바라는 것이다. 나에게는 다이나믹 마이크도 하나 있고, 이를 롤랜드 사운드캔버스 SC-D70에 연결한 뒤 컴퓨터에는 USB 케이블로 연결하면 된다. 그러나 이렇게 하면 USB 콘덴서 마이크로폰의 쓸모가 없어지지 않겠는가?

이 질문에 대한 몇 개의 댓글에 정말 좋은 정보가 많았다. JACK이 제공하는 유틸리티인 alsa_in/alsa_out을 써서 USB 입력 장치를 JACK이 구동하는 사운드 디바이스로 보내도 되고, 혹은 Qjackctl의 세팅 패널(advanced)에서 input device를 수동으로 지정하면 될 것이라 하였다. 조금만 더 궁리하면 JACK을 쓸 때에도 USB 마이크로폰을 기본 입력 장치('capture')로, 그리고 사운드 블라스터 Live를 기본 재생 장치('playback')로 구성하는 것이 가능할 것 같다.

JACK도 쓰기 어려워 죽겠는데 이제는 PipeWire라는 것까지 나와서 인기 몰이를 하고 있다니 도대체 어디까지 공부를 해야 하는가!

Audacity 위키 사이트에는 리눅스에서 USB 마이크로폰으로 녹음을 하려면 ALSA를 쓰는 것이 가장 좋다고 한다. USB mic on Linux라는 위키 문서가 별도로 있을 정도였다. 문서의 도입부를 그대로 인용해 본다.

On Linux, recording with a USB microphone is best done under ALSA (Advanced Linux Sound Architecture). Current Audacity provides native ALSA support. 1.2.x versions of Audacity only support the older OSS (Open Sound System), but can work with ALSA using an OSS emulation layer.

JACK을 켜지 않은 상태에서는 Audactiy나 다른 명령행 프로그램을 써서 음성 녹음을 하는데 아무런 문제가 없었기에 이런 정보가 있다는 것은 오늘 처음 알았다. PulseAudio와 JACK 정도만 알면 -사실 이를 제대로 이해하는 것도 쉽지 않다 - 아주 오래된 물건인 OSS와 무척 생소한 PortAudio라는 것도 눈에 뜨인다.

리눅스에서 쓰기에 가장 좋은 DAW 소프트웨어를 소개하는 글로 끝을 맺고자 한다

The 6 Best DAWs for Linux (Ubuntu) - Free and Paid (2021)

2022년 4월 13일 수요일

구식 기술의 흔적이 고스란히 남아있는 컴퓨터의 뒷모습

다나와 사이트에 아직 남아 있는 Supermicro X8SAX 메인보드 정보(링크)에 의하면 이 제품은 2008년 12월에 등록이 되었다고 한다. 2008년에 만들어진 스마트폰을 지금 쓸 수 있을까? 말도 되지 않는다는 것을 누구나 다 안다. 기술의 발전 속도는 데스크톱 컴퓨터에 비하여 모바일 기기가 훨씬 빠르다. 블로그 기록을 보니 내가 2010년에 생애 최초로 구입한 스마트폰은 모토로이였다. 그러나 잘 만든 데스크톱 컴퓨터는 리눅스를 설치하면 그럭저럭 활용이 가능하다. 리눅스로는 최신의 주변기기를 쓰기에 어려운 점이 있지만, 최신 윈도우에서 더 이상 드라이버 지원이 되지 않는 기기를 리눅스에서는 오히려 활용하기가 더 좋다.

폐기 처분의 갈림길에서 아직도 굳건하게 자리를 지키고 있는 Xeon CPU 장착 Supermicro X8SAX 기반의 컴퓨터의 뒷모습을 찍어 보았다.

HP 서버에서 쓰이던 무거운 PS/2 키보드(한글 마킹 없음)이 연결되어 있고, 그래픽스 카드에는 VGA 케이블을 통해서 모니터를 연결하였다. 다행히도 HDMI 단자가 없는 카드는 아니다. 그 아래에는 USB 3.0 카드, 그리고 며칠 전에 언급했던 사운드블라스터 라이브! CT4830 PCI 사운드카드가 꽂쳤다.

이래 봬도 온보드 사운드 카드에는 광출력 단자가 있다. 롤랜드 사운드캔버스 SC-D70에 물려 보니 훌륭한 오디오 출력이 나옴을 확인하였다. 사운드캔버스 SC-D70도 족히 20년은 되었을 것이다. 이것 역시 윈도우 10에서는 쓰기가 아주 마뜩잖은데, 리눅스에서는 그런 거 없다. 그냥 USB 단자에 꽂으면 된다. 아, 야마하 TG300과 MU50은 중고로 팔지 말 것을...

KASSETTE라는 이름의 카세트 테이프 플레이어가 팔리는 기묘한 시대를 살고 있다(관련 글 링크). 오래 된 기술이라 해서 전부 버려지지는 않는다. 특히 그것이 손에 잡히는 형태를 갖고 있을때 더 오래 살아남을 수 있는 것 같다. 매일 수십 장 이상의 사진을 찍어서 클라우드 어딘가에 저장하고는 있지만, 가끔 휴대폰에서 꺼내 보거나 소셜 미디어의 프로필 사진을 바꾸는 용도로 단명하고는 만다, 그러나 거실 소파 밑 상자에 수북하게 담긴 진짜 '사진'은 어디로 가지 않고 항상 그 자리에 있다. 음원 파일보다 LC나 CD가 더 소중하게 여겨지는 것도 마찬가지가 아닐까?

2022년 4월 12일 화요일

Windows Terminal에서 파이썬 실행하기

'윈도'인가, '윈도우'인가? 외래어의 한글 표기법에 의하면 '윈도'가 맞지만, 마이크로소프트에서는 Windows라고 표기한다. 한국어로 어떻게 표기해야 하는지는 별로 고민을 하지 않는 것 같다. 마이크로소프트의 한국어 웹사이트를 가 보면 회사 이름도 오직 Microsoft라고만 적어 놓았다.

윈도 시스템에서 파이썬을 실행하는 가장 보편적인 방법은 anaconda prompt를 사용하는 것이다.

나는 이런 스타일의 글꼴을 별로 좋아하지 않는다. 터미널 창에는 뭐니뭐니해도 고정폭 글꼴이 최고다!

Jupyter Notebook은 코드를 기록하고 배포하거나, 그림 자료를 생성하여 환경 내에서 보는데 아주 좋은 환경이다. 그러나 코드를 익히기 위해서 공들여 타이핑을 하려는 초보자를 약간은 게으르게 만드는 것 같다. 리눅스 서버에 원격 접속을 하여 파이썬을 쓰거나, 혹은 WSL에서 우분투를 설치한 뒤 그 속에서 파이썬을 실행하는 것도 가능하지만 기왕이면 윈도 안에서 직접 실행을 해 보고 싶었다. 윈도용 파이썬이 있으니 이를 설치하여 명령 프롬프트나 Windows Power Shell에서 실행해도 되지만, 시원스럽게 큰 글꼴의 Windows Terminal에서 파이썬을 실행하면 참 좋겠다는 생각이 들었다.

Windows Terminal을 열고 무작정 'python'을 입력해 보았다. 오... Microsoft Store가 열리더니 파이썬을 다운로드하여 설치하기 시작하였다. 라이브러리 설치는 어떻게 해야 할까? pip를 쓸 수 있었다. numpy와 scikit-learn 등 필요한 라이브러리를 설치해 보았다. 


파이썬 실습을 시작으로 빅데이터 온라인 강좌를 수강한 지 오늘이 벌써 9주차이다. 이번이 마지막 기회라고 생각을 하고 파이썬을 익히기 시작하였지만 절대적인 연습량이 부족하다. 수시로 연습을 하려면 터미널 창에서 코드를 치는 환경을 만드는 것이 좋을 것이다. Perl/R/Bash 스크립트와 헷갈린다고 핑곗거리를 찾지 말고 하루에 딱 한 시간씩이라도 꾸준히 공부를 해야 한다. 요즘은 리눅스에서 PulseAudio/JACK을 활용하는 방법을 궁리하는데 푹 빠져 있었는데, 여기에 쏟을 정성을 조금만 이리로 돌린다면 분명히 나아질 것이다.

2022년 4월 11일 월요일

[우분투의 사운드와 MIDI] 사운드 블라스터 Live!(CT4830)를 우분투 스튜디오 20.04 LTS에서 쓸 수 있을까?

국문 위키백과에 의하면 사운드 블라스터 라이브! 시리즈(매뉴얼)는 1998년 8월에 처음 발매되었다고 한다. MIDI 포트가 필요하게 되어서 성남시에 살던 파견 근무 시절 중고품을 하나 구해 놓았지만 PC에 맞는 슬롯(PCI)이 없어서 방치한 상태였다. 메인보드의 PCIe 슬롯에 꽂으면 PCI 카드를 활용할 수 있는 어댑터와 연장 케이블 등을 덩달아 알리익스프레스에서 구해 놓았지만 최신 Windows에서 사운드 블라스터 Live!를 작동시키는 것이 잘 되지 않아서 2년째 방치해 놓았었다. 중고품으로 구입하여 아직까지도 소리를 들어보지 못한 상태이다.

요즘 리눅스에서 음악 작업을 하는 것에 다시 관심을 갖게 되면서 문득 내가 쓰는 Xeon CPU 장착 보드(수퍼마이크로 X8SAX)에 PCI 슬롯이 하나 있다는 사실이 떠올랐다. 만약 여기에 사운드 블라스터 라이브! 카드를 꽂으면 단번에 인식이 될까? 혹은 snd-emu10k1이라는 커널 모듈을 미리 설치해야 할까?

반신반의하는 마음으로 카드를 꽂아 보았다. 공간 확보를 위해 그래픽스 카드의 위치를 바꾸어야만 했다. 전원을 넣은 뒤 아무런 조치를 취하지 않고 과연 카드가 잘 인식이 되는지 살펴보았다.

$ cat /proc/asound/cards
 0 [V106           ]: USB-Audio - iCON iKeyboard 5 Nano V1.06
                      iCON iCON iKeyboard 5 Nano V1.06 at usb-0000:00:1a.0-2, full speed
 1 [Aud            ]: USB-Audio - USB2.0 IRIVER HD720P Camera Aud
                      Alcorlink CO. LTD. USB2.0 IRIVER HD720P Camera Aud at usb-0000:00:1d.7-1, high 
 2 [CODEC          ]: USB-Audio - USB audio CODEC
                      Burr-Brown from TI USB audio CODEC at usb-0000:00:1a.1-2, full speed
 3 [Live           ]: EMU10K1 - SB Live! Value [CT4832]
                      SB Live! Value [CT4832] (rev.8, serial:0x80271102) at 0xec00, irq 16
 4 [Intel          ]: HDA-Intel - HDA Intel
                      HDA Intel at 0xfbad8000 irq 44
 5 [NVidia         ]: HDA-Intel - HDA NVidia
                      HDA NVidia at 0xf9f7c000 irq 17

'Live'라는 이름으로 인식이 잘 되었음을 알 수 있다. 녹색 단자에 헤드폰을 연결한 뒤 음악 파일을 재생해 보았다. 그냥 느낌인지도 모르겠지만 내장 사운드(Realtek ALC883)에 비하여 훨씬 단단한 소리가 나는 것 같다. 음량이 다소 커서 그렇게 긍정적으로 느껴지는지도 모르는 일이다.

PCI 소켓에 꽉 끼게 밀어 넣으면 브라켓과 본체의 나사 구멍이 미묘하게 맞지를 않는다. 볼트를 채우면 슬롯에서 접촉이 약간 불량해질지도 모른다는 생각이 들어서 적당하게 맞추어서 마무리를 하였다. 

구입한 지 13년이 되어가는 Xeon  CPU, 10년이 넘어가는 메인보드, 그보다 더 오래된 사운드 블라스터... 이런 고물이 리눅스 덕분에 아직까지 활용이 가능하다니 참으로 고마운 일이다. 아직도 PCI 사운드 카드가 팔리고 있을까? 오디오트랙 프로디지 HD2가 현재 2개의 재고가 남았다고 한다. 

글 작성일 현재 유효한 쿠팡의 판매글 링크

같은 회사의 PCI 사운드 카드인 MAYA 5.1 MK-II는 7년 전에 사비로 구매하여 현재는 자리를 바꾸어 업무용 PC에 꽂혀서 잘 돌고 있다(2015년에 쓴 글 링크). 구입 당시에는 오늘 글에서 언급한 Xeon 장착 메인보드인 X8SAX에 꽂아서 사무용으로 잠시 사용하였었다.


2022년 4월 8일 금요일

제목 붙이기 참 어려운 오늘의 글

기술이 발달하여 직접 사람을 만나는 수고를 덜 수 있는 세상이 되었다. 수고라고 써 놓고 나니 약간의 죄스런 마음도 든다. 사람을 만다는 일을 성가시고 번거로운 일로 여긴다는 느낌이 들기 때문이다. 약속을 잡고 만나기 위해 이동하는 데에는 적지 않은 에너지가 필요하니, 이를 절약한다는 의미에서 수고를 덜 수 있다고 쓴 것이다.

신종코로나바이러스라는 전지구적 문제가 사람을 직접 만나는 것을 꺼리게 만드는 요인이 되기도 하였다. 이는 준비된 사람에게는 새로운 사업적 기회가 되었다. 그러는 중에 우리가 매일 양산하는 마스크와 배달음식용 포장재는 환경에게 큰 부담이 되고 말았다. 병원에서 나오는 감염성 폐기물은 또 어떻게 할 것인가?

온라인으로 사람을 만나는 것은 매우 즐거운 일이다. 무엇을 입고 나갈지, 어떻게 거기까지 가야 할지 걱정을 하지 않고도 마치 바로 옆에서 대화를 하듯이 유대감을 지속할 수 있기 때문이다. 그런데 업데이트한 카카오톡 프로필 사진을 보고 직접 전화를 누군가가 걸어와서 그 옷은 어디서 샀느냐, 얼마짜리냐라고 묻는다면 여간 피곤한 일이 아닐 것이다. 행동거지를 조심해야 하는 정치인이나 연예인도 아닌데 이런 예기치 못한 피드백을 받는다면 마치 감시를 당한다는 느낌이 들지 않겠는가? 

네이버에 어떤 오디오 관련 카페가 있다. 사이트를 들락거리면서 글을 찾아 읽는 것도 어쩌면 시간 낭비라는 생각이 들어서 모든 카페를 다 탈퇴하였지만, 그곳은 비회원에게도 매우 개방적이라서 대부분의 글을 읽을 수가 있다. 이러한 배려로 나는 재가입을 하지 않은 상태로 올라오는 글을 매일 탐독하고는 한다. 어떤 인터넷 커뮤니티는 나 같은 회원을 매우 싫어한다. 도움을 일절 주지 않으면서 정보만 빼 간다고 생각하는 모양이다.

어쨌든 그 카페에 작년 가을 무렵에 신입 회원이 등장하였다. 편의상 A라고 하자. 오디오 카페라는 것이 보통 중년 이상 남자들의 놀이터임은 잘 알려져 있다. 그 회원이 올리는 글은 뭐랄까, 자신의 풍부한 과거 경험(어려웠던 시절도 있었던 것 같음)이나 현재의 여유를 에둘러 자랑하는 듯한 느낌이 많이 묻어났다. 때로는 기존 회원과 설전을 벌이기도 하고... 예의를 차리듯 글을 쓰지만, 뭔가 날이 서 있는 그런 글 말이다. 안 보면 그만이지만, 매일 꽤 긴글을 정기적으로 올려대니 여간 신경이 쓰이는 것이 아니었다. 오디오와 관련된 카페이니 어떤 앰프를 자작하였고, 무슨 음반을 구입하였고, 좋은 공연을 보았다는 글 정도만 올리면 되지 않겠는가? 일상에서 소재를 찾아서 희한하리만치 보기에 불편한 장문의 글을 쓰는 그 회원의 심리 상태가 참으로 궁금하였다. 넋두리 같다가도 한 발만 뒤로 물러나서 보면 결국은 자기 자랑이고... 

만약 카페 게시판이 성격에 따라서 몇 개로 나뉘어 있고, 그 중의 하나를 일상적인 잡담을 쓰는 전용 공간으로 할당했다면 나 같은 예민한 사람이 불편함을 덜 느꼈을 것이다. 그러나 하루에 올라오는 글이 대단히 많지 않은 인터넷 카페인데다가 누구에게나 편리한(특히 모바일 환경에서 글을 읽는 사람에게는) 전체글 보기 기능이라는 것이 그마저도 어렵게 만들고 말았다.

나는 그 카페의 회원도 아니니 A 회원 당사자나 운영진에게 뭐라고 의견을 낼 수도 없고, 다른 사람에게 쪽지를 보내어 흉을 볼 수도 없는 처지였다. 차라리 그 카페를 들어갈 자격이 나에게 없으면 더 좋았을 것이라는 생각까지 들 정도였다. 누구나 경험하는 일이리라. 이걸 순간적으로 결심을 하여 딱 끊을 수가 있다면, 세상에 금연이나 금주를 실행에 옮기지 못하는 사람은 하나도 없을 것이다.

그러던 어느날, 또 어느 회원(B)과 댓글로 설전이 벌어진 모양이었다. 논란의 원인이 된 원글은 남아있지 않아서 정확히 무슨 일이 일어났는지는 모르겠고, B 회원이 사과의 글을 올린 것만 남아 있었다. 분쟁과 관련하여 매니저가 올린 글은 회원에게만 공개되어 있었다. 무엇보다도 중요한 것은, A 회원이 흔적 하나 남기지 않고 카페를 나간 것이다. 스스로 물러난 것인지, 매니저의 권한으로 강제 탈퇴를 당한 것인지는 알 수가 없었다. 호기심을 충족하기 위해서 이참에 다시 회원 가입을 할까 생각도 했지만 아직 실행에는 옮기지 않았다.

반년쯤 전에 A 회원이 등장할 때 올렸던 글이 기억난다. 어떤 '놀이터'에 처음 문을 두드릴 때, 어떤 사람들이 자리잡고 있는지를 잘 모르고 왕성하게 막 내지르다가 '놀이터 어르신'들의 무게감을 알고서 조용해진다는, 뭐 그런 정도의 글이었다. 내가 기억하는 뉘앙스로는 어르신들을 존중하는 의미에서 그렇게 된다는 것이 아니고, 별 가치가 없이 무게만 잡는 사람들에게 응할 필요가 없어서 태도를 바꾼다는 식으로 여겨졌다. 원문이 남아있지 않으니 내 기억이 맞는지 확인할 길은 없다. 어쩌면 A 회원은 이 카페에서 오래 머물지 못할 수도 있겠다는 생각이 들었고, 그건 사실이 되었다.

어쩌면 다행스러운 일이다. 모든 기록이 사라져서 내가 오늘 쓴 글이 누구를 지칭하는지 알기가 대단히 어렵게 되었기 때문이다. 

왜 이런 일로 내가 스트레스를 받았을까? 그 카페를 들락거리지 않았다면 전혀 겪지 않았을 일이었다. 이것도 일종의 온라인 환경에서 겪는 폐해가 아니겠는가? 기술에 의해 사람을 접하는 방법은 달라졌을지언정 스트레스 유발 정도는 별로 다를 바가 없다. 너무나 많은 사람을 만나게 되기 때문이다. 다다익선, 다대익선 혹은 다데익선(다Da익선, Da = Data)의 빅데이터 시대에 이건 무슨 소박한 기술 퇴행적인 자세인가? 결국 한 사람이 관리할 수 있는 정보나 인간관계의 규모에는 한계가 있다는 고백이다.

2022년 4월 4일 월요일

리눅스에서 음악 작업을 한다는 것은

고생을 사서 한다는 뜻이다!

리눅스에 우분투 스튜디오를 설치하고 음악 녹음 및 MIDI 작업을 하는 요령을 알아내느라 많은 애를 썼던 것이 대략 2년 전이다. 그때는 어느 정도 요령을 터득했다고 생각을 하고 심지어 유튜브에 동영상을 하나 올리기까지 하였다. 지금까지의 조회수는 정말 참담한 수준이지만...

작년 4월, 연구소에 복귀하면서 감상 이외의 음악 활동에 대한 관심이 잦아들어서 신경을 거의 쓰고 있지 않다가 먼지만 쌓여가는 키보드 콘트롤러가 미안하여 다시 취미용 리눅스 컴퓨터를 매만지기 시작했는데 어떻게 녹음을 했었는지 도무지 기억이 나질 않는다.

위키 사이트에 꽤 많은 정보를 기록해 놓았었지만(Music on Linux 등), 지금 살펴보니 마치 초등학생이 수학의 정석을 들추어 보는 느낌이다. PulseAudio와 JACK, 내가 이것을 어떻게 다루었던가? Rosegarden에서 MIDI 파일 재생 및 녹음을 어떻게 했었지? 유튜브는 손을 대면 소리가 나다 안나다를 반복하고, Audacity에서 녹음 버튼을 눌러도 아무런 일이 벌어지지 않는다. 

내가 기록해 놓았던 위키 문서를 다시 탐독하면서 실타래를 풀어 나가기로 하였다. USB 마이크를 통한 음성 입력이나 애플리케이션(예: 유튜브)의 Audacity 녹음은 PulseAudio만을 이용하여 해도 아주 매끄럽게 잘 진행이 된다. 그러나 jack_control을 기동하면 일이 슬슬 꼬이기 시작한다. 작년 봄까지는 내가 모든 것을 완벽하게 제어한다고 믿고 있었다는 것이 정말 우습다.

스크립트를 통해서 JACK을 활성화한 뒤 Audacity에서 유튜브를 녹음해 보았다.

PulseAudio Volume Control의 녹음 탭을 건드려서 'Monitor of jack sink'를 입력으로 택하면 Audacity에서 녹음이 잘 된다.

JACK을 기동하지 않으면 위의 2개만 보인다.

그런데 녹음을 마치고 나서 Audacity 내에서 곧바로 재생을 하려니까 소리가 나지 않는다. Audacity의 출력 설정을 건드려야 하는데 어떻게 했더라? Audacity에서 mp3로 저장한 다음 다른 프로그램(parole 미디어 재생기)에서 재생을 시도했으나 역시 불가. 재부팅을 하고 나서야 비로소 parole에서 재생이 되었다. 

Audacity에서 방금 녹음한 작업물을 다시 듣는 것이 안 된다는 것은 넌센스이고, 이를 종료한 뒤 다른 재생 전용 프로그램을 매끄럽게 쓰기 위해 오디오 콘트롤을 PulseAudio로 완전히 되돌리지 못하고 있다는 점도 문제이다.

FluidSynth를 켜고(ALSA 사용) 키보드 콘트롤러를 연결하여 연주하는 방법은 다시 알아냈지만... 녹음을 하지 않는다면 진정한 음악 작업이라 할 수가 없다. 앞으로 갈 길이 멀구나.


2022년 4월 1일 금요일

다중서열정렬(multiple sequence alignment)를 다루는 여러 프로그램 정리 - 최근의 경험을 중심으로

진작 이에 대한 글을 쓰려고 했지만 바쁜 일이 줄을 잇는 바람에 일주일이 지나고 말았다. 주말을 앞두고 큰 일들이 대략 마무리가 되어서 생각해 두었던 글을 쓰려고 한다.

'큰 일들'이라 써 놓고 보니 원래 단·복수를 엄격하게 구별하지 않는 우리말의 특성과는 다른 표현이 되었다. 요즘 '-들'을 붙여서 사용하는 말과 글을 많이 본다. 처음으로 외국어(보통은 영어)를 배우게 되면서 문법이라는 것을 익히게 된다. 모국어를 자연스럽게 습득할 때에는 규칙부터 먼저 배우지도 않고, 그럴 필요도 없다. 그런데 외국어 학습을 위해 어쩔 수 없이 문법이라는 것에 길들여 지면서, 그 외국어의 규칙에 자꾸 국어를 맞추려고 하는 일이 생기는 것 같다.

나는 스케이트가 있다.

전혀 이상할 것이 없는 문장이다. 그런데 이를 '나는 스케이트를 갖고 있다'라고 써야만 할 것 같은 느낌이 든다. '스케이트를'이라고 해야 확실한 목적어가 되니까? 초등학교 다니던 시절, 주어의 개념을 알지 못해서 무척 애를 먹었었다. 위 문장에서는 '나는'이 주어임이 명백하다. 하지만 다음은 어떨까?

스케이트가 집에 있니?

이 문장의 주어는 무엇일까? 묻는 말이니 '너는'이라는 주어가 생략된 것으로 보아야 할까? 오히려 '스케이트가'를 주어로 봐야 하는 것이 아닐까? 영어식 문법으로 생각하면 모든 것이 이상하다. 우리말의 서술부에 있는 말들을 동사라고 틀에 찍듯이 말하기는 참 어렵다고 본다. 그렇다고 해서 우리말이 느슨한 문법체계를 갖는다고 할 수도 없다. 문법은 올바른 말글살이를 위한 일종의 규칙인가, 혹은 현실 말글살이를 설명하는 최소한도의 방법인가? 나도 모르겠다.

맞춤법도 문법의 한 요소라고 할 수 있을까? 영어와 국문을 섞어서 글을 쓰는 것은 요즘 피할 수 없는 일이다. 자, 그러면 단어와 괄호 사이에 공백을 넣어야 하겠는가? '오늘 10 primer set 주문했어요'라고 하는 것이 옳은가, '오늘 10 primer sets 주문했어요'라고 하는 것이 옳은가.

이야기가 너무 딴 길로 샜다. 원래의 주제로 돌아가도록 하자. Clustal-Omega, MAFFT, MUSCLE, PRANK... 무엇을 써서 만들었든 다중서열정렬(MSA)은 내 스크립트 작성 실력으로는 다루기가 좀 까다롭다. 그저 tabular format으로 BLAST 결과를 얻어서 awk나 R로 적당히 처리하고는 한다. 이 수준에서는 MSA라고 하기도 어렵다.

대규모의 MSA를 적절히 트리밍하는 방법으로 나는 trimAlClipKIT를 즐겨 사용한다. trimAl 패키지에는 MS를 html 파일로도 예쁘게 만들어 주는(포맷 전환도 기능도 포함하여) readAl도 포함되어 있어서 쓸모가 많다. trimAl을 그냥 구글에서 검색하면 v1.2의 공식 웹사이트로 가게 된다. GitHub 사이트를 방문해야 v1.4를 만나게 된다.

MSA로부터 Shannon 엔트로피를 편하게 그리는 방법을 찾다가 ANDES라는 도구를 알게 되었다. ANDES란 Statistical tools for the ANalyses of DEep Sequencing의 약자이다. SourceForge 사이트에서 프로그램을 배포하는 걸 보면 개발된지 꽤 오래되었을 것이라는 느낌이 오지 않는가? 그렇다. 논문은 2010년에 나왔다.

최근 Bacillus 계열 미생물 1077개의 유전체에서 특정 유전자를 찾다가 또다시 MSA의 문제에 빠져들었다. 두 세 가지의 marker 유전자가 각 genome에서 얼마나 유사한 정도로 존재하는지를 확인하여 최종적으로 이를 검출할 수 있는 PCR primer 설계 위치를 실험자에게 제공하는 것이 직면한 과제였다. 마커 유전자를 query로 하여 1077개 genome에 대해서 BLAST를 해 놓은 뒤, 이로부터 hit 염기서열을 뽑아야 했다. BLAST를 결과를 tabular format으로 출력한 뒤에 위치 정보를 이용하여 subject genome file에서 오려낼까? 어휴, 스크립트를 짜려니 생각보다 지겹다. EMBOSS의 primersearch를 이용하여 amplimer 정보를 만든 뒤 이로부터 염기서열을 뽑는 Perl 스크립트는 만들어 봤지만, BLAST 결과를 이용하려니 왠지 자판을 두들기기가 싫어졌다. Perl이든 python이든 AlignIO를 잘 쓰면 가능할 것도 같았으나, 그러려면 매뉴얼을 보고 공부부터 해야 한다.

이미 만들어진 '바퀴'가 없을까? 검색을 거듭하니 Nigel Brown의 MView라는 소프트웨어가 튀어나왔다. GitHub의 소개 글을 그대로 인용해 본다.

MView is a command line utility that extracts and reformats the results of a sequence database search or a multiple alignment, optionally adding HTML markup for web page layout. It can also be used as a filter to extract and convert searches or alignments to common formats.

친근한 Perl로 짜여져 있으면서 2020년까지 업데이트가 되고 있었으니 현실적으로 사용하는 데에도 문제가 없을 것으로 생각했다. 논문은 언제 나왔을까? GitHub 웹사이트를 스크롤하여 아래로 내려가 보니... 세상에! 1999년이다(PubMed 링크). 2000년에 Trends in Genetics에 논문으로 실렸던 EMBOSS 패키지보다 더 이른 시절에 나온 형님인 셈이다. 삼가 경의를 표하는 바이다!

MView는 BLAST+의 '-outfmt 7' 포맷 결과를 입력할 수 있다고 한다(input formats). 이건 좀 이상하지 않은가? tabular format output file에는 서열 정보가 없는데 무슨 수로? Alignment가 다 나타나는 일반적인 출력 결과를 넣으니 HSP에 해당하는 subject의 서열이 잘 나왔다. 그런데 결과를 찬찬히 살펴보니 많이 부족하다. BLAST DB는 천개가 넘는 서열로 이루어져 있고 거의 모든 서열에 대해서 높은 수준으로 hit가 나왔는데 MView에서는 정확히 250개에 대해서만 출력을 하였다. 매뉴얼을 아무리 뒤져 보아도 한 query에 대하여 최대 250개의 hit만 처리한다는 말은 없는데 왜 그런 것일까? 

하긴 alignment를 눈으로 보기에 편하도록 전환하려고 MView를 쓰면서 1천개가 넘는 서열을 투입하는 것은 너무 과하지 않은가. DB를 250개 단위로 끊어서 BLAST를 나누어 진행하고, MView로 추출한 서열을 도로 합쳐서 MAFFT로 재정렬하는 것으로 원하는 목표를 이루었다. 좀더 시간을 갖고 MView의 세계를 탐험해 봐야 되겠다. 

아직 테스트는 하지 않았지만 AMAS(a fast tool for alignment manipulation and computing of summary statistics)라는 것도 알게 되었다. 2016년에 논문이 나왔으니 ClipKIT(2020년)만큼이나 젊은 프로그램이다. 논문의 표 1에서는 다른 유사 소프트웨어와 특성을 비교해 놓았다. FASconCAT-G까지는 잠깐 써 보았었다. 아이구, 이제 이런 프로그램을 더 이상 조사하는 것은 그만 두도록 하고, 알고 있는 것이나 잘 써야 되겠다.

BioPerl이나 BioPython 등을 이용하여 내 입맛에 딱 맞는 스크립트를 만드는 것도 보람이 가득한 일이겠으나, 이미 개발된 도구를 잘 찾아서 매뉴얼을 숙독해 나가면서 사용법을 익히는 것이 훨씬 생산성이 높다는 것은 이미 여러 차례 경험하였다. bedtools도 그런 것 중의 하나이다.

다중서열정렬의 실용적인 목표(보통은 프라이머 설계로 끝나고는 하였다)에 관심을 갖게 된 것은 바로 신종코로나바이러스에서 비롯되었다. 힘들여 논문을 하나 써서 제출하고 major revision 판정을 받아 놓으니 정말 만감이 교차한다. 그 후로는 비슷한 일에 대한 요청이 계속 생기니 우연이라고 할 수도 없고...