aboutsummaryrefslogtreecommitdiff
path: root/Hotline/Managers/SoundEffects.swift
blob: 85a1c0e280a334065e721ff5d5aa66f91f786e1f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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()
  }
}