====== FluidSynth 자동 실행 및 MIDI 오토 라우팅 구현(ALSA-based) ====== ===== 이름을 찾아서 자동 연결 ===== MIDI 기기나 FluidSynth 포트 번호는 매번 연결 때마다 달라진다. 따라서 번호 대신 이름으로 찾아서 자동 연결을 시도하는 것이 바람직하다. fluidsynth ... & # fluidsynth 뜰 때까지 대기 until aconnect -l | grep -q "FLUID"; do sleep 0.5; done # 키보드 연결 aconnect \ $(aconnect -l | grep -A1 "USB" | tail -n1 | awk '{print $1}') \ $(aconnect -l | grep -A1 "FLUID" | tail -n1 | awk '{print $1}') ===== 스트립트 활용 ===== 다음을 **start_fluid.sh**라는 이름으로 저장해 두고 실행한다. #!/bin/bash SF2=~/sf2/GeneralUser-GS.sf2 AUDIO_DEV=plughw:2,0 echo "[INFO] Starting FluidSynth..." fluidsynth -a alsa -m alsa_seq -i -s \ -o audio.alsa.device=$AUDIO_DEV \ "$SF2" > /dev/null 2>&1 & # fluidsynth 포트 생성 대기 echo "[INFO] Waiting for FluidSynth..." until aconnect -l | grep -q "FLUID"; do sleep 0.5; done echo "[INFO] FluidSynth ready" # 키보드 연결 함수 connect_midi() { SRC=$(aconnect -l | grep -A1 "USB" | tail -n1 | awk '{print $1}') DST=$(aconnect -l | grep -A1 "FLUID" | tail -n1 | awk '{print $1}') if [ -n "$SRC" ] && [ -n "$DST" ]; then aconnect $SRC $DST 2>/dev/null echo "[INFO] Connected $SRC → $DST" fi } # 최초 연결 connect_midi # 🎯 지속 감시 (핫플러그 대응) echo "[INFO] Monitoring MIDI devices..." while true; do sleep 2 connect_midi done ===== systemd 자동 실행 ===== /etc/systemd/system/fluid.service [Unit] Description=FluidSynth Auto MIDI After=sound.target [Service] ExecStart=/home/pi/start_fluid.sh Restart=always User=pi [Install] WantedBy=multi-user.target 활성화 sudo systemctl daemon-reexec sudo systemctl enable fluid sudo systemctl start fluid