Uma conexão Bluetooth tem latência significativa em comparação com fones de ouvido ou alto-falantes com fio simples. Além disso, a latência da conexão pode variar, dependendo das propriedades do receptor bluetooth e talvez até da intensidade do sinal de rádio à medida que o usuário se movimenta.
A interface entre um aplicativo e o PulseAudio pode ser tão simples quanto "aqui estão alguns dados de áudio do PCM; reproduzi-lo". Mas também pode ser mais complicado; algo como "Aqui estão alguns dados de áudio PCM, jogue isso e me diga a cada 50 ms até onde você chegou, para que eu possa dizer a você para pular para frente se parecer que você está caindo fora da sincronização labial com o fluxo de vídeo Eu estou jogando. Ah, e você também precisará refazê-lo, já que os dados têm uma taxa de amostragem que seu hardware não suportará diretamente. " No último caso, o PulseAudio precisa ser capaz de fornecer ao aplicativo algum feedback do dispositivo de áudio para determinar corretamente até que ponto os dados de áudio foram realmente reproduzidos a qualquer momento.
Como resultado, faz sentido que o PulseAudio esteja bastante envolvido no processamento de áudio Bluetooth: quanto mais camadas intervenientes houver, mais possibilidades os dados serão armazenados em buffer sem manter um feedback preciso, causando perda de sincronia.
Na verdade, antes da existência do PulseAudio, costumava haver um backend do ALSA para áudio Bluetooth, mas ele estava obsoleto. Eu acho que o problema era que as interfaces da ALSA naquela época eram projetadas principalmente para placas de som tradicionais, e lidar com uma latência de áudio potencialmente variável de Bluetooth era difícil.
As interfaces do PulseAudio foram projetadas desde o início para lidar com vários dispositivos de som e até mesmo com a troca de fluxos de áudio entre eles enquanto o fluxo está sendo reproduzido, portanto, parece-me que também possui um conceito bastante avançado de latência de áudio.
Sim, poderia ter sido implementado no BlueZ em vez de ser um módulo PulseAudio; entretanto, o BlueZ teria que apresentar uma interface de áudio para os aplicativos. E como o PulseAudio quer manipular "todos" o áudio em um sistema (para poder transferir o áudio que você está reproduzindo atualmente dos alto-falantes para o Bluetooth ou vice-versa on-the-fly), ele precisaria interagir com o PulseAudio de alguma forma de qualquer maneira.