filahf / budgie-stream

Stream system output to your Sonos devices. Built with Electron, React and Express
https://budgiestream.netlify.app/
MIT License
53 stars 4 forks source link
electron express material-ui nodejs react sonos stream


Logo

Budgie Stream

Stream system output to your Sonos devices
Download »

Usage · Report Bug · Request Feature

GitHub All Releases GitHub issues GitHub

Table of Contents

About The Project

Technology

screenshot

The project is built using Electron/React/Express. The image above shows the simplified flow of audio data, from capture to playback on your Sonos device.

Capture

The project utilizes electrons desktopCapturer to capture raw audio. The stream of raw audio is captured in the format of 32 bit float.

Conversion

The server expects a stream of 16 bit signed integer. Hence the conversion before sending the stream to the server.

The stream is sent to the backend by IPC. Early versions of the software sent the stream via socket.io but the use of another package seemed redundant. I noticed no performance changes going from sockets to IPC.

Encode

The stream of 16 bit signed integers is encoded to mp3 with LAME. I had issues with the sample rate being inconsistent on different computers leading to a high/low pitched final result. To solve this I implemented an option to change the sample rate in the client.

Broadcast

The stream is now in the format of mp3 and ready for broadcast. The stream is linked to an endpoint served by express, the url of the endpoint is then sent by node-sonos to selected devices.

Built With

Dev Environment

To get a local copy up and running follow these simple steps.

Installation

  1. Clone the repo
    git clone https://github.com/filahf/budgie-stream.git
  2. Install NPM packages
    cd budgie-stream/
    yarn install
  3. Start
    yarn start

    Common Errors

    Node module was built with the wrong version Run electron rebuild
$(npm bin)/electron-rebuild

Or if you're on Windows:

.\node_modules\.bin\electron-rebuild.cmd

Usage

screenshot

  1. Download system corresponding package
  2. Install
  3. Make sure to allow Budgie Stream through the firewall
  4. Select devices and hit play!

Contributing

Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

License

Distributed under the MIT License. See LICENSE for more information.

Support

Buy Me A Coffee

Contact

Feel free to contact me if you have any questions.

Filip Åhfelt - filipahfelt.se

Project Link: https://github.com/filahf/budgie-stream