aboutsummaryrefslogtreecommitdiff
path: root/Hotline/Managers/SoundEffects.swift
diff options
context:
space:
mode:
authorRuben Beltran del Rio <git@r.bdr.sh>2025-11-27 23:38:04 +0100
committerRuben Beltran del Rio <git@r.bdr.sh>2025-11-27 23:38:04 +0100
commit213710bf5bd6413c747bf126db50816ef5de5a6e (patch)
tree912f8cf87955a08077c92fea8ad934f50b7ab975 /Hotline/Managers/SoundEffects.swift
parentf466b21dc02f78c984ba6748e703f6780a7a0db4 (diff)
parent6a95b53616a4abfa306ddce43151cf4fefbd20ed (diff)
Merge remote-tracking branch 'upstream/main'
Diffstat (limited to 'Hotline/Managers/SoundEffects.swift')
-rw-r--r--Hotline/Managers/SoundEffects.swift40
1 files changed, 40 insertions, 0 deletions
diff --git a/Hotline/Managers/SoundEffects.swift b/Hotline/Managers/SoundEffects.swift
new file mode 100644
index 0000000..85a1c0e
--- /dev/null
+++ b/Hotline/Managers/SoundEffects.swift
@@ -0,0 +1,40 @@
+import Foundation
+import AppKit
+
+enum SoundEffect: String {
+ case loggedIn = "logged-in"
+ case chatMessage = "chat-message"
+ case transferComplete = "transfer-complete"
+ case userLogin = "user-login"
+ case userLogout = "user-logout"
+ case newNews = "new-news"
+ case serverMessage = "server-message"
+ case error = "error"
+
+ static var all: [SoundEffect] = [.loggedIn, .chatMessage, .transferComplete, .userLogin, .userLogout, .newNews, .serverMessage, .error]
+}
+
+class SoundEffects {
+ static let shared = SoundEffects()
+
+ static func play(_ name: SoundEffect) {
+ Self.shared.play(name)
+ }
+
+ private var preloadedSounds: [SoundEffect: NSSound] = [:]
+
+ private init() {
+ // Preload sound effects
+ for effect in SoundEffect.all {
+ if let soundFileURL = Bundle.main.url(forResource: effect.rawValue, withExtension: "aiff"),
+ let sound = NSSound(contentsOf: soundFileURL, byReference: true) {
+ sound.volume = 0.75
+ self.preloadedSounds[effect] = sound
+ }
+ }
+ }
+
+ func play(_ name: SoundEffect) {
+ self.preloadedSounds[name]?.play()
+ }
+}