8 // Play samples provided may be from the source, in which case they will be timed
9 // or they may be generated by Shairport Sync, in which case they will not be timed.
11 // Typically these would be samples of silence, which may be dithered, sent during the lead-in to
12 // the start of the material, or inserted instead of a missing frame, or after a flush.
16 play_samples_are_untimed
= 0, // typically the samples are (possibly dithered) silence
17 play_samples_are_timed
, // timed and numbered.
21 double current_volume_dB
;
22 int32_t minimum_volume_dB
;
23 int32_t maximum_volume_dB
;
31 int (*init
)(int argc
, char **argv
);
35 int (*prepare
)(void); // looks and sets stuff in the config data structure
37 void (*start
)(int sample_rate
, int sample_format
);
40 int (*play
)(void *buf
, int samples
, int sample_type
, uint32_t timestamp
, uint64_t playtime
);
43 // may be null if no implemented
45 void); // if implemented, will return 0 if everything is okay, non-zero otherwise
47 // may be null if not implemented
50 // returns the delay before the next frame to be sent to the device would actually be audible.
51 // almost certainly wrong if the buffer is empty, so put silent buffers into it to make it busy.
52 // will change dynamically, so keep watching it. Implemented in ALSA only.
53 // returns a negative error code if there's a problem
54 int (*delay
)(long *the_delay
); // snd_pcm_sframes_t is a signed long
55 int (*stats
)(uint64_t *raw_measurement_time
, uint64_t *corrected_measurement_time
,
57 uint64_t *frames_sent_to_dac
); // use this to get the true rate of the DAC
59 // may be NULL, in which case soft volume is applied
60 void (*volume
)(double vol
);
62 // may be NULL, in which case soft volume parameters are used
63 void (*parameters
)(audio_parameters
*info
);
65 // may be NULL, in which case software muting is used.
66 // also, will return a 1 if it is actually using the mute facility, 0 otherwise
67 int (*mute
)(int do_mute
);
71 audio_output
*audio_get_output(const char *name
);
72 void audio_ls_outputs(void);
73 void parse_general_audio_options(void);