2020-05-27 00:30:43 +02:00
|
|
|
# Snapcast client for ESP32
|
2020-05-27 00:12:46 +02:00
|
|
|
|
2020-05-27 00:30:43 +02:00
|
|
|
### Synchronous Multiroom audio streaming client for [Snapcast](https://github.com/badaix/snapcast) ported to ESP32
|
2020-05-27 00:12:46 +02:00
|
|
|
|
2020-05-27 00:30:43 +02:00
|
|
|
## Feature list
|
|
|
|
|
- Opus decoding currently supported
|
|
|
|
|
- Wifi connection hardcoded in app
|
|
|
|
|
- Snapcast server address hardcoded
|
|
|
|
|
- Buffers up to 150 ms on Wroom modules
|
|
|
|
|
- Buffers more then enough on Wrover modules
|
2020-05-27 00:12:46 +02:00
|
|
|
|
|
|
|
|
|
2020-05-27 00:30:43 +02:00
|
|
|
## Build
|
|
|
|
|
|
|
|
|
|
Clone this repo:
|
|
|
|
|
|
2020-05-27 16:45:05 +02:00
|
|
|
git clone https://github.com/jorgenkraghjakobsen/snapclint
|
2020-05-27 00:30:43 +02:00
|
|
|
|
|
|
|
|
Update third party code:
|
|
|
|
|
|
2020-05-27 16:49:06 +02:00
|
|
|
git submodule update --init
|
2020-05-27 00:12:46 +02:00
|
|
|
|
2020-05-27 00:30:43 +02:00
|
|
|
Configure to match your setup:
|
2020-05-27 00:12:46 +02:00
|
|
|
- Wifi network name and password
|
|
|
|
|
- Audio coded setup
|
2020-05-27 00:30:43 +02:00
|
|
|
|
|
|
|
|
Build, compile and flash:
|
|
|
|
|
|
2020-05-27 16:49:06 +02:00
|
|
|
idf.py build flash monitor
|
2020-05-27 00:12:46 +02:00
|
|
|
|
2020-05-27 00:30:43 +02:00
|
|
|
## Test
|
2020-05-27 00:12:46 +02:00
|
|
|
Setup a snapcast server on your network
|
2020-05-27 00:30:43 +02:00
|
|
|
|
2020-05-27 00:12:46 +02:00
|
|
|
On a linux box:
|
2020-05-27 00:30:43 +02:00
|
|
|
|
2020-05-27 00:12:46 +02:00
|
|
|
Clone snapcast build and start the server
|
2020-05-27 00:30:43 +02:00
|
|
|
|
2020-05-27 16:45:05 +02:00
|
|
|
./snapserver
|
2020-05-27 00:30:43 +02:00
|
|
|
|
2020-05-27 00:12:46 +02:00
|
|
|
Pipe some audio to the snapcast server fifo
|
2020-05-27 00:30:43 +02:00
|
|
|
|
2020-05-27 16:45:05 +02:00
|
|
|
mplayer http://ice1.somafm.com/secretagent-128-aac -ao pcm:file=/tmp/snapfifo -af format=s16LE -srate 48000
|
2020-05-27 00:30:43 +02:00
|
|
|
|
2020-05-27 00:12:46 +02:00
|
|
|
Test the server config on other knowen platform
|
2020-05-27 00:30:43 +02:00
|
|
|
|
2020-05-27 16:45:05 +02:00
|
|
|
./snapclient from the snapcast repo
|
2020-05-27 00:30:43 +02:00
|
|
|
|
2020-05-27 00:12:46 +02:00
|
|
|
Android : snapclient from the app play store
|
|
|
|
|
|
|
|
|
|
|
2020-05-27 16:49:06 +02:00
|
|
|
## Task list
|
|
|
|
|
- [ ] Fix to alinge with above
|
|
|
|
|
* kconfig
|
|
|
|
|
* add codec description
|
2020-05-27 00:12:46 +02:00
|
|
|
- [ ] Integrate ESP wifi provision
|
2020-05-31 01:04:27 +02:00
|
|
|
- [ok] Find and connect to Avahi broadcasted Snapcast server name
|
2020-05-27 00:12:46 +02:00
|
|
|
- [ ] Add a client command interface layer like volume/mute control
|
|
|
|
|
- [ ] Build a ESP-ADF branch
|
2020-05-31 01:04:27 +02:00
|
|
|
|
|
|
|
|
## Minor task
|
|
|
|
|
- Propergate mute/unute from server message to DSP backend mute control.
|
|
|
|
|
- soft mute - play sample in buffer with decresing volume
|
|
|
|
|
- hard mute - pass on zero at the DSP hackend
|
|
|
|
|
- Startup: do not start parsing on samples to codec before sample ring buffer hits requested buffer size.
|