
Um player do Spotify Connect escrito na segmentação do CPP, mas não se limita a dispositivos incorporados (ESP32).
Atualmente no estado de desenvolvimento rápido.
Apenas para ser usado com contas Premium Spotify
Resumo:
libasound e libavahi-compat-libdnssd Este projeto utiliza submódulos, verifique se você está clonando com o sinalizador --recursive ou use git submodule update --init --recursive .
O MBEDTLS agora é a única opção, para que você possa obtê-la a partir daí e reconstruí-lo ou instalá-lo em todo o sistema usando seu gerenciador de pacotes favorito. Veja abaixo como usar uma versão local.
Esta biblioteca usa o NanopB para gerar arquivos C a partir de definições do Protobuf. O próprio NanopB é incluído por meio de submódulos, mas exige que algumas bibliotecas python externas executem os geradores.
Para instalá -los, você pode usar o PIP:
$ sudo pip3 install protobuf grpcio-tools(Você provavelmente deveria usar o Venv, mas eu não sou desenvolvedor de Python)
Para instalar a Avahi e as dependências do Linux, você pode usar:
$ sudo apt-get install libavahi-compat-libdnssd-dev libasound2-devO alvo da CLI é usado principalmente para fins de teste e desenvolvimento, a partir de agora ele possui os mesmos recursos que o alvo ESP32.
Como o mbedTLS agora é usado em vez do OpenSSL, você precisa instalá -lo ou seu sistema ou ter uma compilação local. Se você tiver uma instalação em todo o sistema de mbedtls, ignore o que está abaixo
Para usar uma compilação local, você deve especificar o bell_external_mbedtls e potencialmente mbedtls_release. O primeiro aponta para o subdir "./cmake" do diretório de compilação do MBEDTLS, o segundo define opcionalmente o nome da compilação mbedTLS (é por padrão definido para 'liberação' para Windows e 'noconfig' para outros).
Consulte a execução da CLI para obter informações sobre como executar o CSPOT em um computador de mesa.
# navigate to the targets/cli directory
$ cd targets/cli
# create a build directory and navigate to it
$ mkdir -p build && cd build
# use cmake to generate build files, and select an audio sink
$ cmake .. -DUSE_PORTAUDIO=ON [-DBELL_EXTERNAL_MBEDTLS =< mbedtls_build_dir > /cmake > ] [-DMBEDTLS_RELEASE =< release_name > ]
# compile
$ make # navigate to the targets/cli directory
$ cd targets/cli
# create a build directory and navigate to it
$ mkdir -p build && cd build
# use cmake to generate build files, and select an audio sink
$ cmake .. -A Win32 | x64 -DUSE_PORTAUDIO=ON [-DBELL_EXTERNAL_MBEDTLS =< mbedtls_build_dir > /cmake > ] [-DMBEDTLS_RELEASE =< release_name > ] Vá para build e usar cspotcli.sln no VisualStudio ou use msbuild na linha de comando.
Observe que, por enquanto, apenas a construção do Win32 foi testada, não a versão X64. Sob alguns lançamentos do VS, o protobuf pode não ser reconstruído automaticamente, basta ir ao projeto "generate_proto_sources" e fazer um c^f7 em cada *.pb.rule
O alvo da CLI é usado principalmente para fins de teste e desenvolvimento, a partir de agora ele possui os mesmos recursos que o alvo ESP32.
# navigate to the targets/cli directory
$ cd targets/cli
# create a build directory and navigate to it
$ mkdir -p build && cd build
# use cmake to generate build files, and select an audio sink
$ cmake .. -DUSE_ALSA=ON
# compile
$ make Consulte a execução da CLI para obter informações sobre como executar o CSPOT em um computador de mesa.
O alvo ESP32 é construído usando a cadeia de ferramentas ESP-IDF
# Follow the instructions for setting up esp-idf for your operating system, up to `. ./export.sh` or equivalent
# esp-idf has a Python virtualenv, install nanopb's dependencies in it
$ pip3 install protobuf grpcio-tools
# update submodules after each code pull to avoid build errors
$ git submodule update --init --recursive
# navigate to the targets/esp32 directory
$ cd targets/esp32
# run once after pulling the repo
$ idf.py set-target esp32Configure o CSPOT de acordo com o seu hardware
# run visual config editor, when done press Q to save and exit
$ idf.py menuconfig Navegue até Example Connection Configuration e forneça detalhes de conexão WiFi

Navegue para a CSPOT Configuration , você pode configurar o nome do dispositivo, o dispositivo de saída e a qualidade do áudio.

Por padrão, a indicação de LED está desativada, mas você pode usar o GPIO padrão ou o endereçável LED para indicar o status de corrente do CSPOT. Ele usará diferentes padrões de piscar (e cores em caso de LEDs endereçáveis) para indicar conectividade Wi -Fi e presença do cliente do Spotify conectado.
Construa e carregue o firmware
# compile
$ idf.py build
# upload
$ idf.py flashO ESP32 reiniciará e começará a executar o CSPOT. Você pode monitorá -lo usando um console serial.
Opcionalmente executa como um comando único
# compile, flash and attach monitor
$ idf.py build flash monitorDepois de construir o aplicativo, a única coisa que você precisa fazer é executá -lo através da CLI.
$ ./cspotcli
Se você o executar sem parâmetro, ele usará o Zeroconf para se anunciar. Isso significa que, até que pelo menos um aplicativo Spotify Connect local o tenha descoberto e conectado, ele não será registrado para o Spotify Servers. Como conseqüência, o webapi do Spotify não poderá vê -lo. Se você deseja que o jogador seja registrado na inicialização, é necessário usar o nome de usuário/senha o tempo todo ou pelo menos uma vez para criar um arquivo de credenciais e reutilizar esse arquivo. Execute -o com -u/-p/-c uma vez e depois execute -o apenas com -c. Veja a ajuda da linha do comando.
Agora abra um aplicativo Spotify real e você deve ver um dispositivo CSPOT na sua rede local. Use -o para reproduzir áudio.
cspot deve ser usado como uma biblioteca C ++ leve para reproduzir o Spotify Music e receber notificações de controle do Spotify Connect. Ele expõe uma interface para iniciar a comunicação com os servidores Spotify e espera que o programa de incorporação forneça uma interface para reproduzir amostras de áudio bruto ( AudioSink ).
Você pode visualizar o programa cspot-cli para obter uma referência sobre como incluir o CSPOT no seu programa. Ele fornece algumas pias de áudio para várias plataformas e usos:
ALSAAudioSink - Linux, requer libasoundPortAudioSink - MacOS (Portaudio também suporta mais plataformas, mas atualmente o usamos apenas no macOS), requer a biblioteca PortaudioNamedPipeAudioSink - Todas as plataformas, grava em um arquivo de arquivo/FIFO chamado outputFifo , que pode ser reproduzido posteriormente pelo FFMPEG. Usado principalmente para testes e desenvolvimento.Adicional Os seguintes pia de áudio são implementados para o alvo ESP32:
ES9018AudioSink - fornece reprodução por meio de um DAC ES9018 conectado ao ESP32AC101AudioSink - fornece reprodução através do DAC AC101 usado em placas Audiokit baratas do Audiokit, comumente encontradas no AliExpress.PCM5102AudioSink - fornece reprodução por meio de um PCM5102 DAC conectado ao ESP32, comumente encontrado na forma de pequenos módulos roxos em vários varejistas on -line. A fiação pode ser configurada na pia e padrão para: Você também pode adicionar suporte facilmente ao seu próprio DAC de escolha, implementando seu próprio pia de áudio. Cada novo pia de áudio deve implementar o método void feedPCMFrames(std::vector<uint8_t> &data) , que deve aceitar dados de áudio estéreo PCM a 44100 Hz e 16 bits por amostra. Observe que a pia deve de alguma forma buffer os dados, porque reproduzi -lo pode resultar em áudio agitado.
Uma pia de áudio pode opcionalmente implementar o método void volumeChanged(uint16_t volume) , que é chamado toda vez que o usuário altera o volume (por exemplo, via Spotify Connect). Se um pia de áudio implementar, ele deve definir softwareVolumeControl como false em seu construtor para informar o CSPOT para desativar o ajuste do volume de software. A implementação adequada do controle de volume externo (por exemplo, por hardware dedicado) resultará em uma melhor qualidade de reprodução, pois toda a faixa dinâmica é usada para codificar as amostras.
O programa de incorporação também deve lidar com o cache dos dados de autenticação, para que o usuário não precise autenticar através da rede local (Zeroconf) cada vez que o CSPOT for iniciado. Para referência sobre como fazê-lo, consulte o destino cspot-cli (ele armazena os dados em authBlob.json ).
A conexão com os servidores Spotify para reproduzir músicas e receber informações de controle é bastante complexa. Antes de tudo, um endereço de ponto de acesso deve ser buscado no Spotify ( ApResolve busca a lista de http://apresolve.spotify.com/). Em seguida, deve ser estabelecida um ponto de PlainConnection com o ponto de acesso do Spotify selecionado. Em seguida, é atualizado para uma ShannonConnection criptografada.