<!--
{
  "availability" : [
    "macCatalyst: -",
    "macOS: 15.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "CoreAudio",
  "identifier" : "/documentation/CoreAudio/AudioHardwareDevice/start(IOProcID:)",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "Core Audio"
    ],
    "preciseIdentifier" : "s:9CoreAudio0B14HardwareDeviceC5start8IOProcIDys5Int32Vs6UInt32V_SPySo0B9TimeStampVGSPySo0B10BufferListVGALSpyANGALSvSgtXCSg_tKF"
  },
  "title" : "start(IOProcID:)"
}
-->

# start(IOProcID:)

Starts IO for the given AudioDeviceIOProcID.

```
func start(IOProcID: AudioDeviceIOProcID? = nil) throws
```

## Parameters

`IOProcID`

The AudioDeviceIOProcID to start. Note that this can be nil, which
starts the hardware regardless of whether or not there are any IOProcs registered. This is
necessary if any of the device’s timing services are to be used. A balancing call to
stop with a nil IOProcID is required to stop the hardware.

## Discussion

IOProcIDs should be written in C to ensure realtime safety.
IOProcIDs can be registered on the device with AudioDeviceCreateIOProcID or
AudioDeviceCreateIOProcIDWithBlock from AudioHardware.h.

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)