Klangbecken: The RaBe Endless Music Player

Overview

Klangbecken

Python package Liquidsoap script Codestyle Black

Klangbecken is the minimalistic endless music player for Radio Bern RaBe based on liquidsoap.

It supports configurable and editable playlists, jingle insertion, metadata publishing and more.

It is designed for stand-alone operation, robustness and easy maintainability. All files are stored in a single data directory.

This repository contains three components of the RaBe Klangbecken:

Two additional components are in their own repository:

  • The listener for the current "on air" status, the virtual SΓ€mubox.
  • The web-based UI for playlist editing.

How they interact can be seen in the system overview diagram:

System overview diagram

System requirements

  • Unix-like operating system environment
  • Python (>= v3.7)
    • docopt library for parsing command line arguments
    • Werkzeug library (>= v2.0) for WSGI support
    • PyJWT library (>= v2.0) for creating and verifing JWT authentication tokens
    • mutagen library for audio tag editing
  • ffmpeg binary (>= v2.8) for audio analysis
  • Liquidsoap audio player (v1.3 without inotify support)

Local Setup

Clone the repository

git clone https://github.com/radiorabe/klangbecken.git
cd klangbecken

We strongly recommend to create a virtual environment (see additional tools). E.g.

python -m venv .venv
source .venv/bin/activate

Install dependencies

Install Python dependencies

pip install -r requirements.txt

Install ffmpeg with your system's package manager. E.g.

yum install ffmpeg

Install Liquidsoap (on CentOS 7 you can also use our prebuilt package)

yum install opam
opam init
# we need liquidsoap 1.3.7 which does not run after OCaml 4.07.0
opam switch create klangbecken 4.07.0
opam depext alsa mad lame vorbis taglib liquidsoap.1.3.7
opam install alsa mad lame vorbis taglib liquidsoap.1.3.7
eval $(opam env)

Install the client UI:

cd ..
git clone https://github.com/radiorabe/klangbecken-ui
cd klangbecken-ui
npm install

Run the programs

Initialize the data directory:

python -m klangbecken init

Run the development backend server (API and data directory):

python -m klangbecken serve

Run the client development server (user interface):

cd ../klangbecken-ui
npm run serve

Browse to http://localhost:8080 and start uploading audio files.

Run the liquidsoap audio player:

eval $(opam env)
liquidsoap klangbecken.liq

Manually set the onair status of the player using netcat:

echo "klangbecken.on_air True" | nc -U -w 1 klangbecken.sock

Development

For contributing to this project, fork this repository, and clone your local working copy from your personal fork. Push commits to your repository to create a pull request with your changes.

Python Package

The Python code is tested with a test suite and follows the flake8 coding guidelines.

Before submitting your code you might want to make sure that ...

  1. ... you have installed the test dependencies

    pip install -r requirements-test.txt
  2. ... the test suite runs without failure

    python -m unittest discover
  3. ... all your code is covered by (hopefully) meaningful unit tests

    coverage run -m unittest discover
    coverage report
  4. ... your code follows the coding style guidelines

    flake8

Recommended Tools (optional)

We recommend the use of tox, black and isort for development.

pip install tox black isort
tox

Instead of running all the above commands manually, tox lets you run them all at once for all installed Python versions. Make sure to have at least the Python version installed, that is used in production (currently Python 3.9). tox is also what we use in continuos integration, so using it locally helps you to make your code pass it. To call it simply type:

tox
black

Manually fixing coding style mistakes is a pain. black formats your code automatically.

black .
isort

Finally, isort helps to consistently organize package imports.

isort .

All development tools are preconfigured in setup.cfg. For additional tools and tips & tricks and see additional tools.

Liquidsoap Script

Liquidsoap lets you syntax check and type check your script:

liquidsoap --check klangbecken.liq

Simulation

Apart from type checking, the inherent nature of the liquidsoap language generating a live audio stream makes it difficult to test the code with unit tests. Observing the behavior of the player script and the effects of changes in real-time take lot of time, usually weeks or even months. Accellerated simulation runs help to observe the long-time player behavior in a reasonable amount of time.

Deployment

Your code has passed continuous integration, and your pull request has been accepted. Now you want to deploy your (or somebody else's) code to production. First, some preparation is necessary, but then the deployment script deploy.sh automates most of the work deploying the code.

Preparation before deploying for the first time:

  • Make sure that you have access to the production server (e.g. SSH publik key authentication).
  • Configure a remote prod pointing at the repository on the production system.
    git add remote prod [email protected]_PRODUCTION_VM_NAME:klangbecken.git
  • Optional: Install the Apache development libraries locally. E.g.
    yum install httpd-devel
  • Configure a remote repository upstream pointing at this upstream repository:
    git remote add upstream [email protected]:radiorabe/klangbecken-ui.git
  • Configure git to automatically fetch tags from upstream:
    git config remote.upstream.tagOpt --tags

Preparation before deploying:

  • When deploying both, the front-end and the back-end app, deploy the front-end first.
  • Check again that the code you want to deploy passed continuous integration.
  • Make sure that your working directory is clean, and that you are on the master branch:
    git stash
    git checkout master
  • Bring your code in sync with the latest version from upstream:
    git fetch upstream
    git rebase upstream/master
  • Verify that you are indeed in sync with upstream:
    git show --no-patch

Run the script:

./deploy.sh [--no-mod-wsgi]

It perfoms the following steps:

  • Increment and commit a new version number.
  • Download all run-time dependencies.
  • Optionally download mod_wsgi (Requires httpd-devel libraries to be installed locally. Use --no-mod-wsgi to not reinstall mod_wsgi).
  • Copy the dependencies to production.
  • Push your code to production.
  • Install all dependencies in production.
  • Install the Python package (API and CLI) in production.
  • Reload the web server to load the new API code.
  • Copy the liquidsoap script to it's destination.
  • If everything was successful, tag the current commit with the new version number, and push it to the upstream repository.

Finalize deployment:

  • If the liquidsoap script (klangbecken.liq) changed, restart the liquidsoap player during a "off air" moment:
    systemctl restart [email protected]

For detailed information on how to setup a productive server see Deployment.

License

Klangbecken is released under the terms of the GNU Affero General Public License. Copyright 2017-2021 Radio RaBe. See LICENSE for further information.

The project aims to develop a personal-assistant for Windows & Linux-based systems

The project aims to develop a personal-assistant for Windows & Linux-based systems. Samiksha draws its inspiration from virtual assistants like Cortana for Windows, and Siri for iOS. It has been desi

SHUBHANSHU RAI 1 Jan 16, 2022
Full LAKH MIDI dataset converted to MuseNet MIDI output format (9 instruments + drums)

LAKH MuseNet MIDI Dataset Full LAKH MIDI dataset converted to MuseNet MIDI output format (9 instruments + drums) Bonus: Choir on Channel 10 Please CC

Alex 6 Nov 20, 2022
A python script that can play .mp3 URLs upon the ringing or motion detection of a Ring doorbell. The sound plays through Sonos speakers.

Ring x Sonos A python script that plays .mp3 files whenever a doorbell is rung or a doorbell detects motion. Features Music! Authors @braden Running T

braden 0 Nov 12, 2021
This is a short program that takes the input from your microphone and uses OpenGL to draw a live colourful pattern

Visual-Music This is a short program that takes the input from your microphone and uses OpenGL to draw a live colourful pattern Installation and Setup

Tom Jebbo 1 Dec 26, 2021
Expressive Digital Signal Processing (DSP) package for Python

AudioLazy Development Last release PyPI status Real-Time Expressive Digital Signal Processing (DSP) Package for Python! Laziness and object representa

Danilo de Jesus da Silva Bellini 642 Dec 26, 2022
Anki vector Music ❀ is the best and only Telegram VC player with playlists, Multi Playback, Channel play and more

Anki Vector Music 🎡 A bot that can play music on Telegram Group and Channel Voice Chats Available on telegram as @Anki Vector Music Features πŸ”₯ Thumb

Damantha Jasinghe 12 Nov 12, 2022
?️ Open Source Audio Matching and Mastering

Matching + Mastering = ❀️ Matchering 2.0 is a novel Containerized Web Application and Python Library for audio matching and mastering. It follows a si

Sergey Grishakov 781 Jan 05, 2023
Scrap electronic music charts into CSV files

musiccharts A small python script to scrap (electronic) music charts into directories with csv files. Installation Download MusicCharts.exe Run MusicC

Dustin Scharf 1 May 11, 2022
Read music meta data and length of MP3, OGG, OPUS, MP4, M4A, FLAC, WMA and Wave files with python 2 or 3

tinytag tinytag is a library for reading music meta data of MP3, OGG, OPUS, MP4, M4A, FLAC, WMA and Wave files with python Install pip install tinytag

Tom Wallroth 577 Dec 26, 2022
Spotify Song Recommendation Program

Spotify-Song-Recommendation-Program Made by Esra Nur Γ–zΓΌm Written in Python The aim of this project was to build a recommendation system that recommen

esra nur ΓΆzΓΌm 1 Jun 30, 2022
Powerful, simple, audio tag editor for GNU/Linux

puddletag puddletag is an audio tag editor (primarily created) for GNU/Linux similar to the Windows program, Mp3tag. Unlike most taggers for GNU/Linux

341 Dec 26, 2022
User-friendly Voice Cloning Application

Multi-Language-RTVC stands for Multi-Language Real Time Voice Cloning and is a Voice Cloning Tool capable of transfering speaker-specific audio featur

Sven Eschlbeck 19 Dec 30, 2022
Mousai is a simple application that can identify song like Shazam

Mousai is a simple application that can identify song like Shazam. It saves the artist, album, and title of the identified song in a JSON file.

Dave Patrick 662 Jan 07, 2023
Analyze, visualize and process sound field data recorded by spherical microphone arrays.

Sound Field Analysis toolbox for Python The sound_field_analysis toolbox (short: sfa) is a Python port of the Sound Field Analysis Toolbox (SOFiA) too

Division of Applied Acoustics at Chalmers University of Technology 69 Nov 23, 2022
𝙰 π™Όπšžπšœπš’πšŒ π™±πš˜πš π™²πš›πšŽπšŠπšπšŽπš π™±πš’ πšƒπšŽπšŠπš–π™³πš•πš πŸ’–

TeamDltmusic 𝙰 π™Όπšžπšœπš’πšŒ π™±πš˜πš π™²πš›πšŽπšŠπšπšŽπš π™±πš’ πšƒπšŽπšŠπš–π™³πš•πš πŸ’– Deploy String Session String Click hear you can find string session OR join He

TeamDlt 5 Jan 18, 2022
A bot that can play music on Telegram Group and Channel Voice Chats

DaisyXmusic ❀ is the best and only Telegram VC player with playlists, Multi Playback, Channel play and more

TeamOfDaisyX 20 Jun 11, 2021
Klangbecken: The RaBe Endless Music Player

Klangbecken Klangbecken is the minimalistic endless music player for Radio Bern RaBe based on liquidsoap. It supports configurable and editable playli

Radio Bern RaBe 8 Oct 09, 2021
Music Streaming Platform based on full implementation of DBSM

Symphony Music Streaming Platform based on full implementation of DBSM List of Commands Insert User (INSERT) Function to implement input in USER Get a

Parth Maradia 1 Nov 12, 2021
An audio-solving python funcaptcha solving module

funcapsolver funcapsolver is a funcaptcha audio-solving module, which allows captchas to be interacted with and solved with the use of google's speech

Acier 8 Nov 21, 2022
Spotifyd - An open source Spotify client running as a UNIX daemon.

Spotifyd An open source Spotify client running as a UNIX daemon. Spotifyd streams music just like the official client, but is more lightweight and sup

8.5k Jan 09, 2023