Skip to content
/ Geluid Public

Made with Electron. Streams audio from your soundcard to a browser in an easy way

Notifications You must be signed in to change notification settings

kulek1/Geluid

Repository files navigation

Geluid


Low latency streaming audio from soundcard directly to the browser.

Use on any desktop or mobile device.


Application based on Electron, React, React-Router, Webpack, Socket.io (WebSockets), PortAudio and Lame. It combines advantages of those packages to create a nice looking application.

Usage

⚠️ This application is still under development and it's not a stable version.

Developing

Build the client web app:

yarn build-client

Then build Electron app:

yarn dev

It will run Electron application and browser client (React) on two different ports.

Client: (http://localhost:9000)

How it works?

It creates two instances of applications - client & server. Server is based on Electron also with React and uses node module (C++) called naudiodon to stream raw audio from soundcard to Node.js app, encode it to mp3 format and then using Stream.io to the browser via WebSocket (Socket.io).

Client is based on React and it uses WebWorkers for buffering audio to get low latency sound. Despite complicated steps, latency of audio is at the level of ~1 second!

Windows users might have something like "Stereo mix" in an audio control panel which picks up exactly what you hear from your speakers. Unfortunately, that device isn't available in macOS out of the box. The solution is to install open source kernel extension called Soundflower

Features to do:

  • Code refactoring
    • add types
    • replace CSS Modules with Styled-components
    • reorganize app structure
    • use absolute imports ✅
  • Add tests
  • Add stylelint
  • Add CircleCI
  • Add react-spring for animations
  • Improve stability
  • Make production build for Windows & Mac
  • Improve scalability
  • Update Babel 6 to 7 ✅
  • Replace Flow with Typescript
  • Add missing features...

Issues

  • You may encounter an error:
App threw an error during load
Error: The module '/Users/username/Geluid/node_modules/naudiodon/build/Release/naudiodon.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 59. This version of Node.js requires
NODE_MODULE_VERSION 57. Please try re-compiling or re-installing

To resolve this, run in your terminal: $(npm bin)/electron-rebuild.

  • as this application uses MediaSource, iOS isn't supported yet. (Why Apple?)