검색어 우분투의 사운드와 MIDI에 대한 글을 날짜를 기준으로 정렬하여 표시합니다. 관련순 정렬 모든 글 표시
검색어 우분투의 사운드와 MIDI에 대한 글을 날짜를 기준으로 정렬하여 표시합니다. 관련순 정렬 모든 글 표시

2023년 8월 23일 수요일

[Tracktion Waveform] MIDI를 이용한 외장 음원의 프로그램 바꾸기 (1)

퇴근 후 거의 매일 컴퓨터에 건반을 연결하여 간단한 연주를 하거나 녹음 연습을 조금씩 해 본다. Tracktion Waveform의 유저 가이드를 수시로 펼쳐 놓고 새로운 기능을 찾아서 익히고는 있으나, 이 일에 투자하는 시간이 절대적으로 적어서 그런지 숙달되는 속도는 매우 더디게 느껴진다. 건반에 집착하고 있는 동안에는 기타(guitar)에 손이 가지 않는다. 취미생활의 병렬화가 그래서 참으로 어려운 것이다.

노트북 컴퓨터를 펼치고, 건반을 가져다 연결하고, 온갖 케이블을 연결하는 일도 보통 번거로운 것이 아니다. 임시로 생활하는 공간이라서 쓰지 않는 물건들은 평소에는 치워 두었다가 필요한 때에만 연결을 해야 하고, 노트북 컴퓨터의 모니터는 너무나 작다. DAW software가 화면에 표시해야 하는 정보가 얼마나 많은가? 파견 생활을 마치고 다시 집으로 돌아가게 되면 전용 작업 공간을 반드시 만들어야 될 것이다.

가상 악기와 외장형 음원 모듈을 각각 건반에 연결하여 실시간 연주를 해 보면 전자의 경우에 확실하게 레이턴시가 느껴진다. 내 컴퓨터(ThinkPad E14 G3)의 하드웨어 구성이 그렇게 열악하다고는 생각하지 않지만, 저가 오디오 인터페이스(Behringer UCA200)의 한계가 느껴지는 것 같다. 키보드 콘트롤러를 이용한 MIDI 신호 녹음에는 외장형 모듈(예: Alesis NanoPiano)을 연결하여 모니터링하고, 최종적으로 가상 악기 플러그인을 이용하여 렌더링하는 것이 나을 것이다. 실제 소리를 들어보면 NanoPiano보다 SampleTank Free의 피아노 소리가 더 낫다. NanoPiano가 갖고 있는 샘플 ROM의 총 용량은 8 MB에 지나지 않는다! 이는 Korg X2의 그것과 동일한 수준이다. Korg Triton Rack은 16 MB. 확장성이 없는 하드웨어 음원 모듈은 비록 음질 자체는 최선이 아니지만 조작의 편의성이라는 측면에서 그 나름대로의 의미가 있다.

Alesis NanoPian. 출처: 내 블로그(링크)

NanoPiano는 그 자체의 소리로 음악을 녹음하기에 손색이 없다. 그러나 단일 MIDI 채널의 신호만 수용하는 monotimbral synth이므로, DAW에서 제어하려면 MIDI를 통한 프로그램 변화 지령을 보내는 것이 바람직하다. 여기서 말하는 '프로그램'이란 음원이 내장한 악기 소리(음색)를 말한다. Program, patch, preset, instrument 등 다양한 용어로 불린다.

Tracktion Waveform에서는 MIDI clip을 트랙에 삽입한 뒤 이를 더블클릭하여 나타나는 에디터에서 bank select와 program change를 삽입하면 된다고 한다. 이에 대한 질문과 대답이 KVR 포럼('MIDI Bank Select')에 나온다. 그러나 값을 직접 입력하는 것이 아니라 편집창 안에서 수평선을 생성한 뒤 마우스로 끌어서 원하는 값으로 만들어야 한다. 실제로 해 보니 원하는 값이 되도록 드래그를 하는 것이 여간 어려운 일이 아니었다. 볼륨, 벨로시티, 팬포트 등 그 값을 대략적으로 맞추어도 되는 컨트롤러라면 별 문제가 아니겠으나, 뱅크나 프로그램 변경에서는 숫자 '1' 단위로 정확하게 설정을 해야 한다.

다른 방법은 없을까? 검색을 해 보니 VST 플러그인 형태로 작동할 수 있는 MIDI 컨트롤러가 있었다.

플러그인의 경우 특정 채널에 처음부터 적용되는 것으로 알고 있는데, 이를 중간에 삽입하여 프로그램을 변경하는 것이 과연 가능한지는 아직 알 수 없다.

플러그인은 왼쪽 분홍색 상자로 표시한 영역에 삽입하는 것이 정석이다. 초록색 별표 위치와 같이 주어진 트랙의 어느 시각 위치에서 MIDI 컨트롤러 값을 변경하는 플러그인을 삽입하는 것이 과연 가능할까? 지금까지의 결론은 불가능하다는 것이다.



만약 스프레드시트 형태로 MIDI 데이터를 생성하여 .mid 파일로 저장하는 유틸리티가 있다면, 거기에서 bank 및 program 변화 데이터를 기록하여 파일로 저장한 뒤, Waveform에서 특정 위치에 MIDI clip으로 삽입하면 되지 않을까? 예전에 약간 다루었던 SendMIDI에서는 MIDI 디바이스로 직접 메시지를 보낼 수는 있었다. 혹시 MIDI-SysEx-Text converter가 도움이 될지도 모른다. midcsv와 csvmid 프로그램도 살펴볼 필요가 있을 것이다.

이전에 작성한 글: [우분투의 사운드와 MIDI] sendmidi 명령어를 이용하여 SC-D70의 프로그램 변경

그러나 가능성은 MidiEditor에서 찾은 것 같다. 이걸 잘 활용하면 특정 채널의 음색을 바꾸는 .mid 파일을 만들 수 있을 것으로 여겨진다.


테스트 결과 MidiEditor 안에서 프로그램을 변경하는 것에는 문제가 없었다. 그러나 이를 .mid 파일로 저장한 뒤 Waveform에서 MIDI clip으로 트랙 내에 삽입을 해 보니 몇 가지 불편한 점이 발견되었다. 우선 외부의 .mid 파일을 끌어 왔더니 clip 자체가 너무 길어서 이를 줄여야 했다. 더 심각한 문제는 MidiEditor에서는 원하는 프로그램으로 바뀌는 것을 확인하였으나(bank 변경을 동반하여), Waveform에서는 엉뚱한 소리가 나는 것이었다. 이에 대해서는 좀 더 연구를 할 필요가 있다.

다음의 응용 사례는 내가 지금 공부하는 것과는 약간 차이가 있다. 그러나 Waveform에서 Rack의 개념을 이해하는데 중요한 것으로 생각되어 소개해 본다.

How to use 2 instruments on onr track in Tracktion Waveform




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를 설치한 다음 위에서 기술한 사항을 그대로 따라서 해 보았다. 역시 아무런 문제 없이 그대로 재현이 되었다. 

 


2022년 9월 15일 목요일

돌고 돌아 결국 리눅스(우분투 22.04 Jammy Jellyfish)에서 사운드 & 음악 작업을...

리눅스에서 음악 작업을 좀 해 보려다 포기하게 된 이유는 JACK을 제대로 활용하지 못해서였다. 새로 구입한 ThinkPad 노트북 컴퓨터(Windows 11 설치)가 앞으로 나의 주력 '장난감'이 될 것이라고 기대를 했지만, USB MIDI controller keyboard가 인식되지 않는 문제에 직면하여 결국 리눅스로 돌아오고 말았다.

업무용 컴퓨터(AMD Ryzen 5950X)라서 우분투 스튜디오가 아닌 보통의 우분투가 설치된 상태이다. low latency kernel을 쓴 것도 아니요, 별도의 audio group을 만들어서 우선권을 부여하지도 않았다(참고 - Ted's Linux MIDI Guide). 하드웨어 사양이 좋으니 그것으로 밀어붙이는 모양새가 되었다. 

이번에는 완전히 이해하기 전까지는 JACK을 쓰지 않는 것을 목표로 하였다. ALSA와 PulseAudio만을 이용하여 대부분의 작업을 할 수 있으리라 믿는다. 성격이 약간 다른 DAW(Digital Audio Workstation)인 LMMS Ardour 사이에서 저울질을 하고 있다.

[SaaSHub] LMMS vs Ardour

믹싱 콘솔(Behringer XENYX 802)을 적극적으로 사용하게 된 것도 이번에 달라진 모습 중 하나이다. 현재 생각하는 목표는 다음과 같다.

  • alsa-utils에 포함된 CLI 애플리케이션에 익숙해진다.
  • Audacity에서 마이크로폰을 이용하여 음성을 녹음하고 편집하는 방법을 '제대로' 익힌다.
  • Computer playback recording에 익숙해진다. PulseAudio를 쓰거나, 더욱 간단하게는 loopback cable을 사용한다.
  • 사운드폰트를 로드하여 MIDI keyborad controller로 연주하는 것에 익숙해진다. 현재는 CLI 도구(Fluidsynth+SF2 file, aconnect)로도 충분히 하고 있다.
  • DAW를 이용하여 제대로 음악을 만들고 녹음하기!
  • JACK은 그 다음에 생각해 본다.
PulseAudio에도 몇 가지의 CLI application이 수반되지만, pavucontrol(GUI) 하나만 주력으로 이용해도 불편함은 없다.

2022년 9월 12일 월요일

OneDrive 생태계의 일원이 되어 보기로 하다 - 조직 이름 바꾸기에는 성공하였지만... 그리고 iCON MIDI 키보드 인식 문제!

내가 그동안 원드라이브(OneDrive)에 적극적이지 않았던 데에는 것은 두 가지 이유가 있었다. 첫 번째로는 동기화가 적용되는 곳에 대한 개념을 잘 잡지 못했던 것이고, 두 번째로는 탐색기에서 표시되는 조직 이름이 너무 길고 지저분했던 탓이다. 전자는 사용하면서 점차 익숙해지면 되는 일이고, 후자는 조직 이름을 바꾸면 될 일이다. 구글을 검색해서 원드라이브의 조직 이름을 바꾸는 방법을 찾아서 시도해 보았으나 설명한 방법이 조금씩 다르고 잘 되지도 않았다. 대상 컴퓨터는 최근에 구입한 ThinkPad E14 Gen3이다.

Windows 11을 재설치한 뒤 다음의 글을 참조하여 조직 이름 바꾸기를 해 보았다.

탐색기에 표시되는 원드라이브 조직 이름 변경하는 방법

이 방법으로 원드라이브 동기화를 해제할 필요 없이 조직 이름이 원하는 대로 바꿀 수 있었다. 기존의 조직 이름에는 괄호 안에 한자가 들어 있어서 너무 길고 불편하였으며, 이름에 괄호가 포함된 파일을 동기화하지 못하는 부작용이 있었다. 내가 이런 조직의 일원(?)으로서 원드라이브를 쓰게 된 것에는 마이크로소프트 오피스를 구입하게 된 내력과도 관계가 있다(이전에 쓴 글 링크). 이것 덕분에 약 1TB에 해당하는 원드라이브 공간도 쓸 수가 있다. 원래 갖고 있던 원드라이브 계정(기본 5GB)은 아예 해제해 두었다. 탐색기에 원드라이브 저장소가 두 곳이나 있으니 혼동을 초래할 수밖에 없었다.

ThinkPad E14 Gen3(AND Ryzen 7 5700U)에 Windows 11을 두 차례나 재설치해 보았지만 iCON iKEYBOARD 5 NANO MIDI controller keyboard가 인식되지 않았다. 추석 연휴 중에 대전 집에서 다녀오면서 어렵게 들고 왔는데 인식이 되지 않는다니!

펌웨어 버전은 V1.05로 이미 최신으로 업데이트가 된 상태이지만, 작동이 되지 않는다는 노랑 삼각형 바탕의 느낌표가 가슴을 답답하게 만든다.


USB Composite Device의 드라이버가 작동하지 않는 것이 원인으로 보인다. 이 드라이버는 너무 오래된 것이 아닌가 싶은데 마이크로소프트가 공급하는 것으로서 더 최근에 나온 것은 없는 것 같다. Run('Windows 버튼 + R') 창에서 devmgmt.msc를 입력하여 장치 관리자를 실행한 뒤 드라이버 업데이트를 해 봐도 '디바이스의 최적 드라이버가 이미 설치되어 있습니다'라고만 나온다. 2006년에 배포한 것이 최적 드라이버라고?



ThinkPad 구입 직후의 상태, 즉 Windows 10에서는 인식이 잘 되었었을까? 이 글을 작성한 다음 달, Windows 버전을 11에서 10으로 되돌린 뒤 테스트해 보았으나 소용이 없었다(관련 글). 이제는 이번 버전으로 되돌릴 수도 없다. 영문으로는 "This device cannot start. (Code 10) Insufficient system resources exist to complete the API."라는 메시지에 해당한다.


시스템 리소스가 부족할 것 같지는 않은데 왜 이런 에러가 발생하는 것일까? 추석 연휴에 업무를 위해 들고 온 리눅스 데스크탑 서버에 연결하면 인식도 잘 되고, FluidSynth를 통한 연주도 됨을 확인하였으므로 키보드 자체에 이상은 없는 것이 확실하다.

기본 드라이버가 작동하지 않으니 iKeyboard Nano iMap 소프트웨어 V1.17(다운로드 링크)를 가져다가 설치를 해도 인식이 되지 않는다.

Windows 11을 재설치했으나 누적 업데이트(KB5016691)를 적용하고 혹시 무엇이 달라지는지 기다려 보자.

리눅스 서버의 우분투도 22.04로 업그레이드하였다. 설치 후 첫 화면에는 해파리가 똮!! 


누적 업데이트를 적용해 보았으나 MIDI 키보드 컨트롤러 인식 불량 문제는 해결되지 않았다. 그렇다면 건반 입력 작업은 리눅스 서버(Ryzen 5950x)에서 해야 하는가? 어휴... 파워 서플라이 용량이 높아서 시끄럽고 전력도 많이 먹는데...


2023년 7월 5일 업데이트

iCON iKeyboard 6 Nano를 사용하면서 나와 같은 USB 드라이버 인식 오류를 겪은 사람의 글(링크)을 어렵게 찾아냈다. 그러나 이에 대한 답변은 없었다. Windows 7이 깔린 낡은 노트북 컴퓨터에서는 제대로 인식이 된다.

Windows 7에서는 '범용 직렬 버스 컨트롤러'가 아니라 '사운드, 비디오 및 게임 컨트롤러'의 하위에 이 기기가 나타난다.

Windows 7에서 펌웨어 버전을 V1.06에서 1.05로 내린 뒤 Windows 11이 설치된 노트북 컴퓨터에 다시 연결해 보았으나 여전히 인식이 되지 않았다.

테스트를 해 볼 다른 컴퓨터가 없다는 것이 안타깝다. 다음과 같은 문서가 도움이 될까?

How to Fix Insufficient System Resources Exist to Complete the API [Complete Guide]


2023년 7월 20일 업데이트

아들이 사용하는 아이디어패드 330S(Windows 10)에 iKeyboard 5 NANO를 연결하니 아무런 문제 없이 잘 인식이 되었다. 왜 같은 회사(Lenovo)의 ThinkPad E14 G3에서만 안 되는 것인가!


2024년 1월 11일 업데이트

내 노트북 컴퓨터와 같이 라이젠을 채용한 PC에서 키보드(Kurzweil SP2X)를 USB로 연결했을 때 오류가 나는 문제에 대한 글을 발견하였다.

  1. USB 장비가 라이젠에서 오류날 때(코드 10) 확장카드로 해결 가능한가요?
  2. 라이젠에서 인식 안되던 건반이 여기에서 인식되네요

PCE-Express용 USB 확장 카드를 구입하여 연결했더니 아무일 없다는 듯이 잡힌다고 한다. 그러나 나는 노트북 컴퓨터를 쓰고 있지 않은가? 그렇다면 USB 허브 말고는 연결할 수 있는 것이 없다는 뜻이 된다.

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월 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에 꽂아서 사무용으로 잠시 사용하였었다.


2021년 3월 24일 수요일

[우분투의 사운드와 MIDI] 상당히 쓸만한 CLI용 녹음 유틸리티, parec

PulseAudio는 마치 개미지옥처럼 우분투 사용자, 특히 명령행 인터페이스(CLI) 애호가를 빠져들게 하는 재미가 있다. 그 끝은 '파멸'이 아닌 것이 다행이지만 말이다. 새로 설치한 위키 사이트에 음악 작업 관련 문서를 옮기고 고쳐쓰면서 PulseAudio의 다양한 기능을 탐색하는 즐거움에 빠져들고 있다. CLI의 명령어를 잘만 이용하면 PulseAudio Volume Control을 열지 않고도 웬만한 작업을 다 할 수 있을 것만 같다.

PulseAudio 설정 및 활용

특히 parec 명령어의 단순명료함에 감탄하고 있다. parec, parecord, pacat, paplay 등 용도에 맞게 다양한 이름으로 실행을 하지만 전부 pacat을 향하는 심볼릭 링크이다. 이 글에서는 녹음이라는 용도에 관하여 논하고 있으므로 parec이라고 부르기로 했다. 

명령행에서 'parec -d'를 입력하고 탭 키를 몇 번 'alsa_'로 시작하는 디바이스 이름이 나온다. 다음은 USB 오디오 인터페이스를 하나도 꽂지 않은 상태에서의 실행 사례이다.

$ parec -d # 이 상태에서 탭을 쳐 보라. 
alsa_input.pci-0000_00_1b.0.analog-stereo
alsa_output.pci-0000_00_1b.0.analog-stereo
alsa_output.pci-0000_00_1b.0.analog-stereo.monitor

첫 번째는 내장 마이크로폰이고, 세 번째는 내장 스피커이다. 마이크로폰 녹음을 하려면 첫 번째 것을, 응용 프로그램의 재생음을 녹음하려면 세 번째 것을 고르면 된다. 나는 첫 번째 것을 골랐다. parec은 표준 출력을 사용하므로, 이를 인코딩하여 파일로 저장하면 된다. 

$ parec -d alsa_input.pci-0000_00_1b.0.analog-stereo | twolame -r - out.mp3

MP3로 엔코딩하려면 lame 또는 twolame을, OGG로 인코딩하려면 oggenc를 쓰면 된다. 샘플링 레이트, 비트 레이트 등을 조절하는 파라미터는 따로 익혀야 한다. twolame의 경우 아무것도 지정하지 않으면 44.1 kHz, 16 bit, stereo가 된다. 인코딩 프로그램의 입력 및 출력 파라미터는 분명히 다른데 나는 아직 이를 잘 구별하지 못한다.

인코딩과 관련하여 건드릴 수 있는 파라미터까지는 도저히 이해하여 건드릴 수준이 아니니 그대로 두기로 하자, 다만 PCM 샘플 포맷에서 s16ne(signed 16-bit native endian)가 무엇인지, 헤더가 없는 raw format은 무엇인지 등을 알아야 한다. 왜 parec의 출력을 인코더 프로그램에서 --raw로 받는지 정도는 이해를 해야 하지 않을까?

한 쪽에서는 오디오 파일의 포맷에 대해 공부를 하고, 다른 한 쪽에서는 수리 중인 악기(기타)의 마감칠에 관한 공부를 하고 있다. 음악은 어디로 갔지? 기술은 예술을 하는데 필요한 것이지만, 거기에 너무 빠져들면 본질을 잃게 될 수도 있다.

2021년 3월 8일 월요일

[우분투의 사운드와 MIDI] KBS FM 라디오 방송(휴대폰)을 TV로 듣기, 그리고 기타 수리 구상

분당 생활 마무리를 앞두고 앰프와 스피커를 일찌감치 치워 버렸다. 소리를 낼 수 있는 도구는 헤드폰이 전부이다. KBS FM을 듣고 싶은데 어떻게 하면 좋을까? 윈도우가 깔린 노트북이 있으므로 여기에서 Kong앱을 실행하면서 내장 스피커로 소리를 들으면 되지만, 보다 색다른 방법을 쓰고 싶었다.

  1. 리눅스 노트북에 TV를 HDMI 케이블로 연결한다.
  2. 리눅스 노트북에 Behringer UCA-200 오디오 인터페이스를 연결한 다음 아날로그 입력 단자에 휴대폰의 출력을 연결한다.
  3. 이러한 상태에서는 UCA-200이 default source/sink 역할을 한다. module-loopback을 로드하되, 내장 오디오(HDMI 출력이 포함되는 프로파일로 설정되어 있어야 함)를 sync로 만든다. 즉, 다음 명령어를 입력하면 된다.

$ pacmd list-sinks | grep -e 'name: ' -e 'index: '
    index: 0
	name: <alsa_output.pci-0000_00_1b.0.hdmi-stereo>
  * index: 1
	name: <alsa_output.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00.analog-stereo>
$ pactl load-module module-loopback sink=alsa_output.pci-0000_00_1b.0.hdmi-stereo
23

노트북 컴퓨터는 단지 음성 신호의 방향을 바꾸어 주는 수단에 지나지 않는다. 하지만 이렇게 하지 않으면 TV의 HDMI 단자에 음성 신호를 보낼 방법이 없었다. 

TV를 통해 나오는 소리의 질은 별로 좋지 못하다. 넷플릭스로 영화를 볼 때에는 배우의 말소리를 듣는데 집중하느라 '음악'의 질에는 신경을 쓰지 못하였었다.

음... 도저히 못 듣겠다! 차라리 저음은 약간 덜하지만 컴퓨터 내장 스피커가 더 낫다. PulseAudio의 loopback 기능을 복습했다는 것에 의미를 두자.

분당 생활에서 음악과 관련하여 마지막으로 시도해 볼 일은 부러진 전기 기타의 네크 수리를 의뢰하는 것이다. 수년 전에 딸아이가 넘어뜨려서 부러진 네트를 목공본드로 대충 붙인 일이 있다. 몇 년이 지나도 변형이 일어나지 않는 것으로 보아 충분한 강도는 유지되는 것 같은데 마감을 제대로 할 수가 없어서 보기에 너무 좋지 않다.붙은 각도도 그다지 마음에 들지 않는다. 마침 오리역 근처에 기타 수리를 전문적으로 하는 곳이 있다고 하여 수리를 맡기기 위해 오늘 대전 집에서 가지고 올라왔다.

이건 수리를 했다고 할 수가 없다. 너무나 보기 흉하여 기타를 잘 잡지 않게 만드는 이유가 되고 말았기 때문이다. 접착한 주변을 갈아내고 마감칠을 다시 해야만 한다. 전문가가 이를 보면 각도가 좋지 않아서 잘라내고 다시 붙여야 한다고 말할지도 모른다. 아니, 헤드를 아예 새로 만들어야 하는 것은 아닐까?

 지난 몇 년 동안은 음악을 듣기 위한 오디오 앰프를 만드는 일에 집중했으니 이제는 음악을 만들고(또는 기성곡을 따라하고) 녹음을 하는 일에 집중을 해 볼 생각이다. 비록 취미 수준이지만 좀 관심을 갖던 시절부터 좀 더 몰두했더라면 족히 35년이 넘는 시간에 걸쳐 꽤 실력을 닦았을 것이고 음악 인더스트리의 끝자락을 붙들고 무엇이라도 하고 있지 않았었을까?


2021년 2월 24일 수요일

파이썬으로 구현한 서스테인 페달

이전에 쓴 글 '[우분투의 사운드와 MIDI] 스페이스 바를 서스테인 페달 대용으로 쓰게 만드는 파이썬 프로그램'에서 소개했던 방법을 개선해 보았다. 신호를 보낼 MIDI OUT 포트(즉 음원)를 스크립트 내에 써 넣지 않아도 되게 만든 것이다. FluidSynth를 구동한 뒤 MIDI 키보드 콘트롤러와 연결(aconnect)하고 나서 다음과 같은 bash script("sustain-pedal.sh")를 실행을 하면 된다.

#!/usr/bin/env bash

script=$(readlink -f "$0")
path=$(dirname "$script")

OIFS=$IFS; IFS=$'\n'
array=($(sendmidi list)); IFS=$OIFS

i=0
for var in "${array[@]}"
do
    echo "[$i] ${var}"
    i=`expr $i + 1`
done
echo -n "Select MIDI OUT device: "
read -r input
midi_out=${array[$input]}
python ${path}/sustain-pedal.py ${midi_out}

이 스크립트는 이전에 만든 sustain-pedal.py이라는 파이썬 스크립트를 부른다. 이는 pygame이라는 모듈이 필요하다. 아래에서 보인 이 파이썬 스크립트는 또 sendmidi라는 프로그램를 내부에서 실행하므로 이를 설치해 두어야 한다. 명령행 인수를 받을 수 있도록 조금 수정을 가했다. 내부에서 sendmidi를 실행하는 명령어 문자열도 약간 세련되어 보이게 고쳤다.

import pygame
import time
import os
import sys

pygame.init()
d = pygame.display.set_mode((800,600))
d.fill((255,255,255))

sendmidi = "/home/hyjeong/bin/sendmidi";
pedal_on = "%s dev %s cc 64 127"%(sendmidi, sys.argv[1]);
pedal_off = "%s dev %s cc 64 0"%(sendmidi, sys.argv[1]);

done = False
while not done:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      done = True
    if event.type == pygame.KEYDOWN:
      print("Got keydown event: " + str(event))
      os.system(pedal_on)
    if event.type == pygame.KEYUP:
      print("Got keyup event: " + str(event))
      os.system(pedal_off)

pygame.quit()
quit()

그러면 일종의 wrapper script인 sustain-pedal.sh을 실행해 보자.

$ sustain-pedal.sh 
[0] Midi Through Port-0
[1] iCON iKeyboard 5 Nano V1.06 MID
[2] Synth input port (3627:0)
Select MIDI OUT device: 2
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html

번호를 입력하여 MIDI 신호를 보낼 synthesizer를 지정하면 곧바로 커다란 창이 뜬다. 마우스 포인터는 그 안에 위치할 것이다. 그 다음에는 보통의 서스테인 페달을 밟듯이 아무 키나 누르면 된다. 한번에 여러 키를 누르면 제각각 페달 신호를 보내면서 상태가 꼬이기 쉬우니 발가락으로 요령껏 스페이스바를 눌렀다 떼었다 하는 것이 좋을 것이다. 마우스 포인터가 검정 창 안에 있으므로 키보드를 조작하는 것으로는 실행 중인 다른 프로그램을 건드리지는 않는다.

 



 
그다지 아름답지는 않지만 이런 방식으로...

리눅스에서는 눌렀던 키를 릴리즈하는 이벤트를 프로그램으로 구현하는 것이 어려움을 설명한 글의 링크가 서두에 소개한 이전 글에 들어 있다. 그래서 게임 개발에 쓰이는 파이썬 모듈을 활용한 것이다. 게임에서는 눌렀던 키를 릴리즈하는 동작을 인식하는 것이 대단히 중요할 테니까.

예전 방법에서는 sendmidi 명령을 다음과 같이 주어야 하는 것이 너무나 귀찮았다.

sendmidi dev 'SC-D70 Part A' cc 64 127

이것은 사운드캔버스 SC-D70이 연결되었을 때의 방법이다. 다른 오디오 인터페이스를 쓰려면 파라미터를 바꾸어야 한다. 소스 코드를 매번 바꾸어야 한다는 뜻이다. 그래서 오늘 '개발(?)'한 방법에서는 wrapper script를 통해 'sendmidi list'를 먼저 실행하여 MIDI 출력 포트 목록을 화면에 번호와 함께 나오게 한 다음, 번호를 입력하여 원하는 것을 지정하게 만들었다. Here document를 써서 파이썬 코드를 bash 내에 넣어버릴 수도 있는데, 그러한 경우 인수 또는 변수를 내부에서 전달하는 방법까지는 아직 잘 모르겠다. 이는 다음을 위한 숙제로 남겨 두자.

두꺼운 종이나 나뭇조각을 이용하여 밟았을 때 스페이스 바만 눌리게 하는 도구를 만들어도 되겠다.


2021년 2월 14일 일요일

2021년 음력설 연휴 작업 완료 - 6LQ8 SE 앰프와 펄스오디오, 그리고 GenoGlobe 테마곡

코로나19 여파로 가족 모임을 하지 않게 되면서 남는 시간을 보내고자 자잘한 작업 거리를 많이 들고 대전 집에 내려왔다.  게으름으로 늘어지지 않게 연휴를 보내면서 목표했던 작업은 전부 만족할 만한 수준으로 마무리를 하게 되었다.

1. 6LQ8 SE 앰프의 출력 트랜스 교체

알리익스프레스에서 구입한 3와트급 8K:8/4옴 초소형 OPT로 교체를 하고, 볼륨 포텐셔미터의 본체에 전선을 납땜하여 접지에 연결하는 것으로 작업을 마쳤다. 분리된 전원부를 새로운 케이스에 넣고 싶은 욕구를 언제 충족할지는 모르겠다.

2. 펄스오디오(PulseAudio) 이해하기

취미 수준의 음악 작업을 하기 위한 장비로서 리눅스(우분투 스튜디오)를 택한 것이 고난의 시작이었다. 모든 것은 작년 여름 무렵 우연히 롤랜드 사운드캔버스 SC-D70을 갖게 되면서 시작되었다. 이어서 휴대가 간편한 키보드 콘트롤러와 USB 마이크/웹캠을 구입하게 되었다. 딱히 유튜버 노릇을 하겠다고 작정을 한 것은 아니다. 

음악을 만들고 연주하는 일에 정성을 쏟아야 하는데, 컴퓨터를 이용하여 녹음하는 기법을 익히고 이해하는 것에 재미를 느끼게 되었다. 아직도 갈 길은 멀다. 오디오 또는 멀티미디어를 기록하는 다양한 파일 포맷과 이것과 관련된 용어를 이해하는 일, 즉 샘플링 레이트나 비트 레이트 등의 의미를 알아야 한다. 내가 추구하는 것은 아티스트인가 혹은 사운드 엔지니어인가? 전부 다이다.

리눅스에서 녹음을 하는 방법을 다음의 두 위키 문서로 기록해 놓았다. 첫 번째의 글은 나중에 쓰기 시작했지만 더욱 중요하다. 이 두 개의 글은 서로 완벽히 구분되지는 않고 다소 뒤섞인 상태이다. 뿐만 아니라 이 블로그 내에도 적지 않은 글이 체계를 갖추지 못한 상태로 존재한다.

펄스오디오의 설계 개념은 생각보다 매우 까다롭고 그다지 친절하지도 않다. 그러나 이번 연휴 동안 null sink의 개념을 어렵게 깨달으면서 갈피를 잡기 어려웠던 펄스오디오의 핵심 기능 하나를 이해하게 된 것 같다. Victor Gaydov의 방대한 글 'PulseAudio under the hood'에서 key abstractions 항목을 찬찬히 읽어볼 것을 권한다. 다음 그림은 몇 달 동안 펄스오디오와 씨름을 하면서 내가 만들어 낸 source-sink diagram이다.

정해영이 만든 펄스오디오(PulseAudio)의 소스-싱크 다이어그램(source-sink diagram)

다음의 mp3 파일은 오늘 실시간 연주하여 녹음한 것이다. 앞으로 유튜브에 동영상을 올리게 되면 도입 부분에 넣을 GenoGlobe 테마곡이라고나 할까?

하는 김에 여기까지 왔다. GenoGlobe 로고도 새로 만들고 녹음한 곡은 유튜브에 공개하였다.