{"id":13392769,"url":"https://github.com/geekuillaume/soundsync","last_synced_at":"2025-04-04T12:09:04.833Z","repository":{"id":37195101,"uuid":"233430738","full_name":"geekuillaume/soundsync","owner":"geekuillaume","description":"Virtual cables between any audio source and any speaker in your home","archived":false,"fork":false,"pushed_at":"2023-03-04T16:41:48.000Z","size":11807,"stargazers_count":862,"open_issues_count":92,"forks_count":38,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-03-28T11:09:37.875Z","etag":null,"topics":["audio","javascript","multi-room","music","nodejs","synchronization","web"],"latest_commit_sha":null,"homepage":"https://soundsync.app","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/geekuillaume.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2020-01-12T17:28:54.000Z","updated_at":"2025-03-10T19:36:19.000Z","dependencies_parsed_at":"2024-01-13T15:42:24.356Z","dependency_job_id":"6881141a-f6c2-453e-8a48-1e92359f9a5e","html_url":"https://github.com/geekuillaume/soundsync","commit_stats":null,"previous_names":[],"tags_count":41,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geekuillaume%2Fsoundsync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geekuillaume%2Fsoundsync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geekuillaume%2Fsoundsync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geekuillaume%2Fsoundsync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/geekuillaume","download_url":"https://codeload.github.com/geekuillaume/soundsync/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247174423,"owners_count":20896078,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio","javascript","multi-room","music","nodejs","synchronization","web"],"created_at":"2024-07-30T17:00:36.868Z","updated_at":"2025-04-04T12:09:04.813Z","avatar_url":"https://github.com/geekuillaume.png","language":"C","funding_links":[],"categories":["C","Other"],"sub_categories":["Other"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"res/logo_transparent.png\" width=\"400\"\u003e\n\u003c/p\u003e\n\n## Connect virtual cables between any audio source and any audio output\n\nSoundsync is a web and desktop app to manage every audio source and every audio output in your home from a single interface. Link any audio source to multiple speakers connected to any devices on your home network. Soundsync will keep the music synchronized between all of them.\n\n- 🆓 Free to use\n- 🕸️ Work with any number of connected devices, audio sources, audio outputs and every link of your choosing\n- 🎶 Compatible with a lot of different audio sources (Spotify Connect with a premium account, Airplay, Hardware Audio input (line in / microphone), Linux system audio ; coming soon: Windows system audio, UPnP and more)\n- 🔊 Broadcast sound to any speaker connected to a computer (Windows, MacOS, Linux, RapsberryPi), a web browser (Chrome, Firefox) or a Chromecast and soon more\n- 🔗 Group speakers together to synchronize them to the same audio source\n- 🎛️ Control everything from a web browser\n- 🔓 Not linked to any external service, works offline, no account creation\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"res/screenshot_controller.png\" height=\"400\"\u003e\n  \u003cimg src=\"res/screenshot_menu.png\" height=\"400\"\u003e\n\u003c/p\u003e\n\n## Quick start\n\nDownload and install Soundsync for you operating system on every device in your home you want to use.\n\n\u003ctable width=\"100%\" align=\"center\"\u003e\u003ctr\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003ch3\u003eWindows\u003c/h3\u003e\n    \u003cp\u003e\u003ca href=\"https://soundsync.app/download/soundsync-win.exe\"\u003eDownload\u003c/a\u003e\u003c/p\u003e\n  \u003c/td\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003ch3\u003eMacOS\u003c/h3\u003e\n    \u003cp\u003e\u003ca href=\"https://soundsync.app/download/soundsync-macos.dmg\"\u003eDownload\u003c/a\u003e\u003c/p\u003e\n  \u003c/td\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003ch3\u003eLinux\u003c/h3\u003e\n    \u003cp\u003e\u003ca href=\"https://soundsync.app/download/soundsync-deb-x64.deb\"\u003eDownload (.deb for Ubuntu/Debian)\u003c/a\u003e\u003c/p\u003e\n    \u003cp\u003e\u003ca href=\"https://soundsync.app/download/soundsync-pacman.pacman\"\u003eDownload (.pacman for Archlinux)\u003c/a\u003e\u003c/p\u003e\n  \u003c/td\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003ch3\u003eLinux ARM (Raspberry)\u003c/h3\u003e\n    \u003cp\u003e\u003ca href=\"https://soundsync.app/download/soundsync-deb-arm.deb\"\u003eDownload (.deb for Ubuntu/Debian/Raspbian)\u003c/a\u003e\u003c/p\u003e\n  \u003c/td\u003e\n\u003c/tr\u003e\u003c/table\u003e\n\nNow go to https://soundsync.app/ to control every Soundsync install on your home network.\n\n## Download last development version\n\nWant to try the latest features and help with debugging? Download the [latest build](https://github.com/geekuillaume/soundsync/releases/tag/bleeding-edge)! Each commit will generate a new installer with the latest version of the code (but the version number won't be increased).\n\n## Need help? Have new ideas? Want to contribute?\n\n[Join the Discord server!](https://discord.gg/j2BZ5KC)\n\n## Project status\n\nSoundsync is still in an early stage. It's evolving quickly but there is still a lot to do. Here are some features that are being considered:\n\n- Updating info for Spotify sink from WebUI\n- Allow changing the name of a peer from the webui\n- Group of sinks\n- Use [waveform-data](https://www.npmjs.com/package/waveform-data) to show activity on webui\n- Integration of media info on webui\n- Create a ready to use RaspberryPi image\n- Allow devices on multiple networks to be connected together\n- Improve linux script by detecting Pulseaudio process if run as root\n- Add a option to start Soundsync in kiosk mode for rPi\n- In kiosk mode, add a option to start Spotify WebUI in a [BrowserView](https://www.electronjs.org/docs/api/browser-view)\n- Find an alternative way to connect from rendez-vous service for device with DNS Rebinding Protection\n- Adds audio visualization for Chromecast view and add an option to use this view from webui\n- Resample the audio for each sink to handle drifting clocks instead of seeking to the corrected audio position and hearing an artifact\n- Remember Chromecasts and add an option to auto-start them when the linked source become active\n- Audio integration with:\n  - Bluetooth as a audio input\n  - Bluetooth as a audio output\n  - Windows monitor (in progress)\n  - UPnP\n  - Sonos (blocked: I do not own a test device)\n  - HEOS (blocked: I do not own a test device)\n  - Amazon Echo (blocked: I do not own a test device)\n  - Yamaha MusicCast (blocked: I do not own a test device)\n\n## FAQ\n\n- *Is it Open-source ?* \u003cbr/\u003eSoundsync code is released under the Business Source License. It is a special open-source compatible license which is 100% free to use as long as you don't use it for production work. It means you can use it at home, in your office but you cannot resell it or sell a service/product that directly use it. I'm open to licensing it for a business usage, [contact me](mailto:guillaume+soundsync@besson.co) to work out the details.\n\n- *How to debug it?* \u003cbr/\u003eYou can activate the debug logs on the Webui with the command `window.soundsyncDebug()`. For the desktop version, you need to start the process from the command line (`/opt/Soundsync/soundsync` for Linux).\n\n- *I need an integration with X!* \u003cbr/\u003e Soundsync being a free to use project, I cannot invest money into buying every kind of speakers to build integration for them. I've listed the possible integrations above and you can create an issue if you do not see what you need. As the goal os Soundsync is to support every speaker combination, I'll be happy to work on the integration if someone sends me a compatible device. [Contact me](mailto:guillaume+soundsync@besson.co) for the details.\n\n- *Is it available offline?* \u003cbr/\u003e Every Soundsync peer (a device on which Soundsync is installed) can be used offline. Each peer will detect other peer on the local network with Bonjour and if connected to internet, will use a rendez-vous service to detect other peer with the same IP address. As Bonjour isn't available in a web browser, you need to connect to a peer on your local network with its IP and the port 6512 (for example `http://192.168.1.12:6512`). Also note that you won't be able to use the webpage as an audio output because the page cannot be served in a `https` context.\n\n- *How to install on a headless RaspberryPi Install?* \u003cbr/\u003e Assuming you're using raspbian, first download the package with `wget https://soundsync.app/download/soundsync-deb-arm.deb`, install it with `sudo dpkg -i ./soundsync-deb-arm.deb`, if some dependencies are missing install them with `sudo apt-get install -f` than start Soundsync and activate it to be started at startup with `sudo systemctl enable --now soundsync.service`.\n\n- *How to disable telemetry?* \u003cbr/\u003e Soundsync sends some non-identifiable information to our own usage tracker (based on [Posthog](https://github.com/PostHog/posthog) and hosted on our own server). You can see the list of events sent in the [Posthog integration file](./src/utils/vendor_integrations/posthog.ts). If you want to disable this, you can set the `disableTelemetry` flag in the config file to `true`.\n\n## Development\n\nTo start Soundsync from the source code you'll need NodeJS and Git installed and then:\n\n```\ngit clone https://github.com/geekuillaume/soundsync\ncd soundsync\nnpm install\nnpm run build\nnpm run start\n```\n\nYou can also use the command `npm run start:electron` to activate the Electron integrations (Systray icon, error tracking).\n\n### Building opus\n\n```\ngit submodule update --init --recursive\ncd src/utils/opus_vendor\n./autogen.sh\nemconfigure ./configure --disable-extra-programs --disable-doc --disable-intrinsics --disable-hardening --disable-rtcd --disable-stack-protector\nemmake make\ncd ../\nemcc -s INITIAL_MEMORY=10MB \\\n-s MAXIMUM_MEMORY=10MB \\\n-O3 \\\n-o audio/opus_wasm.js \\\n-s EXPORT_ES6=1 \\\n-s MODULARIZE=1 \\\n-s EXPORT_NAME=\"Opus\" \\\n-s USE_ES6_IMPORT_META=0 \\\n-s FILESYSTEM=0 \\\n-s NODEJS_CATCH_REJECTION=0 \\\n-s NODEJS_CATCH_EXIT=0 \\\n-s EXPORTED_RUNTIME_METHODS=\"['setValue', 'getValue', 'AsciiToString']\" \\\n-s EXPORTED_FUNCTIONS=\"['_malloc', '_free', '_opus_decoder_create','_opus_decode_float','_opus_decoder_destroy','_opus_encoder_create','_opus_encoder_destroy','_opus_encode','_opus_encode_float','_opus_strerror']\" \\\n-s ENVIRONMENT=node,web \\\n./opus_vendor/.libs/libopus.a\n```\n\n## Attributions\n\n- Speaker by Mestman from the Noun Project\n- Slashed zero by Rflor from the Noun Project\n- web browser by Iconstock from the Noun Project\n- Computer by iconcheese from the Noun Project\n- AirPlay by Michiel Willemsen from the Noun Project\n- Icons made by Smashicons from www.flaticon.com\n- Icons made by Freepik from www.flaticon.com\n- Icons made by smalllikeart from www.flaticon.com\n- Raspberry Pi by DesignBite from the Noun Project\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeekuillaume%2Fsoundsync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgeekuillaume%2Fsoundsync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeekuillaume%2Fsoundsync/lists"}