Anterior: Configurando NGINX com Lua, Acima: Configuração do sistema [Conteúdo][Índice]
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]