Skip to content

Instantly share code, notes, and snippets.

@larryaasen
Created November 8, 2024 13:53
Show Gist options
  • Save larryaasen/3565b7ed6815817a968af7ca518373bc to your computer and use it in GitHub Desktop.
Save larryaasen/3565b7ed6815817a968af7ca518373bc to your computer and use it in GitHub Desktop.
Print the CoreAudio AudioFormatFlags set for a mFormatFlags value
/*
Example output:
AudioFormatFlags values:
kAudioFormatFlagIsFloat: 00000001
kAudioFormatFlagIsBigEndian: 00000002
kAudioFormatFlagIsSignedInteger: 00000004
kAudioFormatFlagIsPacked: 00000008
kAudioFormatFlagIsAlignedHigh: 00000010
kAudioFormatFlagIsNonInterleaved: 00000020
kAudioFormatFlagIsNonMixable: 00000040
kAudioFormatFlagsAreAllClear: 80000000
kLinearPCMFormatFlagIsFloat: 00000001
kLinearPCMFormatFlagIsBigEndian: 00000002
kLinearPCMFormatFlagIsSignedInteger: 00000004
kLinearPCMFormatFlagIsPacked: 00000008
kLinearPCMFormatFlagIsAlignedHigh: 00000010
kLinearPCMFormatFlagIsNonInterleaved: 00000020
kLinearPCMFormatFlagIsNonMixable: 00000040
kLinearPCMFormatFlagsSampleFractionShift: 00000007
kLinearPCMFormatFlagsSampleFractionMask: 00001F80
kLinearPCMFormatFlagsAreAllClear: 80000000
kAppleLosslessFormatFlag_16BitSourceData: 00000001
kAppleLosslessFormatFlag_20BitSourceData: 00000002
kAppleLosslessFormatFlag_24BitSourceData: 00000003
kAppleLosslessFormatFlag_32BitSourceData: 00000004
kAudioFormatFlagsNativeEndian: 00000000
kAudioFormatFlagsCanonical: 00000009
kAudioFormatFlagsAudioUnitCanonical: 00000029
kAudioFormatFlagsNativeFloatPacked: 00000009
AudioFormatFlags set: 0x(00000029)
kAudioFormatFlagIsFloat
kAudioFormatFlagIsPacked
kAudioFormatFlagIsNonInterleaved
kLinearPCMFormatFlagIsFloat
kLinearPCMFormatFlagIsPacked
kLinearPCMFormatFlagIsNonInterleaved
kLinearPCMFormatFlagsSampleFractionShift
kAppleLosslessFormatFlag_16BitSourceData
kAppleLosslessFormatFlag_24BitSourceData
kAudioFormatFlagsCanonical
kAudioFormatFlagsAudioUnitCanonical
kAudioFormatFlagsNativeFloatPacked
*/
@available(*, deprecated)
func printAudioFormatFlags(_ formatFlags: UInt32) {
var flagsSet: [String] = []
print("AudioFormatFlags values:")
func flagName(_ formatFlags: UInt32, _ flag: UInt32, _ flagName: String) -> String {
print("\(flagName): \(String(format: "%08X", flag))")
return (formatFlags & flag != 0) ? flagName :""
}
flagsSet.append(flagName(formatFlags, kAudioFormatFlagIsFloat, "kAudioFormatFlagIsFloat"))
flagsSet.append(flagName(formatFlags, kAudioFormatFlagIsBigEndian, "kAudioFormatFlagIsBigEndian"))
flagsSet.append(flagName(formatFlags, kAudioFormatFlagIsSignedInteger, "kAudioFormatFlagIsSignedInteger"))
flagsSet.append(flagName(formatFlags, kAudioFormatFlagIsPacked, "kAudioFormatFlagIsPacked"))
flagsSet.append(flagName(formatFlags, kAudioFormatFlagIsAlignedHigh, "kAudioFormatFlagIsAlignedHigh"))
flagsSet.append(flagName(formatFlags, kAudioFormatFlagIsNonInterleaved, "kAudioFormatFlagIsNonInterleaved"))
flagsSet.append(flagName(formatFlags, kAudioFormatFlagIsNonMixable, "kAudioFormatFlagIsNonMixable"))
flagsSet.append(flagName(formatFlags, kAudioFormatFlagsAreAllClear, "kAudioFormatFlagsAreAllClear"))
flagsSet.append(flagName(formatFlags, kLinearPCMFormatFlagIsFloat, "kLinearPCMFormatFlagIsFloat"))
flagsSet.append(flagName(formatFlags, kLinearPCMFormatFlagIsBigEndian, "kLinearPCMFormatFlagIsBigEndian"))
flagsSet.append(flagName(formatFlags, kLinearPCMFormatFlagIsSignedInteger, "kLinearPCMFormatFlagIsSignedInteger"))
flagsSet.append(flagName(formatFlags, kLinearPCMFormatFlagIsPacked, "kLinearPCMFormatFlagIsPacked"))
flagsSet.append(flagName(formatFlags, kLinearPCMFormatFlagIsAlignedHigh, "kLinearPCMFormatFlagIsAlignedHigh"))
flagsSet.append(flagName(formatFlags, kLinearPCMFormatFlagIsNonInterleaved, "kLinearPCMFormatFlagIsNonInterleaved"))
flagsSet.append(flagName(formatFlags, kLinearPCMFormatFlagIsNonMixable, "kLinearPCMFormatFlagIsNonMixable"))
flagsSet.append(flagName(formatFlags, kLinearPCMFormatFlagsSampleFractionShift, "kLinearPCMFormatFlagsSampleFractionShift"))
flagsSet.append(flagName(formatFlags, kLinearPCMFormatFlagsSampleFractionMask, "kLinearPCMFormatFlagsSampleFractionMask"))
flagsSet.append(flagName(formatFlags, kLinearPCMFormatFlagsAreAllClear, "kLinearPCMFormatFlagsAreAllClear"))
flagsSet.append(flagName(formatFlags, kAppleLosslessFormatFlag_16BitSourceData, "kAppleLosslessFormatFlag_16BitSourceData"))
flagsSet.append(flagName(formatFlags, kAppleLosslessFormatFlag_20BitSourceData, "kAppleLosslessFormatFlag_20BitSourceData"))
flagsSet.append(flagName(formatFlags, kAppleLosslessFormatFlag_24BitSourceData, "kAppleLosslessFormatFlag_24BitSourceData"))
flagsSet.append(flagName(formatFlags, kAppleLosslessFormatFlag_32BitSourceData, "kAppleLosslessFormatFlag_32BitSourceData"))
flagsSet.append(flagName(formatFlags, kAudioFormatFlagsNativeEndian, "kAudioFormatFlagsNativeEndian"))
flagsSet.append(flagName(formatFlags, kAudioFormatFlagsCanonical, "kAudioFormatFlagsCanonical"))
flagsSet.append(flagName(formatFlags, kAudioFormatFlagsAudioUnitCanonical, "kAudioFormatFlagsAudioUnitCanonical"))
flagsSet.append(flagName(formatFlags, kAudioFormatFlagsNativeFloatPacked, "kAudioFormatFlagsNativeFloatPacked"))
print("")
if flagsSet.isEmpty {
print("No AudioFormatFlags set")
} else {
let flags = flagsSet.compactMap { $0.isEmpty ? nil : $0 }.joined(separator: "\n")
let ff = String(format: "%08X", formatFlags)
print("AudioFormatFlags set: 0x(\(ff))\n\(flags)")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment