mirror of
https://github.com/GLEGram/GLEGram-iOS.git
synced 2026-08-19 23:37:14 +02:00
Based on Swiftgram 12.5 (Telegram iOS 12.5). All GLEGram features ported and organized in GLEGram/ folder. Features: Ghost Mode, Saved Deleted Messages, Content Protection Bypass, Font Replacement, Fake Profile, Chat Export, Plugin System, and more. See CHANGELOG_12.5.md for full details.
92 lines
2.9 KiB
Swift
92 lines
2.9 KiB
Swift
import Foundation
|
|
|
|
// MARK: - GLEGram
|
|
|
|
/// GLEGram / ghostgram-style: local voice morphing for outgoing voice messages (UserDefaults).
|
|
public final class VoiceMorpherManager {
|
|
public static let shared = VoiceMorpherManager()
|
|
|
|
public enum VoicePreset: Int, CaseIterable {
|
|
case disabled = 0
|
|
case anonymous = 1
|
|
case female = 2
|
|
case male = 3
|
|
case child = 4
|
|
case robot = 5
|
|
|
|
public func title(langIsRu: Bool) -> String {
|
|
switch self {
|
|
case .disabled:
|
|
return langIsRu ? "Выключено" : "Off"
|
|
case .anonymous:
|
|
return langIsRu ? "Аноним" : "Anonymous"
|
|
case .female:
|
|
return langIsRu ? "Женский" : "Female"
|
|
case .male:
|
|
return langIsRu ? "Мужской" : "Male"
|
|
case .child:
|
|
return langIsRu ? "Ребёнок" : "Child"
|
|
case .robot:
|
|
return langIsRu ? "Робот" : "Robot"
|
|
}
|
|
}
|
|
|
|
public func subtitle(langIsRu: Bool) -> String {
|
|
switch self {
|
|
case .disabled:
|
|
return langIsRu ? "Без изменений" : "Unchanged"
|
|
case .anonymous:
|
|
return langIsRu ? "Искажённый голос" : "Distorted voice"
|
|
case .female:
|
|
return langIsRu ? "Выше тон" : "Higher pitch"
|
|
case .male:
|
|
return langIsRu ? "Ниже тон" : "Lower pitch"
|
|
case .child:
|
|
return langIsRu ? "Детский тон" : "Child-like"
|
|
case .robot:
|
|
return langIsRu ? "Металлический эффект" : "Metallic effect"
|
|
}
|
|
}
|
|
}
|
|
|
|
private enum Keys {
|
|
static let isEnabled = "VoiceMorpher.isEnabled"
|
|
static let selectedPreset = "VoiceMorpher.selectedPreset"
|
|
}
|
|
|
|
private let defaults = UserDefaults.standard
|
|
|
|
public var isEnabled: Bool {
|
|
get { defaults.bool(forKey: Keys.isEnabled) }
|
|
set {
|
|
defaults.set(newValue, forKey: Keys.isEnabled)
|
|
notifyChanged()
|
|
}
|
|
}
|
|
|
|
public var selectedPresetId: Int {
|
|
get { defaults.integer(forKey: Keys.selectedPreset) }
|
|
set {
|
|
defaults.set(newValue, forKey: Keys.selectedPreset)
|
|
notifyChanged()
|
|
}
|
|
}
|
|
|
|
public var selectedPreset: VoicePreset {
|
|
VoicePreset(rawValue: selectedPresetId) ?? .disabled
|
|
}
|
|
|
|
public var effectivePreset: VoicePreset {
|
|
guard isEnabled else { return .disabled }
|
|
return selectedPreset
|
|
}
|
|
|
|
public static let settingsChangedNotification = Notification.Name("VoiceMorpherSettingsChanged")
|
|
|
|
private func notifyChanged() {
|
|
NotificationCenter.default.post(name: Self.settingsChangedNotification, object: nil)
|
|
}
|
|
|
|
private init() {}
|
|
}
|