Dunne Synth
DunneSynthConductor는 AudioKit의 Synth (정확히는 DunneAudioKit의 Dunne Synthesizer)를 제어하는 오디오 신스 컨덕터 클래스입니다.
SwiftUI 기반의 UI와 연동하여 신스의 파라미터 조정, 노트 재생, 피크 리미팅, 팝 제거 등 다양한 오디오 처리 제어를 담당합니다.
클래스 개요
1
| class DunneSynthConductor: ObservableObject, HasAudioEngine
|
ObservableObject이므로 SwiftUI 뷰와 상태 바인딩 가능
HasAudioEngine 프로토콜을 통해 engine 및 노드 연결 보장
- 내부에서
Synth 객체를 사용하여 가상 악기를 구현
주요 구성 요소
let engine = AudioEngine()
var instrument = Synth()
- DunneAudioKit의 폴리포닉 신스
- 매핑된 파라미터들을 실시간으로 제어 가능
noteOn / noteOff
func noteOn(pitch: Pitch, point _: CGPoint)
1
| instrument.play(noteNumber: ..., velocity: 100, channel: 0)
|
- 전달된
Pitch를 MIDI note로 변환하여 재생 시작
func noteOff(pitch: Pitch)
1
| instrument.stop(noteNumber: ..., channel: 0)
|
초기화: init()
1. engine.output = PeakLimiter(...)
- 출력단에
PeakLimiter 삽입 → 소리의 과도한 피크 방지
attackTime = 0.001: 피크 감지 후 빠르게 제한
decayTime = 0.001: 제한 해제도 즉시
preGain = 0: 입력 게인을 증폭하지 않음
2. 팝 노이즈 제거 설정
1
2
3
| instrument.releaseDuration = 0.01
instrument.filterReleaseDuration = 10.0
instrument.filterStrength = 40.0
|
releaseDuration이 너무 짧으면 소리가 갑자기 끊기면서 팝(Pop) 노이즈 발생
filterReleaseDuration을 길게 설정해 필터 계열 소리가 부드럽게 사라지도록 함
filterStrength는 필터 적용 정도 조절
파라미터 목록
일반 음성 파라미터
| 파라미터 |
기본값 |
범위 |
설명 |
Master Volume |
1.0 |
0.0...1.0 |
전체 출력 볼륨 |
Pitch Bend |
0.0 |
-24.0...24.0 |
실시간 피치 변조 (세미톤 단위) |
Vibrato Depth |
0.0 |
0.0...12.0 |
비브라토 강도 |
Filter Cutoff |
1.0 |
0.0...1.0 |
필터 컷오프 주파수 (정규화) |
Filter Strength |
40.0 |
0.0...100.0 |
필터 효과의 강도 |
Filter Resonance |
0.0 |
-20.0...20.0 |
공명(Resonance) 강도 |
앰플리튜드 ADSR (Amplitude Envelope)
| 파라미터 |
기본값 |
범위 |
설명 |
Attack Duration |
0.0 |
0.0...10.0 |
노트 시작 시 볼륨이 증가하는 시간 |
Decay Duration |
0.0 |
0.0...10.0 |
최대 볼륨에서 지속 볼륨까지 줄어드는 시간 |
Sustain Level |
1.0 |
0.0...1.0 |
키를 누르고 있을 때 유지되는 볼륨 |
Release Duration |
0.01 |
0.0...10.0 |
노트 종료 후 소리가 사라지는 시간 |
필터 ADSR (Filter Envelope)
| 파라미터 |
기본값 |
범위 |
설명 |
Filter Attack Duration |
0.0 |
0.0...10.0 |
필터가 작동을 시작하는 데 걸리는 시간 |
Filter Decay Duration |
0.0 |
0.0...10.0 |
필터가 최대 효과에서 사라지는 시간 |
Filter Sustain Level |
1.0 |
0.0...1.0 |
필터 효과의 유지 비율 |
Filter Release Duration |
10.0 |
0.0...10.0 |
필터 효과가 사라지는 시간 |
콘솔 출력
1
2
3
| instrument.parameters.forEach {
print("\($0.def.name) | \($0.value) | \($0.range)")
}
|
- 모든 파라미터 이름, 현재값, 범위를 디버깅용으로 출력
- UI 연결 확인이나 슬라이더 구성 시 유용함
요약
DunneSynthConductor는:
- AudioKit의 Dunne 신스를 제어하고
- 소리의 피크와 팝 노이즈를 제어하며
- 다양한 신스 파라미터들을 외부 UI와 연결할 수 있게 준비된 컨트롤러입니다.
SwiftUI와 함께 사용할 때 매우 직관적인 신디사이저 앱이나 교육용 악기 UI를 구성하는 데 적합합니다.