Skip to content
Snippets Groups Projects
README.md 10.8 KiB
Newer Older
  • Learn to ignore specific revisions
  • David Trattnig's avatar
    David Trattnig committed
    <!-- TOC -->
    
    - [AURA Engine](#aura-engine)
        - [Features](#features)
            - [Play tracks from multiple sources](#play-tracks-from-multiple-sources)
            - [Blank Detenction / Silence Detecter](#blank-detenction--silence-detecter)
            - [Auto Pilot](#auto-pilot)
            - [Dynamically switching of source channels](#dynamically-switching-of-source-channels)
            - [Multiple Recorders](#multiple-recorders)
            - [Stream to an Icecast Server](#stream-to-an-icecast-server)
            - [Multichannel Line-out](#multichannel-line-out)
        - [Architecture](#architecture)
                - [Required Data Sources](#required-data-sources)
                - [Provided API Endpoints](#provided-api-endpoints)
        - [Installation](#installation)
            - [Hardware Requirements](#hardware-requirements)
            - [Software Requirements](#software-requirements)
            - [Getting Started](#getting-started)
                - [Install System Packages](#install-system-packages)
                - [Install Python Packages](#install-python-packages)
                - [Setup Database](#setup-database)
                - [Alternative Sound Servers](#alternative-sound-servers)
                - [Configuration](#configuration)
            - [Hardware](#hardware)
                - [Soundcard](#soundcard)
                - [Hard/Soft](#hardsoft)
                - [Line In](#line-in)
                - [Recordings](#recordings)
                - [Streams](#streams)
            - [Running the Engine](#running-the-engine)
            - [Logging](#logging)
        - [Development](#development)
            - [Components](#components)
        - [Frequently Asked Questions](#frequently-asked-questions)
            - [ALSA Settings](#alsa-settings)
                - [In the Liquidsoap Logs I get 'Error when starting output output_lineout_0: Failure("Error while setting open_pcm: Device or resource busy")!'. What does it mean?](#in-the-liquidsoap-logs-i-get-error-when-starting-output-output_lineout_0-failureerror-while-setting-open_pcm-device-or-resource-busy-what-does-it-mean)
                - [How can I find the audio device IDs, required for settings in engine.ini?](#how-can-i-find-the-audio-device-ids-required-for-settings-in-engineini)
        - [Resources](#resources)
    
    <!-- /TOC -->
    
    David Trattnig's avatar
    David Trattnig committed
    
    # AURA Engine
    
    David Trattnig's avatar
    David Trattnig committed
    Aura Engine is a play-out engine as part of Automated Radio (Aura) system,
    specifically build for the requirements of community radios.
    
    David Trattnig's avatar
    David Trattnig committed
    ### Play tracks from multiple sources
    
    It's possible to air playlists with music or recordings stored on the **filessystem**,
    via external **streams** or live from a **studio**.
    
    ### Blank Detenction / Silence Detecter
    
    David Trattnig's avatar
    David Trattnig committed
    The engine offers a simple way to detect scenarios where no music is on air.
    It possible to configure the sensitivity of the Silence Detector and automatically
    transition play-out to a Fallback Playlist (see Auto Pilot).
    
    ### Auto Pilot
    
    In case there is no schedule delivered by Steering, engine provides multiple
    
    fallback handling scenarios. The available fallbacks are evaluated in following order:
    
    
    David Trattnig's avatar
    David Trattnig committed
    1. **Timeslot Fallback**: //TODO explain
    2. **Show Fallback**: //TODO explain
    3. **Station Fallback**: //TODO explain
    
    ### Dynamically switching of source channels
    
        TODO extend: * switch the soundserver at the correct time to a given source for a specific show
    
    ### Multiple Recorders
    
        TODO extend:  * record what is broadcasted
    
    
    ### Stream to an Icecast Server
    
        TODO extend:  * stream to an icecast server
    
    ### Multichannel Line-out
    
        TODO extend:  * play to line-out
    
    
    
    ## Architecture
    
    AURA Engine as part of the AURA Radio Suite uses an modulear architecture
    based on a REST API. All external information is retrieved using JSON data-structures.
    
    #### Required Data Sources
    
    
    David Trattnig's avatar
    David Trattnig committed
    The AURA Project "**Dashboard**" provides the GUI to organize shows, schedules/timelsots
    and organize uploads in form of playlists. Those playlists can be organized in timeslots
    using a fancy calendar interface.
    
    These data-sources need to be configurated in the "engine.ini" configuration file:
    
    
        # The URL to get the Calendar via PV/Steering
        calendarurl="http://localhost:8000/api/v1/playout"
    
        # The URL to get show details via PV/Steering
        api_show_url="http://localhost:8000/api/v1/shows/${ID}/"
    
    The AURA Project "**Tank**" on the other hand delivers information on the tracks, playlists
    to be played and its meta-data:
    
        # The URL to get playlist details via Tank
        importerurl="http://localhost:8040/api/v1/shows/${SLUG}/playlists"
    
    
    
    David Trattnig's avatar
    David Trattnig committed
    More information you can find here: <https://gitlab.servus.at/autoradio/meta/blob/master/api-definition.md>
    
    
    
    #### Provided API Endpoints
    
    **Soundserverstate:** Returns true and false values of the internal In- and Outputs  
    
        /api/v1/soundserver_state
    
    **Trackservice:**
    
    /api/v1/trackservice/<selected_date>  
    /api/v1/trackservice/
    
    
    This depends on how many audio sources and targets you are going to use, but for the most 
    common scenarios any current hardware should be sufficient. For the audio devices it is 
    required to use an interface which has supported ALSA drivers.
    
    David Trattnig's avatar
    David Trattnig committed
    Aura Engine is tested with following audio devices
    
    * ASUS Xonar DGX, 
    * Roland Duo-Capture Ex 
    * Onboard Soundcard (HDA Intel ALC262)
    * Native Instruments Komplete Audio 6
    
    **Operating System:** Any linux system with ALSA, PulseAudio or Jack2 support should work. 
    It is tested and coded on Debian Stretch and Ubuntu 18.0 with Python 3.6+.
    
    ### Getting Started
    
    git clone https://gitlab.servus.at/autoradio/engine
    
    #### Install System Packages
    
    On a Debian / Ubuntu machine:
    
    
        git \
        python3 python3-pip \
        redis-server \
        liquidsoap liquidsoap-plugin-icecast \
        mariadb-server libmariadbclient-dev \
        quelcom \
        liquidsoap-plugin-alsa liquidsoap-plugin-pulseaudio
    
    **File Formats:** Depending on what stream you are going to send, and what recordings you are going to use:
    
    ```bash
    sudo apt install \
        liquidsoap-plugin-aac # for aac support
        liquidsoap-plugin-flac # for flac support
        liquidsoap-plugin-lame liquidsoap-plugin-mad # for mp3 support
        liquidsoap-plugin-opus # for opus support
        liquidsoap-plugin-vorbis # for ogg support
    ```
    
    
    To simply install support for all available file formats do:
    
    #### Install Python Packages
    
    Gottfried Gaisbauer's avatar
    Gottfried Gaisbauer committed
    ```bash
    
    sudo pip3 install -r requirements.txt
    
    Gottfried Gaisbauer's avatar
    Gottfried Gaisbauer committed
    ```bash
    
    Gottfried Gaisbauer's avatar
    Gottfried Gaisbauer committed
    CREATE DATABASE aura_engine CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;  
    CREATE USER 'aura'@'localhost' IDENTIFIED BY 'secure-password';  
    GRANT ALL PRIVILEGES ON aura_engine.* TO 'aura'@'localhost';  
    
    Gottfried Gaisbauer's avatar
    Gottfried Gaisbauer committed
    ```
    
    #### Alternative Sound Servers
    
    Beside ALSA the sound servers **Jack Audio** and **Pulse Audio** are supported.
    
    Install the JACK daemon and GUI:
    
    Gottfried Gaisbauer's avatar
    Gottfried Gaisbauer committed
    ```bash
    
        sudo apt-get install jackd qjackctl 
    
    Gottfried Gaisbauer's avatar
    Gottfried Gaisbauer committed
    ```
    
    Please ensure to enable "*realtime process priority*" when installing JACK to keep latency low.
    Now, you are able to configure your hardware settings using following command:
    
    Next you need to install the JACK plugin for Liquidsoap:
    
    ```bash
    sudo apt install \
        liquidsoap-plugin-jack
    ```
    
    This creates the folder */var/audio* and copies some default configuration
    to */etc/aura/engine.ini*
    
    After that, you have to edit the settings in */etc/aura/engine.ini*. Ensure to take your time to carefully review those settings!
    
    Gottfried Gaisbauer's avatar
    Gottfried Gaisbauer committed
    
    
    Gottfried Gaisbauer's avatar
    Gottfried Gaisbauer committed
    
    
    When you use ALSA, you will have to play around with ALSA settings. In the folder ./modules/liquidsoap is a scipt called alsa_settings_tester.liq. You can start it with 'liquidsoap -v --debug alsa_settings_tester.liq'. Changing and playing with settings may help you to find correct ALSA settings.
    
    #### Line In
    
    You can configure up to **five** line ins. Your hardware should support that. When you use JACK, you will see the additional elements popping up when viewing your connections (with e.g. Patchage).
    
    #### Recordings
    
    You can configure up to **five** recorders. You find the settings in the main config file engine.ini. You can choose between different output formats.
    
    You can configure up to **five** streams. You find the settings in the engine.ini. You can choose between different streaming formats.
    
    
    
    ### Running the Engine ###
    
    To start the AuRa Engine execute:
    
        systemctl start aura-lqs
        systemctl start aura-engine  
    
    and on system boot run following:
    
        systemctl enable aura-lqs
        systemctl enable aura-engine
    
    The first service starts the LiquidSoap Engine, while the latter boots the actual AuRa Engine.
    
    ### Logging
    
    You can access the service logs using:
    
        journalctl -u aura-lqs
    
    and
    
        journalctl -u aura-engine
    
    respectively.
    
    
    
    ## Development
    
    To run the LiquidSoap code during develpment execute:
        ./run.sh
    
    ### Components ###
    
    
    **aura.py**: It is the server which is connected to the external programme source (e.g. aura steering and tank), to liquidsoap and is listening for redis pubsub messages. This precious little server is telling liquidsoap what to play and when.
    
    **Guru**: The commandline tool for interacting with the server. Also provides the communication from Liquidsoap to the Python (Command-)Server.
    
    **Liquidsoap**: The heart of AuRa Engine. It uses the built in mixer, to switch between different sources. It records everything and streams everything depending on your settings in aura.ini.
    
    
    
    
    
    
    
    ## Frequently Asked Questions ##
    
    ### ALSA Settings
    
    #### In the Liquidsoap Logs I get 'Error when starting output output_lineout_0: Failure("Error while setting open_pcm: Device or resource busy")!'. What does it mean?
    
    You probably have set a wrong or occupied device ID.
    
    
    #### How can I find the audio device IDs, required for settings in engine.ini?
    
    * **ALSA**: You can get the device numbers or IDs by executing:
    
        cat /proc/asound/cards
    
    * **Pulse Audio**: You might not need this for Pulse Audio, but still, to see all available devices use:
    
        pactl list
    
    
    
    **If you cannot find correct ALSA settings**  
    
    Well, this is - at least for me - a hard one. I could not manage to find correct ALSA settings for the above mentioned soundcards. The best experience i had with the ASUS Xonar DGX, but still very problematic (especially the first couple of minutes after starting liquidsoap). Since i enabled JACK support i only use that. It is also a bit of trial and error, but works pretty much out of the box.
    
    **If you experience 'hangs' or other artefacts on the output signal**
     * reduce the quality (especially, when hangs are on the stream) or
    
     * install the realtime kernel with
    
     * invest in better hardware
    
    
    ## Resources ##
    
    * **Python**: https://docs.python.org/
    * **Redis**: https://redis.io/
    * **Liquidsoap**: https://www.liquidsoap.info/doc-1.4.0/
    * **Jack Audio**: https://jackaudio.org/