2020년 10월 28일 수요일

ATCC Genome Portal - ATCC에서 유전체 서열을 서비스하다

Tannerella forsynthia라는 생소한 이름의 미생물을 조사하다가 균주 자원 은행으로 잘 알려진 미국의 ATCC(American Type Culture Collection)에서 표준 균주(type strain)의 유전체 염기서열 자료를 제공하기 시작했다는 것을 알게 되었다. 웹 사이트의 이름은 ATCC Genome Portal이다. 유전체 정보는 으레 NCBI에서 검색하여 다운로드하는 것으로만 알고 있었는데, 결국 균주 자원 은행에서 이런 일을 하게 되다니 놀랍기만 하다. Technical document는 여기에서 열람할 수 있다.

모든 유전체 서열 정보가 NCBI에만 존재하는 것은 아니다. 요즘은 어떤지 모르겠으나 JGI의 IMG/M(Integrated Microbial Genomes and Microbiomes)에 로그인해야만 받을 수 있는 것들도 있었으니 말이다.

과거 연구가 덜 된 type strain 위주로 시퀀싱을 했던 GEBA(Genomic Encyclopedia of Bacteria and Archaea)라는 프로젝트도 있었다. 지금은 phase III을 진행 중이라고 한다.

오늘 날짜 기준으로 ATCC Genome Portal에 'publish'된 유전체의 수는 858개이다. Short & long read를 이용한 표준적인 방법으로 표준 균주에 대한 유전체 정보를 생산하여 엄격한 QC를 통과한 것을 서비스하고 있으니 그 신뢰성이야 말해서 무엇하랴. 계정을 생성하기만 하면 쉽게 유전체 정보를 받을 수 있고, commercial email 주소를 쓰는 것을 제한하지도 않는다.

ATCC Genome Portal은 2019년 10월에 250개의 유전체를 가지고 시작했다는 뉴스 기사가 보인다.

ATCC launches first portal of whole-genome sequences based on authenticated biological standards

우리나라의 중추적 생물자원센터인 KCTC에서도 이러한 추세에 보조를 맞추어 나가야 할 것이다.

43 싱글 앰프의 잡음 정복기

앰프를 제작할 당시에 좀 더 소리에 귀를 기울여서 잡음이 나고 있다는 것을 빨리 알았더라면, 부품 배치를 더욱 신중히 할 수 있었을 것이다. 이제 와서 잡음을 유발하는 부품을 본체에서 떼어내려니 미관상 별로 좋지가 않다.

주변에 늘 소음이 있는 환경이라면, 스피커에 귀를 가까이 대고 있어도 앰프가 발생하는 잡음을 눈치채기 어려울 것이다. 이번에 잡음 문제를 발견하게 된 것은 출력 단자에 헤드폰을 연결하였기 때문이다. 내가 쓰는 헤드폰은 고임피던스 제품은 아니다. 그러나 앰프 자체의 출력이 워낙 낮아서 100옴 정도의 저항을 삽입하여 감쇠시키는 것으로 충분하였다.

잡음 유발의 일등공신은 43 오극관의 히터 점화용 24V SMPS였다! 본체나 입출력 양쪽 케이블 전부가 초단관(6N2P) 근처에 가면 엄청난 잡음이 유도되었다. 

  • 교류 220V 입력 케이블과 직류 24V 출력 케이블이 유발하는 소음은 현저히 달랐다.
  • 출력 트랜스에는 커버가 씌워져 있어서인지 여기에는 SMPS를 가까이 가져가도 잡음이 발생하지 않았다.
  • SMPS라면 가청 영역보다 훨씬 높은 주파수의 잡음을 주로 유발할 것이라 생각했는데 전혀 그렇지 않았다. SMPS의 제조 품질과 관련이 있을지도 모른다.

이 앰프에는 전원 전압을 낮추기 위한 30VA급의 단권 변압기가 하나 더 들어가 있다. 사실 저출력의 43 오극관 앰프를 만들게 된 것은 잘못 주문한 전원 트랜스를 소진하기 위함과, 항아리 모양(ST)의 고전관을 한번은 써 보고 싶다는 욕심 때문이었다. 이 전원 트랜스는 알리익스프레스에서 구입한 6N1+6P1 싱글 앰프 보드를 구동하기 위해 제작하였다. 그런데 히터용 권선의 전류 용량을 필요량에 부족하게 잘못 주문하였다. 그래서인지는 모르겠으나 앰프를 연결하면 트랜스가 요란하게 울기 시작하였다. 

여담이지만 알리익스프레스에서 팔리는 앰프(보드)는 나날이 진화를 거듭하고 있다. 6N1+6P1 싱글 앰프 보드는 여전히 1만 몇천 원의 가격에 팔리고 있고, 요즘은 출력이 한층 더 높은 푸시풀 앰프 보드까지 나온 실정이다.



진공관의 히터를 다른 전원으로부터 연결해도 문제는 해결되지 않았다. 그래서 소출력 앰프(6N1+6P1 싱글 앰프도 출력은 낮은데...)를 만드는데 써야겠다고 생각을 하다가 값이 아주 싼 고전관인 43 오극관을 선택하게 된 것이다. 그러나 이 진공관은 플레이트 전압이 매우 낮아서 120V 정도를 공급해야 된다. 그러나 문제의 전원트랜스의 2차에 강압용 트랜스를 하나 더 연결하는 우스운 모양새가 되고 말았던 것이다. 사실 이 두번째의 트랜스도 단권트랜스라는 것을 모르고 구입했었다. 그러니 크기도 작고 효율도 높지 않았겠는가.

강압용 단권 트랜스와 SMPS를 전부 본체 외부로 빼냈다. 배선을 어떻게 완결해야 할지는 아직 고민 중이다. 앰프 본체와 AC 파워 케이블로 깔끔하게 끝나는 단순한 구성을 원했는데 구식 청소기처럼 무거운 부품을 파워 케이블 중간에 끌고 다녀야 한다. 

이전에는 전원 트랜스의 2차에 단권 트랜스를 넣어서 강압을 했었다. 따라서 초단관 히터를 위한 6.3V 출력은 변함이 없었다. 그러나 이번에는 전원 트랜스의 입력측에서 강압을 시키게 되니 히터 전압이 거의 절반으로 떨어지고 만다. 24V SMPS의 출력에 스텝다운 모듈을 넣어서 6.3~6.4V를 만든 뒤 이를 6N2P에 연결하였다. 6N2P의 9번 핀을 그라운드에 연결한 것도 잡음 제거에 큰 도움이 되었다.




이것이 뭔 고생이람!

진공관 앰프의 스피커 출력단자에 헤드폰을 연결하려면

헤드폰 단자가 없는 파워 앰프의 스피커 출력용 단자에 헤드폰을 그대로 연결하는 것은 위험하다. 앰프의 큰 출력에 의해 헤드폰이 망가지거나 고막/청신경이 망가질 수 있기 때문이다. 그러므로 매우 조심스럽게 실험을 하는 것이 좋다. 일단 다음의 웹사이트를 읽어보라.

[DIY-Audio-Heaven] Power amp adapter



저항은 직렬과 병렬을 병용한, 일종의 T-자 네트워크 형태로 연결을 해야 한다. R1과 R2 값은 본문을 읽어보기 바란다.

반도체 앰프라면 이렇게 하여 비교적 간단하게 해결이 되지만, 진공관 앰프라면 출력트랜스를 통한 임피던스 매칭이라는 문제가 있다. 8옴 스피커를 꽂게 제작된 앰프의 출력트랜스 2차에 약 35옴의 지극히 일반적인 저임피던스 헤드폰을 꽂는다고 가정하자. 임피던스는 약 4배 이상 높아진다. 출력관의 입장에서는 울리기 더 어려운 상태가 되는 것이다. 물론 헤드폰은 귀에 밀착하여 듣는 기기이니 우리는 늘 소리가 크다고 느끼겠지만 말이다.

Tubelab 사이트에서 이 문제를 논하고 있다.

A low impedance set of headphones (8 to 32 ohms) can usually be driven by a conventional output transformer made for driving a speaker. Often the sound can be improved in this case by putting a resistor in parallel with the headphones to optimize the load presented to the tube. I put a 500 ohm dual pot in parallel with the headphones and adjusted for optimum sound.

고임피던스 헤드폰을 동작시키기에는 무리가 있지만, 일반 헤드폰이라면 수백 옴 정도의 저항을 병렬로 연결하면 된다고 한다. 글쓴이는 500옴 2련 가변저항을 병렬로 삽입하여 최적의 소리가 나는 위치를 조정한다고 하였다. 그런데 나는? 무조건 출력을 줄여야한다는 생각에 저항을 직렬로 삽입했었다. 생각해보니 이건 바람직한 구성이 아니었다!

2020년 10월 22일 목요일

다시 LM1876 앰프를 꺼내어 듣다

2014년 첫 진공관앰프에 입문을 하고 그 뒤에 몇 개의 앰프를 자작하면서 '역시 소리는 진공관 앰프지~'라는 막연한 신념에 빠져 살았다. 그러나 반도체 앰프와 진공관 앰프를 보이지 않게 숨기고 무작위로 앰프를 바꾸어 가면서 같은 음악을 듣게 한 뒤, 어느 것이 더 듣기에 좋냐고 물었을 때 나는 과연 진공관 앰프의 손을 들어줄 수 있을까?

어떤 면에서는 진공관 앰프의 음악적 질이 반도체 앰프보다 분명히 더 나을 것이다. 하지만 내가 지금 진공관 앰프의 전원을 넣으면서 '역시 진공관이니까...'하는 기대 심리를 갖고서 빨갛게 달아 오르는 진공관을 바라보는 기대 심리가 더 크게 작동하는 것 같다. 뇌과학자도 그런 말을 했다. 감각은 눈, 귀, 코와 같은 '센서'가 느끼는 것이 아니라 뇌가 느끼는 것이라고. 따라서 경험, 감정, 상황, 지식이나 다른 사람의 의견을 통해 형성된 편향이 더 큰 영향을 미치는 것이 분명하다.

방구석 음악 생활을 이어 오면서 진공관 앰프에 대해 늘 갖는 불만은 '소리가 작다'는 것이었다. 이에 대해서 진공관 앰프 애호가는 준비되지 않은 나에게 비난을 할 것이다. 소출력 싱글 앰프에 걸맞는 고능률 스피커를 갖추지 않았기 때문이라고. 혹은 제대로 만들어진 푸시풀 앰프를 접해 보라고.

오디오 기기를 구성하는 여러 요소 중에 아직도 기술적 완성도가 가장 낮은 것은 스피커 시스템이다. 투자를 했을 때 만족도가 가장 높은 것도 스피커라고 하였다. 그런데 나는 스피커를 바꿀 여유가 없다. 작은 크기의 방에서 6LQ8 푸시풀 앰프로는 어느 정도 만족할 수준의 소리가 나기는 했다. 그러나 앰프 전체에서 나는 열이 상당하였다. 6LQ8에 손이 닿아서 덴 적도 있었다. 반도체 앰프라면 소비 전력 40와트 미만으로도 방을 울릴 충분한 소리가 날 텐데 왜 이렇게 전기를 낭비하고 있을까? 내 귀(뇌?)가 느끼는 지극히 주관적인 쾌감이 현실적인 어려움을 고스란히 감당할만큼 대단했단 말인가?

그래서 어제는 오랫동안 서랍장 밑에 처박혀 있었던 LM1876 앰프를 꺼냈다. 단자가 달린 패널은 6LQ8 싱글 앰프를 만들기 위해 제거된 상태였다. 자작 후 남은 부품들을 끌어모아 다시 연결을 했다. 입력용 RCA 단자는 6N2P를 이용한 드라이브 회로 기판을 그대로 이용하였다. 직류 어댑터를 수집한 것이 몇 개 있어서 class D 앰프 보드를 하나 더 살까 생각했다가 그만 두었다.



노트북 컴퓨터에 연결한 UCA200 오디오 인터페이스를 소스로 하여 유튜브에서 루안 에메라(프랑스 영화 '미라클 벨리에'에 나오는)의 최근 곡 Donne-moi ton coeur를 재생하였다.



그렇다. 이 풍성한 소리를 왜 놓치고 있었는가? 전력 소모도 그렇게 많지 않고, 뜨겁지도 않고, 험 문제고 고생할 필요도 없고, 자작하다가 감전 사고를 겪을 염려도 없고, 자작 비용도 그렇게 높지 않고...

좀 더 실용적이고 유연한 사고를 가져야 되겠다. 진공관 앰프를 처음으로 장만할 때에는 교체용으로 필요할지도 모른다 생각하고 출력관을 여분으로 준비해 놓고는 하였다. 그러나 그것을 다 쓰기도 전에 이렇게 취향이 바뀌고 마는 것이다. 현재로서는 전력 소모와 음량(음질)의 모든 측면에서 가장 최적이라 할 수 있는 6LQ8 푸시풀 앰프를 제외하고는 내가 구입하거나 자작한 진공관 앰프가 그렇게 만족스럽지는 않았다. 마침 이영건 선생님으로부터 주문제작한 PCL86 앰프에서도 잡음이 나기 시작하였다. 사용 6년째이다. 관을 교체해도 소용이 없다. 이것은 또 어떻게 보수를 해야 할까?

2020년 10월 20일 화요일

Perl script와 같은 위치에 있는 모듈을 쓰고 싶다면

세균 유전체 염기서열에 삽입된 박테리오파지의 유전체, 즉 prophage의 서열을 찾고자 할 때 종종 PHASTER 서버를 사용하였다. 매우 잘 만들어진 웹서버이지만 너무 자주 유지보수를 위해 서비스를 중단하는 일이 많다. 왜 이렇게 자주 휴업 중이란 말인가...


다른 분석용 웹 서버, 또는 단독으로 실행되는 프로그램이 없을지 검색을 해 보았다. 2009년에 PLoS One에 실린 ProphET라는 프로그램이 눈에 뜨였다(GitHub 링크). 단독 설치하여 실행이 가능하고 phage genome database를 스스로 업데이트할 수 있다는 점이 마음에 들었다. BioConda 채널에서 제공하는 conda package로 설치하는 것이 아니라 몇 개의 외부 프로그램과 Perl module을 설치한 뒤 소스를 git로 클로닝하여 INSTALL.pl로 설치하는 매우 고전적인 방법을 사용하고 있었다. Perl module 설치를 위해 conda를 사용할지, 'perl -MCPAN -e shell'을 사용할지, 혹은 더 간단하게 cpan을 사용할지 잠시 고민을 하였다. 아, 그러고보니 요즘은 cpanm도 있구나.

여담이지만 요즘 conda로 뭔가를 설치하려면 시간이 점점 많이 걸린다. 심지어 conda 프로그램 자체는 몇달째 업데이트가 안된다. 'conda update -n base conda'를 실행하면 하루 종일 다음과 같은 상태에서 뱅글뱅들 돌기만 한다.

$ conda update -n base conda
Collecting package metadata (repodata.json): done
Solving environment: -

설치를 마치고 프로그램에 포함된 샘플 파일을 이용하여 분석을 해 보았다. 입력물은 염기서열(FASTA)과 GFF 파일이 필요하다. 샘플 파일은 결과가 잘 나왔는데, 내가 준비한 파일은 되는 것도 있고 에러가 발생하는 것도 있었다. GenBank 파일을 받아서 seqret로는 FASTA를, bp_genbank2gff3.pl로는 GFF3 파일을 만들었는데 왜 성패가 갈리는지를 모르겠다. 에서 메시지를 보면 GFF 파일의 양식에서 문제를 일으키는 것 같다. ProphET 사용 설명에 의하면 GFFLib 패키지('Perl library to manipulate GFF files')의 gff_rewrite.pl을 써서 전환하여 사용하면 된다고 한다. GFFLib은 ProphET 셋업 과정에서 설치된다고 하는데 그것은 사실이 아니다.

Git clone 명령을 사용하여 GFFlib을 클로닝하였다. Perl script가 있는 위치에 8개의 Perl module이 있다. Perl script를 열어보면 module의 위치를 지정하는 라인이 보이지 않았다. 이런 상태에서 제대로 실행을 하려면, 스크립트가 있는 위치에서 실행을 해야 된다. 이는 상당히 번거로운 일이다. @INC에는 늘 현 디렉토리('.')가 포함되지만, 다른 위치에서 Perl 스크립트를 실행한다면 모듈을 찾지 못하는 것이 당연하다.

$ /data/apps/GFFLib/gff_rewrite.pl 
Can't locate GFFFile.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /data/apps/GFFLib/gff_rewrite.pl line 13.

Perl script와 module이 전부 /data/apps/GFFLib/에 있다고 가정하자. 다른 위치에서 이를 실행하는 방법을 알아보자.

가장 간단하게는 perl -I/data/apps/GFFLib program.pl이라고 실행하여 Perl 인터프리터를 실행할 때 모듈이 있는 위치를 지정하면 된다. '소문자 엘'이 아니고 '대문자 아이'이니 조심하자.

또는 'export PERL5LIB=/data/apps/GFFLib'를 먼저 실행한 다음에 Perl 스크립트를 실행하면 된다. 이 값은 @INC 배열의 가장 앞에 추가된다. export 명령 없이 'PERL5LIB=/data/apps/GFFLib'라고만 하면 안된다.

마지막으로는 Perl 스크립트의 시작 부분에 다음과 같은 use 명령을 넣는 것이다. 

use FindBin;
use lib "$FindBin::Bin";

'usr lib "/data/apps/GFFLib";'을 삽입해도 당장은 작동하겠지만, 프로그램 설치 디렉토리를 바꾸는 경우 에러를 유발할 것이다.

Perl module의 설치 위치에 대한 지식은 매우 기본적인 것인데 무지한 상태에서는 이와 관련된 에러 메시지에 직면했을 때 신속하게 대처를 하지 못한다. 약간의 공부를 통해서 불필요한 두려움을 제거하는 것이 현명한 일이 아닐까?

[우분투의 사운드와 MIDI] PulseAudio와 친해지기

 우분투가 설치된 노트북 컴퓨터에 두 개의 USB 오디오 장치(Behringer UCA200, Roland SC-D70)을 연결해 놓고 PulseAudion의 기능을 이해하기 위해 노력을 하고 있다. 내장 사운드 카드 하나만을 사용하는 일반적인 상황에서는 PulseAudio의 존재를 잊고 살아도 충분하다. 

PulseAudio의 설정 조절은 pavucontrol(PulseAudio Volumne Control)이라는 GUI tool이 담당한다. 어제 비로소 깨달은 중요한 원칙이 있다. 바로 PulseAudio는 응용 프로그램 수준에서 어떤 입출력 장치를 쓸 것인지를 조절할 수 있고, 바로 직전에 실행했던 구성을 기억하고 있다는 것이다. 이걸 이해한다면, HDMI 케이블로 TV를 연결하여 영화를 본 뒤[넷플릭스], 다시 컴퓨터를 켜고 유튜브를 실행했을 때 왜 여전히 소리가 HDMI 단자로 나가는지 의아하게 생각할 필요가 없다. 물론 HDMI 케이블을 연결했을 때에만 소리가 그쪽으로 나가게 하는 스크립트를 이용할 수도 있다. 

Default sound card를 설정하는 것이 의미가 있을까? 좀 더 정확하게는 입력과 출력을 구분해서 말이다. 수시로 USB 형태의 장비를 착탈하는 상황에서는 별 의미가 없다. 꼭 필요하다면, 'pactl list-source' 또는 'pactl list-sink' 명령에서 출력되는 카드의 이름을 /etc/pulse/default.pa 파일에 기록하면 된다. 편집이 필요한 행은 set-default-source(또는 sink)로 시작하는 줄이다.

Sink(output device)와 source(input device) 역시 PulseAudio에서 사용하는 대단히 중요한 개념이다. 반드시 물리적인 하드웨어와 대응하는 것은 아니다. 

특정 사운드 카드에 대한 구성 모음(configuration set)을 card profile이라 부른다. 이것 역시 중요하다. 

PulseAudio 관련 문서

PulseAudio under the hood 문서는 다분히 기술적인 내용을 많이 담고 있지만 개념을 잡는데 많은 도움을 준다. 이 글은 PulseAudio의 메인테이너인 Tanu Kaskinen의 감수를 받은 것이므로 신뢰할 만하다. 이것과 더불어 PulseAudio의 공식 문서와 Arch Wiki의 PulseAudio 문서라면 고급 사용법까지 익히는데 부족함이 없을 것이다.

2020년 10월 18일 일요일

[우분투의 사운드와 MIDI] 리눅스에서 UCA200 오디오 인터페이스로 유튜브에서 나는 소리를 녹음하려면

요즘은 주로 롤랜드 SC-D70을 외장 사운드카드 대신으로 쓰고 있어서 Behringer U-Control UCA200 오디오 인터페이스를 쓸 일이 거의 없다. 특히 이것을 녹음용 장비로는 진지하게 생각해 본 일이 없다. 이렇게 써 놓으니 내가 마치 '진지하게 음악 작업'을 하는 사람처럼 비춰질지도 모르나 그것은 전혀 사실이 아니다. 그저 리눅스에서 음악 관련 소프트웨어와 장비를 어떻게 다루는 지는 지극히 일반적인 사용자 입장에서 익히려고 하는 것이 전부이다.

UCA200은 입력 신호를 모니터하는 헤드폰 단자를 별도로 제공하지 않는다. 설정을 잘 매만지면 녹음이 되는 소리를 들을 수 있을지도 모른다. PulseAudioJackSink가 답을 줄 수도 있다.

오늘의 테스트는 Jack을 쓰지 않는 상태에서 유튜브에서 재생되는 소리를 Audacity에서 녹음하는 것이다. 두 개(L & R)의 아날로그 입력과 출력 단자가 전부이니 이들을 서로 케이블로 연결하는 우스꽝스러운 모습을 연출해야 한다. 녹음 중에는 무슨 소리가 나는지 알 수가 없다. 그저 Audacity에서 녹음 레벨을 보는 것 말고는. 사실 이것은 대단히 미련한 방법이다(꼭 그렇지만은 않다! loopback cable을 사용하면 잡음과 왜곡이 발생하겠지만, 결코 몹쓸 방법으로 볼 수만은 없다). 디지털 음악 신호가 아날로그로 전환되었다가 다시 디지털로 전환되는 과정을 거치기 때문이다. 당연히 컴퓨터 내부에서 유튜브의 재생음을 녹음 입력으로 되돌리는 것이 가능하며, 나중에 그 방법을 알게 되었다.

지금은 이런 방법을 쓰지 않는다. PulseAudio Volume Control의 Recording 탭에서 소스를 'Monitor of PCM2902 Audio Codec 아날로그 스테레오'로 설정하면 된다.

SC-D70를 이용하여 녹음할 때에는 이럴 필요는 없었다. Jack을 경유하면 좀 더 편리하게 녹음이 가능하고, Jack을 쓰지 않아도 유튜브에서 나는 소리를 녹음할 수 있었다. 아래의 사진은 유튜브 동영상을 audacity에서 녹음하면서 왼쪽와 오른쪽 입력을 출력 단자에 케이블로 차례로 연결하는 상황을 찍은 것이다.

Behringer UCA200을 이용한 유튜브 녹음(ALSA).

USB 장비는 기본적으로 plug-and-play가 가능하지만, 사운드와 관련한 일을 하려면 깔끔하게 재부팅을 하는 것이 더 나은 것 같이 여겨진다. 오늘은 Jack을 쓰지 않고 ML-20 반주기의 음원보드(SAM9703)을 이용하여 녹음을 해 보았다(MIDI file: fluorish.mid). UCA200을 쓰느라 녹음을 하면서 모니터링을 하지는 못했다. [UCA200의 아날로그 출력을 아날로그 입력에 케이블로 입력하여 녹음을 했던 것 같다. 지금 생각하면 미련한 방법이다. 2020년 1월 26일 기록한 코멘트] 음량이 다소 작게 녹음이 되어서 Audacity에서 증폭하였다.


Rosegarden에서 정작 녹음을 할 때에는 듣지 못하고, 녹음을 한 트랙을 같은 프로그램 안에서 재생할 때는 들을 수 있다는 것이 넌센스가 아닐까? Audacity에서는 녹음 설정을 건드려서 UCA200으로 녹음을 하면서도 동시에 모니터링이 가능했었다. 

PulseAudio의 사운드 카드 우선 순위는 여전히 알다가도 모르겠다. play 명령으로 mp3 파일을 재생하면서 두 번째의 USB 사운드 카드를 꽂으면 여기에서 소리가 난다. 그렇다면 default sound card가 즉시 바뀌었다는(즉 나중에 꽂은 카드를 우선하도록) 뜻인지? 리눅스에서 여러 사운드 관련 장비를 다루는 일은 여전히 어렵다. 특히 PulseAudio가 돌아가는 환경에서는 더욱 그러하다. ArchWiki 웹사이트의 PulseAudio/Examples 문서를 주문 암송하듯 읽어보고 실습을 해야 할까?

2020년 10월 15일 목요일

아두이노용 입문 키트 KT0001이 드디어 내 손에! 출퇴근 코딩, 생활 코딩, 노인 코딩, 노안 코딩(老眼 coding)의 길로...

바로 이것이 아두이노 우노 R3(호환보드)로구나! 사용된 칩은 'ATmega328P U'라는 것이다(데이터시트). 풀어서 쓰자면 8-bit AVR Microcontroller with 32K Bytes In-System Programmable Flash가 되겠다.




구성품 목록이 들어있지 않아서 쇼핑몰의 링크를 클릭해 보았다. 아마 중국의 제조사에서 제공한 packing list를 그대로 게시한 것 같은데 중국어➡영어 자동 번역기를 돌렸는지 무슨 말인지 알기 어려운 구성품도 있다. 예를 들어 투명한 뚜껑이 달린 녹색 플라스틱 상자는 무슨 용도인가? 이것이 'component box(1)'인가?

도저히 이해가 가지 않는 것에는 '??'를 표시하였다. 철자가 틀린 것도 있고 띄어쓰기나 줄바꿈이 되지 않은 곳도 보이지만 기록을 위해 원문 그대로 복사하였다.
  • UNO R3 1
  • Plug-in feisty one??
  • One large bread plate
  • Component box 1
  • Red three LED lamp pakage (transparent)
  • Three leds(transparent) yellow
  • Leds (transparent) three blue5 resistance package 1 k resistor 10 k resistor 5220 r resistance of 8
  • Yellow button bag
  • for square small keys
  • Yellow hat four
  • Active/passive buzzer components 1 2A digital tube (1)
  • one of four digital tube8* 8 dot matrix 1
  • receiving head package 174 hc595 are needed for aA remote control1602 screen 11 *40 single rows pin 15 v stepper motor 1
  • UL2003 driven plate one9 grams of steering gear (1)9 v battery box 1
  • Article 30/1 the bread line
  • USB line 1
  • Adjustable one??
  • Male, the female of bond line 20 cm article 10/1

지금까지 한 일은 우분투 노트북에 통합 개발 환경 소프트웨어를 설치한 것이 전부이다. 인터넷에는 정보가 너무 많아서 오히려 혼란스럽다. 적당한 책을 딱 한 권만 구입하여 그것을 주로 참조하면서 인터넷의 정보는 보조적인 용도로 쓰는 것이 나을 것이다. 물론 아두이노 공식 웹사이트를 가장 자주 방문하게 될 것이다. 출퇴근 길에 지하철에서 별 영양가 없는 사이트나 들락거리느니 아두이노 관련 정보를 찾아보는 것이 훨씬 유익할 것이다.

저항 등 수동 부품은 앰프를 만드느라 비교적 풍족하게 갖춘 상태지만, 싼 키트를 샀더니 벌써 몇 가지 아쉬운 점이 눈에 뜨인다. Wi-Fi 통신을 하려면 별도의 모듈이 있어야 하고, 1602 LCD도 I2C 제어가 되지 않는다. 그런 문제는 차차 해결하기로 하고, 디지털 출력을 이용한 LED 점등과 같은 간한 실습을 하면서 기능을 익혀 나가도록 하자.

퇴근 후 아두이노 공식 웹사이트의  Getting Started with Arduino UNO를 참조하여 샘플 코드(01.Basics - Blink)의 업로드를 시도하였다. 포트(/dev/ttyACM0)에 쓸 권한이 없다는 에러 메시지가 나온다. 리눅스라서 관리자 권한이 필요한 것 같다. 'sudo arduino' 명령어를 입력하여 아두이노 1.8.12 IDE를 다시 실행한 다음 처음부터 다시 시도하였다. 이것이 컴파일된 기계어 코드가 마이크로프로세서의 메모리로 업로드되는 과정이로구나! 아주 작은 TX 및 RX LED가 요란하게 반짝거리더니 업로드가 완료되었다고 하면서 LED_BUILTIN으로 지정된 LED(디지털 출력 핀 13번)가 반짝거린다.

Blink 실행 중인 아두이노

잠깐, 이 LED는 USB 케이블로 아두이노 우노를 처음 연결했을 때부터 반짝거리고 있었다. 아마도 Blink 프로그램이 테스트 용도로 먼저 업로드된 상태였나 보다. 입출력 핀에 아무런 부품을 연결하지 않아도 내장된 샘플 코드를 실행할 수 있음을 알았다. 내장된 샘플 코드는 웹사이트에서도  설명과 함께 볼 수 있다.

다른 간단한 예제는 무엇이 있을까? 시리얼 플로터를 켜 놓고 AnalogReadSerial을 실행해 보았다. 오! 놀랍군. 특별히 교재를 사지 않고도 자습을 할 수 있는 자료가 이렇게 널려 있었다.

2020년 10월 13일 화요일

GenoGlobe.kr이 어디로 갔지?

거의 매일 접속하여 과거에 기록한 정보를 참조하는 genoglobe.kr 위키 사이트가 갑자기 열리지 않는다. 웹 호스팅 서버에는 별다른 문제가 없다. 왜 IP 주소를 찾지 못한다는 메시지가 나오는 것일까? 후이즈 인터넷 주소자원 검색 서비스에 내 도메인을 넣어 보았다.


genoglobe.kr 도메인의 사용 종료일(2020년 10월 11일)이 바로 이틀 전에 경과한 것이었다. 아마도 비용 청구를 위한 메일이 원 근무지의 주소로 보내지는 바람에 이를 모르고 지나간 것 같다. 등록 대행자는 원래 호스팅케이알이었는데 메가존(주)라는 생소한 곳으로 바뀌었다. 그러나 클릭을 하면 접속이 되는 주소는 여전히 https://hosting.kr/ 이었다. 로그인 메뉴로 가면 '메가존 계정'이란 것으로 전환하라고 한다. 휴면 처리된 계정을 살린 뒤 로그인하여 메가존 계정으로 바꾼 다음, 예치금을 사용하여 도메인 사용 기간을 1년 연장하였다.

처리 결과는 즉시 반영되어 지금은 genoglobe.kr 주소로 접속이 잘 되고 있다. 소유자 및 관리자의 정보를 변경하려고 했으나 휴대폰 정보란이 비어 있어서 진행이 잘 안된다. 나중에 시간을 갖고서 찬찬히 들여다보기로 하였다.

구글, 유튜브, 도메인, 웹 호스팅 서비스... 이런 곳으로 소소하게 들어가는 비용도 전부 합친다면 그렇게 적지는 않을 것이다. 정작 휴대폰은 가장 싼 요금제를 쓰고 있는데!

2020년 10월 12일 월요일

미디 라이프 2.0 반주기 ML-20의 음원보드로부터 드디어 소리를 내다

아두이노 입문용 키트는 아직 배송도 되기 전인데, 갖고 있는 부속을 이용하여 브레드보드 위에 MIDI in 회로와 active low reset 회로를 만들어서 음원보드에 연결하니 소리가 나오기 시작하였다. 좀 더 고생을 할 줄 알았는데 이렇게 소리가 나오게 되니 약간은 허탈한 기분도 든다.



어제 저녁의 작업 상황을 사진으로 남겼다. 주기판의 MIDI in 신호를 처리하던 옵토커플러가 망가진 것이 거의 확실하다.



아두이노 키트의 주문을 취소할까 싶어서 잠시 고민을 하던 중에 롯데택배로 상품이 발송되었다는 문자 메시지가 왔다. 어차피 흥미를 가졌던 물건이니 다른 목적에라도 활용해 보도록 하자.

이번에 시행착오를 겪으면서 마이크로프로세서의 reset 과정에 대하여 정말 많은 것을 알게 되었다. Reset은 잘 작동하던 프로세서를 처음부터 시작하도록 되돌리는 과정이 아니라, power-on cycle에서 당연히 거쳐야 하는 것이다. 구글에서 active low RC reset circuit이라는 검색어를 넣으면 무척 많은 자료가 나오는데, 다음의 것이 비교적 설명이 잘 되어 있어서 링크를 걸어본다.

https://www.maximintegrated.com/cn/design/technical-documents/tutorials/7/720.html 

잘 알려진 MIDI 파일 두 개(cakewalk.mid & passport.mid)를 이 보드로 재생하면서 audacity에서 녹음을 해 보았다. 오디오 인터페이스는 롤랜드 SC-D70을 사용하였다. 소리는 나쁘지 않은 편이다. 리눅스에서 음악 작업을 좀 더 자주해야 익숙해질 텐데, 어쩌다 한 번찍 쓰니까 '어? 어떻게 하는 거였더라?'하면서 고개를 갸웃거리게 된다. Software synth를 쓰는 것이 아니므로 JACK은 쓰지 않았다.



만능기판에 부품을 납땜하여 제대로 회로를 완성해야 하는데, 400홀 브레드보드 상태 그대로 넣고 뚜껑을 닫았다. 오디오 출력과 MIDI 입력은 원래 있던 단자에 배선하여 마무리하였다. 전면 패널에 위치한 LED 중 하나를 MIDI 신호 입력에 연동하여 점멸하게 만들고 싶은데 그러려면 또 공부가 필요하다. 옵토커플러 전과 후, 어디에 어떻게 연결해야 될까? 지금은 전에 연결했는데 너무 어둡게 점멸한다. 

나도 이제 MIDI 장비 탑을 쌓는가?



2020년 10월 8일 목요일

아두이노 입문 키트를 주문해 버리다

미디라이프 2.0 ML-20 반주기의 음원보드 재활용 과제는 아직 성과가 별로 없다. 10핀 커넥터로 어떻게 작동 신호를 넣어 주어야 하는지를 파악하지 못했기 때문이다. 네이버 카페 도스박물관(일명 '도박동')의 한 친절한 회원으로부터 조언을 받아 가면서 열심히 탐구를 하는 중인데, 아마 10월 내내 매달려야 될 것 같다. 마이크로콘트롤러의 리셋(reset)에 대한 공부를 하게 된 것이 매우 중요한 경험이었다.

이 반주기가 한번도 작동이 되는 모습을 본 일이 없기 때문에, 이미 중요 소자가 망가진 것을 가지고 씨름을 하는지도 모른다고 부정적인 생각을 했었다. 그러나 분명히 외부에서 넣어 준 MIDI 시퀀스에 따라 순간이나마 음악이 재생되는 것을 몇 차례 들었었다. 재현이 안 되어서 그렇지...

어제는 SAM9703 칩의 MIDI in 핀에 직접 케이블을 대 보기도 했었는데, 이런 무식한(?) 짓이 혹시 칩을 망가뜨린 것은 아닌지 걱정이 된다. 

다음주에는 주문한 부품으로 MIDI in 회로를 직접 만들어서 테스트를 해 봐야 되겠다. 그리고 제어용 신호를 제대로 입력하고 작동 상태 핀으로 흘러나오는 신호도 점검하는데 쓰기 위하여 드디어 아두이노 우노 R3 입문 키트를 오늘 주문하였다(KEYES KT0001 링크). 아두이노 정품은 아니고 호환 보드라서 가격은 저렴하다. 패키지에 포함된 주변 부품이 많아서 앞으로도 쓸모가 많을 것이다.

라스베리 파이나 아두이노에 관심을 갖고 있었는데 특별히 이를 활용할 프로젝트를 수립하지 못한 상태였었다. 그런데 MIDI 입출력과 관련한 실험을 해야 하니 아두이노를 구입할 그럴싸한 핑계가 생겼다.

2주 정도 더 음원보드를 주물러 본 다음, 희망이 없으면 더 이상 시간 낭비를 할 것이 아니라 건반이나 두드려야 되겠다. 어차피 다른 음원 모듈이 더 있지 않은가.

2020년 10월 5일 월요일

미디 라이프 반주기 ML-20의 음원 보드 활용 - 부품 주문

MIDI IN 단자에 USB MIDI interface를 연결한 다음, 노트북 컴퓨터에서 rosegarden으로 적당한 미디 시퀀스를 재생하였다. 오실로스코프의 프로브를 대 보면 MIDI IN 커넥터와 옵토커플러(TLP552)의 입력단에서는 신호를 검출할 수 있었다. 그러나 옵토커플러의 출력(아래 사진에서 분홍색 케이블이 연결된 6번 핀)에서는 전원이 들어왔음에도 불구하고 아무런 신호가 감지되지 않았다.


왜 그럴까? (1) 옵토커플러가 망가졌을까? 혹은 (2) 하드웨어 혹은 소프트웨어적으로 옵토커플러에 전원이 공급되지 않는 것일까? 생각해보니 내가 잘못 테스트를 했을지도 모른다는 생각이 들었다. 6번 핀은 신호가 없는 상태라면 Vcc에 의해 high 상태로 고정되어 있어야 한다. 그런데 어제 저녁에 실험한 기억을 더듬어 보자니 0.4 V 정도가 나왔던 것 같다.

상식적으로 생각해 보면, 6번 핀에 high를 인가하는 배선은 주기판쪽에서 주어지는 것이 자연스럽다. 음원보드에 연결된 분홍색 케이블을 통해서 주어지는 것일까? 그건 좀 어색하다.

일단 옵토커플러가 망가졌을 가능성을 염두에 두고 MIDI IN 회로를 새로 만들기로 하였다. 옵토커플러는 가격이 싸고 구하기도 쉬운 PC-900으로 주문하였다. 참조한 회로는 다음과 같다. 이 그림은 MIDI Drum Machine 자작 페이지의 MIDI Port Schematic에서 인용한 것이다.

다른 그림도 구할 수 있다. 이 그림은 여기에서 인용한 것인데, Jalkanen Album이란 곳에서 원본과 더불어 좀 오래되었지만 다른 유용한 그림을 찾을 수 있다.



MIDI association에서도 MIDI DIN Electrical Specification에 관한 자료를 제공한다. 방문해 보면 상세한 회로 안내를 볼 수 있을 것이다.

주말 전까지는 이 반주기의 음원보드(SAM9703)를 MIDI 음원으로 사용할 수 있을지의 여부를 알게 될 것이다. 헛수고가 아니기를 빌어 본다.


알아볼 수 없게 변한 TDS 210 오실로스코프의 화면

마지막으로 오실로스코프를 켠 것이 언제였더라? 아마 작년 여름 사무실이었을 것이다. 화면 중앙 부분이 넓게 멍이 든 것처럼 어두워졌다는 느낌을 받았던 것 같다. 추석 연휴에 사무실에 오랫동안 보관되어 있던 텍트로닉스 오실로스코프 TDS 210을 가지고 와서 전원을 넣어 보았다. 오, 이런! 화면을 알아보기가 너무 어렵다. 아래에서 보인 사진은 전면부를 분해하느라 놉을 전부 제거한 상태이다. 작은 놉 몇 개는 여러 해를 거쳐 갖고 다니면서 이미 오래전에 없어졌다.



완전히 판독 불능의 상태는 아니지만 이래서야 어디 쓰겠는가? 수리를 할까? eBay에서는 교체용 LCD 스크린을 팔기는 하지만 50달러 가까운 돈을 주어야 한다. 내 수준의 전자 공작 취미에서는 없어서는 안 될 장비라고 하기는 어렵지만 이대로 포기하자니 아까운 마음이 드는 것은 사실이다. 어쨌든 이런 열악한 상태의 오실로스코프를 가지고 어렵사리 측정을 하여 미디라이프 ML-20의 미디 입력 단자에 바로 연결된 옵토커플러의 상태가 정상이 아님을 확인하였으니 그나마 다행이다.

교체용 LCD 화면을 살 돈이면 알리익스프레스에서 휴대용 오실로스코프를 살 수 있다. 정말 고민스럽다.

진공관 오디오에 대한 불필요한 집착?

추석 연휴 기간에 집에서 머무는 동안 오랜만에 PCL86 초삼결 앰프로 음악을 들어 보았다. CD를 두 장째 듣고 있노라니 오른쪽 채널에서 지글거리는 잡음이 들리기 시작했다. 초단(12DT8)과 출력관의 좌우를 바꾸어 끼워 보았으나 잡음은 여전히 오른쪽 채널에서 들렸다. 초단을 6N2P로 전부 바꾸어 버리니 잡음이 없어졌다. 12DT8과 6N2P는 특성도 약간 다르고 히터 배선법도 달라서 그대로 바꾸어 끼워서 쓰지는 못한다. 그래서 2015년도에 히터 전압만 대충 6N2P에 맞게 공급하도록 만든 어댑터를 끼워서 작동을 시킨 것이다.



2014년도에 진공관 앰프에 입문하면서 지금까지 항상 부족하게 느낀 것은 바로 앰프의 출력이었다. 제작 비용을 줄이기 위해 출력이 높지 않은 싱글 엔드 앰프에만 집착을 하게 되고, 스피커는 여전히 반도체 앰프에 맞는 저능률 시스템을 쓰다보니 늘 빈약한 소리를 들을 수밖에 없었다. 89 dB라면 그렇게 낮은 수준도 아닌데 말이다. PCL86 초삼결 앰프에 말썽을 부리는 것에 약간의 짜증을 느끼면서 바로 곁에 있는 TDA7265 앰프에 CD 플레이어를 연결하였다.

풍성하고 힘이 있는 소리가 스피커에서 흘러나온다. 

그렇다면 무엇하러 진공관 앰프를 만들고 여기에 궁합이 맞지 않는 스피커를 탓하느라 이렇게 오랜 시간을 보냈을까? 출력이 높지 않기는 마찬가지이지만, 작년에 6LQ8 푸시풀 앰프를 만들면서 싱글 앰프를 만드는 일은 그만 두어야하지 않을까하는 - 싱글 앰프에 맞는 스피커를 일부러 장만하는 일을 앞으로 하지 않는다면 - 생각이 조금씩 들기는 했었다. 어쩌면 이 판단이 옳은 일일지도 모른다.