Anterior: , Acima: Configuração do sistema   [Conteúdo][Índice]


3.13 Servidor de música com áudio Bluetooth

MPD, o Music Player Daemon, é um aplicativo flexível do lado do servidor para tocar música. Programas clientes em diferentes máquinas na rede — um telefone celular, um laptop, uma estação de trabalho de mesa — podem se conectar a ele para controlar a reprodução de arquivos de áudio da sua coleção de música local. O MPD decodifica os arquivos de áudio e os reproduz em uma ou muitas saídas.

Por padrão, o MPD reproduzirá no dispositivo de áudio padrão. No exemplo abaixo, tornamos as coisas um pouco mais interessantes configurando um servidor de música headless. Não haverá interface gráfica de usuário, nenhum daemon Pulseaudio e nenhuma saída de áudio local. Em vez disso, configuraremos o MPD com duas saídas: um alto-falante bluetooth e um servidor web para servir fluxos de áudio para qualquer reprodutor de mídia de streaming.

O Bluetooth costuma ser bastante frustrante de configurar. Você terá que parear seu dispositivo Bluetooth e certificar-se de que o dispositivo seja conectado automaticamente assim que for ligado. O serviço do sistema Bluetooth retornado pelo procedimento bluetooth-service fornece a infraestrutura necessária para configurar isso.

Reconfigure seu sistema com pelo menos os seguintes serviços e pacotes:

(operating-system
  ;; …
  (packages (cons* bluez bluez-alsa
                   %base-packages))
  (services
   ;; …
   (dbus-service #:services (list bluez-alsa))
   (bluetooth-service #:auto-enable? #t)))

Inicie o serviço bluetooth e então use bluetoothctl para escanear dispositivos Bluetooth. Tente identificar seu alto-falante Bluetooth e escolher seu ID de dispositivo na lista resultante de dispositivos que é indubitavelmente dominada por uma desconcertante miscelânea de engenhocas de automação residencial de seus vizinhos. Isso só precisa ser feito uma vez:

$ bluetoothctl 
[NEW] Controller 00:11:22:33:95:7F BlueZ 5.40 [default]

[bluetooth]# power on
[bluetooth]# Changing power on succeeded

[bluetooth]# agent on
[bluetooth]# Agent registered

[bluetooth]# default-agent
[bluetooth]# Default agent request successful

[bluetooth]# scan on
[bluetooth]# Discovery started
[CHG] Controller 00:11:22:33:95:7F Discovering: yes
[NEW] Device AA:BB:CC:A4:AA:CD My Bluetooth Speaker
[NEW] Device 44:44:FF:2A:20:DC My Neighbor's TV
…

[bluetooth]# pair AA:BB:CC:A4:AA:CD
Attempting to pair with AA:BB:CC:A4:AA:CD
[CHG] Device AA:BB:CC:A4:AA:CD Connected: yes

[Meu alto-falante Bluetooth]# [CHG] Device AA:BB:CC:A4:AA:CD UUIDs: 0000110b-0000-1000-8000-00xxxxxxxxxx
[CHG] Device AA:BB:CC:A4:AA:CD UUIDs: 0000110c-0000-1000-8000-00xxxxxxxxxx
[CHG] Device AA:BB:CC:A4:AA:CD UUIDs: 0000110e-0000-1000-8000-00xxxxxxxxxx
[CHG] Device AA:BB:CC:A4:AA:CD Paired: yes
Pairing successful

[CHG] Device AA:BB:CC:A4:AA:CD Connected: no

[bluetooth]# 
[bluetooth]# trust AA:BB:CC:A4:AA:CD
[bluetooth]# [CHG] Device AA:BB:CC:A4:AA:CD Trusted: yes
Changing AA:BB:CC:A4:AA:CD trust succeeded

[bluetooth]# 
[bluetooth]# connect AA:BB:CC:A4:AA:CD
Attempting to connect to AA:BB:CC:A4:AA:CD
[bluetooth]# [CHG] Device AA:BB:CC:A4:AA:CD RSSI: -63
[CHG] Device AA:BB:CC:A4:AA:CD Connected: yes
Connection successful

[My Bluetooth Speaker]# scan off
[CHG] Device AA:BB:CC:A4:AA:CD RSSI is nil
Discovery stopped
[CHG] Controller 00:11:22:33:95:7F Discovering: no

Parabéns, agora você pode se conectar automaticamente ao seu alto-falante Bluetooth!

Agora é hora de configurar o ALSA para usar o módulo Bluetooth bluealsa, para que você possa definir um dispositivo ALSA pcm correspondente ao seu alto-falante Bluetooth. Para um servidor headless, usar bluealsa com um dispositivo Bluetooth fixo é provavelmente mais simples do que configurar o Pulseaudio e seu comportamento de troca de fluxo. Configuramos o ALSA criando um alsa-configuration personalizado para o alsa-service-type. A configuração declarará um tipo pcm bluealsa do módulo bluealsa fornecido pelo pacote bluez-alsa e, em seguida, definirá um dispositivo pcm desse tipo para seu alto-falante Bluetooth.

Tudo o que resta então é fazer o MPD enviar dados de áudio para este dispositivo ALSA. Também adicionamos uma saída MPD secundária que torna os arquivos de áudio atualmente reproduzidos disponíveis como um fluxo por meio de um servidor web na porta 8080. Quando habilitado, um dispositivo na rede pode ouvir o fluxo de áudio conectando qualquer reprodutor de mídia capaz ao servidor HTTP na porta 8080, independentemente do status do alto-falante Bluetooth.

O que se segue é o esboço de uma declaração operating-system que deve realizar as tarefas mencionadas acima:

(use-modules (gnu))
(use-service-modules audio dbus sound #;… etc)
(use-package-modules audio linux #;… etc)
(operating-system
  ;; …
  (packages (cons* bluez bluez-alsa
                   %base-packages))
  (services
   ;; …
   (service mpd-service-type
            (mpd-configuration
             (user "your-username")
             (music-dir "/path/to/your/music")
             (address "192.168.178.20")
             (outputs (list (mpd-output
                             (type "alsa")
                             (name "MPD")
                             (extra-options
                              ;; Use o mesmo nome que no ALSA
                              ;; configuração abaixo.
                              '((device . "pcm.btspeaker"))))
                            (mpd-output
                             (type "httpd")
                             (name "streaming")
                             (enabled? #false)
                             (always-on? #true)
                             (tags? #true)
                             (mixer-type 'null)
                             (extra-options
                              '((encoder . "vorbis")
                                (port    . "8080")
                                (bind-to-address . "192.168.178.20")
                                (max-clients . "0") ;no limit
                                (quality . "5.0")
                                (format  . "44100:16:1"))))))))
   (dbus-service #:services (list bluez-alsa))
   (bluetooth-service #:auto-enable? #t)
   (service alsa-service-type
            (alsa-configuration
             (pulseaudio? #false) ;nós não precisamos disso
             (extra-options
              #~(string-append "\
# Declarar o tipo de dispositivo de áudio Bluetooth \"bluealsa\" do módulo bluealsa
pcm_type.bluealsa {
    lib \""
#$(file-append bluez-alsa "/lib/alsa-lib/libasound_module_pcm_bluealsa.so") "\"
}

# Declarar tipo de dispositivo de controle \"bluealsa\" do mesmo módulo
ctl_type.bluealsa {
    lib \""
#$(file-append bluez-alsa "/lib/alsa-lib/libasound_module_ctl_bluealsa.so") "\"
}

# Defina o dispositivo de áudio Bluetooth real.
pcm.btspeaker {
    type bluealsa
    device \"AA:BB:CC:A4:AA:CD\" # identificador de dispositivo exclusivo
    profile \"a2dp\"
}

# Defina um controlador associado.
ctl.btspeaker {
    type bluealsa
}
"))))))

Aproveite a música com o cliente MPD de sua escolha ou um media player capaz de transmitir via HTTP!


Anterior: Configurando NGINX com Lua, Acima: Configuração do sistema   [Conteúdo][Índice]