2021년 2월 7일 일요일

[우분투의 사운드와 MIDI] Qsynth 구동용 스크립트 'run_qsynth'

사운드폰트가 설치된 디렉토리의 목록을 보여주고, 번호를 선택하면 이를 로드하여 Qsynth를 실행하는 간단한 스크립트를 만들어 보았다. 매우 지저분하기 이를 데 없는 스크립트이다. 변수명에 일관성도 없고, 변수의 값을 나타내기 위해 큰따옴표나 중괄호로 둘러싸는 방법도 제멋대로이다.

#!/usr/bin/env bash

option="-a jack --connect-jack-outputs"
if [ "$1" = "alsa" ]; then
    option="-a alsa"
    echo
    echo "ALSA audio driver will be used (default: JACK)"
fi

OIFS=$IFS; IFS=$'\n'
array=($(find $HOME/sf2 -type f)); IFS=$OIFS

echo
echo "Soundfonts installed in $HOME/sf2: "
i=0
for var in "${array[@]}"
do
    echo "  [$i]:  $(basename ${var})"
    i=`expr $i + 1`
done
echo
echo -n "Select sf2 index number: "
read -r input
CMD="qsynth -m alsa_seq $option --reverb=0 --chorus=0 --gain=0.8 ${array[$input]}"
$CMD &>/tmp/qsynth.out &
echo "$CMD &>/tmp/qsynth.out &"

어떻게 해서든 에러 없이 실행만 잘 되면 되는 것 아니겠는가? 실행 사례는 다음과 같다. 명령행 인수 'alsa'를 주지 않으면 -a jack --connect-jack-outputs' 옵션이 qsynth 명령어에 제공된다.

$ run_qsynth alsa

ALSA audio driver will be used (default: JACK)
Soundfonts installed in /home/hyjeong/sf2: 
  [0]:  FluidR3_GM.sf2
  [1]:  Chateau_Grand-v1.8.sf2
  [2]:  Nice-Keys-Ultimate-V2.3.sf2
  [3]:  Essential_Pianos-bs16i-v1.0.sf2

Select sf2 index number: 3
qsynth -m alsa_seq -a alsa --reverb=0 --chorus=0 --gain=0.8 /home/hyjeong/sf2/Essential_Pianos-bs16i-v1.0.sf2 &>/tmp/qsynth.out &

JACK audio server 구동에 쓰이던 audio.qsynth 스크립트도 개정 작업을 진행 중이다. 이전 버전에서는 항상 Qsynth가 실행되게 하였지만, 개정판에서는 3초 이내에 Esc 키를 눌렀을 때 Qsynth를 실행하지 않게 만든 것이다. run_qsynth 스크립트를 만들게 된 것도 이런 이유에서다.

2021년 2월8일 업데이트

Qt GUI를 쓰지 않고 FluidSynth를 그대로 실행하는 것이 음질 면에서는 더 낫다. 컨트롤하기에는 약간 불편함이 있지만, 아무래도 시스템 자원을 덜 사용하기에 그런 것 같다. FluidSynth 명령행 환경에 익숙해지는 것은 그렇게 어려운 일도 아니다.

댓글 없음: