// SoundEvent — the cross-platform set of audible event cues. Each maps to a WAV bundled as an // SPM resource (Sources/VoiceCatCore/Sounds/, copied from assets/sounds/). The same logical set // is mirrored in the Windows client (clients/windows/.../Notifications/SoundEvent.cs) so feedback // stays consistent across platforms. import Foundation public enum SoundEvent: CaseIterable, Sendable { case channelJoin // another user joined my channel case channelLeave // another user left my channel case channelRecv // channel text message from someone else case channelSent // channel text message I sent case pmRecv // private message received case pmSent // private message I sent case login // connected / authenticated case logout // clean disconnect case connectionLost // unexpected disconnect case voiceOn // my microphone stream started case voiceOff // my microphone stream stopped case vaStart // my voice-activity began (off by default) case vaStop // my voice-activity ended (off by default) case ptt // push-to-talk engaged (off by default) /// Resource name (without extension) as bundled in Sources/VoiceCatCore/Sounds/. var resourceName: String { switch self { case .channelJoin: return "channel_join" case .channelLeave: return "channel_leave" case .channelRecv: return "channel_recv" case .channelSent: return "channel_sent" case .pmRecv: return "pm_recv" case .pmSent: return "pm_sent" case .login: return "login" case .logout: return "logout" case .connectionLost: return "connection_lost" case .voiceOn: return "voice_on" case .voiceOff: return "voice_off" case .vaStart: return "va_start" case .vaStop: return "va_stop" case .ptt: return "ptt" } } }