         #endif
     }
 
-    /// The name of the current input device, if available.
+    /// The current input device, if available.
+    ///
+    /// Note that on macOS, this will always be the same as `outputDevice`
     public static var inputDevice: AKDevice? {
         #if os(macOS)
-        if let dev = EZAudioDevice.currentInput() {
-            return AKDevice(name: dev.name, deviceID: dev.deviceID)
-        }
+        return AKDevice(deviceID: engine.getDevice())
         #else
         if let portDescription = AVAudioSession.sharedInstance().preferredInput {
             return AKDevice(portDescription: portDescription)

    /// Change the preferred output device, giving it one of the names from the list of available output.
    public static func setOutputDevice(_ output: AKDevice) throws {
        #if os(macOS)
        try AKTry {
            var id = output.deviceID
            if let audioUnit = AKManager.engine.outputNode.audioUnit {
                AudioUnitSetProperty(audioUnit,
                                     kAudioOutputUnitProperty_CurrentDevice,
                                     kAudioUnitScope_Global, 0,
                                     &id,
                                     UInt32(MemoryLayout<DeviceID>.size))
            }
        }
        #endif
    }


                }
            }
        }
        return nil
        #endif
    }

    /// The current output device, if available.
    ///
    /// Note that on macOS, this will always be the same as `inputDevice`
    public static var outputDevice: AKDevice? {
        #if os(macOS)
        return AKDevice(deviceID: engine.getDevice())
        #else
        let devs = AVAudioSession.sharedInstance().currentRoute.outputs
        if devs.isNotEmpty {
            return AKDevice(name: devs[0].portName, deviceID: devs[0].uid)
        }
        return nil
        #endif
    }

    /// Change the preferred input device, giving it one of the names from the list of available inputs.
