2020년 8월 31일 월요일

[우분투의 사운드와 MIDI] amidi 명령어로 사운드 캔버스 SC-D70에 GM/GS 리셋용 SysEx 보내기

롤랜드 사운드 캔버스 SC-D70의 전원을 넣은 직후의 내장 음원은 GS 모드로 설정된 상태가 된다. 그래서 canyon.mid 파일(유튜브)을 GS 모드에서 재생해 보면 앞부분에서 closed hi-hat을 툭툭 치는 소리가 피아노 소리로 들린다. SC-88이라면 외부의 INSTRUMENT 버튼을 눌러서 음색을 GM 모드로 바꿀 수 있지만, SC-D70은 System Exclusive(SysEx) 메시지 전송을 통해서만 가능하다.

나는 90년대에 제대로 MIDI를 다루었던 사람은 아니다. 사운드카드(사운드블라스터 16 MCD + WaveBlaster II)를 설치한 컴퓨터에 윈도우용 케이크워크를 깔아서 마우스로 장난삼아 음표를 찍어서 소리를 내던 정도였고, 롤랜드의 PC-200 MKII를 비롯한 몇 가지 마스터 키보드를 샀다 팔았다를 반복한 수준이었다. 그 이후로 좀 더 비싼 88 건반과 피아노 음원을 사기는 했지만, 주 관심사는 MIDI 작업보다는 실시간 연주(아니, 연습이라고 하자)에 더욱 치중했었다.

그래서 SysEx 메시지를 직접 다룰 일은 많지 않았다. 사운드 캔버스 실물을 직접 보고 만지게 된 것도 올해가 처음이었으니까! LSB/MSB나 Bank Select 등의 용어를 아직 완벽하게 이해하고 있지도 못하다. 기억을 되살려 보니 Korg X2의 설정을 되살리느라 SysEx를 파일로 덤프하고 다시 보내는 일로 꽤나 애를 먹은 적은 있었다.

SC-D70의 내장 음원을 GS 또는 GM(2)으로 초기화하려면 어떻게 해야 할까? 사용자 매뉴얼의 48쪽에 다음과 같은 내용이 있다.

- 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

이것을 hex editor를 이용하여 적당히 파일로 작성하여 어떻게 해서든 SC-D70쪽으로 보낼 수 있지 않을까? 인터넷에서 이에 대한 글을 찾아서 따라 해 보았지만 잘 되지 않았다. 윈도우 7에 설치한 MIDI-OX에서 위 텍스트를 복사해 넣은 다음 파일로 저장 후 다시 로드하여 전송을 해 보았다. SC-D70과는 USB MIDI 케이블로 연결을 한 상태였다. MIDI 장비 쪽에서 잘 수신하였다는 신호를 받을 것을 기대할 수는 없으니 Options → Pass SysEx를 체크해 두어야 한다.



MIDI-OX에서 GM2 reset 신호를 보내니 SC-D70 전면 패널의 표시가 바뀌었다! 리눅스로 재부팅하여 canyon.mid 파일을 재생해 보았다. Hi-hat 소리가 정상적으로 났다. 전원을 껐다가 켜면 SC-D70은 다시 GS 모드로 되돌아간다.

Sound generator indicator가 'GM'으로 바뀌었다.
GM mode로 가기 위하여 컴퓨터를 윈도우 7으로 부팅했다가 원래의 환경인 리눅스로 재부팅하기는 상당히 귀찮은 일이다. 리눅스 안에서 이 syx 파일을 전송하는 방법을 알아내야 한다. 구글을 뒤졌더니 alsa-utils에 포함된 amidi라는 명령어가 이 일을 하는 것으로 보인다. 프로그램의 설명을 보자.
amidi is a command-line utility which allows to receive and send SysEx (system exclusive) data from/to external MIDI devices. It can also send any other MIDI commands.
-p 옵션으로 ALSA RawMIDI 포트 번호를 주어야 한다. 이 번호는 어디어 알아낼 수 있는가? cat /proc/asounc/cards를 실행했을 때 나오는 숫자가 이에 해당한다. aconnect -o을 실행했을 때 나오는 번호가 아님에 유의해야 한다. SC-D70을 USB cable로 연결한 뒤 다음 화면 캡쳐와 같이 실행하여 성공적으로 GM2 mode로 전환한 뒤 MIDI 파일을 재생할 수 있었다. 미디 파일 재생 중에 비정상적으로 종료를 하여 음원에서 소리가 끝나지 않고 지속되는 경우, 터미널 창에서 reset sysex 신호를 보내면 소리가 끊긴다. Rosegarden에서 panic 버튼을 클릭하는 것보다 더욱 강력하다.




'man amidi'를 입력하여 실행문 사례를 찾아보았다. 별도의 SysEx 파일을 만들 필요도 없었다. 다음과 같이 16진수 코드를 그대로 명령행에 공급해도 된다. 이때 쓰이는 옵션은 -S 또는 --send-hex="..."이다.

amidi -p hw:1 -S 'F0 43 10 4C 00 00 7E 00 F7' # XG reset

sysex.sh라는 스크립트를 만들면 다음과 같이 amidi를 실행할 수 있게 된다.


$ cat sysex.sh
#!/bin/sh
GS='F0 41 10 42 12 40 00 7F 00 41 F7'
GM2='F0 7E 7F 09 03 F7'
$ source sysex.sh
$ amidi -p hw:1 -S $GM2
$ aplaymidi -p 20:0 flourish.mid

amidi 명령어를 사용하여  Korg X2 음색 설정용 SysEx 파일 전송을 하는 것도 가능하지 않을까? C6 SysEx Manager처럼 delay 시간을 조절할 방법도 있다. -i 또는 --sysex-interval=mseconds 옵션을 쓰면 된다. 매뉴얼에 따르면 'Adds a delay in between each SysEx message sent to a device. It is useful when sending firmware updates via SysEx messages to a remote device.'라고 하였다.

댓글 없음: