사운드폰트가 설치된 디렉토리의 목록을 보여주고, 번호를 선택하면 이를 로드하여 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 명령행 환경에 익숙해지는 것은 그렇게 어려운 일도 아니다.
댓글 없음:
댓글 쓰기