2
0
Эх сурвалжийг харах

settings(macOS): support changing sound backend

Also change default to CoreAudio.

Fixes #5125
osy 2 жил өмнө
parent
commit
34446b5676

+ 16 - 1
Configuration/UTMQemuConfiguration+Arguments.swift

@@ -397,12 +397,27 @@ import Foundation
         Bundle.main.url(forResource: "qemu", withExtension: nil)!
         Bundle.main.url(forResource: "qemu", withExtension: nil)!
     }
     }
     
     
+    private var soundBackend: UTMQEMUSoundBackend {
+        let value = UserDefaults.standard.integer(forKey: "QEMUSoundBackend")
+        if let backend = UTMQEMUSoundBackend(rawValue: value), backend != .qemuSoundBackendMax {
+            return backend
+        } else {
+            return .qemuSoundBackendDefault
+        }
+    }
+    
     private var useCoreAudioBackend: Bool {
     private var useCoreAudioBackend: Bool {
         #if os(iOS)
         #if os(iOS)
         return false
         return false
         #else
         #else
         // force CoreAudio backend for mac99 which only supports 44100 Hz
         // force CoreAudio backend for mac99 which only supports 44100 Hz
-        return sound.contains(where: { $0.hardware.rawValue == "screamer" })
+        if sound.contains(where: { $0.hardware.rawValue == "screamer" }) {
+            return true
+        }
+        if soundBackend == .qemuSoundBackendDefault || soundBackend == .qemuSoundBackendCoreAudio {
+            return true
+        }
+        return false
         #endif
         #endif
     }
     }
     
     

+ 8 - 0
Managers/UTMQemuSystem.h

@@ -24,6 +24,14 @@ typedef NS_ENUM(NSInteger, UTMQEMURendererBackend) {
     kQEMURendererBackendMax = 3,
     kQEMURendererBackendMax = 3,
 };
 };
 
 
+/// Specify the sound backend for this VM
+typedef NS_ENUM(NSInteger, UTMQEMUSoundBackend) {
+    kQEMUSoundBackendDefault = 0,
+    kQEMUSoundBackendSPICE = 1,
+    kQEMUSoundBackendCoreAudio = 2,
+    kQEMUSoundBackendMax = 3,
+};
+
 NS_ASSUME_NONNULL_BEGIN
 NS_ASSUME_NONNULL_BEGIN
 
 
 @interface UTMQemuSystem : UTMQemu
 @interface UTMQemuSystem : UTMQemu

+ 20 - 0
Platform/macOS/SettingsView.swift

@@ -29,6 +29,10 @@ struct SettingsView: View {
                 .tabItem {
                 .tabItem {
                     Label("Display", systemImage: "rectangle.on.rectangle")
                     Label("Display", systemImage: "rectangle.on.rectangle")
                 }
                 }
+            SoundSettingsView().padding()
+                .tabItem {
+                    Label("Sound", systemImage: "speaker.wave.2")
+                }
             InputSettingsView().padding()
             InputSettingsView().padding()
                 .tabItem {
                 .tabItem {
                     Label("Input", systemImage: "keyboard")
                     Label("Input", systemImage: "keyboard")
@@ -107,6 +111,22 @@ struct DisplaySettingsView: View {
     }
     }
 }
 }
 
 
+struct SoundSettingsView: View {
+    @AppStorage("QEMUSoundBackend") var qemuSoundBackend: UTMQEMUSoundBackend = .qemuSoundBackendDefault
+    
+    var body: some View {
+        Form {
+            Section(header: Text("QEMU Sound")) {
+                Picker("Sound Backend", selection: $qemuSoundBackend) {
+                    Text("Default").tag(UTMQEMUSoundBackend.qemuSoundBackendDefault)
+                    Text("SPICE with GStreamer").tag(UTMQEMUSoundBackend.qemuSoundBackendSPICE)
+                    Text("CoreAudio").tag(UTMQEMUSoundBackend.qemuSoundBackendCoreAudio)
+                }.help("By default, the best backend for the target will be used. If the selected backend is not available for any reason, an alternative will automatically be selected.")
+            }
+        }
+    }
+}
+
 struct InputSettingsView: View {
 struct InputSettingsView: View {
     @AppStorage("CtrlRightClick") var isCtrlRightClick = false
     @AppStorage("CtrlRightClick") var isCtrlRightClick = false
     @AppStorage("AlternativeCaptureKey") var isAlternativeCaptureKey = false
     @AppStorage("AlternativeCaptureKey") var isAlternativeCaptureKey = false