오늘도 총 13차례에 걸쳐 Fluid Ardule 메인 스크립트를 수정하였다. 분량은 총 7,340라인에 이른다. 예전 같으면 수정을 한 번 거칠 때마다 GitHub에 commit하였겠지만, 이제는 요령이 생겨서 그날 마지막으로 개발한 것을 올리게 되었다. 커밋문과 CHANGELOG.md 파일도 마지막 버전과 최종 버전을 실제 비교하여(물론 ChatGPT의 도움으로) 매우 상세히 기록해 나가고 있다.
시스템은 매우 안정적으로 돌아간다. 각 사운드폰트에서 로드한 음색을 편집하여 user preset으로 저장하고 다시 불러오는 것까지 구현해 놓았다. 단일 스크립트에서 수용하는 기능으로는 거의 한계에 이르지 않았나 싶다. 이제는 combination 음색을 편집하고 사용하는 기능을 넣을 차례이다.
Fluid Ardule에서 Combination은 여러 음색을 조합하여 하나의 연주 환경으로 만드는 기능이다. 여기에는 layer와 split이 모두 포함된다.
정리하면 다음과 같다.
- Layer: 여러 음색이 같은 건반 범위에서 동시에 울림
- Split: 건반 범위에 따라 서로 다른 음색이 울림
- Combination: layer와 split을 모두 포함하는 일반화된 구조
중요한 점은 Combination을 새로운 음색 데이터로 만들지 않는다는 것이다. 이미 존재하는 User Preset 또는 edited User Preset을 조합한다. 즉 User Preset은 “음색 자체”이고, Combination은 그 음색들을 “어떻게 배치하고 연주할 것인가”를 정의한다.
User Preset
= sound identity
Combination
= performance / routing structure
구현 방식도 비교적 명확하다. 입력 MIDI를 여러 내부 채널로 복제하고, 각 채널에 서로 다른 User Preset을 배정한다. 여기에 key range를 적용하면 split이 되고, key range가 겹치면 layer가 된다.
Input CH1 note
→ Main Sound → CH1
→ Layer Sound → CH2
→ Split Sound → CH3
각 채널은 독립적으로 Program Change와 CC 값을 가질 수 있으므로, 리버브나 코러스 send level도 채널별로 다르게 적용할 수 있다. 따라서 Combination 자체가 CC 값을 복잡하게 덮어쓸 필요는 없다. 각 User Preset이 이미 자신의 Sound Edit 값을 갖고 있고, Combination은 volume, key range, transpose 같은 연주 배치 정보만 갖는 것이 바람직하다.
UI 설계 방향
Combination 기능에서 가장 어려운 것은 기능 자체보다 UI다. 내부적으로는 part 구조를 쓰더라도, 사용자에게 굳이 “Part 1”, “Part 2” 같은 기술적 표현을 노출할 필요는 없다. 악기처럼 쓰려면 다음과 같은 표현이 더 자연스럽다.
- Layer
- Split
- Upper / Lower (키 범위)
처음부터 4-part workstation을 만들려고 하기보다는, 2개의 음색을 조합하는 것부터 시작하는 것이 현실적이다. 예를 들어 Piano + Pad layer, Bass + Piano split 정도만 구현해도 실제 연주에는 매우 유용하다.
초기 Combination 편집 항목은 다음 정도면 충분하다.
- User Preset 선택
- 상대 볼륨
- Key Low / Key High
- Transpose
- Mute / Solo
Mute와 Solo는 꼭 필요하다. 여러 음색을 조합할 때 각 음색을 따로 들어 보며 밸런스를 잡아야 하기 때문이다.
다음 단계
오늘 만든 설계 문서는 GitHub의 docs/combination-system-design.md에 둘 수 있을 정도로 정리되었다. 아직 구현은 시작하지 않았지만, 방향은 꽤 분명하다.
Fluid Ardule는 이제 단순한 FluidSynth 프론트엔드가 아니라, User Preset과 Combination을 기반으로 한 작은 DIY workstation으로 진화하고 있다. 아직은 단일 Python 스크립트로 유지하고 있지만, Combination 편집기부터는 별도 모듈로 분리하는 것이 자연스러울 것이다. 3.5인치에 불과한 TFT-LCD 화면과 몇 개의 버튼/인코더를 이용하여 Combination을 편집하는 UI를 구성하려면 꽤 공을 들여야 할 것이다. 생각보다 많은 시간이 걸릴 수도 있다. 또한 Combination 관련 기능은 별도의 파이썬 파일로 독립시키는 것이 바람직하다. 동시에 케이스 설계도 병행해 나가는 것이 좋을 것이다.
오늘의 작업을 통해 User Preset은 이제 실사용 가능한 수준으로 다듬어졌고, Combination은 다음 단계의 설계 주제로 떠올랐다. 이 작은 악기가 점점 더 악기다워지고 있다.

댓글 없음:
댓글 쓰기