clsSFX // Use AVFoundation in lieu of NSSound.

This commit is contained in:
ShikiSuen 2022-06-07 19:27:20 +08:00
parent 7bf58ed61f
commit 455495c2fc
2 changed files with 10 additions and 49 deletions

View File

@ -2,7 +2,7 @@ $ Main contributors and volunteers of this repository (vChewing for macOS):
- Shiki Suen // Main developer of vChewing for macOS, Megrez language engine, and Tekkon syllable composer engine. - Shiki Suen // Main developer of vChewing for macOS, Megrez language engine, and Tekkon syllable composer engine.
- Hiraku Wang // Technical reinforcement in Cocoa during the Object-Cpp dev period of this project. - Hiraku Wang // Technical reinforcement in Cocoa during the Object-Cpp dev period of this project.
- Isaac Xen // Technical reinforcement in Swift: SFX Module and StringView Ranges Extension. - Isaac Xen // Technical reinforcement in Swift: SFX Module (NSSound ver.) and StringView Ranges Extension.
$ Contributors and volunteeres of the upstream repo, having no responsibility in discussing anything in the current repo: $ Contributors and volunteeres of the upstream repo, having no responsibility in discussing anything in the current repo:

View File

@ -1,6 +1,4 @@
// Copyright (c) 2022 and onwards Isaac Xen (MIT License). // Copyright (c) 2021 and onwards The vChewing Project (MIT-NTL License).
// All possible vChewing-specific modifications are of:
// (c) 2021 and onwards The vChewing Project (MIT-NTL License).
/* /*
Permission is hereby granted, free of charge, to any person obtaining a copy of Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in this software and associated documentation files (the "Software"), to deal in
@ -24,52 +22,15 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
import Cocoa import AVFoundation
import Foundation
public class clsSFX: NSObject, NSSoundDelegate {
private static let shared = clsSFX()
override private init() {
super.init()
}
private var currentBeep: NSSound?
private func beep() {
let defaultVolume: Float = 0.4
// Stop existing beep
if let beep = currentBeep {
if beep.isPlaying {
for i in 1..<30 {
beep.volume = (defaultVolume / Float(i))
usleep(1000)
}
beep.stop()
beep.volume = defaultVolume
}
}
// Create a new beep sound if possible
var sndBeep: String
if mgrPrefs.shouldNotFartInLieuOfBeep == false {
sndBeep = "Fart"
} else {
sndBeep = "Beep"
}
guard
let beep = NSSound(named: sndBeep)
else {
NSSound.beep()
return
}
beep.delegate = self
beep.volume = defaultVolume
beep.play()
currentBeep = beep
}
public func sound(_: NSSound, didFinishPlaying _: Bool) {
currentBeep = nil
}
public class clsSFX {
static func beep() { static func beep() {
shared.beep() let filePath = Bundle.main.path(forResource: mgrPrefs.shouldNotFartInLieuOfBeep ? "Beep" : "Fart", ofType: "m4a")!
let fileURL = URL(fileURLWithPath: filePath)
var soundID: SystemSoundID = 0
AudioServicesCreateSystemSoundID(fileURL as CFURL, &soundID)
AudioServicesPlaySystemSound(soundID)
} }
} }