
CPPターゲティングで記述されたSpotify Connectプレーヤーですが、組み込みデバイス(ESP32)に限定されません。
現在、急速な発展の状態にあります。
Premium Spotifyアカウントでのみ使用されます
まとめ:
libasoundおよびlibavahi-compat-libdnssdこのプロジェクトはサブモジュールを利用しています。 --recursive Flagを使用しているか、 git submodule update --init --recursiveを使用していることを確認してください。
Mbedtlsが唯一のオプションになるので、そこからそれを取得して再構築するか、お気に入りのパッケージマネージャーを使用してシステム全体にインストールすることができます。以下のローカルバージョンの使用方法を参照してください。
このライブラリは、nanopbを使用して、protobuf定義からCファイルを生成します。 NANOPB自体はサブモジュールを介して含まれていますが、ジェネレーターを実行するにはいくつかの外部Pythonライブラリが必要です。
それらをインストールするには、PIPを使用できます。
$ sudo pip3 install protobuf grpcio-tools(おそらくVenvを使用する必要がありますが、私はPython開発者ではありません)
LinuxにAvahiおよびAsound依存関係をインストールするには、使用できます。
$ sudo apt-get install libavahi-compat-libdnssd-dev libasound2-devCLIターゲットは、主にテストと開発の目的で使用されています。現在、ESP32ターゲットと同じ機能があります。
MBEDTLSがOpenSSLの代わりに使用されるようになるので、それまたはシステムをインストールするか、ローカルビルドを持っている必要があります。 MBEDTLSのシステム全体のインストールがある場合は、以下を無視してください
ローカルビルドを使用するには、bell_external_mbedtlsと潜在的にmbedtls_releaseを指定する必要があります。最初の1つは、MBEDTLSのビルドディレクトリの「./Cmake」サブディールを指しています。2番目のオプションは、MBEDTLSビルドの名前をオプションで定義します(デフォルトでは、Windowsの「リリース」に設定され、他の人は「Noconfig」を「リリース」します)。
デスクトップコンピューターでCSPOTを実行する方法については、CLIの実行を参照してください。
# 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 > ] VisualStudioの下でcspotcli.sln buildて使用するか、コマンドラインのmsbuildを使用します。
とりあえず、X64バージョンではなく、Win32ビルドのみがテストされていることに注意してください。一部のVSリリースでは、プロトブフは自動的に再構築されない場合があります。プロジェクト「Generate_Proto_Sources」に移動し、各*.pb.ruleでC^f7を実行します
CLIターゲットは、主にテストと開発の目的で使用されています。現在、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 デスクトップコンピューターでCSPOTを実行する方法については、CLIの実行を参照してください。
ESP32ターゲットは、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 esp32ハードウェアに従ってCSPOTを構成します
# run visual config editor, when done press Q to save and exit
$ idf.py menuconfig Example Connection Configurationに移動し、WiFi接続の詳細を提供します

CSPOT Configurationに移動すると、デバイス名、出力デバイス、オーディオ品質を構成できます。

デフォルトでは、LED表示は無効になっていますが、標準GPIOまたはアドレス可能なLEDを使用して、CSPOT電流ステータスを示すことができます。さまざまな点滅パターン(およびアドレス指定可能なLEDの場合の色)を使用して、接続されたSpotifyクライアントのWiFi接続とプレゼンスを示します。
ファームウェアを構築してアップロードします
# compile
$ idf.py build
# upload
$ idf.py flashESP32は再起動してCSPOTの実行を開始します。シリアルコンソールを使用して監視できます。
オプションで単一のコマンドとして実行されます
# compile, flash and attach monitor
$ idf.py build flash monitorアプリを構築した後、あなたがする必要がある唯一のことは、CLIを通してそれを実行することです。
$ ./cspotcli
パラメーターなしで実行すると、Zeroconfを使用して自分自身を宣伝します。これは、少なくとも1つのローカルSpotify Connectアプリケーションが発見および接続されるまで、Spotifyサーバーに登録されないことを意味します。結果として、SpotifyのWebAPIはそれを見ることができません。プレーヤーを起動時に登録したい場合は、常にユーザー名/パスワードを使用するか、少なくとも1回は資格情報ファイルを作成してからそのファイルを再利用する必要があります。 -u/-p/-cで1回実行してから、-cのみで実行します。コマンドのラインヘルプを参照してください。
実際のSpotifyアプリを開くと、ローカルネットワークにCSPOTデバイスが表示されます。それを使用してオーディオを再生します。
cspot 、Spotify ConnectからBack Spotify Musicを再生し、コントロール通知を受信するための軽量C ++ライブラリとして使用することを目的としています。 Spotifyサーバーとの通信を開始するためのインターフェイスを公開し、埋め込みプログラムがRAWオーディオサンプル( AudioSink )を再生するためのインターフェイスを提供することを期待しています。
プログラムにCSPOTを含める方法に関するリファレンスについては、 cspot-cliプログラムを表示できます。さまざまなプラットフォームと使用にいくつかのオーディオシンクを提供します。
ALSAAudioSink -linux、 libasoundが必要ですPortAudioSink -Macos(Portaudioはより多くのプラットフォームもサポートしていますが、現在はMacOSでのみ使用しています)、Portaudio Libraryが必要ですNamedPipeAudioSinkすべてのプラットフォームは、FFMPEGが後で再生できるoutputFifoと呼ばれるファイル/FIFOパイプに書き込みます。主にテストと開発に使用されます。次のオーディオシンクは、ESP32ターゲットに実装されています。
ES9018AudioSink -ESP32に接続されたES9018 DACを介して再生を提供しますAC101AudioSink -Aliexpressで一般的に見られる安価なESP32 A1S AudioKitボードで使用されるAC101 DACを介して再生を提供します。PCM5102AudioSink ESP32に接続されたPCM5102 DACを介して再生を提供します。配線はシンクで構成でき、デフォルトは次のとおりです。また、独自のオーディオシンクを実装することで、自分のDACのサポートを簡単に追加することもできます。新しいオーディオシンクごとに、サンプルごとに44100 Hzおよび16ビットでステレオPCMオーディオデータを受け入れるはずvoid feedPCMFrames(std::vector<uint8_t> &data)メソッドを実装する必要があります。シンクは何らかの形でデータをバッファする必要があることに注意してください。それを再生すると、オーディオが途切れになる可能性があるためです。
オーディオシンクは、ユーザーがボリュームを変更するたびに呼び出されるvoid volumeChanged(uint16_t volume)メソッドをオプションで実装できます(たとえば、Spotify Connectを介して)。オーディオシンクがそれを実装した場合、CONSRUCTORでsoftwareVolumeControl falseに設定して、CSPOTにソフトウェアボリュームの調整を無効にするように知らせます。すべてのダイナミックレンジを使用してサンプルをエンコードするため、外部ボリュームコントロールを適切に実装すると、すべてのダイナミックレンジが使用されるため、再生品質が向上します。
埋め込みプログラムは、CSPOTが開始されるたびにローカルネットワーク(ZeroCONF)を介してユーザーが認証する必要がないように、認証データのキャッシュも処理する必要があります。それを行う方法についての参照についてはcspot-cliターゲットを参照してください( authBlob.jsonにデータを保存します)。
Spotifyサーバーとの接続は、音楽を再生し、制御情報を受信することは非常に複雑です。まず、Access PointアドレスをSpotifyから取得する必要があります( ApResolve http://apresolve.spotify.com/からリストを取得します)。次に、選択したSpotifyアクセスポイントとのPlainConnectionを確立する必要があります。その後、暗号化されたShannonConnectionにアップグレードされます。