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()
}
}
|