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 blue
  • 5 resistance package 1 k resistor 10 k resistor 5
  • 220 r resistance of 8
  • Yellow button bag
  • four 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 1
  • 74hc595 are needed for a
  • A remote control
  • 1602 screen 
  • 11 *40 single rows pin 
  • 15 v stepper motor 1
  • UL2003 driven plate one
  • 9 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 회로를 만들어서 SAM9703 음원보드에 연결하니 소리가 나오기 시작하였다. 좀 더 고생을 할 줄 알았는데 이렇게 소리가 나오게 되니 약간은 허탈한 기분도 든다.



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



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

이번에 시행착오를 겪으면서 마이크로컨트롤러의 reset 과정에 대하여 정말 많은 것을 알게 되었다. Reset은 잘 작동하던 프로세서를 처음부터 시작하도록 되돌리는 과정으로만 생각했는데, power-on cycle에서 당연히 거쳐야 하는 것이다. 마이크로컨트롤러의 리셋 핀은 일반적으로 active-low 방식으로 작동한다. 즉, 이 핀에 low 신호가 일정 시간 지속되면 현재 실행 중인 모든 작업을 중단하고 프로그램 카운터를 초기 상태로 설정하며, 리셋 핀에 하이 신호가 인가되면 리셋 상태가 해제되고 정상적인 동작을 재개한다. 

Active low reset 핀을 회로도에서 표기할 때에는 이 그림과 같이 RESET 위에 바를 붙인다(출처).

그림 출처: Arduino forum - RC reset circuit

위 간단한 RC 리셋 회로의 동작을 알아보자. 전원이 인가되면 커패시터가 충전되기 전까지 리셋 핀은 GND에 가까운 전압이므로 리셋 상태를 유지한다. 충전이 끝나면 리셋 핀 전압이 올라가면서 리셋 상태가 해제되고 정상 동작을 시작한다. 다이오는 리셋 전압이 갑자기 떨어지는 상황에서 방전을 위한 통로를 제공한다. 예를 들어 빠른 전원 꺼짐 후 재부팅이 일어나는 상태 말이다.

구글에서 active low RC reset circuit이라는 검색어를 넣으면 무척 많은 자료가 나오는데, 다음의 것이 비교적 설명이 잘 되어 있어서 링크를 걸어본다. 보다 상세한 내용을 공부하고 싶으면 이를 클릭해 보자. 단, 위의 것은 microprocesser(MPU)라는 표현이 제목에 나온다. microprocessor와 microcontroller(MCU)는 무엇이 다른가? MPU는 CPU만 단독으로 탑재한 것이고, MCU는 CPU + 메모리 + I/O가 통합된 칩을 의미한다. 따라서 후자는 임베디드 제어에 주로 쓰인다.

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

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

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


2025년 6월 28일 업데이트

이 글에서 포함한 MP3 파일 재생 기능이 완벽하지 않아서 Hosting Audio on Drive를 참조하여 수정해 놓았다. 또한 SAM9703 음원보드를 제어하기 위한 아두이노 나노 기반 컨트롤러를 만들기 시작하였다. 내 블로그에서 2025년부터 EZ Ardule MIDI Controller라는 말이 슬슬 보이기 시작할 것이다. 2020년에 처음 소리를 내고 나서 무려 5년이라는 시간이 흘렀다. 다음 사진은 프로토타입 제작을 위해 5-pin DIN 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 푸시풀 앰프를 만들면서 싱글 앰프를 만드는 일은 그만 두어야하지 않을까하는 - 싱글 앰프에 맞는 스피커를 일부러 장만하는 일을 앞으로 하지 않는다면 - 생각이 조금씩 들기는 했었다. 어쩌면 이 판단이 옳은 일일지도 모른다.