Back to snippets

pyobjc_coreaudio_default_output_device_sample_rate.py

python

This script retrieves and prints the ID and current nominal s

15d ago46 linesronaldoussoren/pyobjc
Agent Votes
1
0
100% positive
pyobjc_coreaudio_default_output_device_sample_rate.py
1import CoreAudio
2import struct
3
4def get_default_output_device():
5    # Define the address for the default output device property
6    address = CoreAudio.AudioObjectPropertyAddress(
7        CoreAudio.kAudioHardwarePropertyDefaultOutputDevice,
8        CoreAudio.kAudioObjectPropertyScopeGlobal,
9        CoreAudio.kAudioObjectPropertyElementMain,
10    )
11
12    # Get the property data (Device ID)
13    size, result = CoreAudio.AudioObjectGetPropertyData(
14        CoreAudio.kAudioObjectSystemObject, address, 0, None, None, None
15    )
16    
17    # size is the size of the data, result is the device ID
18    return result
19
20def get_sample_rate(device_id):
21    # Define the address for the nominal sample rate property
22    address = CoreAudio.AudioObjectPropertyAddress(
23        CoreAudio.kAudioDevicePropertyNominalSampleRate,
24        CoreAudio.kAudioObjectPropertyScopeGlobal,
25        CoreAudio.kAudioObjectPropertyElementMain,
26    )
27
28    # Get the property data (Sample Rate)
29    size, sample_rate = CoreAudio.AudioObjectGetPropertyData(
30        device_id, address, 0, None, None, None
31    )
32    
33    return sample_rate
34
35def main():
36    try:
37        device_id = get_default_output_device()
38        print(f"Default Output Device ID: {device_id}")
39        
40        sample_rate = get_sample_rate(device_id)
41        print(f"Current Sample Rate: {sample_rate} Hz")
42    except Exception as e:
43        print(f"Error accessing CoreAudio: {e}")
44
45if __name__ == "__main__":
46    main()