2022년 5월 29일 일요일

WSL에서 우분투 22.04 LTS를 설치하는데 발생한 0x8027025a 오류의 해결

이번 7월에 개최할 예정인 미생물유전체 분석 교육에서는 4월에 배포된 Ubuntu 22.04 LTS를 기반으로 다시 디스트로를 만들어서 사용하기로 하였다. 내가 사용하는 몇 개의 리눅스 컴퓨터에서는 이미 이 디스트로를 설치하여 사용 중이다. Windows Terminal에서 다음의 명령을 실행하면 아직 Ubuntu 22.04 LTS는 보이지 않는다.

> wsl --list --online
다음은 설치할 수 있는 유효한 배포 목록입니다.
'wsl --install -d <배포>'를 사용하여 설치하세요.

NAME            FRIENDLY NAME
Ubuntu          Ubuntu
Debian          Debian GNU/Linux
kali-linux      Kali Linux Rolling
openSUSE-42     openSUSE Leap 42
SLES-12         SUSE Linux Enterprise Server v12
Ubuntu-16.04    Ubuntu 16.04 LTS
Ubuntu-18.04    Ubuntu 18.04 LTS
Ubuntu-20.04    Ubuntu 20.04 LTS

맨 위의 실제로 설해 보면 'Ubuntu'는 20.04에 해당한다. 그러나 Microsoft Store에서는 Ubuntu 22.04 LTS가 있기 때문에 이를 선택하여 설치를 진행하였더니 다운로드 후 설치 과정에서 다음과 같은 에러가 나타나면서 새 사용자명을 넣을 수가 없이 먹통이 되었다.

'???'에 해당하는 영문 메시지는 'The app didn't start in the required time'이다.

구글을 검색해 보니 이미 Ask Ubuntu에 이에 대한 질문과 해결책이 올라와 있었다.

How to fix 0x8027025a error when installing Ubuntu 22.04 LTS on WSL?

레지스트리를 건드리거나 심지어는 WSL1 설치 후 WSL2로 다시 바꾸는 등 너무나 불편한 해결책이 제시되어 있어서 이를 그대로 따라서 하기는 곤란하였다. 위에서 보인 화면에서 Windows Terminal을 강제로 종료한 다음 다시 실행하여 우분투를 기동하면 관리자 권한으로 로그온이 된다. 그래서 Ask Ubuntu의 답변 중 가장 마지막에 나오는 'Manually create user'를 따라하면서 일반 사용자를 추가하여 보았다. 이 방법으로 우분투 22.04 LTS를 설치 완료할 수 있었다. 0x8027025a 오류가 발생하는 근본적인 원인은 아직 이해하지 못하였다. WSL 환경에서 최신 디스트로의 목록을 확인한 다음 'wsl --install -d <distro>' 명령으로 설치할 수 있도록 조만간 개선이 이루어지게 될까? 혹은 이 불편함을 계속 감수해야 될까?

2022년 5월 27일 금요일

[Bash] 연속적인 숫자를 만들기

ZGA pipeline으로 바코드를 단 12개의 nanopore sequencing 결과물에 대한 de novo assembly를 마쳤다. FASTA file은 각 샘플에 대해서 다음의 하위 디렉토리에 존재한다.

zga_flye_barcode01/assembly/assembly.fasta

이를 전부 모아서 하나의 디렉토리(예: target/)에 모으고자 한다. FASTA 파일명이 전부 동일하므로 바코드 번호를 반영하여 변경해야 한다. 01부터 12까지 일련의 숫자를 생성하려면 seq 명령어를 쓰면 된다.

$ seq -w 1 12
01
02
03
..
12

'-w' 옵션은 출력하는 숫자 왼쪽에 자리채움용도의 '0'을 덧대는 용도로 쓰인다. seq는 기본적으로 '\n'을 separatorfh 사용하지만 다른 문자를 지정할 수도 있다. 다음의 명령어를 서로 비교해 보자. seq 명령어를 쓰지 않더라도 { .. } 구문을 사용하여 시작과 끝을 지정한 연속적인 숫자 혹은 문자를 출력할 수 있다.

$ seq -w -s ' ' 1 12
01 02 03 04 05 06 07 08 09 10 11 12
$ echo {01..12}
01 02 03 04 05 06 07 08 09 10 11 12
$ echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z

seq 명령어를 응용하여 지정된 하위 디렉토리에서 FASTA 파일을 찾은 뒤 각자 바코드명을 붙여 이름을 변경한 뒤 한 디렉토리에 모으는 코드는 다음과 같다. 변수를 좌우에 붙은 문자열과 명확히 구분하기 위해 ${i} 형태로 경계를 확실히하는 것도 좋은 습관일 것이다.

$ mkdir target
$ for i in $(seq -w 01 12)
> do
> find zga_flye_barcode$i -name assembly.fasta -exec cp {} target/barcode$i.assembly.fasta \;
> done
$ ls target
barcode01.assembly.fasta  barcode04.assembly.fasta  barcode07.assembly.fasta  barcode10.assembly.fasta
barcode02.assembly.fasta  barcode05.assembly.fasta  barcode08.assembly.fasta  barcode11.assembly.fasta
barcode03.assembly.fasta  barcode06.assembly.fasta  barcode09.assembly.fasta  barcode12.assembly.fasta새

샘플이 12개에 불과하니 cp 명령으로 하나씩 FASTA file의 이름을 바꾸어 가면서 원하는 위치에 복사를 해도 되지만, 실수의 가능성이 큰데다가 작업 기록을 남기기도 어렵다.

find 명령으로 찾아낸 FASTA file의 full path에서 중간에 위치한 특정 문자열을 꺼내어 최종 파일명의 일부를 삼고 싶다면? 어떤 규칙을 이용하여 string manipulation을 하면 될 수준의 일인가, 혹은 어떤 구분자(예를 들어 '/')로 나뉘는 필드 중 특정 위치의 것을 꺼내면 될 일인가에 따라서 해결 방법은 조금씩 달라진다. 예를 들어 다음과 같은 파일이 있다고 가정하자.

/data/project/131_Bacillus_from_human_gut_2021_Aug/00_seqs/03_nanopore/02_assembly/16S_rRNA_BS.fa

이렇게 긴 path에서 131_Bacillus..에 해당하는 중간 문자열을 꺼내고 싶다면? 이 path가 A라는 변수에 저장되어 있다고 가정하고 문제를 풀어보자. 방법은 간단하다.

$ cp $A $(cut -d/ -f4 <<< $A).fasta

'/'를 구분자로 하여 A 변수에 저장된 문자열을 나누는 경우 첫 번째 필드는 공백이 된다. 왜냐하면 A 변수에 저장된 문자열이 '/'로 시작하기 때문이다. 따라서 131_Bacillus를 꺼내려면 4번째 필드를 지정해야 한다('-f4'). 왜 -f 4라고 떼어서 쓰지 않고 -f4라고 붙여 쓰는가? 그래도 된다.

이 bash 구문에서 '<<<'의 의미를 정확히 이해하는 것은 쉽지 않다. 나도 이를 설명하려면 주저할 것이 뻔하다. 이론적으로 설명을 하기는 어렵지만, 알고 있으면 리눅스 작업 능률을 크게 올려주는 잡스런 지식이 무척 많이 있다. 이번 7월에 있을 미생물 유전체 분석 교육에서 수강생들에게 이를 어느 정도로 소개해야 하는지 고민이 된다.

2022년 5월 22일 일요일

Behringer 오디오 인터페이스 UCA200을 더 구입하다

Berhinger의 U-Control UCA202/UCA222는 한동안 가장 싼 USB 오디오 인터페이스였을 것이다. 지금은 Teyun이라는 중국 브랜드의 Q12 모델이 마이크 프리앰프와 Hi-Z 입력 기능을 갖추고 있으면서도 UCA202/222보다 더 싸게 팔리고 있으니 중국의 기술 발전에 많은 음악 애호가들이 혜택을 입고 있다고 해도 과언은 아니다.

Enping Teyun Audio Equipment사의 오디오 인터페이스 제품군(출처 링크). 알리익스프레스를 찾아보면 가격은 놀랄 만하다. 


UCA200은 원래 USB 오디오 인터페이스 기능이 없던 Behringer의 콘솔 믹서에 번들로 제공된 제품으로 알고 있다. 그래서 헤드폰 모니터링용 단자가 아예 존재하지 않는다. 바로 믹서 자체에 헤드폰을 꽂으면 되니까. 그만큼 단순한 오디오 인터페이스로서 여기에 헤드폰 단자(볼륨 조절 놉 포함)와 광출력 단자를 갖춘 것이 2006년에 나온 UCA202이며, 2009년에 뒤이어 나온 UCA222는 케이스 색깔만 다를 뿐 기능적으로는 전혀 다를 것이 없다고 알려져 있다.

UCA 시리즈는 작고 가벼우면서 단순한데다가 리눅스나 윈도우즈 전부 별다른 드라이버를 설치하지 않아도 잘 작동하니 오디오 앰플리파이어에 직접 연결하여 음악을 재생하는 용도로는 이보다 좋은 선택이 없었다. 게다가 최근에 MAX4410칩을 이용한 헤드폰 앰프를 만들게 되면서 활용의 폭이 더 넓어지게 되었다.

나는 오래전부터 UCA200을 사용해 왔다. 컴퓨터를 이용한 녹음 작업을 익혀 보려고 제일 최초로 구입했던 USB 오디오 인터페이스였다. 그러다 보니 믹서와 DI box를 줄줄이 구입하는 미련한 짓을 저질렀지만, 요즘은 장비 하나에서 마이크와 Hi-Z 소스를 전부 다룰 수 있어서 여간 편리한 것이 아니다.

나의 UCA200은 거의 항상 볼루미오에 연결하여 음악 재생용으로 사용하고 있어서 컴퓨터에 연결해서 사용할 목적으로 UCA200을 하나쯤 더 갖고 있으면 좋겠다는 생각을 늘 하고 있었다. 그러던 중에 중고 음향장비를 취급하는 곳의 블로그에서 신품 재고를 10개 갖고 있다는 글을 보게 되어 2개를 구입하였다. 구입 단가는 1만원. DAW 프로그램인 Waveform Free에서 ASIO4ALL 드라이버를 이용하여 구동하는 데에도 문제가 없다.

기존에 갖고 있던 것보다 더 밝은 색상이다.

이 오디오 인터페이스는 구형 오디오 믹서에 연결하면 딱 좋을 물건이다. 벌써 내 마음은 Mackie Mix5나 Behringer Xenyx 502/802를 향하고 있다...

MAX4410 헤드폰 앰프와 좋은 조합을 이루었다.

볼루미오의 개인 라디오 플러그인을 잘못 건드렸다가 작동 상태가 이상해져서 공장 초기화를 실시하였다. 모니터를 연결하지 않으면 초기화 후 설정을 하면서 DHCP 서버를 통해서 IP 주소가 제대로 할당되었는지를 확인하기가 불편하다. 


필요한 때에만 볼루미오에 연결하여 상태를 확인할 수 있는 작은 모니터는 없을까? 노트북 컴퓨터에서 빼낸 LCD 패널 AD 컨트롤러라는 것을 연결하면 모니터로 재활용할 수 있다던데... 2014년 HP mini 5101 넷북에 NAS(OpenMediaVault)를 설치하여 사진 보관용 파일 저장소로 만든 일이 있다. 그러나 전원을 늘 연결하는 것이 부담스러워서 거의 사용하지 않다가 거의 7-8년만에 전원을 넣어 보았다. 여기에서 LCD 패널을 적출하여 미니 모니터 용도로 쓴다면?

 


2022년 5월 20일 금요일

MAX4410 헤드폰 앰프 보드를 섀시에 고정하다

앰프 보드 자체가 엄지손가락만 한 작은 크기라서 일렉트로닉스 DIY에 자주 쓰이는 알토이즈 통을 사용하여 소형화를 추구하는 것도 좋다.

출처: 내 블로그(2014년). 언제 이런 것을 만들었었지?

그러나 이번에는 몸집이 커져도 좋으니 되도록 무겁게 만들고 싶어졌다. 두꺼운 케이블에 앰프 본체가 휘둘리지 않고 볼륨 놉을 돌려도 놓인 상태 그대로 안정감 있게 유지되게 하였다. 묵직한 재료는 무엇이 있었던가... 갖고 있는 온갖 잡자재를 다 뒤져서 이런 해괴한 모양의 섀시를 꾸며 보았다. 날카로운 곳은 전혀 없지만 흉기(!)로 써도 부족함이 없는 자재가 들어갔다. 원래는 목재를 고정할 때 쓰이는 평철인데, 구멍을 넓혀서 RCA 단자나 스피커 단자를 고정할 앰프 뒷면 패널로 쓰려고 구입해 놓았었다. 구입했던 목적에 거의 맞게 쓰인 셈이다.




데이터시트에 의하면 MAX4410 칩은 잡음이나 왜곡이 극히 적으니 인터엠 R150 PLUS에 물려서 프리앰프로 써도 될 것 같았다. 그러나 실제로 연결을 해 보니 현재 달아 놓은 LEEM 마이크로믹서보다 약간 소리가 부드럽고 풀어지는 느낌이랄까? LEEM 마이크로믹서가 더 나은 것 같아서(잡음은 이것이 더 심하지만) 일단 원상복구를 해 놓았다. 고무 스티커를 바닥에 붙이면 완성이다. 견고성 측면에서는 따라올 것이 없는 앰프를 만들었다.


사무실에는 롤랜드 사운드캔버스 SC-D70이 있어서 헤드폰 앰프가 그다지 절실한 상황은 아니다. 이번에 만든 헤드폰 앰프는 Behringer UCA200 오디오 인터페이스와 좋은 짝을 이룰 것이다.


2022년 5월 19일 목요일

PGAP 최신 버전(2022-04-14.build6021)을 쓰고 싶다!

PGAP(Prokaryotic Genome Annotation Pipeline)은 NCBI가 개발하여 배포하는 주력 소프트웨어의 하나로서, NCBI에 제출되는 모든 원핵 미생물의 자동 유전체 주석화에 쓰인다. 이 소프트웨어 자체에 대한 가장 최근의 논문은 다음의 것이다.

NCBI prokaryotic genome annotation pipeline. Nucleic Acids Research 44(14):6614, 2016 

이 논문의 제1저자인 러시아 출신 과학자 Tatiana Tatusova는 1993년부터 NCBI에서 일하기 시작했으며 꽤 오래 전에 어느 워크숍에서 봤었던 것 같다. 아마도 Genomic Standards Consortium 관련된 미팅이었던 것 같은데... 

PGAP은 도커 이미지와 작동에 꼭 필요한 데이터 파일을 사용자가 직접 다운로드하여 로컬 컴퓨터에서 돌릴 수 있다. 32 쓰레드에 메모리 250GB를 갖춘 소박한 내 컴퓨터에서는 박테리아 유전체 하나를 처리하는 데 1시간 정도 걸리는 것 같다. 

도커를 이용한다고 하지만 사용자가 'sudo docker run ...'이라는 명령어를 입력하게 만들지는 않는다. 파이썬 3.6 이상에서 작동하는 pgap.py 스크립트를 실행하면 업데이트가 있는지 먼저 확인하여 최신판으로 갈아치운 뒤 주석화를 개시하게 된다. 지난 3월 중순까지는 2022-02-10.build5872를 사용하였는데, 며칠 전에 nanopore로 시퀀싱하여 조립 및 후처리(medaka polish & circlator fixstart)를 마친 유전체 염기서열의 주석화를 위하여 pgap.py를 실행하였더니 최신 버전인 2022-04-14.build6021를 다운로드하는 가장 첫 단계에서 에러가 발생하였다. 한동안 별다른 문제없이 잘 써 왔던 소프트웨어가 업데이트조차 되지 않으니 정말 보통 심각한 문제가 아니다. 

KOBIC을 통해서 원인을 파악한 결과 https://raw.githubusercontent.com/ 사이트가 접속 차단 목록에 들어가 있다고 한다. 국가정보원에서는 특정 IP 주소 목록을 제공하여 국가공공기관에서 접속하지 못하게 하는데, 하필이면 여기에 이 주소가 들어있다고 한다. 개발자가 소프트웨어 배포를 위해 사용하는 웹사이트가 국정원의 시각에서는 유해한 사이트란 말인가? 휴대폰에서 이 주소로 접속을 하면 자동으로 https://github.com/로 리다이렉트된다. 하지만 https://github.com/는 연구원 내에서 원활하게 접속할 수 있다. 

참 합리적이지 못한 정책이 아닐 수 없다 생각하고 일을 하기 위해 집에 리눅스 컴퓨터를 새로 꾸몄다. 우분투 계열의 최신 LTS판인 22.04('Jammy Jellyfish')의 Xubuntu 디스트로를 설치하였다. Xubuntu는 화려하지는 않지만 비교적 가벼워서 오래 된 하드웨어를 활용하기에 아주 적당하다. 다이소에서 5천원을 주고 구입했던 USB Wi-Fi 수신기도 커널 모율을 사용자가 빌드할 필요가 없이 잘 인식하였다. 당연히 PGAP 최신 버전도 설치가 잘 되었고, 테스트 러닝도 무사히 완수하였다.

집 리눅스 컴퓨터에 설치한 PGAP을 외장 HDD에 복사하여 연구소에 가져다가 설치할 수 있지 않을까? 도커 이미지는 docker save 명령을 이용하여 tar 파일로 만들고, data file 및 test_genomes 자료 또한 파일로 복사하여 가져가면 될 것이다. 퇴근 후 약 이틀에 걸쳐서 컴퓨터 마련 및 PGAP 설치를 한 뒤, PGAP 관련 파일을 SSD에 담아서 출근한 다음 리눅스 컴퓨터에 마운팅을 했는데, 드라이브가 텅 비어 있다. 엥? 어제 내가 이 SSD에 복사한 것이 아니었나? 에혀~

집에 돌아가서 어제 했던 일을 똑같이 반복한 뒤 내일 나와서 본 작업을 하자니 너무 시간이 아깝다. 2022-04-14.build6021에서 개선된 사항이 그렇게 대단한 것이라는 생각은 들지 않았다. 따라서 pgap.py를 실행하면서 강제 업데이트를 하는 기능을 어떻게 해서든 끄면 될 것 같았다. 업데이트를 하면서 상태가 이상해진 pgap.py는 지운 뒤, 2022-02-10.build5872의 소스 파일을 가져다가 풀어서 pgap.py만 원래대로 복구한 다음, 소스 코드를 열어 보았다. 자동 업데이트와 관련된 라인을 주석 처리하려는 것이 당초의 계획이었으나, '--no-self-update'라는 옵션을 발견할 수 있었다. 또한 PGAP 버전의 최신으로 업데이트된 상태에서 이전의 특정 버전의 것을 사용하여 실행하는 방법('--use-version <version>')도 있음을 알게 되었다.

Forcing use a specific version of PGAP

이렇게 하여 최신판 바로 직전의 버전을 써서 PGAP을 돌리는 데 성공하였다. 실제로는 metadata file(yaml)의 사소한 오타를 발견하지 못해서 원인을 찾느라 오전 내내 열 번 정도는 거듭하여 테스트 러닝을 실행했었다.

최신판(2022-04-14.build6021)에서 추가된 기능은 설치 위치를 바꿀 수 있다는 것이다. 기본 위치는 $HOME/.pgap이고, 환경변수 PGAP_INPUT_DIR을 활용하여 원하는 곳에 설치하면 된다. 바로 다음날, 집에서 가져온 파일을 이용하여 PGAP 최신 버전을 설치 완료한 뒤 실제 유전체 염기서열을 이용한 분석에 성공하였다.







2022년 5월 17일 화요일

MAX4410 헤드폰 앰프 보드 테스트 - 합격!

3.5 mm 헤드폰 플러그를 끝까지 꽉 꽂지도 않았다는 것을 모르고는 음질도 나쁘고 스테레오 분리도 전혀 되지 않아서 '무슨 이런 물건이 다 있나'하고 크게 실망을 하였다. 칩은 점점 뜨거워지고... 판매자가 제시한 전원 전압 범위는 DC 1.8-6V인데 나는 휴대폰용 충전기(5V)를 연결하였으니 동작에 이상을 일으킬 이유는 없다. 보드에는 인두를 전혀 대지 않고 다만 케이블을 만들어서 꽂기만 했을 뿐이다.

MAX4410 칩의 납땜 패턴을 보니 핀 두개가 한번에 납땜된 모습이 보였다.



'그렇지! 이것은 납땜 불량임에 틀림이 없어!'

나머지 두 개는 어떤가 확인해 보니 전부 똑같다. AliExpress에 보이는 사진으로는 그렇지 않다. 납땜 후 검수 불량이라 해도 한꺼번에 구입한 3개가 다 그렇다는 것은 뭔가 석연치 않다. 데이터시트에서 제시한 typical application circuit 그림을 보아도 1번과 2번 핀을 연결해 버리는 방식은 이해가 잘 가지 않는다. 더 이상 생각하지 않기로 하고 서랍속에 전부 처넣기 전에 그래도 아쉬우니 한번만 더 점검을 해 보기로 하였다.

자료 출처: Analog Devices


마음을 가다듬고 다시 연결을 해 보았다. 헤드폰 플러그를 힘주어 밀어 넣으니 아까보다는 더 깊숙하게 들어간다. 

'음? 소리 괜찮은데?'

보드 3장이 전부 제대로 소리를 내고 있었다. 무신호 시에 볼륨 조절용 놉을 끝까지 올려도 잡음이 그렇게 크게 느껴지지 않는다. 물론 컴퓨터 USB 단자 또는 휴대폰 충전기를 전원으로 사용하면 잡음이 무척 심했다. 운 좋게도 갖고 있던 인터넷 공유기용 5V 전원 어댑터를 연결하면 가장 잡음이 적었다. 이러한 수준이라면 Behringer UCA200 오디오 인터페이스에 연결하여 모니터링 용으로 써도 충분할 것 같다. 원래 이러한 의도로 구입했었던 것이다. 괜히 품질 수준을 오해해서 미안하다! 출력은 16 OHM 부하 기준으로 채널 당 80mW에 지나지 않는 앰플리파이어 칩이라서 고임피던스의 고급 헤드폰을 구동하는 목적으로는 적합하지 않을 것이다. 

이 작은 전위차계는 무려 전원 스위치까지 포함한다!


점퍼 케이블(female)의 품질이 좋지 않아서인지 전원쪽 커넥터가 헐거워서 자꾸 빠진다. 이런 간단한 부품도 좋은 등급의 것을 써야 하는지... 케이스가 확정되면 아예 납땜을 해 버리자.

온갖 종류의 저렴한 앰프 보드를 구입해 보았지만 볼륨 조절용 전위차계나 각종 단자가 납땜이 된 상태로 팔리는 제품이 DIY의 수고를 얼마나 많이 덜어주는지는 경험해 본 사람만이 안다. CMoy 헤드폰 앰프를 만드는 수고에 감히 비교하겠는가? 케이스만 잘 만들어 주면 이번 미션은 끝난다.

2022년 5월 16일 월요일

InterM 파워앰프(R150 Plus)에 LEEM Micro Mixer 연결하기

InterM 파워앰프의 음량 조절용 놉은 단계적으로 걸리면서 돌아가는 타입이라 세밀한 조정이 쉽지 않다. 특히 밤중에 거실에서 튜너를 연결하여 음악을 감상하려면 대략 1단과 2단 사이가 가장 적당한데 그 위치에 놉을 놓기가 참으로 어렵다. 구체적으로 말하자면 1단은 소리가 너무 작고 2단은 너무 크다! 그래서 입력 단자와 소스 기기로부터 연결된 케이블 사이에 포텐셔미터를 삽입하거나 혹은 스피커 출력단자와 스피커 케이블 사이에 5~10와트급의 시멘트 저항(수 OHM)을 넣는 방법을 생각하고 있었다. 매우 간단한 작업이지만 필요한 부품이 없어서 실행에는 옮기지 못하고 있었다.

그런데 예전에 잠깐 사용하던 8채널 LEEM Micro Mixer(WAM-490)가 있다는 것을 문득 깨달았다. 마침 1/4인치 커넥터가 달린 케이블도 많이 있으니 이를 튜너와 앰프 사이에 넣어서 음량 조절 용도로 쓰면 되겠다는 생각이 들었다.



이 믹서는 음질이 그렇게 중요하지 않은 현장에서 소스를 믹스하는 용도로 쓰는 제품이다. S/N ratio는 55 dB나 되고 왜율도 0.1%이다. 앰프를 연결한 뒤 신호가 없는 상태에서 볼륨을 조금만 올리면 잡음이 들릴 정도이니 말이다. 매스터 볼륨과 채널의 볼륨을 적당히 조절하여 피크를 치지 않으면서 잡음이 거의 들리지 않을 수준으로 만들어 놓았다. 파워앰프의 볼륨 놉을 3단으로 두어도 소리가 그렇게 크지 않다.

중고로 팔아버렸던 Tapco Mix 60이 간절히 그리워지는 순간이었다.  덩치가 꽤 있는 편이라서 작은 스피커 위에 올려 놓기에는 적당하지 않지만... 요즘 나오는 콘솔 믹서는 USB 인터페이스를 겸하는 것이 꽤 많아서 이것만 구해 놓으면 여러 용도로 쓸 수 있을 것이라는 유혹이 끊이지 않는다. 예를 들자면 Behringer의 Q502USB 같은 것. 그러나 이런 장비에 욕심을 부리게 되면 USB 마이크로폰의 입지가 위태로워진다.

어차피 한번 꼬인 음악 인생이라서 장비를 용도에 맞게 적재적소에 갖고 있을 필요는 없다. 마침 알리익스프레스에서 주문한 헤드폰 앰프 보드(MAX4410)가 도착하였으니 이를 Behringer UCA200 오디오 인터페이스에 연결해서 소리를 들어봐야 되겠다. 이런 조합으로 사용하면 오디오 인터페이스를 새로 사고 싶은 욕망을 억제할 수 있을 것이라 판단하여 구매를 결정하게 된 것이었다. 과연 만족할 만한 결과가 나올지, 그리고 그 만족감이 며칠이나 갈지는 아무도 모른다. 요즘 아르테시아의 A22XT 오디오 인터페이스(ESI의 U22XT와 동일 제춤으로 여겨짐)가 99,000원에 팔리고 있어서 자꾸 이리고 관심이 가는데...


  

2022년 5월 12일 목요일

MinKNOW v22.03.6에서 configuration test cell(CTC)이 인식되지 않는 문제

소프트웨어 업데이트가 기존의 버그를 해결하면서 때로는 새 문제를 만드는 경우가 가끔 있다. Oxford Nanopore Techologies의 MinION Mk1B를 구동하는 소프트웨어인 MinKNOW가 그러하다. 매번 시퀀싱을 시작하면서 '이번은 아무 오류가 없이 잘 지나갈까'하는 걱정을 하는 현실이 안타깝다.

GPGPU(GeForce RTX 3090)가 장착된 컴퓨터를 지난 2월 새로 장만하여 CUDA와 MinKNOW 및 guppy 등을 새로 설치한 다음, guppy HAC basecall을 성공적으로 실시한 뒤 새 샘플을 시퀀싱하기를 간절히 기다리다가 바로 어제 12개의 박테리아 샘플의 시퀀싱에 착수하였다. 그런데 오랜만에 컴퓨터의 전원을 올리면서 apt 명령어로 소프트웨어 업데이트를 한 것이 문제였을까, MinKNOW(최신판인 v22.03.6)에서 Hardware check에 실패한 것이었다. 그래도 시퀀싱은 할 수 있지 않을까? Hardware check를 매번 할 필요는 없을테니... 이런 안일한 마음으로 상태에서 flow cell을 꽂아서 점검을 해 보았다. 포어 상태를 표시하는 색깔이 평소와는 좀 다르지만 충분한 숫자의 포어가 살아있다 생각하고 라이브러리를 로딩하여 시퀀싱을 시작하였다. 그런데... 몇 분 지나지 않아서 script failure가 나면서 종료하고 말았다.

마침 바로 쓸 수 있는 MinION Mk1C가 바로 곁에 두 대나 있어서 라이브러리가 로딩된 flow cell을 이리로 옮겨서 시퀀싱을 시작하였다. 어젯밤 8시 반쯤에 Mk1C 두 대에서 러닝이 시작되어 아직까지 순조롭게 데이터가 생산되고 있다.

소프트웨어의 작동이 불량하면 깨끗하게 삭제 후 재설치를 하는 것이 정답이다. 그러나 apt를 이용하여 프로그램을 지우면 간혹 의존성 문제 등에 의해서 깨끗하게 지워지지 않을 때도 있다. 두 대의 리눅스 컴퓨터에 MinKNOW와 guppy를 설치하고 지우기를 반복하다가 갑자기 무슨 생각이 들었는지 /opt/ont 디렉토리를 싹 지우고 다시 시작해 보기로 하였다. 이것이 고난의 시작이었다! 이렇게 하면 MinKNOW 관련 소프트웨어가 깔끔하게 지워질 것으로 착각을 했던 것이다.

그 후로는 'sudo apt install minion-nc'를 아무리 실행해도 설정에 오류가 있다면서 실패를 거듭하였다. 오류 메시지를 보니 설치 스크립트를 실행하는 초기 단계에서 /opt/ont 디렉토리 아래에 python 인터프리터가 없다고 한다. 이건 무슨 일이지? Python이 필요하면 자동으로 설치가 되어야 하지 않을까? 매우 의아하게 생각하면서 Python 3.7.4의 소스 파일을 가져다가 컴파일을 하였다. 설정(./configure --prefix=/opt/ont/pytho3.7.4) 후 make 실행 단계에서 SSL library와 관련한 약간의 에러가 있었지만 큰 문제는 없으리라 생각하고 재설치를 한 뒤에 minion-nc를 설치하니 이번에는 오류가 생기지 않았다.

MinKNOW 소프트웨어 구동을 위한 python을 이렇게 처음부터 수작업으로 깔지는 않을텐데... 어쨌든 MinKNOW를 새로 실행한 뒤 CTC를 꽂아서 hardware check를 하니 여전히 position을 찾지 못한다. 도대체 왜 이러는 것이냐!

Nanopore community 웹사이트에 접속하여 나와 비슷한 문제를 겪는 사람이 있는지 질문과 답을 찾아 보았다. 2022년 4월 22일에 등록된 질문 CTC not detected에 대하여 이러한 코멘트가 있었다.



MinKNOW 최신 버전인 22.03.6이 CTC를 인식하지 못한다고 불평하는 사람이 나 혼자만이 아니었다. 해결책은 아무 flow cell이라 꽂은 뒤 hardware check를 하는 것이다. 전자 회로는 동일하기 때문이다.

Oxford Nanopore 기술진이 제시하는 소프트웨어 작동 불량의 해결 방법은 소프트웨어를 완전히 삭제한 뒤 새로 설치하는 것이다. MinKNOW 관련 소프트웨어 완전 삭제를 위해 권장되는 명령어는 다음의 두 줄이었다.

sudo apt purge minion-nc
sudo apt autoremove

반신반의하며 이 명령을 날려서 패키지를 완전히 삭제한 뒤, community 웹사이트에서 설명한 방법(링크 - 로그인 필요)에 따라서 minion-nc를 설치해 보았다. 터미널 창을 주시하고 있노라니 ONT 환경을 위해 파이썬 패키지를 가져다가 설치하는 과정이 똑똑히 나타났다. 그러면 그렇지! MinKNOW를 다시 켜고 다 쓴 flow cell을 MinION Mk1B에 꽂은 후 hardware check를 해 보았다. MinKNOW는 이를 CTC로 인식하여 성공적으로 점검을 마쳤다.

실제로 꽂혀 있는 것은 CTC가 아니라 다 쓴 flow cell이다.

점검 완료!

MinKNOW에 포함된 guppy의 버전이 아직 5.x대에 머물러 있던 시절, MinKNOW 내에서 HAC basecalling을 해 보고 싶어서 guppy 6.x을 추가로 설치하였다가 시퀀싱이 중단되는 에러를 겪었던 일이 있다. 지금은 MinKNOW용 guppy와 standalone형의 guppy가 전부 v6.x으로 판올림이 된 상태라서 이런 문제가 해결되었는지는 아직 알 수 었다. 돌이켜보면 당시에는 GPGPU가 없던 시절이라서 MinKNOW에서 HAC basecall이 된다고 해도 시퀀싱 러닝 종료 후 얼마를 더 기다려야 하는지 기약이 없었을 것이다.

$ dpkg -l | grep guppy
rc  ont-guppy                6.1.3-1~focal amd64 Oxford Nanopore Technologies high-performance GPU basecaller
ii  ont-guppy-cpu-for-minion 6.0.7-1~focal amd64 Oxford Nanopore Technologies high-performance GPU basecaller
ii  ont-guppyd-for-minion    6.0.7-1~focal all   Oxford Nanopore Technologies plc service for the real-time guppy basecaller

이번에 설치한 MinKNOW에서 과연 러닝과 동시에 HAC basecalling이 잘 이루어질까? Major version이 같으니 가능할지도 모른다. 혹은 fasta basecall부터 먼저 해 놓은 다음 나중에 명령행에서 HAC basecalling을 해야 할까? MinKNOW에서 각 서브 패키지를 확인해 보니 guppy 6.1.3(GPU version)이 잘 보인다. 이제는 MinKNOW 내에서 HAC basecalling을 할 수 있을 것 같다. 

2022년 5월 10일 화요일

Tracktion Waveform Free 익히기

Waveform Free라는 무료 DAW(digital audio workstation) 소프트웨어를 컴퓨터(Windows 10)에 설치하고 유튜브에 올라온 튜토리얼 동영상을 보면서 아주 느리게 사용법을 익히고 있다. 전용 드라이버가 제공되지 않아 ASIO4ALL만으로 구동되는 저가 오디오 인터페이스 또는 USB 마이크로폰을 사용해서도 음악 작업을 하는데 별 불편함이 없었다. 사운드폰트 파일을 sforzando에 적재한 뒤 Waveform Free에서 플러그인으로 작동하는 방법도 알게 되었다. 오늘은 루프 활용의 기초를 익혔다. Instant Drum Patterns에서 다운로드한 MIDI 파일을 삽입한 뒤 가상악기와 연결하여 소리를 내 보기도 했다.

데모곡 연주 화면.

리눅스에서 음악 작업을 하겠노라고 2년 가까이 설정 단계에서만 제자리 걸음을 했던 것이 억울할 지경이다. Waveform은 윈도우와 맥 및 리눅스용 프로그램이 전부 있으니 일단 충분히 학습을 하면 리눅스로 작업 환경을 옮길 수도 있겠지만, 지금 또다른 가상 악기로서 약간의 관심을 갖고 있는 Native Instruments의 Komplete Start는 리눅스에서 쓰지 못한다.

PulseAudio/JACK과 씨름할 생각을 하면 음악 작업을 위해 다시 리눅스로 돌아가기가 꺼려진다. 물론 Adour나 LMMS 같은 무료 DAW를 써서 프로페셔널한 수준의 음악을 만드는 고수가 널려 있을 것이다. 기왕 Waveform Free를 쓰기 시작했으니 당장은 가파른 학습곡선을 타는 즐거움을 누리고 싶다. Waveform Free는 무료 DAW 중에서는 기능 제한이 가장 적고 익히기도 쉬운 것으로 정평이 있다. 만약 제대로 된 오디오 인터페이스를 구매했다면 번들로 제공되는 유명 DAW의 라이트 버전을 쓸 수도 있었을 것이다.

예사롭지 않은 사무실 풍경.

ASIO4ALL 또는 Roland SC-D70 자체 드라이버 어느 것이든 잘 작동한다.


유튜브를 보니 영어권에서는 DAW를 그저 [더-]라고 발음한다. Audio Tech TV에 홈 레코딩에 쓰이는 소프트웨어 및 장비에 대한 유용한 정보가 많다. 심심할 때마다 한 편씩 시청을...


데이터를 쓸모있게 만드는 메타데이터

오늘 출범한 윤석열 정부는 대통령직인수위원회를 통해 과학기술교육분야의 밑그림을 그리면서 <바이오 대전환 대응을 위한 디지털 바이오 육성>을 제안한바 있다. 

尹 정부 "BT 데이터 스테이션 구축···R&D 데이터 의무 공개" 대덕넷 5월 1일자 기사

실천 과제는 다음의 4가지이다.

  • 부처적인 바이오 데이터의 축적‧공유‧활용 플랫폼 구축 및 고도화(혹시 '범 부처적'의 오기?)
  • AI, 빅데이터 등을 접목하여 연구효율 및 생산성 제고
  • 디지털 바이오 유망기술 집중 육성으로 글로벌 경쟁력 확보 및 신시장 선점
  • 정부와 민간이 협력할 수 있는 생태계 조성 및 연구 기반 확충

  • 110대 국정과제(인수위 링크 - 오늘 24시 웹사이트 운영 종료 예정)에 이러한 세부사항이 어떻게 녹아들어가 있는지 살펴보자. 과학기술과 관련된 꼭지를 찾기가 쉽지는 않다. 

    인수위 웹사이트가 운영 종료를 곧 앞두고 있어서 국정과제 이미지 파일을 내려받아 게시하였다. 혹시 저작권에 위배되는 것은 아닌지...
    나는 바이오 데이터라는 낱말을 별로 좋아하지 않는다. 하나의 영단어로 표현되는 biodata는 개인의 생애와 관련된 기록, 즉 이력서를 채울 생애 관련 자료(biographical data)이다. 우리가 '바이오 데이터'라고 쓰는 것은 biodata가 아니라 생명공학 및 의료분야에서 생산되는 연구 자료를 일컫는 신조어에 가깝다. 따라서 원래 있었던 낱말인 biodata와 구별하기 위해 bio data/bio-data라고 띄어쓰는 것이 중요할 것이다. 아주 정확히 쓰려면 바이오 연구 데이터라고 하는 것이 옳다. 그러나 '연구'라 함은 데이터의 용도를 설명하기 위함이다. 상업적인 의료 서비스를 위해 만든 각종 측정 데이터(유전체 데이터도 그중의 한가지)도 연구 목적으로 쓴다면 (바이오) 연구 데이터가 된다. 데이터의 성질 자체는 변하지 않는다.

    디지털 바이오는 더욱 어려운 개념이다. 아직 그 누구도 이에 대해서 명확하게 정의하기 어려울 것이다. 그런데 관련 정부부처에서 마련한 자료에서는 이미 디지털 바이오의 개념을 정의해 놓았으며, 지난 5월 4일 내가 근무하는 한국생명공학연구원에서는 유튜브를 통해서 나름대로 쉽게 디지털 바이오를 설명한 동영상을 공개해 놓았으니 일단 나부터 시청을 한 뒤 다시 돌아와서 글을 쓰도록 하겠다.


    정부의 연구비가 투입되어 생산된 '공공' 데이터는 최대한 공유하여 널리 쓰이게 하는 것이 인류의 복지와 산업 발전을 위해 필요하다는 것은 누구나 인정할 것이다. 그러나 실제 현장에서는 많은 어려움이 있다. 
    • 연구하고 논문 쓰기에도 바빠 죽겠는데 왜 데이터 공유를 해야 한단 말인가?
    • 이 데이터가 정말 쓸만한 양질의 데이터인가?
    • Raw data/중간 단계 데이터/논문에 실릴 정도로 정제 및 가공을 거쳐 과학적 의미가 부여된 데이터 중 어느 것을 등록하란 말인가?
    • 데이터를 어디에 어떻게 등록해야 하는가? 
    • 왜 우리의 세금을 들여 생산한 연구 데이터를 외국(예: NCBI)에 등록한단 말인가?
    • K-바이오 데이터 저장소에는 외국인 연구자도 접속이 가능한가? 우리 데이터를 가져가지 못하도록 담벼락을 세워야 하지 않는가?
    • 내가 힘들여 제안서를 써서 정부 연구비를 받았으니 이 데이터는 내 것이 아닌가?(세금은 누가 내는가?)
    • 논문을 쓰는 중이라서 데이터의 공개를 일정 기간 동안은 미루고 싶다. 한 10년 정도?
    • 유전체 데이터는 사실상 보호해야 할 개인 정보 아닌가?
    • 연구자가 정부 연구비를 이용하여 얻은 결과로 사업화를 하고 금전적인 이득을 취한다면 이는 과연 공정한 것인가?
    • 관련 과제를 뭐라고 해야 되지? 이것은 생각보다 까다로운 문제이다. 자료 생산과 자료 분석(인건비) 비용을 댄 과제가 서로 다르면 어떻게 하나?
    연구라고 하는 순수한 동기에서 얻어진 산출물에 여러가지 이해 관계와 명분이 얽히면서 문제는 상당히 복잡해진다. 연구 '성과물'과 '결과물'을 명확하게 구분하지 못하는 우리의 태도 역시 데이터 공유를 어렵게 만든다. 이야기를 더욱 어렵게 만들어 보자. 실적과 결과 및 성과라는 세 낱말은 무엇이 다른가? 

    동료 평가를 거친 학술논문으로 출판될 수준의 것이 연구 성과라면, 요즘 화두가 되고 있는 빅데이터적인 입장에서는 성과까지 이르는 여정에서 발생한 모든 결과물(그것이 비록 실패한 연구이거나 아직 의미를 부여하지 못하는 단계, 혹은 너무나 방대한 양... 그 무엇이든 좋다)을 다 모으고 싶어한다.

    2016년에 유전체를 해독했던 어떤 박테리아와 관련한 짧은 논문을 지난 3월부터 써서 심사 과정을 거치고 있다. 논문에서 요구하는 Materials & Methods 정보는 예전보다 더욱 많아졌다. 출판 완료된 논문이란, 그 당시에 사용할 수 있는 분석 기술의 스냅샷을 담고 있을 뿐이다. 그러니 논문의 독자가 나중에 그 과정을 재현함은 물론, 더욱 발전된 분석 기술을 적용할 수 있도록 데이터 및 그와 관련한 더욱 많은 자료를 요구하는 것이다. 심하게는 어떤 프로그램을 돌렸을 때 출력되는 로그 파일까지도 제출하라고 요구할 기세다.

    천랩, 마크로젠, 테라젠 이텍스, NICEM 등 여러 시퀀싱 서비스 기관으로부터 분석 결과물을 받을 당시에 같이 전달된 리포트를 검토해 보았지만, 현재 기준의 논문 리뷰어가 요구하는 실험 방법까지 상세하게 제공하지를 않았다. 만약 반년쯤 전에 받은 시퀀싱 결과물이라면, 담당자에게 전화를 걸어서 '라이브러리 프렙은 어떻게 했나요?', 또는 '사이즈 선별은 했었나요?' 하고 물어 볼 수나 있을 것이다. 그러나 몇년이 지났다고 하면 이야기가 달라진다. 기록이 남아있지 않거나, 이직이 잦은 업계 특성 상 당시 사정을 알지 못하는 직원을 붙들고 이야기를 해야 할 수도 있다. 몇년 동안 논문화 작업을 하지 않은(아니, 하지 못한) 우리 자신을 탓하는 것이 옳을지도 모른다.

    시퀀싱 서비스 업체에 다시 전화를 걸어서 묻고 싶은 '자료에 대한 자료', 즉 이런 것이 메타 데이터의 사례에 속하게 된다. KOBIC(국가생명연구자원정보센터)에서도 바이오 데이터 등록 양식을 만들면서 주변 정보를 어디까지 포함해여 어떻게 체계회해야 하는지 무척 오랫동안 고심한 것으로 알고 있다. 수년 동안의 노력 끝에 만들어져 현재 유통되는 등록양식 설명 책자는 이미 엄지손가락 두께에 이르는데, 이렇게 되면 들추어보기가 어렵게 된다. 데이터 등록양식은 되도록 단순해야 한다. 해마다 점점 두꺼워지는 법전처럼 되어서는 안 된다는 뜻이다.

    데이터 공유라는 대의에 모두가 공감을 하는 것을 전제로 하되('그걸 왜 해야 하는데?'라는 질문은 하지 않기로 하자), 데이터가 생산된 시점에서 너무 시간이 경과한 뒤에 등록해서는 안 된다. 요즘은 데이터 관리 계획(data management plan, DMP)라는 것을 연구과제 신청 단계에서 수립하게 만들기는 한다. 이는 책임을 미루는 좋은 방법이기도 하다. 신규 과제에 대해서만 실행하게 만들면 되니까. 논문 하나를 참조해 보자(데이터 관리 계획의 국내 현황 및 과제).

    연구 데이터 공유의 당위성에 대한 법적·윤리적 근거는 정말 확실한가? 연구 데이터가 갖는 잠재적인 경제적 가치에만 너무 경도된 것은 아닌가? '패권'이니 '선점'이니 '미래 먹거리'니 하는 실용적 가치에만 신경을 쓰다가 정작 중요한 것을 놓치는 일이 생기지는 않을까?

    자료 못지않게 중요한 것이 메타데이터이다. 부실한 메타데이터는 본 데이터의 등록 및 활용을 막는 걸림돌이 된다. 더욱 나쁜 것은, 본 데이터의 등록 또는 활용을 하기 꺼려하는 사람들에게 부실한 메타데이터는 좋은 핑곗거리가 된다.

    2022년 5월 6일 금요일

    헤드폰 구동용 IC, MAX4410(80mW)

    내가 갖고 있는 베링거의 초저가 오디오 인터페이스인 UCA200에는 헤드폰 모니터링용 단자가 없다. 지금 이 제품은 베링거 웹사이트에서 소개가 되지 않으며, 후속 기종인 UCA202(UCA222는 색깔만 다름)가 여전히 유통된다. 아마 UCA200은 아날로그 믹서를 컴퓨터에 연결하여 사용하는 간이형 USB 오디오 인터페이스의 개념으로 제조된 것 같다. 아날로그 믹서에 헤드폰을 직접 연결할 수 있으니 저가형·초소형 제품을 표방한 UCA200에 헤드폰 연결 단자를 포함할 이유가 없었을 것이다.

    현재 UCA200은 라즈베리 파이(볼루미오)의 오디오 출력용으로 훌륭하게 제 기능을 다 하고 있다. 만약 언젠가 집에서 음악 녹음 작업을 하게 된다면, 모니터링 방법을 마련해야 한다. 컴퓨터가 놓인 거실에 음악 감상용 오디오는 있지만, 모니터링 용도에는 맞지 않는다. UCA200의 아날로그 출력 단자에서 헤드폰 출력을 뽑으면 그런대로 작업은 가능할 것이다.

    RCA - 3.5 mm 스테레오 폰잭 젠더 케이블을 출력 단자을 달아서 사무실에서 헤드폰 구동용으로 쓴 일이 있었다. 문제는 출력이 충분하지 않다는 점이다. OP amp 칩을 사용한 아주 간단한 CMoy 앰프를 만들어서 사용한 일도 있었다. 지금은 어디에 처박혀 있는지 알기 어렵고, 찾는다 해도 음량조절 포텐셔미터가 없는 형태라서 개조를 하려면 여간 성가신 것이 아니다.

    헤드폰 앰프 반제품으로서 PC의 USB 단자에서 전원을 뽑을 수 있는(흠, 이건 별로 좋은 생각은 아니지만) 그런 물건은 없을까? 오랜만에 알리익스프레스를 뒤져 보았다. 배송 주소를 업데이트하려고 로그인을 하니 개인통관고유번호를 반드시 넣으라고 한다. 꽤 오랫동안 쓰지 않았더니 변한 것이 많았구나!

    헤드폰 앰프와 관련한 제품을 찾아 보았다. 충전 방식의 휴대용 완제품 기기에는 관심이 없어서 키트 혹은 반제품에는 어떤 것이 있는가를 뒤적거려 보았더니, MAX4410이라는 칩을 사용한 보드가 꽤 많이 보였다. 헤드폰 앰프계의 TPA3116에 해당하는 앰플리파이어 칩인가?

    MAX4410을 사용한 헤드폰 앰프 보드(알리익스프레스 화면 캡쳐).

    MAX4410은 지금은 Analog Devices 사의 일부가 된 Maxim Integrated 사의 제품이다. 웹사이트의 설명에 의하면 80mW, DirectDrive Stereo Headphone Driver with Shutdown이라고 하였다. 작은 크기를 필요로 하는 휴대용 기기를 위해 설계된 헤드폰 드라이버로서 단일 전원을 사용하여 그라운드 기준의 출력을 만들어 내므로 대용량의 DC-blocking capacitor가 필요 없다고 한다. 요구하는 전원 전압도 1.8V-3.6V라 하니 여러모로 내가 쓰려는 용도에 적합하다. 데이터시트(Rev 2)에 찍힌 날짜가 2002년 12월 13일인 것으로 보아 아마 20년 가까이 수많은 휴대용 기기의 헤드폰용 증폭회로에 쓰여 왔는지도 모를 일이다. Head-Fi.org 포럼의 2005년도 글에 이 칩에 대한 글이 있었다(MAX 4410 Stereo Headphone Driver?) 데이터시트에 적힌 응용 분야를 살펴보았다.

    그렇구나... 세상은 다 알고 있었지만 나만 모르는 헤드폰 구동용 IC였다. 이를 응용한 DIY용 보드가 알리익스프레스에 깔리게 된 것이 언제부터인지는 모르겠지만. 포텐셔미터에 폰잭까지 포함한 완성 상태의 보드가 3천원도 안 되는 가격에 나와 있으니 쓰지 않을 이유가 없다. 참 편리한 세상이다. 뭐하려 CMoy 앰프를 만들려고 만능기판에 뜨개질을 하겠는가? 가뜩이나 노안도 심해서 IC 회로를 납땜해서 만들려면 여간 어려운 것이 아니기 때문이다.

    UCA200을 음악 녹음 작업에 꼭 써야겠다고 고집하지만 않는다면, 이미 쿠팡 등지에서 베링거 U-Phoria UM2를 5만원 대에 살 수는 있다. 마이크로폰 및 Hi-Z 입력도 지원하니 유용성은 더 높다. 단, 외부 신세사이저 스테레오 출력을 연결하여 녹음하려면 좀 연구를 해 봐야 하지만 말이다.

    그런데 말이다.

    '감상'과 '앰프 DIY'를 넘어서는 음악 창작과 녹음 작업이 과연 나의 취미로 자리잡을 수는 있을까? 이를 꿈꾸어 온지는 이미 30년이 넘었지만 몇 개의 싸구려 장비가 내 곁을 스쳐 지나갔을 뿐이다. 일단은 Tracktion Waveform 사용법이나 익히는 것으로 시작을 하자.


    2022년 5월 5일 목요일

    나를 위한 어린이날 선물 Behringer 헤드폰 BH 470

    사무실에서 사용하는 아이리버 헤드셋(CLEARCHAT IR-H30V로 추정)의 음질이 너무 마음에 들지 않아서 그보다는 약간 더 나을 것으로 기대하고 베링거(유튜브에서는 전부 '베린저'로 발음 - 독일어로 읽는다면 '베링어'가 맞을 것임; 설립자인 Uli Behringer는 스위스 바덴 출신으로서 기업 연혁에 대해서는 링크 참조)의 BH 470을 쿠팡에서 구입하였다. 쿠팡 가격으로 26,450원짜리 헤드폰에 많은 것을 기대하면 욕심일 것이다. 스튜디오 레퍼런스 헤드폰을 표방하는 바로 윗등급 모델인 BH 770과 한참을 저울질하다가 그냥 더 싼 것을 쓰기로 하였다.

    Behringer 웹사이트에 의하면 BH 470은 스튜디오 모니터링 헤드폰이라고 한다. 정말?

    오늘(어린이날) 주문하여 로켓 배송으로 받았으니 아직 사무실에 들고 나가지는 못했다. 아이리버 헤드셋보다 음질이 월등한 것 같지는 않다. 객관적인 비교는 내일 출근해 봐야 알 것이다. 화상 회의를 하려면 헤드셋이 더욱 편리한 것이 사실이지만, 사무실에는 USB 콘덴서 마이크로폰과 묻지마 브랜드의 다이나믹 마이크로폰이 있다. 다이나믹 마이크로폰을 위한 프리앰프는 롤랜드 사운드캔버스 SC-D70에 훌륭하게 제 역할을 한다.

    밀폐형 헤드폰이 어느 정도 수준으로 기능을 하려면 조임이 없어서는 곤란하다. 외부의 소리를 차단하는 것도 중요하고, 헤드폰의 소리를 밖으로 나가지 않게 하는 것도 중요하다. 여러 사람이 같이 쓰는 사무실이라면 후자가 더욱 중요할 것이다.

    집에서 사용하는 것은 오디오 테크니카의 TH-380AV. 매우 가볍고 밀폐 정도도 덜하다. 다나와에 등록된 연도는 2003년이고 드라이버 유닛의 직경은 베링거 BH 470과 동일한 40mm이다. 2015년에 한 번 교체한 쿠션은 또 표면이 잘게 부서지고 있다. 케이블 내부에서 단선이 일어나지 않았으니 쿠션만 바꾸면 계속 사용할 수 있으리라.

    더 나이가 들기 전에 20대 시절부터 꿈이었던 음악 작업을 제대로 해 보고 싶은데 실행에 옮기기가 참 어렵다.

    2022년 5월 3일 화요일

    Windows 10에서 MIDI 건반을 연결하여 Sound Canvas SC-D70 연주하기

    예전에 방법을 다 알아 두었던 것만 같은데 너무 오랫동안 쓰지를 않았더니 기억이 잘 나지 않는다. 검색을 통해서 다시 하나씩 활용법을 되살려 보기로 한다. MIDI 키보드 컨트롤러와 SC-D70이 전부 USB 케이블을 통해 PC에 연결되어 있다고 가정한다.

    MIDI-OX를 실행한다. Options -> MIDI Devices..를 선택하여 다음과 같이 키보드와 Roland SC-D70을 연결한다. OK를 클릭하면 키보드 연주에 따라 SC-D70에서 소리가 날 것이다.

    GM2/GS로 리셋을 하려면 MIDI-OX에서 다음의 SysEx 메시지를 보내면 된다. 이에 대해서는 2020년 8월에 내 블로그에 기록해 둔 바 있다(링크).

    Sound generator parameter initialization messages

    [GS] GS Reset F0 41 10 42 12 40 00 7F 00 41 F7

    [GM2] GM2 System On F0 7E 7F 09 03 F7

    SC-D70은 1608개의 음색과 63개의 드럼세트를 내장하고 있지만 전면 버튼을 하나씩 눌러서 이를 바꾸기는 매우 번거롭다. Variation sound를 이용하려면 MIDI 신호를 통해서 bank select 신호를 보내면 되는데(CC 00), 시퀀싱 소프트웨어 같은 것을 쓰지 않고도 명령행 유틸리티를 통해서 이러한 신호를 보낼 수 있다. 

    SC-D70 Owner's Manual 58쪽. 자료(PDF) 링크.

    그것은 바로 Geert Bevin의 SendMIDI 유틸리티를 쓰는 것이다. 이 프로그램은 리눅스와 맥, 윈도우에서 모두 실행된다. 'sendmidi list' 명령을 통해서 디바이스 이름을 알아낸 다음. 'sendmidi dev' 명령을 이용하여 뱅크 변경 및 프로그램 변경 메시지를 날리면 된다. 여기서 한 가지 주의할 점은 프로그램을 변경하려면 0-127 범위의 숫자를 넣어야 한다. 사용자 매뉴얼 및 전면 디스플레이는 1-128 범위를 기준으로 한다. 단, 뱅크(variation number)는 매뉴얼에 있는 그대로를 적으면 된다. 윈도우즈 터미널을 열고 다음을 입력해 보라. hilite.me에는 윈도우즈 터미널 또는 명령 프롬프트에 맞는 표현 방식이 없어서 Bash를 택했더니 좀 어색하게 보일 것이다.

    > .\sendmidi.exe list
    Microsoft GS Wavetable Synth
    iCON iKeyboard 5 Nano V1.06
    Roland SC-D70 PART A
    Roland SC-D70 PART B
    Roland SC-D70 MIDI OUT
    > .\sendmidi.exe dev "Roland SC-D70 PART A" cc 0 2 pc 2
    

    위 사례에서 프로그램 변경 번호는 2를 넣었지만, 실제로는 3번(Piano 3)으로 바뀐다. SendMIDI의 설명은 아주 간단하다.

  • cc    number value   Send Control Change number (0-127) with value (0-127)
  • pc    number         Send Program Change number (0-127)

  • 노브를 돌려서 0-127 사이의 값을 MIDI 모듈로 보내는 장비를 만들 수도 있을 것이다. 게다가 액정 화면으로 작동 및 설정 상태를 표시하게 만들 수도 있지 않을까? 아두이노를 사용하여 구현하는 것이 가능할 것이다. 그러나 MIDI 케이블을 통하여 컨트롤하는 아두이노 장비를 만들 경우, SC-D70을 컴퓨터가 동시에 제어하게 만들기는 어려울 것이다. 또한 SC-D70을 MIDI cable을 통해 제어하려면, INST LEVEL(PREVIEW)을 누른 상태로 파워를 넣어야 한다(사용자 매뉴얼 39쪽). 차라리 윈도우에서 이를 제어하게 만드는 간단한 파이썬 프로그램을 짜는 것이 더 나을지도 모른다. MIDI-OX에서도 음색 변경이 가능할 것 같지만 아직 확인해 보지 않았다. User forum에 Sending Program Change to Lighting Controller라는 글이 있으니 나중에 자세히 읽어 보도록 하겠다.

    SC-D70 매뉴얼을 다시 들춰 보니 전면 버튼을 조작하여 variation sound를 선택하는 방법이 32쪽에 나온다.

    17번의 Sound Generator Indicators에서 INST에 불이 들어온 상태일 때 [DEC]와 [INC] 버튼을 동시에 누른다. 그러면 INST 표시등이 점멸할 것이다. 이 상태에서 [DEC] 또는 [INC] 버튼을 눌러서 variation sound를 선택하면 된다. 

    2022년 5월 1일 일요일

    제23회 전주국제영화제에 다녀와서

    지난 토요일(어제, 4/30) 아내와 함께 전주국제영화제에 다녀왔다. 이번 행사 기간은 4월 28일부터 5월 7일까지. 전주를 꽤 자주 간다고 생각했었는데 올해는 1월 29일에 이어서 이제 겨우 두 번째. 아마도 어린이날에 한번 더 가게 되지 않을까 생각한다. 전체 217편의 초청 영화 중 온라인 관람(링크)이 가능한 영화(해외 69편, 국내 43편)도 있으니 몇 편을 꼼꼼하게 골라서 이것으로 보면 될 것이다. 

    전주돔 앞에서

    젊은이들로 가득한 영화의 거리와 객사길을 거닐면서 이제 정말로 우리가 신종코로나바이러스감염증으로부터 벗어나고 있다는 희망을 가져 보았다. 한옥거리보다는 이쪽 거리가 조금 더 한산하고 식당이나 카페도 가성비가 높은 것 같다. 물론 한옥거리에서 여기까지 와서 한복을 입고 돌아다니는 사람은 거의 없다.

    한동안 따뜻하던 날씨가 갑자기 쌀쌀해져서 버스킹을 진행하는 연주자들은 음악 중간마다 핫팩을 매만지며 손을 덥혀야 했다. 클래식 연주자로 구성된 팀이 영화 음악 주제가 메들리를 들려 주었다.



    출품된 작품을 골라서 관람하는 것이 정석이겠지만 이번에도 조이앤시네마에서 영화제와는 상관이 없는 최근 개봉작인 「앵커」를 보았다. 이혜영 배우의 면도칼 같은 정확한 대사와 카리스마 넘치는 연기를 보면서 왜 이렇게 빛나는 배우를 한동안 잊고 있었나(나만 그랬는지도)하는 생각을 했다. 안성기와 함께 출연했던 장선우 감독의 「성공시대」를 직접 극장에서 본 일이 있다. 실은 이 영화의 제목이 기억나지 않아 검색을 해서 찾아냈는데, 1988년에 개봉한 영화이니 참으로 오래 전의 일이다.

    봉준호 감독이 제77회 골든글로브 시상식에서 「기생충」으로 외국어영화상을 받으면서 '1인치에 불과한 자막의 장벽을 넘으면 여러분들이 훨씬 더 많은 영화를 즐길 수 있다.'고 하여 많은 영화팬들의 무릎을 치게 만들었다. 물론 옳은 말이지만, 어두운 극장에서 직접 화면에 몰입하면서 모국어로 된 영화를 볼 수 있다는 것이 얼마나 좋은 일인가하는 생각을 하였다. 한국 영화는 대사가 잘 들리지 않아서 차라리 한글 자막을 깔아 주면 좋겠다는 푸념까지 종종 보게 되는데, 어떤 자료에 의하면 이것은 영화 제작 기술의 문제가 아니라 촬영 현장의 위계 문제와도 관련이 있다고 한다. 마이크를 든 사람이 카메라를 돌리는 사람의 눈치를 봐야 한다면 정확할까? 녹음을 잘 하려면 마이크를 배우 가까이 들이대야 하는데, 잘못하여 화면에 나오면 곤란하니 촬영 현장에서는 '입김이 더 센' 촬영감독을 불편하지 않게 녹음을 하는 일이 더 중요하다고 한다. 오디오는 촬영이 끝난 뒤 나중에 어떻게 해서든(극단적인 경우 후시녹음이라는 것도 있으니) 벌충이 가능하다고 생각한다면 이는 잘못되었다고 본다.

    AI에 의한 번역 기술이 워낙 좋아져서 웹에 올라오는 외국어 텍스트를 이해하는 것도 이제는 별로 어려운 일이 아니다. OTT를 통해서 우리말 더빙이나 자막이 입혀진 영화를 보는 것도 매우 흔한 일상이 되었다. 그러나 그것만으로 옮겨지지 않는 그 무엇인가가 반드시 존재한다. 애플 TV에서 「파친코」를 보면서 몇몇 배우의 우리말 대사가 매우 어색하다고 느꼈다. 영어로 된 원작 소설을 국문으로 옮기는 문제가 아니라, 억양과 발음이 자연스럽지 않았기 때문이다. 만약 내가 한국어 자막이 입혀진 외국 영화를 보고 있다고 가정하자. 실제 그 배우의 발음이 언어 현실에 맞는지 아닌지는 아예 관심을 두지 않을 것이다. 

    그렇다. 봉준호 감독의 말처럼 자막 또는 번역이 새로운 세계의 문화를 접하게 만드는 중요한 장치 역할을 하지만, 그것으로 옮겨지지 않는 그 무엇인가는 반드시 존재한다. 그 허전함은 모국어로 만들어진 영화를 볼 때에만 비로소 채워지는 것. 

    최근에 넷플릭스에서 일본 만화영화 「겁쟁이 페달」(조선일보 기사 링크)을 보면서 다른 언어를 제대로 옮긴다는 것이 참 어렵다는 것을 많이 느꼈다.

    "이 저지(jersey, 여기에서는 소속 고등학교가 새겨진 로드 자전거 팀용 상의)를 골에 전달해야만 해!"

    소속 팀이 이길 수 있도록 가장 빨리 달려서 피니쉬 라인을 통과하자는 뜻인데, '저지를 전달한다'고 표현한 것을 그대로 직역을 해 놓아서 매우 어색했다. 번역가의 고충이 느껴진다. 

    「앵커」는 잘 만든 영화라고 생각한다. 이렇게 아무런 사전 정보를 갖지 않고 영화를 보는 즐거움이 꽤 쏠쏠하다. 반전이 숨어있는 영화라서 줄거리를 소개할 수는 없다. 


    전주돔 곁의 야외 행사장을 둘러보다가 한국형 영화 효과음원 사업(K-Sound Library, 링크)의 부스에서 영상에 효과음을 직접 만들어 넣는 이색적인 체험을 하였다. 내가 고른 것은 사막에서 야영을 하면서 면도를 하기 위해 가죽에 면도날을 가는 소리였다. 어떤 영화의 한 장면인지도 알 수 있었다면 금상첨화였을 것이다. 물론 이에 해당하는 실물은 없으므로 두꺼운 종이에 헤라를 문지르는 방식으로 영상에 맞추어 소리를 내면, 부스에 설치된 다이나믹 마이크로 소리를 녹음하여 영상에 입혀서 보여주는 체험이었다. 몇 초에 불과한 간단한 체험이었으나, 소니 MDR-7506 모니터링용 헤드폰을 통한 깨끗한 소리 재생은 싸구려 헤드폰 또는 헤드셋만 사용하던 나에게는 큰 충격이었다. 

    소니 MDR-7506. 단종되었지만 아직도 신품을 살 수 있다고 한다. 그러면 후속 모델은 뭔가?

    정작 영화제 자체에 대한 내용은 별로 없고 전부 '소리'에 대한 내용으로 오늘의 글을 채우게 되었다. 아직 방향을 잡고 있지 못하는 나의 사운드 창작 및 녹음에 대한 새로운 영감을 많이 얻게 된 짧은 여행이었다.

    대성동 주차장으로 가는 택시를 잡기 위해 골목길을 걸으며 마주친 어떤 젊은 여성을 보고 나와 아내가 똑같이 생각한 것이 있다. 물론 전부 마스크를 쓰고 있어서 얼굴은 알 수가 없었다.

    와, 「미도스지」(겁쟁이 페달 참조)를 꼭 닮았네!

    전주 조이앤시네마여, 영원하라!


    2022년 5월 9일 업데이트

    어버이날을 우리와 같이 보내기 위해 고양시에서 내려온 아들, 그리고 아내와 함께 전주국제영화제 마지막날에 다시 전주를 찾았다. 영화제 기간에 출품작을 하나라도 보아야겠다는 일념으로 대충 시간에 맞추어 제임스 베닝(James Benning)이라는 미국 감독의 영화 「미국(The United States of America)」(링크)을 아무런 사전 정보 없이 보게 되었는데... 아무런 등장인물이나 자막도 없이 미국의 각 주를 고정된 각도에서 약 2분씩 보여주는 그의 영화는 지나치게 심심하였다. 소위 상업적인 대중문화예술업체에서 일하는 아들의 불평도 수긍이 갔다. 지나치게 자극적인 영상(평론가에 의하면 '시청각적 폭격')에 물든 우리들에게 때로는 이런 영상은 치료제가 될 수도 있겠지만.