17 unstable releases (3 breaking)

new 0.4.1 Jan 16, 2025
0.3.4 Nov 11, 2024
0.3.1 Jun 21, 2024
0.2.2 Sep 14, 2023

#20 in Audio

Download history 103/week @ 2024-09-25 66/week @ 2024-10-02 10/week @ 2024-10-09 84/week @ 2024-10-30 118/week @ 2024-11-06 26/week @ 2024-11-13 6/week @ 2024-11-20 2/week @ 2024-11-27 23/week @ 2024-12-04 19/week @ 2024-12-11 40/week @ 2025-01-08

902 downloads per month

MIT license

65KB
1.5K SLoC

Vibe

About

Vibe is a music player that uses the SLIM TCP protocol to connect to a Lyrion Music Server formally known as a Logitech Media Server.

Vibe is intended to be run as a user daemon and designed to be simple and as unobtrusive as possible.

I use Vibe as my daily driver, so it gets lots of use by me and I fix bugs as I find them, but this is on a linux system and using the pulseaudio output. For anything else, I rely on bug reports but I'm limited to testing on a Linux system only.

Running

To list the run-time options:

vibe -h

To see all audio output devices on your machine:

vibe -l

There is a systemd service file in the resources directory which you can adapt to your needs as follows:

Once compiled, move the vibe executable to where you want on your system then edit the vibe_daemon.service file so that the ExecStart= line points to it, then add options you want, if any, to the vibe command.

Copy the systemd service file to ~/.config/systemd/user/ and then tell systemd of the new service with

systemctl --user daemon-reload

You only need to do this once.

Start the service with

systemctl --user start vibe_daemon.service

You can make it so that vibe will start whenever you login with

systemctl --user enable vibe_daemon.service

Output

By default, Vibe uses the pulse feature flag which means it uses the pulseaudio API. This means that it can play sounds both with the pulseaudio system and with the pipewire system, thanks to the fact that pipewire implements the pulseaudio API.

There is also the compile-time option rodio, for playing audio via other systems such as ALSA. This uses the rodio crate which, in turn, uses the cpal crate. This means that the following hosts are possible (according to cpal documentation):

  • Linux (via ALSA or JACK)
  • Windows (via WASAPI by default, also ASIO)
  • macOS (via CoreAudio)
  • iOS (via CoreAudio)
  • Android (via Oboe)
  • Emscripten

Compilation

Compile-time dependencies

Vibe needs the pulseaudio development files, but this can be disabled, see below. These are provided as part of the libpulse-dev package on Debian and Ubuntu distributions.

If the rodio feature is selected, then Vibe also needs the ALSA development files. These are provided as part of the libasound2-dev package on Debian and Ubuntu distributions and alsa-lib-devel on Fedora.

Features

Symphonia has optimization features that are off by default, you can switch them on with --features symphonia/<optimization>. These features are:

  • opt-simd-sse
  • opt-simd-avx
  • opt-simd-neon

or you can switch them all on with opt-simd.

If the Symphonia devs have them off by default then so will I.

To use rodio/cpal, use the rodio feature. This will add the ability to use --system=rodio on the command line to select the rodio output. Note that when this feature flag is used, Vibe will still default to pulseaudio if --system=rodio is not specified.

When if the rodio feature is selected, Vibe will compile for both pulseaudio and rodio so will still have a dependency on pulseaudo. If you want to compile without having a dependency on pulseaudio then use the --no-default-features compilation option. In this case, the rodio feature flag must be selected, otherwise Vibe will not compile.

Dependencies

Vibe has zero run-time dependencies, all the stream demultiplexing and decoding is done natively thanks to Symphonia, a big "thank-you" to the Symphonia devs for their amazing work!

Dependencies

~6–34MB
~565K SLoC