sp_rv
sp_generate_signature (sp_audio_info_t * song_audio_format,
sp_signature_t * signature,
guint (*get_pcm_data) (guint sample_offset,
guint num_samples,
guchar * output_buf,
void *user_data),
void *user_data)


C's insane type declarator syntax can usually be sanitised by introducing typedefs everywhere it gets hairy:

typedef guint (*get_pcm_data_fn) (guint sample_offset,
guint num_samples,
guchar * output_buf,
void *user_data);

sp_rv
sp_generate_signature (sp_audio_info_t * song_audio_format,
sp_signature_t * signature,
get_pcm_data_fn fn,
void *user_data)

but even so the typedef itself remains a bit icky.

Peter