User Tools

Site Tools


Sidebar


정해영의 새 블로그, GenoGlobe.kr에 오신 것을 환영합니다!


본 사이트에서 표시되는 시각은 그리니치 평균시(GMT)입니다.


audio

우분투(스튜디오) 16.04에서 음악과 미디 작업하기

이 글을 작성하는데는 다음 사이트를 주로 참고하였다. 컴퓨터 환경은 컴팩 프라자리오 CQ61-304TU 노트북 컴퓨터이다.

Ted의 가이드에서는 PulseAudio를 아예 쓰지 말라고 하지만 그건 바람직하지 않은 것 같다.

나의 최종 목표는 Rosegarden에서 미디 및 오디오 녹음 작업을 하는 것이다. Rosegarden은 우분투 스튜디오에 기본으로 포함되어 있지도 않고, ARDOUR가 대부분의 관점에서는 더 나은 것 같다. 그러나 Rosegarden은 매우 사용이 편리하다는 장점이 있다.

Rosegarden vs. Ardour

이 글에서 설명한 사항은 우분투 18.04LTS로 자동 업데이트를 한 뒤에도 동일하다.

설치된 사운드 카드 파악하기

Behringer U-Control 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:1d.0-1, full speed
$ aplay -l # 각 카드가 갖는 (복수의) 디바이스 정보를 보임 
  **** PLAYBACK 하드웨어 장치 목록 ****
0 카드: Intel [HDA Intel], 0 장치: 92HD75B2X5 Analog [92HD75B2X5 Analog]
  하위장치: 1/1
  하위장치 #0: subdevice #0
0 카드: Intel [HDA Intel], 3 장치: HDMI 0 [HDMI 0]
  하위장치: 1/1
  하위장치 #0: subdevice #0
1 카드: CODEC [USB Audio CODEC], 0 장치: USB Audio [USB Audio]
  하위장치: 1/1
  하위장치 #0: subdevice #0

ALSA를 이용하여 저수준에서 음악 파일을 재생할 수 있다

JACK이나 PulseAudio와 같은 사운드 서버를 전혀 쓰지 않고도 명령행에서 소리 파일을 재생할 수 있다.

$ sox -b 16 -n test.wav rate 44100 channels 2 synth 1 sine 440 gain -1
$ aplay -D hw:0 test.wav
$ play test.wav # 기본 장치를 통한 재생

mp3 파일을 재생하려면 추가 패키지를 설치해야 한다.

$ sudo apt install libsox-fmt-mp3
$ play music.mp3

명령행에서 음량을 제어하려면 alsamixer를 사용한다.

$ alsamixer

FluidSynth가 설치된 상태라면 사운드 폰트를 이용하여 MIDI 파일을 직접 재생할 수 있다.

$ fluidsynth --audio-driver=alsa -o audio.alsa.device=hw:0 /usr/share/sounds/sf2/FluidR3_GM.sf2 fluorish.mid

FluidSynth를 서버로 작동시키면 다른 응용프로그램으로 하여금 MIDI 데이터를 FluidServer로 전송하게 만들 수 있다.

$ fluidsynth --server --audio-driver=alsa -o audio.alsa.device=hw:0 /usr/share/sounds/sf2/FluidR3_GM.sf2
$ aplaymidi -l
 Port    Client name                      Port name
 14:0    Midi Through                     Midi Through Port-0
129:0    FLUID Synth (1449)               Synth input port (1449:0)
$ aplaymidi -p 129:0 flourish.mid

Software synth를 직접 연주해 보자

명령행에서 Qsynth(A fluidsynth Qt GUI Interface)를 실행한다. 다음의 실행 조건에서는 서버로는 기동하지 않되 alsa_seq MIDI driver를 이용한다. 따라서 JACK과는 관계없이 실행되는 것이다.

$ qsynth -m alsa_seq

물론 Qsynth를 이용하여 MIDI 파일을 재생하는 것도 가능하다.

$ qsynth -m alsa_seq flourish.mid

가상 키보드인 vmpk를 실행하고 Edit→Connection→Output MIDI Connection을 FLUID Synth로 설정하고 키보드를 클릭하여 소리를 들어 본다. vmpk는 명령행에서 실행하거나 또는 패널의 프로그램→Audio Production→MIDI Utilities에서 선택해도 된다.

$ vmpk

이번에는 Yamaha DX7 modeling software synthesizer인 Hexter를 실행해 본다. 이것은 Qsynth처럼 명령행에서 실행할 수 있는 것이 아니며, 패널의 프로그램→Audio Production→Instruments에서 선택하여 실행해야 한다. Hexter를 실행했다 하여도 VMPK에서 연결가능한 MIDI 출력쪽에 보이지 않을 것이다. 이제 명령행에서 aconnect(ALSA sequencer connection manager)를 사용하여 키보드와 악기를 원하는대로 연결할 수 있다.

$ aconnect -x # 기존의 연결을 끊는다.
$ aconnect -i
client 0: 'System' [type=커널]
    0 'Timer           '
    1 'Announce        '
client 14: 'Midi Through' [type=커널]
    0 'Midi Through Port-0'
client 129: 'VMPK Output' [type=사용자,pid=2789]
    0 'VMPK Output     '
$ aconnect -o
client 14: 'Midi Through' [type=커널]
    0 'Midi Through Port-0'(
client 130: 'VMPK Input' [type=사용자,pid=2789]
    0 'VMPK Input      '
client 131: 'FLUID Synth (2554)' [type=사용자,pid=2554]
    0 'Synth input port (2554:0)'
client 132: 'hexter DX7 emulation (v1.0.2)' [type=사용자,pid=2607]
    0 'hexter DX7 emulation (v1.0.2)'
$ aconnect 129:0 132:0 #원하는 MIDI sender(키보드)와 receiver(악기)를 연결한다.

만약 컴퓨터에 하드웨어 키보드를 연결하였다면 aconnect -i 명령을 실행했을 때 나타날 것이다. 그러면 acconnect 명령으로 원하는 악기와 연결하여 연주하면 된다. 만약 이 과정이 번거롭게 느껴진다면, 그것은 JACK을 사용할 때가 되었다는 것이다.

설치된 모든 software synthesizer가 Hexter처럼 단독 실행이 가능한 것은 아니다. JACK이 없으면 안되는 것도 있다.

사운드 카드 선택, 음량 제어 등 기본적 제어는 PulseAudio 사운드 서버에서

웹브라우저에서 유튜브를 접속하여 동영상을 재생해 보라. 내장된 스피커에서 소리가 흘러나올 것이다. 별도로 연결한 USB 오디오 인터페이스로 소리가 나오게 하거나 음량을 바꾸고 싶다면 PulseAudio Volume Control을 이용한다.

$ pavucontrol

JACK, a low-latency audio server

여러 개의 소스를 이용하여 녹음 및 미디 작업과 같은 보다 전문적인 업무를 하려면 JACK(jackd or jackd2)을 사용해야 한다. 우분투 18.04에 설치된 jackd의 버전은 1.9.12이다. 다음은 아주 간단한 명령행 사례이다.

$ jackd -d alsa --device hw:0 --rate 44100 --period 128
$ export JACK_PLAY_CONNECT_TO=system:playback_%d
$ jack-play test.wav

Ted의 가이드에서는 JACK 서버를 구동하고 소프트웨어 음원인 FluidSynth를 로드하는 스크립트인 audio를 소개하였다. 이를 이용하여 기본적인 개념과 작동 원리를 이해했다면 실제 작업에서는 QjackCtl과 Qsynth를 쓰는 것을 권장한다.

a2jmidid는 필요한가?

ARDOUR의 매뉴얼의 JACK MIDI Configuration 문서에 의하면, JACK은 기본적으로 MIDI 포트를 검출하지 못하므로 native MIDI frameworks와 (e.g. CoreMIDI or ALSA) and JACK MIDI를 연결할 방편을 마련해야 한다고 한다. 그 방법은 현재 사용하는 JACK의 버전에 따라 달라진다고 하는데 아직 완벽하게 이해하지 못했다. Arch Linux의 JACK Audio Connection Kit - MIDI 항목(대단히 중요한 설명이 많으니 잘 읽어보기 바람)에 의하면 jack2의 경우 a2jmidid를 쓰는게 필수적이나, jack(1)에서는 그럴 필요가 없는 것 같다. a2jmidid(JACK MIDI daemon for ALSA MIDI)는 ALSA sequencer port에 대하여 JACK MIDI port를 하나씩 자동으로 연결하는 데몬이다. 몇 번의 실험 끝에 나는 a2jmidid를 쓰지 않기로 하였다. JACK(QjackCtl)의 Setup에서는 다음과 같이 설정하였다. 두 가지를 전부 다 설정해야 하는지는 아직 알 수 없다. 아직 별다른 부작용은 감지되지 않았다.

  • Setting→Parameters→MIDI Driver: seq (Connect→MIDI tab에 MIDI device가 보이게 된다)
    • Settings→Advanced에서 Server Prefix: /usr/bin/jackd에 -X alsa_midi를 덧붙이는 것이 바로 위에서 설정한 것과 같은 효과를 갖는가? 잘 모르겠다.
  • Misc→ Enable ALSA Sequencer support에 체크 (Connect→ALSA tab에 MIDI device가 보이게 된다)

만약 a2jmidid를 쓰려면, 바로 위에서 소개한 두 가지의 설정을 반대로 한다. 즉 MIDI Driver는 none으로 하고, Enable ALSA Sequencer support의 체크는 해제한다. 사실은 이것이 JACK의 기본 설정이었다. 그 다음 명령행에서 다음을 입력한다.

$ a2jmidid -e # a2midid --export-hw 명령과 같다.

또는 JACK Setup→Options→Scripting→Execute script after Startup에 이 명령어를 넣어도 된다.

MIDI를 위한 설정(Rosegarden)

Rosegarden은 MIDI 통신을 위해서는 ALSA driver를, 오디오를 위해서는 JACK을 사용한다. 만약 JACK 서버를 사용하지 않는다면 synth plugin을 쓸 수 없게 되고, 오디오 세그면트의 녹음이나 재생을 하지 못한다. flourish.mid를 예제로 택하여 간단한 작업을 해 본다.

Qsynth를 이용한 단순한 재생

  1. QjackCtl을 구동한다.
  2. Qsynth를 구동한다. 설치 후 첫 실행이라면 Setup → Soundfonts에서 /usr/share/sound/sf2/FluidR3_GM.sf2를 로드한다. Setup → MIDI → MIDI Driver가 jack인지 확인한다. alsa_seq이면 JACK을 경유하지 않고 Qsynth를 사용할 수 있다.
  3. Rosegarden을 실행하고 rosegarden.mid를 임포트한다.
  4. Studio → Manage MIDI Devices에서 Available outputs 중 129:0 Synth input port를 MIDI Playback device로 연결한다.
  5. 재생 버튼을 클릭하여 음악을 감상한다.

특정 트랙을 다른 VST PlugIn으로 바꾸기기

  1. 3번 트랙의 Piano에 마우스 포인터를 대고 오른쪽 버튼을 눌러서 나오는 메뉴 중 두번째의 Synth plugin을 선택해서 나오는 목록 중 적당한 번호를 고른다.
  2. 왼쪽 Special Parameters 패널의 Instrumental Parameters에서 <no synth>를 클릭한다.
  3. Plugin을 클릭하여 (none)을 hexter DX7 emulation으로 바꾼다.
  4. 아래에 새로 나타나는 창에서 Program 곁의 <none selected>를 E.GRAND 1로 바꾼다.
  5. 재생 버튼을 클릭하여 바뀐 음색의 음악을 감상한다.

오디오 트랙을 생성하여 녹음하기

  1. 오디오 트랙은 17번부터이다.
  2. 트랙에 마우스 포인터를 대고 오른쪽 버튼을 눌러서 나오는 메뉴 중 세번째의 Audio을 선택해서 나오는 목록 중 적당한 번호를 고른다.
  3. QjackCtl에서 Connect를 클릭한다.
  4. Audio 패널에서 왼쪽의 qsynth와 오른쪽의 rosegarden을 연결한다.
  5. [알아볼 사항] 일부 혹은 전체 트랙인 VST plugin이면 connect를 어떻게 해야 하는가?

ARDOUR

리눅스용 DAW 소프트웨어인 ARDOUR에서는 MIDI를 ALSA를 직접 제어한다. 만약 JACK을 꼭 써야 한다면 다음의 방법을 따른다(https://manual.ardour.org/setting-up-your-system/setting-up-midi/midi-on-linux/링크.

audio.txt · Last modified: 2020/08/07 12:44 by hyjeong