| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- import Foundation
- /// Built-in EQ presets with predefined gain values for 3-band EQ.
- /// "Custom" is auto-assigned when slider values don't match any named preset.
- enum EQPreset: String, CaseIterable, Identifiable {
- case flat
- case bassBoost
- case bassCut
- case loudness
- case vocalFocus
- case custom
- var id: String { rawValue }
- /// Human-readable label for the preset picker.
- var displayName: String {
- switch self {
- case .flat: "Flat"
- case .bassBoost: "Bass Boost"
- case .bassCut: "Bass Cut"
- case .loudness: "Loudness"
- case .vocalFocus: "Vocal Focus"
- case .custom: "Custom"
- }
- }
- /// Gain values (low, mid, high) for each named preset.
- /// Returns nil for `.custom` since it has no fixed values.
- var gains: (low: Float, mid: Float, high: Float)? {
- switch self {
- case .flat: (0, 0, 0)
- case .bassBoost: (6, 0, 0)
- case .bassCut: (-24, 0, 0)
- case .loudness: (4, -2, 4)
- case .vocalFocus: (-4, 4, -2)
- case .custom: nil
- }
- }
- /// Auto-detect which preset matches the given gain values,
- /// or return `.custom` if no match.
- static func detect(low: Float, mid: Float, high: Float) -> EQPreset {
- for preset in Self.allCases where preset != .custom {
- guard let gains = preset.gains else { continue }
- if gains.low == low && gains.mid == mid && gains.high == high {
- return preset
- }
- }
- return .custom
- }
- }
|