docs: create 3.0.0-alpha.12 docs

This commit is contained in:
jo 2022-04-07 19:22:14 +02:00 committed by Kyle Robbertze
parent 05342e2e83
commit 16d7461263
108 changed files with 5103 additions and 0 deletions

View File

@ -0,0 +1,29 @@
---
title: Welcome
sidebar_position: 10
---
Welcome to the **LibreTime documentation**, you should find everything you need to know about LibreTime.
:::caution
:construction: LibreTime is in being modernized and is finalizing the forking process. Be aware that breaking change may occur and that the documentation may not be up to date.
:::
## Getting started
**Are you new to LibreTime? This is the place to start!**
The documentation is divided into multiple parts:
- the [Administrator manual](./admin-manual) provide guides and references to setup and configure LibreTime.
- the [User manual](./user-manual) provide guides and tutorials for managers, and content creators to use LibreTime.
- the [Developer manual](./developer-manual) provide guides to integrate LibreTime, or improve and contribute to LibreTime.
## Getting help
Having trouble? Wed like to help!
- [:question: Try the Forum its got answers to many common questions](https://discourse.libretime.org/).
- [:bug: Report bugs with LibreTime in our ticket tracker.](https://github.com/libretime/libretime/issues)

View File

@ -0,0 +1,41 @@
---
title: Modifying the LibreTime interface
---
The LibreTime administration interface, as a web application, is fully customizable using the same methods that you might use to modify a website. For instance, you may wish to increase certain font sizes or change the colours in the LibreTime interface to better suit staff users with impaired vision. To do so, open one of the CSS files in the `/public/css/` directory under the LibreTime _DocumentRoot_ directory in an editor such as `nano`:
```bash
sudo nano /usr/share/airtime/public/css/styles.css
```
To change the background colour of the administration interface from dark gray to white, the _background:_ property of the body tag could be changed to `#ffffff` as follows:
```css
body {
font-size: 62.5%;
font-family: Arial, Helvetica, sans-serif;
background: #ffffff;
margin: 0;
padding: 0;
}
```
Save the file with **Ctrl+S**, then refresh your browser to see the change to the interface background colour.
Any custom changes that you make to the administration interface should be backed up before upgrading LibreTime to a newer version, otherwise they could be overwritten. If you have made improvements that you think might be useful to other LibreTime users, please contact LibreTime and tell us about them.
# Modifying the Icecast interface
If you have installed Icecast, in the directory `/etc/icecast2/web/` you will find several XSLT and other files which are used to generate the Icecast web interface. If you are familiar with HTML you should be able to modify these pages, as they're well commented. You do have to be careful with syntax, because something as simple as a missing bracket can cause the Icecast web interface to break down.
For example, you could change the `status.xsl` page:
```bash
sudo nano /etc/icecast2/web/status.xsl
```
Modifying the `status.xsl` page is a good place to start, because this is the default page that site visitors see when they browse port 8000 on your Icecast server. The most obvious change to make in the XSLT pages is the content of the _<title>_ and _<h2>_ tags, to announce the name of your station. You can also modify the `style.css` file in this directory to change colour and layout options.
After saving the file with Ctrl+O, refresh your web browser, and the new look should now be visible.
![](/img/Screenshot177-Icecast_rocks.png)

View File

@ -0,0 +1,59 @@
---
title: Interface localization
---
The LibreTime administration interface can be localized using the standard GNU **gettext** method. Using GitHub for this task means you don't have to tackle the whole of a localization yourself; just as much as you can manage.
![](/img/Screenshot464-Korean_stream_setting.png)
First, you should check if a localization is already under way for your locale of choice. The best way to do this is to take a look at the 'main' branch in the GitHub repository for LibreTime at https://github.com/libretime/libretime. You can also ask in the LibreTime development forum at https://discourse.libretime.org/, where you might find community members who can help you with the translation.
GNU **gettext** means using a .po file for each language or dialect, a specially formatted plain text file with groups of three or more lines, like this example from LibreTime's Korean localization:
```
#: legacy/application/configs/navigation.php:57
msgid "Media Folders"
msgstr "미디어 폴더"
```
The first of these three lines starts with the hash symbol, and references where this string of text is found in the source code by its file name and line number. If this string is found more than once in the source code, you will see other reference lines here. The second line contains the **msgid**, which is the original version of the string. The third line contains the **msgstr**, which is the translation of that string for the localization that this particular .po file relates to.
If you use the cross-platform program **Poedit** (https://www.poedit.net/) to edit the .po file, this formatting of the text is hidden by an easy-to-use GUI. The _poedit_ package can be installed on most GNU/Linux distributions using the standard software installer. Versions of Poedit for Mac and Windows are available for free download from the project's homepage.
Before manually translating strings in Poedit from scratch, you should take a look at the online translation services available, such as Lingohub (https://lingohub.com), which both support gettext .po files. If using automatic translation, you can then use Poedit to fine-tune the localization and fix any formatting errors.
If you don't already have a GitHub account, you can sign up at https://github.com/signup/free. Once you have a GitHub account, you can fork a copy (https://help.github.com/articles/fork-a-repo) of the LibreTime project. Work for the next major version of the software is done in the **main** branch of each project, so that's the branch to **checkout** after you have made the initial **git clone**.
In the locale code _de_CH_, for example, _de_ represents the German language and the suffix _\_CH_ indicates the dialect spoken in Switzerland. Some languages have a wide variety of dialect localizations, which can be differentiated with a suffix in this way. You should update the header information in the .po file, which includes the language code and a country code, using one of the existing .po files as a guide.
After forking the LibreTime git repository, make sure you're in the **main** branch:
```bash
git branch
devel
* main
```
Create a new locale directory (e.g. `legacy/locale/de_CH/LC_MESSAGES/` for German as spoken in Switzerland):
```bash
mkdir -p legacy/locale/de_CH/LC_MESSAGES/
```
Copy the template `airtime.po` file into the directory you just created:
```bash
cp legacy_locale/template/airtime.po legacy/locale/de_CH/LC_MESSAGES
```
and update the header information in the new copy of the `airtime.po` file using the **nano** editor:
```bash
nano legacy/locale/de_CH/LC_MESSAGES/airtime.po
```
After using an online translation tool to begin a new localization, you can load the exported .po file into Poedit and complete your translation there. Enter the localization team's contact information and language into Poedit's **Edit -> Preferences** and **Catalog -> Settings** dialogs, which will be added to the .po file. When you save a .po file in Poedit, the corresponding binary .mo file will be compiled automatically.
Finally, **git add**, **git commit** and **git push** these new .mo and .po files to your GitHub fork of the project, and send a git pull request (https://help.github.com/articles/using-pull-requests) to the LibreTime developers. The localization can then be added to a forthcoming LibreTime release.
If you don't want to work with git, that's no problem - download a copy of the .po template file, edit the header, run it through an automatic translator and check it with Poedit. Then email your contribution to the LibreTime team as an attachment - it will be very welcome! However, learning to use git is a good idea, because it means you can work directly on the current source code, share the localization work with the LibreTime community, and avoid duplicated effort.

View File

@ -0,0 +1,26 @@
---
title: Built-in microsite
---
![](/img/radio-page.png)
LibreTime includes a microsite, which can be accessed at _serverIP_ or a domain you've set up for your server. The site includes your
logo and station description (set under Settings > General), the login button to the LibreTime interface, the schedule for the next seven days,
podcast tabs, and a live feed of your station with information on the the currently playing artist and track.
## Modifying the LibreTime radio page
The background of the mini-site that appears when you visit the server's domain in your web browser can be changed by modifying the page's CSS file, located at `/usr/share/airtime/php/legacy/public/css/radio-page/radio-page.css`.
```css
html {
background: url("img/background-testing-3.jpg") no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
overflow-y: auto;
}
```
Place the new background image in the `/usr/share/airtime/php/legacy/public/css/radio-page/img/` folder and change the `background:` entry's URL to point to the new image. The new image should be at least 1280 x 720 in pixel size to avoid being blurry.

View File

@ -0,0 +1,33 @@
---
title: Administrator manual
---
Welcome to the **LibreTime administrator manual**, you should find guides and references to setup and configure LibreTime.
:::caution
This documentation assumes that you:
- have basic understanding of command line interfaces,
- have a basic understanding of networking.
:::
:::tip
Before following any steps, be sure that your system is up-to-date.
:::
## Install and configure
- [:rocket: Install LibreTime](./setup/install.md)
- [:arrow_up: Upgrade from a previous install](./setup/upgrade.md)
- [:airplane_arriving: Migrate from Airtime](./setup/migrate-from-airtime.md)
- [:gear: Configure your installation](./setup/configuration.md)
- [:lock: Put your installation behind a reverse proxy](./setup/reverse-proxy.md)
## Advanced
- [:warning: Setup automated backups](./backup.md)
- [:heavy_check_mark: Use a custom authentication system](./custom-authentication.md)

View File

@ -0,0 +1,2 @@
label: Admin manual
position: 20

View File

@ -0,0 +1,56 @@
---
title: Backup
sidebar_position: 10
---
## Create a backup
This guide walk you though the steps required to create a full backup of your installation.
:::info
Remember to **automate** and **test** the backup process and to have it run regularly. Having an **automated** and **tested** restoring process is also recommended.
:::
:::caution
Feel free to pick the backup software of your choice, but know that rsync and similar tools are not backup tools. You could use [restic](https://restic.net/) or [borg](https://borgbackup.readthedocs.io/).
:::
### Backup the configuration
On common setups, you need to backup the entire `/etc/airtime` folder.
### Backup the database
You need to backup the PostgreSQL database, which holds the entire data of your installation.
Here is an example to dump your PostgreSQL database:
```bash
sudo -u postgres pg_dump --file=libretime.sql libretime
```
Please read the `pg_dump` usage for additional details.
### Backup the storage
You need to backup the entire file storage, which holds all the files of your installation.
The path to your storage was defined during the installation process.
## Restore a backup
### Restore the configuration
Copy the backed configuration files back to the configuration folder.
### Restore the database
:construction:
### Restore the storage
:construction:

View File

@ -0,0 +1,109 @@
---
title: Custom authentication
sidebar_position: 40
---
## Setup FreeIPA authentication
You can configure LibreTime to delegate all authentication to a FreeIPA server.
This allows you users to use their existing FreeIPA credentials. For this to
work you need to configure Apache to use `mod_authnz_pam` and `mod_intercept_form_submit`.
### Apache configuration
After installing the needed modules you can set up Apache to intercept form logins and
check them against pam.
```apacheconf
<Location /login>
InterceptFormPAMService http-libretime
InterceptFormLogin username
InterceptFormPassword password
InterceptFormLoginSkip admin
InterceptFormPasswordRedact on
InterceptFormLoginRealms INT.RABE.CH
Require pam-account http-libretime
</Location>
<Location />
<RequireAny>
<RequireAny>
Require pam-account http-libretime
Require all granted
</RequireAny>
<RequireAll>
Require expr %{REQUEST_URI} =~ /(index.php|login|favicon.ico|js|css|locale)/
Require all granted
</RequireAll>
</RequireAny>
</Location>
```
### PAM configuration
The above configuration expects a PAM configuration for the `http-libretime` service.
To confiure this you need to create the file `/etc/pam.d/http-libretime` with the following contents.
```
auth required pam_sss.so
account required pam_sss.so
```
### LDAP configuration
LibreTime needs direct access to LDAP so it can fetch additional information. It does so with
a [system account](https://www.freeipa.org/page/HowTo/LDAP#System_Accounts) that you need to
set up beforehand.
You can configure everything pertaining to how LibreTime accesses LDAP in
`/etc/airtime/airtime.conf`. The default file has the following values you need to change.
```ini
#
# ----------------------------------------------------------------------
# L D A P
# ----------------------------------------------------------------------
#
# hostname: Hostname of LDAP server
#
# binddn: Complete DN of user used to bind to LDAP
#
# password: Password for binddn user
#
# account_domain: Domain part of username
#
# basedn: base search DN
#
# filter_field: Name of the uid field for searching
# Usually uid, may be cn
#
# groupmap_*: Map LibreTime user types to LDAP groups
# Lets LibreTime assign user types based on the
# group a given user is in.
#
[ldap]
hostname = ldap.example.org
binddn = 'uid=libretime,cn=sysaccounts,cn=etc,dc=int,dc=example,dc=org'
password = hackme
account_domain = INT.EXAMPLE.ORG
basedn = 'cn=users,cn=accounts,dc=int,dc=example,dc=org'
filter_field = uid
groupmap_guest = 'cn=guest,cn=groups,cn=accounts,dc=int,dc=example,dc=org'
groupmap_host = 'cn=host,cn=groups,cn=accounts,dc=int,dc=example,dc=org'
groupmap_program_manager = 'cn=program_manager,cn=groups,cn=accounts,dc=int,dc=example,dc=org'
groupmap_admin = 'cn=admins,cn=groups,cn=accounts,dc=int,dc=example,dc=org'
groupmap_superadmin = 'cn=superadmin,cn=groups,cn=accounts,dc=int,dc=example,dc=org'
```
### Enable FreeIPA authentication
After everything is set up properly you can enable FreeIPA auth in `airtime.conf`:
```
[general]
auth = LibreTime_Auth_Adaptor_FreeIpa
```
You should now be able to use your FreeIPA credentials to log in to LibreTime.

View File

@ -0,0 +1,64 @@
---
title: Change default passwords
sidebar_position: 80
---
## LibreTime
To change the password of the current user:
1. Log in to LibreTime
2. Click on the username in the upper right corner (next to Log Out)
3. Enter the new password twice and click **Save**
To change the password for a different user (requires _Administrator_ privileges):
1. Log in to LibreTime
2. Go to **Settings** > **Manage Users**
3. Select the user, enter the new password twice, and click **Save**
## PostgreSQL
Two of the most important passwords that should be changed _immediately_ after installation
are the passwords used by the PostgreSQL database.
It is strongly recommended that you do this before exposing your server to the internet beyond your internal network.
1. Login to PostgreSQL with `sudo -u postgres psql`. The PostgreSQL shell - `postgres=#` - means that you have logged in successfully.
2. Change the admin password with `ALTER USER postgres PASSWORD 'myPassword';`, where `myPassword` is the new password.
Make sure to include the semicolon at the end! A response of `ALTER ROLE` means that the command ran successfully.
3. Change the password for the _airtime_ user with `ALTER USER airtime WITH PASSWORD 'new_password';`
A response of `ALTER ROLE` means that the command ran successfully.
4. If all is successful, logout of PostgreSQL with `\q`, go back to `/etc/airtime/airtime.conf` to edit the password
in the config file, and restart all services mentioned in the previous section.
## Icecast
Random passwords are generated for Icecast during the installation. To look up and change the passwords, edit `/etc/icecast2/icecast.xml`.
Replace the admin and _changeme_ fields below.
```xml
<authentication>
<!-- Sources log in with username 'source' -->
<source-password>changeme</source-password>
<!-- Relays log in with username 'relay' -->
<relay-password>changeme</relay-password>
<!-- Admin logs in with the username given below -->
<admin-user>admin</admin-user>
<admin-password>changeme</admin-password>
</authentication>
```
Then, restart your icecast2 service with `sudo systemctl restart icecast2`.
> Note: If you change the source password, you may need to manually configure LibreTime to use the new password: go to **Settings** > **Streams**, set the streaming server to **Custom** and fill out the **Additional Options** below Stream 1.
## RabbitMQ
To change the default password for RabbitMQ, run the following command
```bash
sudo rabbitmqctl change_password airtime newpassword
```
and then update the `/etc/airtime/airtime.conf` file with the new password.

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

View File

@ -0,0 +1,117 @@
---
title: Icecast configuration
sidebar_position: 30
---
## Background
LibreTime supports direct connection to two popular streaming media servers, the open source Icecast (https://www.icecast.org/) and the proprietary SHOUTcast (https://www.shoutcast.com). Apart from the software license, the main difference between these two servers is that Icecast supports simultaneous MP3, AAC, Ogg Vorbis or Ogg Opus streaming from LibreTime, whereas SHOUTcast only supports MP3 and AAC streams. The royalty-free Ogg Vorbis format has the advantage of better sound quality than MP3 at lower bitrates, which has a direct impact on the amount of bandwidth that your station will require to serve the same number of listeners. Ogg Opus also benefits from good sound quality at low bitrates, with the added advantage of lower latency than other streaming formats. Opus is now an [IETF standard](https://datatracker.ietf.org/doc/html/rfc6716) and requires Icecast 2.4 or later to be installed on the streaming server.
Ogg Vorbis playback is supported in most modern web browsers (see [this MDN article](https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Audio_codecs#opus) for more information) and desktop players like [VLC](https://www.videolan.org/vlc/).
Streaming MP3 below a bitrate of 128kbps is not recommended for music, because of a perceptible loss of high audio frequencies in the broadcast playout. A 96kbps or 64kbps MP3 stream may be acceptable for voice broadcasts if there is a requirement for compatibility with legacy hardware playback devices which do not support Ogg Vorbis or Opus streams.
Because LibreTime supports simultaneous streaming in multiple formats, it is possible to offer one or more streams via your website, and another independent stream for direct connection from hardware players. You can test whether Ogg streams sound better at low bitrates for yourself, by using the **LISTEN** button in LibreTime's **Master Panel** to switch between streaming formats.
:::tip
Setting a higher bitrate for your output stream will only benefit your listeners if you have high bitrate source material to play. LibreTime can convert bitrates down for lower-quality streams but _cannot_ convert up for higher-quality streams.
:::
## UTF-8 metadata in Icecast MP3 streams
When sending metadata about your stream to an Icecast server in non-Latin alphabets, you may find that Icecast does not display the characters correctly for an MP3 stream, even though they're displayed correctly for an Ogg Vorbis stream. In the following screenshot, Russian characters are being displayed incorrectly in the _Current Song_ field for the MP3 stream:
![](./icecast-screenshot223-icecast_utf-8_metadata.png)
The solution is to specify that the metadata for the MP3 mount point you are using should be interpreted using UTF-8 encoding. You can do this by adding the following stanza to the `/etc/icecast2/icecast.xml` file, where `libretime.mp3` is the name of your mount point:
```xml
<mount>
<mount-name>/libretime.mp3</mount-name>
<charset>UTF-8</charset>
</mount>
```
After saving the `/etc/icecast2/icecast.xml` file, restart the Icecast server with `sudo systemctl restart icecast2`.
## Icecast handover configuration
In a typical radio station configuration, the live output from the broadcast studio and the scheduled output from LibreTime are mixed together before being sent further along the broadcast chain, to a transmitter or streaming media server on the Internet. (This may not be the case if your LibreTime server is remote from the studio, and you are using the **Show Source Mount Point** or **Master Source Mount Point** to mix live and scheduled content. See the _Stream Settings_ chapter for details).
If your Icecast server is hosted in a remote data centre, you may not have the option to handover the streaming media source manually, because you have no physical access to connect a broadcast mixer to the server. Disconnecting the stream and beginning another is less than ideal, because the audience's media players will also be disconnected when that happens.
The Icecast server has a _fallback-mount_ feature which can be used to move clients (media players used by listeners or viewers) from one source to another, as new sources become available. This makes it possible to handover from LibreTime output to a show from another source, and handover to LibreTime again once the other show has ended.
To enable fallback mounts, edit the main Icecast configuration file (`/etc/icecast2/icecast.xml`) to define the mount points you will use, and the relationship between them.
The example mount section provided in the `icecast.xml` file is commented out by default. Before or after the commented section, add three mount point definitions. The default mount point used by LibreTime is `/airtime_128` which is shown in the `/etc/airtime/liquidsoap.cfg` file. You must also define a mount point for the live source (ex. `/live.ogg`) and a mount point for the public to connect to (ex. `/stream.ogg`).
```xml title="/etc/icecast2/icecast.xml"
<mount>
<mount-name>/airtime_128</mount-name>
<hidden>0</hidden>
</mount>
<mount>
<mount-name>/live.ogg</mount-name>
<fallback-mount>/airtime_128</fallback-mount>
<fallback-override>1</fallback-override>
<hidden>0</hidden>
</mount>
<mount>
<mount-name>/stream.ogg</mount-name>
<fallback-mount>/live.ogg</fallback-mount>
<fallback-override>1</fallback-override>
<hidden>0</hidden>
</mount>
```
These mount point definitions mean that a client connecting to a URL such as *http://icecast.example.com:8000/stream.ogg* will first fall back to the `/live.ogg` mount point if it is available. If not, the client will fall back in turn to the `/airtime_128` mount point for LibreTime playout.
Setting the value of _fallback-override_ to 1 (enabled) means that when the `/live.ogg` mount point becomes available again, the client will be re-connected to it. If you wish to hide the `/airtime_128` and `/live.ogg` mount points from the public Icecast web interface, set the value of _hidden_ in each of these definitions to 1.
## Source configuration
Connect the other source to the Icecast server with the same parameters defined in the `/etc/airtime/liquidsoap.cfg` file, except for the mount point. This should one of the mount points you have defined in the `/etc/icecast2/icecast.xml` file, such as `/live.ogg` in the example above.
:::tip Streaming with Mixxx
To configure Mixxx for streaming to Icecast, click _Options_, _Preferences_, then _Live Broadcasting_. For server _Type_, select the default of _Icecast 2_ when streaming to Debian or Ubuntu servers.
:::
By default, Icecast streams are buffered to guard against network problems, which causes latency for remote listeners. When monitoring the stream from a remote location, you may have to begin the live stream a few seconds before the previous stream ends to enable a smooth transition.
## Promoting your station
:::note
This section covers how to edit Icecast's configuration to broadcast your station's information to online radio station directories. If you aren't using Icecast (or don't want to edit the configuration file), many online directories will allow you to manually add your station to their listings.
:::
There are many online radio station directories you can add your station to for additional exposure.
On an Icecast server, you can uncomment the `directory` section in the `/etc/icecast2/icecast.xml` file to have
your station automatically listed on the [Icecast directory website](https://dir.xiph.org/).
```xml
<!-- Uncomment this if you want directory listings -->
<directory>
<yp-url-timeout>15</yp-url-timeout>
<yp-url>https://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
</directory>
```
The Indymedia stream directory at https://radio.indymedia.org links to grassroots independent radio projects around the world. You can add your station to their list with an additional _directory_ section, as follows:
```xml
<directory>
<yp-url-timeout>15</yp-url-timeout>
<yp-url>https://radio.indymedia.org/cgi-bin/yp-cgi</yp-url>
</directory>
```

View File

@ -0,0 +1,72 @@
---
title: Setting the server time
sidebar_position: 20
---
Accurate time keeping on your server is vital for LibreTime performance. You can confirm that the date and time of your server are set correctly with the `date` command.
The server should respond with the date, time, time zone and year in a format similar to the following example:
```
Tue Jul 2 15:08:57 BST 2013
```
If the time on your server is wrong, we strongly recommend that you take LibreTime off-air until the problem is fixed.
## Configuring NTP
Although it is possible to set the date and time of the server manually, this is not recommended because the server clock can drift over time, compromising the accuracy of your broadcast schedule. If your LibreTime server is permanently connected to the Internet, you can synchronize your server to a time server with the **ntp** program. If **ntp** is not on your server, you can install it with `sudo apt-get install ntp`.
Optionally, open the **ntp** configuration file in the **nano** editor to add further time server names:
```
sudo nano /etc/ntp.conf
```
On Ubuntu GNU/Linux, the default time server is `ntp.ubuntu.com`, but there are many other time servers available on the public Internet, including the group of servers listed at https://www.pool.ntp.org/ for each country. Using a variety of NTP servers located closely to your LibreTime server should produce the most accurate results. For example, for a server in the United Kingdom you could use the following list:
```title="/etc/ntp.conf"
# You do need to talk to an NTP server or two (or three).
server ntp.ubuntu.com
server 0.uk.pool.ntp.org
server 1.uk.pool.ntp.org
server 2.uk.pool.ntp.org
server 3.uk.pool.ntp.org
```
Enter the server names you require, press **Ctrl+O** to write out the `/etc/ntp.conf` file, then **Ctrl+X** to exit **nano**. Restart the **ntp** service with `sudo systemctl restart ntp`.
The server should respond:
```
* Stopping NTP server ntpd [ OK ]
* Starting NTP server ntpd [ OK ]
```
Then use the **ntpq -p** command to confirm that **ntp** is working. This command should produce output similar to the following:
```
ntpq -p
remote refid st t when poll reach delay offset jitter
==================================================================
europium. 193.79.237.14 2 u 28 64 3 39.571 12.600 3.590
norb.v4.c 46.227.200.72 3 u 28 64 3 47.856 -6.908 10.028
82.113.15 193.62.22.82 2 u 29 64 3 11.458 -0.513 2.629
ntppub.le 158.43.192.66 2 u 91 64 2 122.781 44.864 0.001
dns0.rmpl 195.66.241.3 2 u 27 64 3 22.171 1.464 4.242
```
## Adjusting the server time zone
The data centre which hosts your LibreTime server could be located anywhere in the world. Some servers are set to _Coordinated Universal Time_ or UTC (similar to _Greenwich Mean Time_ or GMT), regardless of their location. LibreTime uses UTC time in its database for scheduling purposes, independent of the server time zone.
Find your timezone's shortcode with `timedatectl list-timezones`, then enter
```bash
sudo timedatectl set-timezone your_time_zone
```
:::tip
You can check to see which time zone your server is set to by running `timedatectl` without any arguments.
:::

View File

@ -0,0 +1,2 @@
label: Setup
position: 00

View File

@ -0,0 +1,168 @@
---
title: Configuration
sidebar_position: 20
---
To configure LibreTime, you need to edit the `/etc/airtime/airtime.conf` file. This page describe the available options to configure your installation.
## General
The `general` section configure anything related to the legacy and API services.
```ini
[general]
# The internal API authentication key, this field is required
api_key = some_random_generated_secret!
# The public url scheme
# Mutually exclusive with force_ssl
protocol =
# The public url hostname, default is localhost
base_url = localhost
# The public url port
base_port =
# The public url base path, default is /
base_dir = /
# Force https for generated urls, default is false
force_ssl = false
# How many hours ahead Playout should cache scheduled media files, default is 1
cache_ahead_hours = 1
# Authentication adaptor to use for the legacy service, default is local
# Specify a class like LibreTime_Auth_Adaptor_FreeIpa to replace the built-in adaptor
auth = local
```
In order to apply the changes made in this section, please restart the following services:
```
libretime-api
libretime-analyzer
libretime-celery
libretime-playout
```
## Database
The `database` section configure the PostgreSQL connection.
:::caution
<!-- TODO: Add link to a guide on how to edit such values -->
Before editing this section be sure to update the PostgreSQL server with the desired values.
:::
```ini
[database]
# The hostname of the PostgreSQL server, default is localhost
host = localhost
# The port of the PostgreSQL server, default is 5432
port = 5432
# The name of the PostgreSQL database, default is libretime
name = libretime
# The username of the PostgreSQL user, default is libretime
user = libretime
# The password of the PostgreSQL user, default is libretime
password = some_random_generated_secret!
```
In order to apply the changes made in this section, please restart the following services:
```
libretime-api
```
## RabbitMQ
The `rabbitmq` section configure the RabbitMQ connection.
:::caution
<!-- TODO: Add link to a guide on how to edit such values -->
Before editing this section be sure to update the RabbitMQ server with the desired values.
:::
```ini
[rabbitmq]
# The hostname of the RabbitMQ server, default is localhost
host = localhost
# The port of the RabbitMQ server, default is 5672
port = 5672
# The virtual host of RabbitMQ server, default is /libretime
vhost = /libretime
# The username of the RabbitMQ user, default is libretime
user = libretime
# The password of the RabbitMQ user, default is libretime
password = some_random_generated_secret!
```
In order to apply the changes made in this section, please restart the following services:
```
libretime-api
libretime-analyzer
libretime-celery
libretime-playout
```
## Playout
The `playout` section configure anything related to the playout service.
```ini
[playout]
# Liquidsoap connection host, default is localhost
liquidsoap_host = localhost
# Liquidsoap connection port, default is 1234
liquidsoap_port = 1234
# The format for recordings, allowed values are ogg|mp3, default is ogg
record_file_format = ogg
# The bitrate for recordings, default is 256
record_bitrate = 256
# The samplerate for recordings, default is 44100
record_samplerate = 44100
# The number of channels for recordings, default is 2
record_channels = 2
# The sample size for recordings, default is 16
record_sample_size = 16
```
In order to apply the changes made in this section, please restart the following services:
```
libretime-playout
```
## LDAP
The `ldap` section provide additional configuration for the authentication mechanism defined in `general.auth`, please see the [custom authentication documentation](../custom-authentication.md) for more details.
```ini
[ldap]
# Hostname of LDAP server
hostname = ldap.example.org
# Complete DN of user used to bind to LDAP
binddn = 'uid=libretime,cn=sysaccounts,cn=etc,dc=int,dc=example,dc=org'
# Password for binddn user
password = hackme
# Domain part of username
account_domain = INT.EXAMPLE.ORG
# Base search DN
basedn = 'cn=users,cn=accounts,dc=int,dc=example,dc=org'
# Name of the uid field for searching. Usually uid, may be cn
filter_field = uid
# Map user types to LDAP groups. Assign user types based on the group of a given user
# Key format is groupmap_*
groupmap_superadmin = 'cn=superadmin,cn=groups,cn=accounts,dc=int,dc=example,dc=org'
groupmap_admin = 'cn=admin,cn=groups,cn=accounts,dc=int,dc=example,dc=org'
groupmap_program_manager = 'cn=program_manager,cn=groups,cn=accounts,dc=int,dc=example,dc=org'
groupmap_host = 'cn=host,cn=groups,cn=accounts,dc=int,dc=example,dc=org'
groupmap_guest = 'cn=guest,cn=groups,cn=accounts,dc=int,dc=example,dc=org'
```

View File

@ -0,0 +1,181 @@
---
title: Install
sidebar_position: 10
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import CodeBlock from '@theme/CodeBlock';
import vars from '@site/vars';
This guide walk you though the steps required to install LibreTime on your system.
:::tip
If you are coming from **Airtime**, please follow the [Airtime migration guide](./migrate-from-airtime.md).
:::
You can install LibreTime using the one of the following methods:
- [:rocket: Using the installer](#using-the-installer)
- :construction: Using Ansible
#### Minimum system requirements
- One of the following Linux distributions
- Ubuntu [current LTS](https://wiki.ubuntu.com/Releases)
- Debian [current stable](https://www.debian.org/releases/)
- 1 Ghz Processor
- 2 GB RAM recommended (1 GB required)
- A static external IP address ([How to setup a static ip using Netplan](../tutorials/setup-a-static-ip-using-netplan.md))
## Using the installer
The installer is shipped in the released tarballs or directly in the project repository.
### Download
You can either download the latest released tarball or clone the repository.
<Tabs>
<TabItem label="Release tarball" value="tarball" default>
Download the [latest released](https://github.com/libretime/libretime/releases) tarball from Github.
Or directly from the command-line:
<CodeBlock language="bash">
wget https://github.com/libretime/libretime/releases/download/{vars.version}/libretime-{vars.version}.tar.gz
</CodeBlock>
And extract the tarball:
<CodeBlock language="bash">
tar -xvf libretime-{vars.version}.tar.gz && cd libretime
</CodeBlock>
</TabItem>
<TabItem label="Git repository" value="git">
Clone the project repository:
```bash
git clone https://github.com/libretime/libretime
cd libretime
```
:::caution
Don't use the https://github.com/libretime/libretime-debian-packaging repository, it is only used to create LibreTime packages.
:::
:::info
When upgrading, you should clean the local repository, pull the latest changes and finally check out the desired version:
```bash
cd libretime
git clean -xdf
git pull
```
:::
And checkout the latest version:
<CodeBlock language="bash">
git checkout {vars.version}
</CodeBlock>
</TabItem>
</Tabs>
### Run the installer
Install LibreTime with the recommended options:
```bash
sudo ./install -fiap
```
Additional options can be listed with the following command:
```bash
./install --help
```
:::info
When upgrading be sure to run the installer using the same arguments you used during the initial install.
:::
Once the installation is completed, open [http://localhost:80](http://localhost:80) to complete the [setup wizard](#setup-wizard).
:::note
- If installed on a remote device, make sure to replace `localhost` with your server's remote address.
- If installed with a custom port, make sure to replace `80` with the custom port.
:::
:::warning
Make sure that you have configured a **firewall** and it's not blocking connection to the desired ports.
- [How to setup a firewall using UFW](../tutorials/setup-a-firewall-using-ufw.md)
LibreTime requires the following ports to be open:
- `80` for the web interface,
- `8000` for the Icecast streams,
- `8001` and `8002` for the live stream input endpoint.
Consider putting your installation behind a [reverse proxy](./reverse-proxy.md) to increase the security.
:::
#### Using hardware audio output
If you plan to output analog audio directly to a mixing console or transmitter, the user running LibreTime (by default `www-data`) needs to be added to the `audio` user group using the command below:
```bash
sudo adduser www-data audio
```
### Setup wizard
The setup wizard walk you through the rest of the installation process.
#### Changing default passwords
It's recommended that you change the passwords prompted in the setup wizard. Be sure to apply the changes on the server before going to any next step.
You can change the default PostgreSQL user password using:
```bash
sudo -u postgres psql -c "ALTER USER airtime PASSWORD 'new-password';"
```
You can change the default RabbitMQ user password using:
```bash
sudo rabbitmqctl change_password "airtime" "new-password"
```
Once completed, it's recommended to [install a reverse proxy](./reverse-proxy.md) to setup SSL termination and secure your installation.
## Using packages
:::note
Usually the packages are built soon after a release is published.
:::
You can install LibreTime using packages on the distributions listed below, please follow further instruction provided by the links below:
- [Debian / Ubuntu packages](https://github.com/libretime/libretime-debian-packaging/releases)
- [CentOS packages](https://build.opensuse.org/package/show/home:radiorabe:airtime/libretime)

View File

@ -0,0 +1,40 @@
---
title: Migrate from Airtime
sidebar_position: 90
---
This guide walk you though the steps required to migrate your data from Airtime to LibreTime.
:::info
Airtime **linked files** and **watched folders** features are either deprecated or not working in LibreTime.
:::
LibreTime dropped support for Ubuntu 16.04, which is the last supported version of Ubuntu that Airtime supports.
## Make a backup
<!-- TODO: Airtime backup process might be different from the LibreTime one, we might need to write a dedicated backup guide here. -->
Follow [the backup guide](../backup.md) to make a backup of your current Airtime installation.
## Install
Install LibreTime on a new system by following the [install guide](./install.md), and **don't run the setup wizard**.
## Restore the backup
Restore [the Airtime backup](../backup.md#restore) on the newly installed LibreTime server.
You have to restore the **database**, the **files storage** and the **configuration files**.
## Update the configuration files
Update the configuration file to match the new configuration schema and update any changed values. See the [configuration](./configuration.md) documentation for more details.
Edit the Icecast password in `/etc/icecast2/icecast.xml` to reflect the password used in Airtime.
## Finish
Restart the LibreTime services and navigate to the LibreTime web-page.

View File

@ -0,0 +1,125 @@
---
title: Reverse proxy
sidebar_position: 30
---
In some deployments, the LibreTime server is deployed behind a reverse proxy,
for example in containerization use-cases such as Docker and LXC. LibreTime
makes extensive use of its API for some site features, which causes
[Cross-Origin Resource Sharing (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)
to occur. By default, CORS requests are blocked by your browser and the origins
need to be added to the **Allowed CORS URLs** block in
[**General Settings**](../../user-manual/settings.md). These origins should include any
domains that are used externally to connect to your reverse proxy that you
want handled by LibreTime. These URLS can also be set during the first run configuration
that's displayed when you first install LibreTime
### Reverse proxy basics
A reverse proxy allows the LibreTime server to not be connected to the open internet. In
this configuration, it's rather behind another server that proxies traffic to it from
users. This provides some advantages in the containerization space, as this means that
the containers can be on their own internal network, protected from outside access.
A reverse proxy also allows SSL to be terminated in a single location for multiple sites.
This means that all your traffic to the proxy from clients is encrypted, but the reverse
proxy's traffic to the containers on the internal network isn't. All the SSL certificates
live on the reverse proxy and can be renewed there instead of on the individual
containers.
### Setup
For SSL redirection to work, you need two domains: one for LibreTime and one for Icecast.
Here, these will be `libretime.example.com` and `icecast.example.com`.
You require two VMs, servers or containers. Alternatively the reverse proxy can
be located on the server, proxying connections to containers also on the host. Setting up
a containerization environment is beyond the scope of this guide. It assumes that you have
Nginx set up on `localhost` and LibreTime will be installed on `192.168.1.10`. You will need root
access on both. `192.168.1.10` also needs to be able to be accessed from `localhost`
(`ping 192.168.1.10` on `localhost`).
On `192.168.1.10`, install LibreTime as described in the [install guide](./install.md). Once it has installed, replace `<hostname>localhost</hostname>` in
`/etc/icecast2/icecast.xml` with the following:
```xml
<hostname>icecast.example.com</hostname>
```
This is the hostname that people listening to your stream will connect to and what
LibreTime will use to stream out to them. You will then need to restart Icecast using `sudo systemctl restart icecast2`.
On `localhost`, run the following:
```bash
cat << EOF | sudo tee /etc/nginx/sites-available/libretime.conf
server {
listen 80;
server_name libretime.example.com;
location / {
rewrite ^ https://$server_name$request_uri? permanent;
}
}
server {
listen 443 ssl;
server_name libretime.example.com;
ssl_certificate /etc/letsencrypt/live/libretime.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/libretime.example.com/privkey.pem;
add_header Strict-Transport-Security "max-age=15552000;";
add_header X-Frame-Options "SAMEORIGIN";
client_max_body_size 512M;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://192.168.1.10/;
}
}
EOF
```
This Nginx configuration ensures that all traffic uses SSL to the reverse proxy, and
traffic is proxied to `192.168.1.10`.
Next, the SSL certificate needs to be generated and the site activated.
```
sudo apt install certbot
sudo systemctl stop nginx
sudo certbot certonly -d libretime.example.com -a standalone
sudo systemctl start nginx
```
You can now go to `https://libretime.example.com` and go
through the installer. On `General Settings`, you need to change the Webserver Port to
`443` and add the following CORS URLs:
```
https://libretime.example.com
http://libretime.example.com
https://localhost
http://localhost
```
Finally, the configuration file needs updating. Under `[general]`, `force_ssl`
needs to be set to true:
```ini
[general]
...
force_ssl = true
```
## SSL Configuration
To increase the security of your server, you can enable encrypted access to the LibreTime administration interface, and direct your users towards this more secure login page. The main advantage of using this encryption is that your remote users' login names and passwords are not sent in plain text across the public Internet or untrusted local networks, such as shared Wi-Fi access points.
## Deploying a certificate with Certbot
One of the fastest, easiest, and cheapest ways to get an SSL certificate is through [Certbot](https://certbot.eff.org/), as created by the
Electronic Frontier Foundation. To use Certbot, your LibreTime installation must be open to the internet on port 80.
Follow [Certbot's documentation](https://certbot.eff.org/instructions) for your OS and webserver to install an SSL certificate. You'll need to renew the certificate every 90 days to keep your installation secure.
## Mixed encrypted and unencrypted content
Whether your certificate is self-signed or not, you will see browser security warnings whenever a https:// page is delivering unencrypted content, such as the stream from an Icecast server. In Firefox, an exclamation mark icon is displayed in the address bar of the **Listen** pop-up.

View File

@ -0,0 +1,71 @@
---
title: Upgrade
sidebar_position: 80
---
This guide walk you though the steps required to upgrade LibreTime.
:::tip
You should always have proper backups and a rollback scenario in place before updating. If the update does not go smoothly, it may cause significant downtime, so you should always have a fallback system available during the update to ensure **broadcast continuity**.
:::
## Make a backup
Follow [the backup guide](../backup.md) to make an extra backup of your installation and prepare a rollback scenario in case of accidental data loss during the upgrade process.
## Install the new version
Follow [the install guide](./install.md#download) to download and install the new version, and re-run the `./install` script with the same arguments you used during the initial install.
## Apply upgrade instructions
Be sure to carefully read **all** the [releases notes](../../releases/README.md), from your current version to the targeted version, to apply upgrade or breaking changes instructions to your installation.
## Apply migrations
Run the following command to apply the database migrations:
```bash
libretime-api migrate
```
## Restart the services
Restart all the services to make sure all the changes are applied.
```bash
sudo systemctl daemon-reload
sudo systemctl restart \
libretime-analyzer \
libretime-api \
libretime-celery \
libretime-playout \
libretime-liquidsoap \
apache2
```
## Verify
Verify that all the services are still running after the install process:
```bash
sudo systemctl status \
libretime-analyzer \
libretime-api \
libretime-celery \
libretime-playout \
libretime-liquidsoap \
apache2
```
Verify for any error in the logs after the install process:
```bash
sudo tail -f -n 100 "/var/log/syslog" | grep "libretime-"
```
Log into the interface and verify for any error after the install process.
If you encounter issues with the new interface, you may need to clear your web browser's cache.

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

View File

@ -0,0 +1,52 @@
---
title: Troubleshooting
sidebar_position: 90
---
This guide walk you though the steps required to troubleshoot LibreTime.
## Services status
When facing a problem with LibreTime the first reflex is to verify whether the services are running.
In the web interface, go to **Settings** > **Status** to see the state of the services.
![](./troubleshooting-status-page.png)
If a service isn't running, you should search for details using the tool running those services.
On a common setup, you should use the systemd service status:
```bash
sudo systemctl status libretime-celery
```
:::note
Be sure to replace the service name with the problematic one.
:::
## Logs
The next place to search for details on potential errors are the log files.
On a common setup, you should search for the following files:
- `/var/log/libretime/analyzer.log` contains logs from the analyzer,
- `/var/log/libretime/api.log` contains logs from the api,
- `/var/log/libretime/legacy.log` contains logs from the legacy app,
- `/var/log/libretime/liquidsoap.log` contains logs from liquidsoap,
- `/var/log/libretime/playout.log` contains logs from playout.
For some LibreTime services, you can set a higher log level using the `LIBRETIME_LOG_LEVEL` environment variable, or by running the service by hand and using a command line flag:
```bash
sudo -u www-data libretime-analyzer --config /etc/airtime/airtime.conf --log-level debug
```
- `/var/log/syslog` contains most of the system logs combined. This log file may contain information that the application logger wasn't able to log, such as early startup errors. You can get the LibreTime logs using:
```bash
sudo tail -f "/var/log/syslog" | grep "libretime-"
```
- `/var/log/apache2/error.log` contains logs from the web server.

View File

@ -0,0 +1,4 @@
# Always add "How to" at the beginning of your tutorials title
#
label: Tutorials
position: 99

View File

@ -0,0 +1,28 @@
---
title: How to setup a firewall using UFW
---
This tutorials will walk you though the steps required to setup a firewall using [UFW](https://doc.ubuntu-fr.org/ufw).
## 1. Install and enable `UFW`
First you need to make sure UFW is installed and enabled:
```bash
sudo apt install ufw
sudo ufw enable
```
## 2. Configure allowed ports
Next, you need to configure the firewall allowed ports:
```bash
sudo ufw allow 22,80,8000/tcp
```
If you plan to use the live stream input endpoint, be sure to open the `8001` and `8002` ports:
```bash
sudo ufw allow 8001,8002/tcp
```

View File

@ -0,0 +1,44 @@
---
title: How to setup a static ip using Netplan
---
This tutorials will walk you though the steps required to configure a server static IP address by modifying the [Netplan](https://netplan.io/reference/) configuration.
## 1. Edit the configuration
First find the right Netplan configuration filename, and edit the file:
```bash
cd /etc/netplan && ls # find the netplan filename
sudo nano ##-network-manager-all.yaml
```
If the Netplan configuration is empty, fill in the file with the example below. Otherwise,
input the IP address reserved for the server in `xxx.xxx.xxx.xxx/yy` format, the gateway (the IP address
of your router), and your DNS server's address.
```yaml
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses: [192.168.88.8/24]
gateway4: 192.168.88.1
nameservers:
addresses: [192.168.88.1]
```
:::tip
If you don't have your own DNS server you can use the router's address in most cases or a public DNS server like Google `8.8.8.8` or Cloudflare `1.1.1.1`.
:::
## 2. Apply the configuration
After the Netplan file has been saved, apply the changes by running:
```bash
sudo netplan apply
```

View File

@ -0,0 +1,2 @@
label: Appendix
position: 70

View File

@ -0,0 +1,316 @@
---
title: HD Audio modules
---
This listing is provided to help ensure that the correct model parameter is passed to the ALSA kernel module for an Intel HDA soundcard, if one is fitted to your LibreTime server.
```
Model name Description
---------- -----------
ALC880
======
3stack 3-jack in back and a headphone out
3stack-digout 3-jack in back, a HP out and a SPDIF out
5stack 5-jack in back, 2-jack in front
5stack-digout 5-jack in back, 2-jack in front, a SPDIF out
6stack 6-jack in back, 2-jack in front
6stack-digout 6-jack with a SPDIF out
ALC260
======
N/A
ALC262
======
inv-dmic Inverted internal mic workaround
ALC267/268
==========
inv-dmic Inverted internal mic workaround
ALC269/270/275/276/28x/29x
======
laptop-amic Laptops with analog-mic input
laptop-dmic Laptops with digital-mic input
alc269-dmic Enable ALC269(VA) digital mic workaround
alc271-dmic Enable ALC271X digital mic workaround
inv-dmic Inverted internal mic workaround
headset-mic Indicates a combined headset (headphone+mic) jack
lenovo-dock Enables docking station I/O for some Lenovos
dell-headset-multi Headset jack, which can also be used as mic-in
dell-headset-dock Headset jack (without mic-in), and also dock I/O
ALC66x/67x/892
==============
mario Chromebook mario model fixup
asus-mode1 ASUS
asus-mode2 ASUS
asus-mode3 ASUS
asus-mode4 ASUS
asus-mode5 ASUS
asus-mode6 ASUS
asus-mode7 ASUS
asus-mode8 ASUS
inv-dmic Inverted internal mic workaround
dell-headset-multi Headset jack, which can also be used as mic-in
ALC680
======
N/A
ALC88x/898/1150
======================
acer-aspire-4930g Acer Aspire 4930G/5930G/6530G/6930G/7730G
acer-aspire-8930g Acer Aspire 8330G/6935G
acer-aspire Acer Aspire others
inv-dmic Inverted internal mic workaround
no-primary-hp VAIO Z/VGC-LN51JGB workaround (for fixed speaker DAC)
ALC861/660
==========
N/A
ALC861VD/660VD
==============
N/A
CMI9880
=======
minimal 3-jack in back
min_fp 3-jack in back, 2-jack in front
full 6-jack in back, 2-jack in front
full_dig 6-jack in back, 2-jack in front, SPDIF I/O
allout 5-jack in back, 2-jack in front, SPDIF out
auto auto-config reading BIOS (default)
AD1882 / AD1882A
================
3stack 3-stack mode
3stack-automute 3-stack with automute front HP (default)
6stack 6-stack mode
AD1884A / AD1883 / AD1984A / AD1984B
====================================
desktop 3-stack desktop (default)
laptop laptop with HP jack sensing
mobile mobile devices with HP jack sensing
thinkpad Lenovo Thinkpad X300
touchsmart HP Touchsmart
AD1884
======
N/A
AD1981
======
basic 3-jack (default)
hp HP nx6320
thinkpad Lenovo Thinkpad T60/X60/Z60
toshiba Toshiba U205
AD1983
======
N/A
AD1984
======
basic default configuration
thinkpad Lenovo Thinkpad T61/X61
dell_desktop Dell T3400
AD1986A
=======
6stack 6-jack, separate surrounds (default)
3stack 3-stack, shared surrounds
laptop 2-channel only (FSC V2060, Samsung M50)
laptop-eapd 2-channel with EAPD (ASUS A6J)
laptop-automute 2-channel with EAPD and HP-automute (Lenovo N100)
ultra 2-channel with EAPD (Samsung Ultra tablet PC)
samsung 2-channel with EAPD (Samsung R65)
samsung-p50 2-channel with HP-automute (Samsung P50)
AD1988/AD1988B/AD1989A/AD1989B
==============================
6stack 6-jack
6stack-dig ditto with SPDIF
3stack 3-jack
3stack-dig ditto with SPDIF
laptop 3-jack with hp-jack automute
laptop-dig ditto with SPDIF
auto auto-config reading BIOS (default)
Conexant 5045
=============
laptop-hpsense Laptop with HP sense (old model laptop)
laptop-micsense Laptop with Mic sense (old model fujitsu)
laptop-hpmicsense Laptop with HP and Mic senses
benq Benq R55E
laptop-hp530 HP 530 laptop
test for testing/debugging purpose, almost all controls
can be adjusted. Appearing only when compiled with
$CONFIG_SND_DEBUG=y
Conexant 5047
=============
laptop Basic Laptop config
laptop-hp Laptop config for some HP models (subdevice 30A5)
laptop-eapd Laptop config with EAPD support
test for testing/debugging purpose, almost all controls
can be adjusted. Appearing only when compiled with
$CONFIG_SND_DEBUG=y
Conexant 5051
=============
laptop Basic Laptop config (default)
hp HP Spartan laptop
hp-dv6736 HP dv6736
hp-f700 HP Compaq Presario F700
ideapad Lenovo IdeaPad laptop
toshiba Toshiba Satellite M300
Conexant 5066
=============
laptop Basic Laptop config (default)
hp-laptop HP laptops, e g G60
asus Asus K52JU, Lenovo G560
dell-laptop Dell laptops
dell-vostro Dell Vostro
olpc-xo-1_5 OLPC XO 1.5
ideapad Lenovo IdeaPad U150
thinkpad Lenovo Thinkpad
STAC9200
========
ref Reference board
oqo OQO Model 2
dell-d21 Dell (unknown)
dell-d22 Dell (unknown)
dell-d23 Dell (unknown)
dell-m21 Dell Inspiron 630m, Dell Inspiron 640m
dell-m22 Dell Latitude D620, Dell Latitude D820
dell-m23 Dell XPS M1710, Dell Precision M90
dell-m24 Dell Latitude 120L
dell-m25 Dell Inspiron E1505n
dell-m26 Dell Inspiron 1501
dell-m27 Dell Inspiron E1705/9400
gateway-m4 Gateway laptops with EAPD control
gateway-m4-2 Gateway laptops with EAPD control
panasonic Panasonic CF-74
auto BIOS setup (default)
STAC9205/9254
=============
ref Reference board
dell-m42 Dell (unknown)
dell-m43 Dell Precision
dell-m44 Dell Inspiron
eapd Keep EAPD on (e.g. Gateway T1616)
auto BIOS setup (default)
STAC9220/9221
=============
ref Reference board
3stack D945 3stack
5stack D945 5stack + SPDIF
intel-mac-v1 Intel Mac Type 1
intel-mac-v2 Intel Mac Type 2
intel-mac-v3 Intel Mac Type 3
intel-mac-v4 Intel Mac Type 4
intel-mac-v5 Intel Mac Type 5
intel-mac-auto Intel Mac (detect type according to subsystem id)
macmini Intel Mac Mini (equivalent with type 3)
macbook Intel Mac Book (eq. type 5)
macbook-pro-v1 Intel Mac Book Pro 1st generation (eq. type 3)
macbook-pro Intel Mac Book Pro 2nd generation (eq. type 3)
imac-intel Intel iMac (eq. type 2)
imac-intel-20 Intel iMac (newer version) (eq. type 3)
ecs202 ECS/PC chips
dell-d81 Dell (unknown)
dell-d82 Dell (unknown)
dell-m81 Dell (unknown)
dell-m82 Dell XPS M1210
auto BIOS setup (default)
STAC9202/9250/9251
==================
ref Reference board, base config
m1 Some Gateway MX series laptops (NX560XL)
m1-2 Some Gateway MX series laptops (MX6453)
m2 Some Gateway MX series laptops (M255)
m2-2 Some Gateway MX series laptops
m3 Some Gateway MX series laptops
m5 Some Gateway MX series laptops (MP6954)
m6 Some Gateway NX series laptops
auto BIOS setup (default)
STAC9227/9228/9229/927x
=======================
ref Reference board
ref-no-jd Reference board without HP/Mic jack detection
3stack D965 3stack
5stack D965 5stack + SPDIF
5stack-no-fp D965 5stack without front panel
dell-3stack Dell Dimension E520
dell-bios Fixes with Dell BIOS setup
dell-bios-amic Fixes with Dell BIOS setup including analog mic
volknob Fixes with volume-knob widget 0x24
auto BIOS setup (default)
STAC92HD71B*
============
ref Reference board
dell-m4-1 Dell desktops
dell-m4-2 Dell desktops
dell-m4-3 Dell desktops
hp-m4 HP mini 1000
hp-dv5 HP dv series
hp-hdx HP HDX series
hp-dv4-1222nr HP dv4-1222nr (with LED support)
auto BIOS setup (default)
STAC92HD73*
===========
ref Reference board
no-jd BIOS setup but without jack-detection
intel Intel DG45* mobos
dell-m6-amic Dell desktops/laptops with analog mics
dell-m6-dmic Dell desktops/laptops with digital mics
dell-m6 Dell desktops/laptops with both type of mics
dell-eq Dell desktops/laptops
alienware Alienware M17x
auto BIOS setup (default)
STAC92HD83*
===========
ref Reference board
mic-ref Reference board with power management for ports
dell-s14 Dell laptop
dell-vostro-3500 Dell Vostro 3500 laptop
hp-dv7-4000 HP dv-7 4000
hp_cNB11_intquad HP CNB models with 4 speakers
hp-zephyr HP Zephyr
hp-led HP with broken BIOS for mute LED
hp-inv-led HP with broken BIOS for inverted mute LED
auto BIOS setup (default)
STAC9872
========
vaio VAIO laptop without SPDIF
auto BIOS setup (default)
Cirrus Logic CS4206/4207
========================
mbp55 MacBook Pro 5,5
imac27 IMac 27 Inch
auto BIOS setup (default)
Cirrus Logic CS4208
===================
mba6 MacBook Air 6,1 and 6,2
gpio0 Enable GPIO 0 amp
auto BIOS setup (default)
VIA VT17xx/VT18xx/VT20xx
========================
auto BIOS setup (default)
```

View File

@ -0,0 +1,84 @@
---
title: Rights and royalties
---
If you're new to broadcasting, or have not streamed your station online before,
reading the following brief explanation of compensation rules for songwriters,
musicians and other copyright holders may save you a great deal of trouble
later.
Independent music radio on the Internet has faced royalty demands from
SoundExchange in the USA, and similar organizations in other territories. These
organizations are usually membership societies or government-sanctioned national
authorities which are intended to collect money from broadcasters to compensate
copyright holders. The royalty collection societies require payment before you
can stream just about any music released commercially to the general public -
whether you make any money out of streaming, or not. It's not so much the
percentage of revenue demanded, but that there are usually annual minimum fees
to pay, which can hurt small stations disproportionately.
For example, in the UK, the MCPS-PRS Limited Online Music Licence covers
non-commercial music streaming by groups and individuals, as long as their gross
revenue is less then £12,500 per year. The cost is on a sliding scale, up to
£1,120 plus 20% tax per year for delivering up to 450,000 individual streams or
serving 25,000 files; after that, you have to apply for a full MCPS-PRS Online
Music Licence. That doesn't sound too bad at first, but 25,000 files per year
works out at less than four downloads per hour for a round-the-clock website.
This particular licence only covers publishing (songwriter) rights, not
recording (record label and musician's performance) rights, so you have to
negotiate an additional licence from Phonographic Performance Limited (PPL) to
play music online, including digital recordings converted from commercially
released CDs, vinyl or tape.
Typically, you have to provide full statistical details to the royalty society
of all music streamed or downloaded from your site, which can be onerous. Even
if your radio station is mostly speech, there are many limitations in the small
print of these music licences. For instance, you can't use music for
promotional purposes, and you can't stream a whole opera, without negotiating
separate licences. Weirdly, you are not allowed to play a piece of music in a
'derogatory context' to the writer or performers; no drummer jokes allowed,
then.
However, the biggest pitfall is that these MCPS-PRS licences for publishing
rights only cover listeners in the UK. For recording rights, PPL is a member of
the IFPI reciprocal scheme for webcasters, which means its licenses cover
listeners in some European countries, Australia, New Zealand and a few other
countries, but not listeners in the USA or Canada. So if your Internet station
picked up a significant number of listeners in countries not covered by the
MCPS-PRS licences or the IFPI reciprocal scheme, you would have to pay for
similar music licences in those countries as well. It's no wonder that many
not-for-profit radio stations have disappeared from the virtual airwaves over
the last few years, since not having the right licences could leave the operator
liable to legal action.
If you want to go down the commercial music route, check out the
https://www.prsformusic.com and https://www.ppluk.com websites for UK licence
details. In the USA, the https://www.soundexchange.com website currently quotes
a 500 dollar minimum annual fee for non-commercial webcasters, plus a usage fee
above a certain number of listener hours, for the right to stream music
recordings to listeners. See the websites of [ASCAP](https://www.ascap.com),
[BMI](https://www.bmi.com) and [SESAC](https://www.sesac.com) for details of music
publishing royalties payable by webcasters streaming to the USA.
Free content streaming offers an alternative for DIY Internet radio. Since
royalty collection societies like MCPS-PRS and SoundExchange can only represent
the interests of their own members, it follows that if you are not a member, you
can stream your own self-produced content without paying for their licences. If
you state somewhere on your website that the stream is of your own copyrighted
material, and is made available to the public under a specific licence, then
no-one should misunderstand your intentions.
You might be able to persuade other people to allow you to stream their content
too, as long as they do not have a conflicting legal obligation, such as having
previously joined one of the many royalty collection societies around the world.
You can ask for permission to stream when website visitors upload their own
music files to you via a HTML form, much as the likes of SoundCloud do. Or you
can collect files licensed under an appropriate Creative Commons licence
(https://www.creativecommons.org) or other free content licence.
Explicit permission to stream on your particular server is always going to be
the ideal, so think about your own terms and conditions before you accept files
from third parties for streaming. How, for example, would you know if someone
uploaded a file to your online radio station that unknown to you, had been
ripped from a commercially released CD? That's the kind of thing that could get
you in trouble with the licensing authorities and copyright holders.

View File

@ -0,0 +1,13 @@
---
title: Developer manual
---
Welcome to the **LibreTime developer manual**, you should find guides to integrate LibreTime and tools to improve and contribute to LibreTime.
## Integrate LibreTime
- :construction: Work in progress
## Improve and contribute to LibreTime
- :construction: Work in progress

View File

@ -0,0 +1,2 @@
label: Developer manual
position: 40

View File

@ -0,0 +1,131 @@
---
title: Development environment
---
## Vagrant
To use Vagrant, you need to install a virtualization engine: [VirtualBox](https://www.virtualbox.org) or Libvirt. The [vagrant-vbguest] package on Github can help maintain guest extensions on host systems using VirtualBox.
:::tip
If you try run a libvirt provided box after using a VirtualBox one, you will receive an
error:
```
Error while activating network:
Call to virNetworkCreate failed: internal error: Network is already in use by interface vboxnet0.
```
This is fixed by stopping virtualbox and re-creating the vagrant box:
```bash
sudo systemctl stop virtualbox
vagrant destroy bionic
vagrant up bionic --provider=libvirt
```
:::
### Installing Libvirt
On Debian and Ubuntu:
1. Install Vagrant
```bash
sudo apt install vagrant vagrant-libvirt libvirt-daemon-system vagrant-mutate libvirt-dev
sudo usermod -aG libvirt $USER
```
2. Reboot your computer, and then run
```bash
vagrant box add bento/ubuntu-18.04 --provider=virtualbox
vagrant mutate bento/ubuntu-18.04 libvirt
vagrant up bionic --provider=libvirt
```
On other distributions, you will need to install [libvirt](https://libvirt.org/) and `vagrant-mutate` and then run
```bash
vagrant plugin install vagrant-libvirt
sudo usermod -a -G libvirt $USER
# Reboot
vagrant plugin install vagrant-mutate
vagrant box fetch bento/ubuntu-18.04
vagrant mutate bento/ubuntu-18.04 libvirt
vagrant up bionic --provider=libvirt
```
### Starting LibreTime Vagrant
To get started you clone the repo and run `vagrant up`. The command accepts a parameter to
change the default provider if you have multiple installed. This can be done by appending
`--provider=virtualbox` or `--provider=libvirt` as applicable.
```bash
git clone https://github.com/libretime/libretime
cd libretime
vagrant up bionic
```
If everything works out, you will find LibreTime on [port 8080](http://localhost:8080)
and Icecast on [port 8000](http://localhost:8000).
Once you reach the web setup GUI you can click through it using the default values. To
connect to the vagrant machine you can run `vagrant ssh bionic` in the libretime
directory.
### Alternative OS installations
With the above instructions LibreTime is installed on Ubuntu Bionic. The Vagrant setup
offers the option to choose a different operation system according to you needs.
| OS | Command | Comment |
| ------------ | --------------------- | ----------------------------------------------------------- |
| Debian 10 | `vagrant up buster` | Install on Debian Buster. |
| Debian 11 | `vagrant up bullseye` | Install on Debian Bullseye. |
| Ubuntu 18.04 | `vagrant up bionic` | Install on Ubuntu Bionic Beaver. |
| Ubuntu 20.04 | `vagrant up focal` | Install on Ubuntu Focal Fossa. |
| CentOS | `vagrant up centos` | CentOS 8 with native systemd support and activated SELinux. |
### Troubleshooting
If anything fails during the initial provisioning step you can try running `vagrant provision`
to re-run the installer.
If you only want to re-run parts of the installer, use `--provision-with $step`. The
supported steps are `prepare` and `install`.
## Multipass
[Multipass](https://multipass.run) is a tool for easily setting up Ubuntu VMs on Windows, Mac, and Linux.
Similar to Docker, Multipass works through a CLI. To use, clone this repo and then create a new Multipass VM.
```
git clone https://github.com/libretime/libretime
cd libretime
multipass launch bionic -n ltTEST --cloud-init cloud-init.yaml
multipass shell ltTEST
```
Multipass isn't currently able to do an automated install from the cloud-init script.
After you enter the shell for the first time, you will still need to [run the LibreTime installer](../admin-manual/setup/install.md).
The IP address of your new VM can be found by running `multipass list`. Copy and paste it into your web browser to access the LibreTime interface and complete the setup wizard.
You can stop the VM with `multipass stop ltTEST` and restart with `multipass start ltTEST`.
If you want to delete the image and start again, run `multipass delete ltTEST && multipass purge`.
### Cloud-init options in cloud-init.yaml
You may wish to change the below fields as per your location.
```yaml
timezone: America/New York # change as needed
ntp:
pools: ["north-america.pool.ntp.org"]
servers: ["0.north-america.pool.ntp.org", "0.pool.ntp.org"]
```

View File

@ -0,0 +1,70 @@
---
title: LibreTime API usage
---
:::info
We're in the process of rewriting LibreTime's API. This page contains the instructions for the current version, written in PHP.
:::
The LibreTime API enables many types of information about the broadcast schedule and configuration to be retrieved from the LibreTime server. Other than the live-info and week-info data fetched by website widgets (see the chapter _Exporting the schedule_), all API requests must be authenticated using the secret API key stored in the file `/etc/airtime/api_client.cfg` on the LibreTime server. This key is autogenerated during LibreTime installation and should be unique for each server.
If you intend to use the LibreTime API across a public network, for security reasons it is highly recommended that all API requests are sent over encrypted https: and that the web server is configured to accept requests to the api/ directory from specific host names or IP addresses only.
The format of API requests is:
```
https://libretime.example.com/api/api-action/format/json/api_key/XXXXXX
```
where api-action is the type of request and XXXXXX is the secret API key. Available actions include:
- on-air-light - return true if the station is on air
- status - get the status of LibreTime components and resource usage
- version - returns the version of LibreTime installed
- get-files-without-silan-value - list files for which silence detection has not yet been performed
- get-stream-setting - gets the settings of LibreTime output streams
- get-stream-parameters - gets the parameters of LibreTime output streams
For example, using the action _get-stream-setting_ returns the following output for the first configured stream:
```json
{"keyname":"s1_type","value":"ogg","type":"string"},
{"keyname":"s1_host","value":"streaming.example.com","type":"string"},
{"keyname":"s1_port","value":"8000","type":"integer"},
{"keyname":"s1_mount","value":"airtime_128","type":"string"},
{"keyname":"s1_url","value":"http:\/\/airtime.sourcefabric.org","type":"string"},
{"keyname":"s1_description","value":"Airtime Radio! Stream #1","type":"string"},
{"keyname":"s1_genre","value":"Screamo","type":"string"},
```
which is enough information to construct a player widget dynamically. (s1_url is the station's homepage, not the stream URL). The same information is provided with an s2\_ prefix for the second stream, and s3\_ prefix for the third stream.
Some API requests require the directory ID number to be specified as _dir_id_ including:
- list-all-files - list files in the specified directory
- get-files-without-replay-gain - list files in the specified directory for which ReplayGain has not been calculated yet
For example, using a request such as:
```
http://libretime.example.com/api/list-all-files/format/json/api_key/XXXXXX/dir_id/1/
```
returns the full path to each media file in the LibreTime storage directory:
```json
{
"files": [
"imported/1/Mark Ronson feat. Saigon/Here Comes the Fuzz/7-Diduntdidunt-unknown.flac",
"imported/1/Jimi Tenor & Tony Allen/Inspiration Information/3-Selfish Gene-128kbps.mp3"
]
}
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

View File

@ -0,0 +1,33 @@
---
title: Widgets
---
Bring your LibreTime broadcast to your website with embeddable widgets! LibreTime comes with two widgets: a streaming player and a schedule. Both widgets use iframes to display and can be placed wherever embeddable code can on a website.
## Getting started
Before using the widgets, make sure LibreTime's Public API is enabled in **Settings** > **General**.
![](./widgets-widgets_settings.png)
:::tip Note
LibreTime widgets cannot function through VPNs or SSH tunneling. The instance must be accessible from the internet for the widgets to work.
:::
## Streaming player widget
The streaming player widget inserts your LibreTime stream into your website. One example is from [WRCS Community Radio](https://wcrsfm.org/) in Columbus, Ohio, USA.
<iframe frameborder="0" width="400" height="235" src="http://broadcast.wcrsfm.org/embed/player?stream=auto&title=Now Playing"></iframe>
![](./widgets-widgets_player.png)
From **Widgets** > **Player**, enter a title for your streaming widget and select what stream you'd like to use. All selectible streams must first be configured in **Settings** > **Streams** (see [Settings](../user-manual/settings.md)). **Auto detect** should be fine for most.
## Show schedule widget
![](./widgets-widgets_schedule.png)
The show schedule widget displays the upcoming shows for the next seven days. There are no customizable settings for this widget.

View File

@ -0,0 +1,23 @@
---
title: LibreTime 3.0.0 alpha
---
import ReleaseHead from './\_release-head.md';
<ReleaseHead date="2017-03-15" version="3.0.0-alpha"/>
The first release from the LibreTime Community.
## :rocket: Features
- Working installer for Debian and Ubuntu
- Automated Vagrant setup for developers on either Debian, Ubuntu or CentOS
- Removed visible legacy upstream branding
- Disable most legacy upstream "pro" SaaS integrations
- "pro" widgets for everyone
- AutoDJ support for shows
- Tons of bugfixes like working silan cue cuts and more
Some features that went missing in legacy upstream "pro" branch have been back-ported while others are still waiting for such treatment.
The attached debian package is considered unstable as it has not had any serious testing at all. It mainly demonstrates that we are able to build one.

View File

@ -0,0 +1,96 @@
---
title: LibreTime 3.0.0 alpha 1
---
import ReleaseHead from './\_release-head.md';
<ReleaseHead date="2017-04-20" version="3.0.0-alpha.1"/>
## :rocket: Features
- Make overriding of album tag in downloaded Podcasts configurable
- Configurable master and show sources in settings
- Version check on main interface against Github
- updated i18n strings (complete ru_RU translation)
- Allow closing "Scheduled Shows" tab in Showbuilder
- FreeIPA Auth Adaptor
## :bug: Bug fixes
- Use `restart=always` in systemd installs
- Do not depend on hardcoded admin password for autoplaylist feature
- more legacy upstream branding removal
- restore table settings (ie. columns and sort) on login
- translatable radio page
- line-in recording almost works again
- no more oopsing on week info API
## :fire: Deprecation and removal
- The `ubuntu` Vagrant box has been replaced with `ubuntu-xenial` and `ubuntu-trusty`. The `debian` box has been replaced with `debian-jessie` and `debian-wheezy`. Users of the old boxes should switch to a new box so we can drop the old box after this release.
## :warning: Known issues
The following issues need a workaround for the time being. Please search the [issues](https://github.com/libretime/libretime/issues) before reporting problems not listed below.
### Outdated silan reports unreliable cue in/out information
Out of the box the installer installs a broken, outdated version of silan on all Debian based Platforms (ie. Ubuntu). This affects all distros supported by the installer except CentOS which does not have upstream packages and you may either install from source or use the [0.3.3 packages](https://github.com/radiorabe/centos-rpm-silan) from [RaBe APEL](https://build.opensuse.org/project/show/home:radiorabe:audio).
You can check the version of silan by running with `silan --version` which should report `0.3.3` or with `sudo dpkg -s silan | awk '/Version/ {print $2}'` that will show the exact package version you installed. Please include this information if you file bugs concerning silan.
There are multiple workarounds to this issue and [a bug against the upstream](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=855319) has been opened with Debian. Until this is sorted you should pre-install silan from a source you trust. If your distro has not updated to 0.3.3 yet you can also help by asking your distros maintainers for a bump.
The following solutions have been reported to work.
#### Silan from OBS build (https://github.com/libretime/libretime/issues/177#issuecomment-299195796)
Works for all relevant Debian and Ubuntu distros and installs silan `0.3.3~nmu1`.
```bash
sudo apt-get update
sudo apt-get install apt-transport-https
# install package signing key from obs
wget -qO- https://download.opensuse.org/repositories/home:/hairmare:/silan/Debian_7.0/Release.key \
| apt-key add -
# add OBS repo to sources list (pick the distro you need)
# Debian Wheezy
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/Debian_7.0 ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# Debian Jessie
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/Debian_8.0 ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# Ubuntu Trusty
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/xUbuntu_14.04 ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# Ubuntu Xenial
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/xUbuntu_16.04 ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# update local package database
apt-get update
# install silan 0.3.3 from obs packages
apt-get install silan
```
#### Legacy upstream silan packages (https://github.com/libretime/libretime/issues/197)
Legacy Upstream hosts patched packages for Ubuntu Trusty on `apt.sourcefabric.org`. They install as `0.3.2~trusty~sfo-1`.
```bash
sudo apt-get update
sudo apt-get install apt-transport-https
sudo tee -a /etc/apt/sources.list <<EOD
deb https://apt.sourcefabric.org/ trusty main
EOD
sudo apt-get update
sudo apt-get install sourcefabric-keyring
sudo apt-get update
sudo apt-get install --reinstall silan=0.3.2~trusty~sfo-1
```

View File

@ -0,0 +1,157 @@
---
title: LibreTime 3.0.0 alpha 2
---
import ReleaseHead from './\_release-head.md';
<ReleaseHead date="2017-07-11" version="3.0.0-alpha.2"/>
## :rocket: Features
- Updated [upgrade docs](https://libretime.org/docs/admin-manual/setup/upgrade/)
- PHP 7.0 support
- Native systemd unit files on all supported distributions
## :bug: Bug fixes
- Fix reversed name & description fields in stream 3 additional options
- Use file-magic instead of python-magic for working install with distribution packages
- Use local angular install on radio page instead of cdn
- Allow deleting of initial admin user
- Fix git attribute issues with the docs
- and some more small stuff
## :fire: Deprecation and removal
- The installer distribution selection process has been upgraded and the `--distribution` and `--release` parameters are not needed anymore. They are still supported for the time being but their use is not recommended.
### Deprecation of Debian 7 (Wheezy)
This info is an early warning that we are deprecating a major os version.
Debian 9 (Stretch) is now available and installing LibreTime on Wheezy probably never worked properly out of the box.
## :warning: Known issues
The following issues need a workaround for the time being. Please search the [issues](https://github.com/libretime/libretime/issues) before reporting problems not listed below.
### Outdated silan reports unreliable cue in/out information
Out of the box the installer installs a broken, outdated version of silan on all Debian based Platforms (ie. Ubuntu). This affects all distros supported by the installer except CentOS which does not have upstream packages and you may either install from source or use the [0.3.3 packages](https://github.com/radiorabe/centos-rpm-silan) from [RaBe APEL](https://build.opensuse.org/project/show/home:radiorabe:audio).
You can check the version of silan by running with `silan --version` which should report `0.3.3` or with `sudo dpkg -s silan | awk '/Version/ {print $2}'` that will show the exact package version you installed. Please include this information if you file bugs concerning silan.
There are multiple workarounds to this issue and [a bug against the upstream](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=855319) has been opened with Debian. Until this is sorted you should pre-install silan from a source you trust. If your distro has not updated to 0.3.3 yet you can also help by asking your distros maintainers for a bump.
LibreTime is looking for a Debian Maintainer willing to adopt silan. This would be a much appreciated good deed to the open source broadcast community, both terrestrial and online. Your contribution to silan could literally make a difference to millions of listeners daily.
The following solutions have been reported to work.
#### Silan from OBS build (https://github.com/libretime/libretime/issues/177#issuecomment-299195796)
Works for all relevant Debian and Ubuntu distros and installs silan `0.3.3~nmu1`.
```bash
sudo apt-get update
sudo apt-get install apt-transport-https
# install package signing key from obs
wget -qO- https://download.opensuse.org/repositories/home:/hairmare:/silan/Debian_7.0/Release.key \
| apt-key add -
# add OBS repo to sources list (pick the distro you need)
# Debian Wheezy
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/Debian_7.0 ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# Debian Jessie
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/Debian_8.0 ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# Ubuntu Trusty
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/xUbuntu_14.04 ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# Ubuntu Xenial
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/xUbuntu_16.04 ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# update local package database
apt-get update
# install silan 0.3.3 from obs packages
apt-get install silan
```
#### Local armhf builds for Raspberry Pi 3 (https://github.com/libretime/libretime/issues/214#issuecomment-305988355)
Since build.opensuse.org can't build Debian packages on arm due to missing dependencies, the `0.3.3~nmu1` arm package was built in a docker crossdev environment. This is reported to work on Debian Jessie on a Raspberry Pi 3 Model B.
```bash
curl -L -O https://github.com/libretime/libretime/files/1049738/silan_0.3.3.nmu1_armhf.deb.tar.gz
tar xvf silan_0.3.3.nmu1_armhf.deb.tar.gz
sudo dpkg -i silan_0.3.3~nmu1_armhf.deb
```
#### Legacy upstream silan packages (https://github.com/libretime/libretime/issues/197)
Legacy upstream hosts patched packages for Ubuntu Trusty on `apt.sourcefabric.org`. They install as `0.3.2~trusty~sfo-1`.
```bash
sudo apt-get update
sudo apt-get install apt-transport-https
sudo tee -a /etc/apt/sources.list <<EOD
deb https://apt.sourcefabric.org/ trusty main
EOD
sudo apt-get update
sudo apt-get install sourcefabric-keyring
sudo apt-get update
sudo apt-get install --reinstall silan=0.3.2~trusty~sfo-1
```
#### Remove silan completely (https://github.com/libretime/libretime/issues/193#issuecomment-299174997)
It is worth mentioning that you can disable cue point detection by removing silan from the system.
```bash
sudo apt-get uninstall silan
```
Reportedly this might wake the :cat2: (![happy-cuteness-overload-small](https://user-images.githubusercontent.com/116588/26853726-6d5bd6be-4b13-11e7-9dbd-9d7333e828c5.png) _aww_) or have other [side effects](https://github.com/libretime/libretime/issues/214#issuecomment-305748757).
### Liquidsoap >= 1.3.0 Support
Libretime currently only supports liquidsoap `< 1.3.0` out of the box. If you install a current version of liquidsoap [using OPAM](https://www.liquidsoap.info/) or through the [Rabe Liquidsoap Distribution for CentOS (RaBe LSD)](https://build.opensuse.org/project/show/home:radiorabe:liquidsoap) you will most likely have liquidsoap `1.3.1` installed.
You can check your liquidsoap version by running `liquidsoap --version`.
If you already have liquidsoap >= 1.3.0 you have a couple of options.
#### Liquidsoap 1.3.0 Patchset (#192)
You can patch your installation of LibreTime to support liquidsoap 1.3.0.
An up to date patch is available through GitHub and can be applied to an unpacked tarball as follows.
```bash
cd libretime-3.0.0-alpha.2/
curl -L https://github.com/libretime/libretime/compare/master...radiorabe:feature/liquidsoap-1.3.0.patch | patch -p1
```
Git users can pull from the branch at https://github.com/libretime/libretime/compare/master...radiorabe:feature/liquidsoap-1.3.0 directly.
#### Install old liquidsoap from opam (#192)
You can downgrade an OPAM install of liquidsoap by running the following command.
```bash
opam install "liquidsoap<1.3.0"
```
## :memo: Colophon
I made some [git of theseus graphs](https://erikbern.com/2016/12/05/the-half-life-of-code.html) on the history of LibreTime. What makes these interesting is that the project started in CVS, was migrated to Subversion and then to Git the commit history always being preserved. Let's have a look down the shoulders of the giants we are standing on.
![stack_plot](https://user-images.githubusercontent.com/116588/26903309-efa373ce-4bdc-11e7-8ce7-c60a72635639.png)
[More GoT graphs](https://github.com/libretime/libretime/wiki/Git-of-Theseus) can be found in [the wiki](https://github.com/libretime/libretime/wiki). I didn't originally know that the code started out as not much PHP (0e968e62887f3f87f5e90845867dd90c8950deb1), with C++ making an early entry soon after (9c60b17e7e9e9830f103d387780bee555c0283b4). At the time (2004) LibreTime seems to have been called livesupport. In 2006(ish) it was rebranded to CampCaster (fe31d2dfabc83f57d7a5dbb1864022dca76fd604), with the rename to Airtime being worked on somewhere in 2010 (169c4ec214659876d797c025793cb8bd45e088c3).

View File

@ -0,0 +1,215 @@
---
title: LibreTime 3.0.0 alpha 3
---
import ReleaseHead from './\_release-head.md';
<ReleaseHead date="2017-10-18" version="3.0.0-alpha.3"/>
## :rocket: Features
- Debian 9 support in installer shell script
- Simplify configuration file structure
- Lots of work on Hungarian (hu_HU) translation
- Automatic Creation of Smartblocks and Playlists for new Podcasts
- Duplicate Smartblock functionality in context menu
- Better server preparation docs with firewall infos
## :bug: Bug fixes
- CORS responses work for all browsers and with TLS or on non default ports
- Fix update warning for pre-release candidates
- Dont install dev packages in installer for faster installs
- Some php 7.1 patches
- Better logging for analyzer and pypo
- Fix chunked podcast downloading
- Fix TLS timestamp updating
## :fire: Deprecation and removal
- Dropped support for Debian Wheezy
## :arrow_up: Upgrading
### Configuration files merging
The contents of `/etc/airtime/cloud_storage.conf` and `/etc/airtime/rabbitmq-analyzer.ini` have been moved to the main `/etc/airtime/airtime.ini` file and the env specific symlink is no longer needed. See below for instructions on how to migrate from a pre-release that created those files.
The configuration file structure has changed. Please move the contents of the `/etc/airtime/cloud_storage.conf` and `/etc/airtime/rabbitmq-analyzer.ini` files into the main `/etc/airtime/airtime.ini`. In all known cases you need to add the following sections to the file.
```ini
[current_backend]
storage_backend=file
[amazon_S3]
provider=amazon_S3
bucket=0
api_key=0
api_key_secret=0
```
You can then remove the files and the symlink.
```bash
rm -f \
/etc/airtime/cloud_storage.conf \
/etc/airtime/rabbitmq-analyzer.ini \
/etc/airtime/production
```
Analyzer grabs all the needed info from the main `airtime.ini` file starting with `3.0.0-alpha.3`.
## :warning: Known issues
The following issues need a workaround for the time being. Please search the [issues](https://github.com/libretime/libretime/issues) before reporting problems not listed below.
### Outdated silan reports unreliable cue in/out information
Out of the box the installer installs a broken, outdated version of silan on most Debian based Platforms (ie. Ubuntu). This affects all distros supported by the installer except Debian unstable which has the silan 0.3.3 and CentOS which does not have upstream packages and you may either install from source or use the [0.3.3 packages](https://github.com/radiorabe/centos-rpm-silan) from [RaBe APEL](https://build.opensuse.org/project/show/home:radiorabe:audio).
You can check the version of silan by running with `silan --version` which should report `0.3.3` or with `sudo dpkg -s silan | awk '/Version/ {print $2}'` that will show the exact package version you installed. Please include this information if you file bugs concerning silan.
There are multiple workarounds to this issue and [a bug against the upstream](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=855319) has been opened with Debian. Until this is sorted you should pre-install silan from a source you trust. If your distro has not updated to 0.3.3 yet you can also help by asking your distros maintainers for a bump.
Kyle Robbertze @paddatrapper has taken over maintainership of the silan packages in Debian as he is currently packaging LibreTime for Debian. Thank you very much Kyle!
The following solutions have been reported to work.
#### Silan from OBS build (https://github.com/libretime/libretime/issues/177#issuecomment-299195796)
Works for all relevant Debian and Ubuntu distros and installs silan `0.3.3~nmu1`.
```bash
sudo apt-get update
sudo apt-get install apt-transport-https
# install package signing key from obs
wget -qO- https://download.opensuse.org/repositories/home:/hairmare:/silan/Debian_7.0/Release.key \
| apt-key add -
# add OBS repo to sources list (pick the distro you need)
# Debian Stretch
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/Debian_9.0_standard/ ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# Debian Jessie
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/Debian_8.0 ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# Ubuntu Xenial
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/xUbuntu_16.04 ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# Ubuntu Trusty
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/xUbuntu_14.04 ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# update local package database
apt-get update
# install silan 0.3.3 from obs packages
apt-get install silan
```
#### Local armhf builds for Raspberry Pi 3 (https://github.com/libretime/libretime/issues/214#issuecomment-305988355)
Since build.opensuse.org can't build Debian packages on arm due to missing dependencies, the `0.3.3~nmu1` arm package was built in a docker crossdev environment. This is reported to work on Debian Jessie on a Raspberry Pi 3 Model B.
```bash
curl -L -O https://github.com/libretime/libretime/files/1049738/silan_0.3.3.nmu1_armhf.deb.tar.gz
tar xvf silan_0.3.3.nmu1_armhf.deb.tar.gz
sudo dpkg -i silan_0.3.3~nmu1_armhf.deb
```
#### Legacy upstream silan packages (https://github.com/libretime/libretime/issues/197)
Legacy upstream hosts patched packages for Ubuntu Trusty on `apt.sourcefabric.org`. They install as `0.3.2~trusty~sfo-1`.
```bash
sudo apt-get update
sudo apt-get install apt-transport-https
sudo tee -a /etc/apt/sources.list <<EOD
deb https://apt.sourcefabric.org/ trusty main
EOD
sudo apt-get update
sudo apt-get install sourcefabric-keyring
sudo apt-get update
sudo apt-get install --reinstall silan=0.3.2~trusty~sfo-1
```
#### Remove silan completely (https://github.com/libretime/libretime/issues/193#issuecomment-299174997)
It is worth mentioning that you can disable cue point detection by removing silan from the system.
```bash
sudo apt-get uninstall silan
```
Reportedly this might wake the :cat2: (![happy-cuteness-overload-small](https://user-images.githubusercontent.com/116588/26853726-6d5bd6be-4b13-11e7-9dbd-9d7333e828c5.png) _aww_) or have other [side effects](https://github.com/libretime/libretime/issues/214#issuecomment-305748757).
### Liquidsoap >= 1.3.0 Support
Libretime currently only supports liquidsoap `< 1.3.0` out of the box. If you install a current version of liquidsoap [using OPAM](https://www.liquidsoap.info/) or through the [Rabe Liquidsoap Distribution for CentOS (RaBe LSD)](https://build.opensuse.org/project/show/home:radiorabe:liquidsoap) you will most likely have liquidsoap `1.3.1` installed.
You can check your liquidsoap version by running `liquidsoap --version`.
If you already have liquidsoap >= 1.3.0 you have a couple of options.
#### Liquidsoap 1.3.0 Patchset (#192)
You can patch your installation of LibreTime to support liquidsoap 1.3.0.
An up to date patch is available through GitHub and can be applied to an unpacked tarball as follows.
```bash
cd libretime-3.0.0-alpha.3/
curl -L https://github.com/libretime/libretime/compare/master...radiorabe:feature/liquidsoap-1.3.0.patch | patch -p1
```
Git users can pull from the branch at https://github.com/libretime/libretime/compare/master...radiorabe:feature/liquidsoap-1.3.0 directly.
#### Install old liquidsoap from opam (#192)
You can downgrade an OPAM install of liquidsoap by running the following command.
```bash
opam install "liquidsoap<1.3.0"
```
### No watched folder support
Currently LibreTime does not support watching folders. Uploading files through the web interface works fine and can be automated via a REST API. Re-implementing watched folder support is on the roadmap. Please consider helping out with the code to help speed things along if you want to use the feature.
### No line in support
Line In recording can be enabled in the UI but doesn't currently work. This feature went missing from LibreTime due to the fact that we based our code off of the saas-dev branch of legacy upstream and support for recording hasn't been ported to the new airtime analyzer ingest system. #42 currently tracks the progress being made on line in recording.
### Playout won't work if locale is missing
Some minimal OS installs do not have a default locale configured. This only seems to affect some VPS installs as they often do not have a locale setup in the default images provided.
You can set up the locale using a combination of the following command. You might also want to consult the documentation of your VPS provider as it may contain an official way to set up locales when provisioning a VPS.
```bash
# Set locale using systemds localectl
localectl set-locale LANG="en_US.utf8"
```
these instructions do not seem to work on all Debian based distros so you might need to use `update-locale` as follows.
```bash
#Purge all locales but en_US.UTF-8
sudo locale-gen --purge en_US.UTF-8
#Populate LANGUAGE=
sudo update-locale LANGUAGE="en_US.UTF-8"
```
## :memo: Colophon
It's been awesome to see that the interest in LibreTime isn't dying off.
I recently did some cleaning up of the labels and milestones in the issue tracker and would like to ask everyone to help out with tagging issues and managing milestones.
Currently the milestones only contain issues likely to be finished in the development window of the respective version. This includes things that already have a pull-request or issues with a high priority due to their sensible or blocking nature. Feel free to request new labels and unversioned milestones if you feel you can use them.
That's all for these release notes. I'd also like to note that I plan on doing releases more often. They will be smaller but there will be less changes per release.

View File

@ -0,0 +1,179 @@
---
title: LibreTime 3.0.0 alpha 4
---
import ReleaseHead from './\_release-head.md';
<ReleaseHead date="2018-02-01" version="3.0.0-alpha.4"/>
## :rocket: Features
- Updated Hungarian translations
- Preview tracks in generated SmartBlocks
- New icon to mark autoplaylist based show on calendar page
- Relative date filters for Smartblocks
## :bug: Bug fixes
- Fix updating track information from pypo on TLS only setups
- Fix seeking in track preview
- Fix advanced search in calendar mode
- Validate contents of VERSION file to fix non-enriched git tarball install
- dead code removal of legacy media-monitor code base
## :warning: Known issues
The following issues may need a workaround for the time being. Please search the [issues](https://github.com/libretime/libretime/issues) before reporting problems not listed below.
### Outdated silan reports unreliable cue in/out information
Out of the box the installer installs a broken, outdated version of silan on most Debian based Platforms (ie. Ubuntu). This affects all distros supported by the installer except Debian unstable which has the silan 0.3.3 and CentOS which does not have upstream packages and you may either install from source or use the [0.3.3 packages](https://github.com/radiorabe/centos-rpm-silan) from [RaBe APEL](https://build.opensuse.org/project/show/home:radiorabe:audio).
You can check the version of silan by running with `silan --version` which should report `0.3.3` or with `sudo dpkg -s silan | awk '/Version/ {print $2}'` that will show the exact package version you installed. Please include this information if you file bugs concerning silan.
There are multiple workarounds to this issue and [a bug against the upstream](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=855319) has been fixed. Kyle Robbertze @paddatrapper has taken over maintainership of the silan packages in Debian as he is currently packaging LibreTime for Debian. The silan package is in testing as can be seen in the [Debian PTS](https://tracker.debian.org/pkg/silan). This section will get updated once the package is in stable.
Until this is sorted you should pre-install silan from a source you trust. If your distro has not updated to 0.3.3 yet you can also help by asking your distros maintainers for a bump.
The following solutions have been reported to work.
#### Silan from OBS build (https://github.com/libretime/libretime/issues/177#issuecomment-299195796)
Works for all relevant Debian and Ubuntu distros and installs silan `0.3.3~nmu1`.
```bash
sudo apt-get update
sudo apt-get install apt-transport-https
# install package signing key from obs
wget -qO- https://download.opensuse.org/repositories/home:/hairmare:/silan/Debian_7.0/Release.key \
| apt-key add -
# add OBS repo to sources list (pick the distro you need)
# Debian Stretch
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/Debian_9.0_standard/ ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# Debian Jessie
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/Debian_8.0 ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# Ubuntu Xenial
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/xUbuntu_16.04 ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# Ubuntu Trusty
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/xUbuntu_14.04 ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# update local package database
apt-get update
# install silan 0.3.3 from obs packages
apt-get install silan
```
#### Local armhf builds for Raspberry Pi 3 (https://github.com/libretime/libretime/issues/214#issuecomment-305988355)
Since build.opensuse.org can't build Debian packages on arm due to missing dependencies, the `0.3.3~nmu1` arm package was built in a docker crossdev environment. This is reported to work on Debian Jessie on a Raspberry Pi 3 Model B.
```bash
curl -L -O https://github.com/libretime/libretime/files/1049738/silan_0.3.3.nmu1_armhf.deb.tar.gz
tar xvf silan_0.3.3.nmu1_armhf.deb.tar.gz
sudo dpkg -i silan_0.3.3~nmu1_armhf.deb
```
#### Legacy upstream silan packages (https://github.com/libretime/libretime/issues/197)
Legacy upstream hosts patched packages for Ubuntu Trusty on `apt.sourcefabric.org`. They install as `0.3.2~trusty~sfo-1`.
```bash
sudo apt-get update
sudo apt-get install apt-transport-https
sudo tee -a /etc/apt/sources.list <<EOD
deb https://apt.sourcefabric.org/ trusty main
EOD
sudo apt-get update
sudo apt-get install sourcefabric-keyring
sudo apt-get update
sudo apt-get install --reinstall silan=0.3.2~trusty~sfo-1
```
#### Remove silan completely (https://github.com/libretime/libretime/issues/193#issuecomment-299174997)
It is worth mentioning that you can disable cue point detection by removing silan from the system.
```bash
sudo apt-get uninstall silan
```
Reportedly this might have [side effects](https://github.com/libretime/libretime/issues/214#issuecomment-305748757).
### Liquidsoap Support
Libretime currently only supports liquidsoap `< 1.3.0` out of the box. If you install a current version of liquidsoap [using OPAM](https://www.liquidsoap.info/) or through the [Rabe Liquidsoap Distribution for CentOS (RaBe LSD)](https://build.opensuse.org/project/show/home:radiorabe:liquidsoap) you will most likely have liquidsoap `1.3.2` or `1.3.3` installed.
#352 reports that liquidsoap `< 1.3.0` can exhibit issues on some Debian based installs. One fix for the issue is to install liquidsoap `1.3.0` and to use the following patching steps. Kyle from silan fame is taking the needed steps to get liquidsoap maintained again in Debian so we expect the situation to improve over time.
You can check your liquidsoap version by running `liquidsoap --version`.
If you already have liquidsoap >= 1.3.0 you have a couple of options.
#### Liquidsoap 1.3.0 Patchset (#192)
You can patch your installation of LibreTime to support liquidsoap 1.3.0.
An up to date patch is available through GitHub and can be applied to an unpacked tarball as follows.
```bash
cd libretime-3.0.0-alpha.4/
curl -L https://github.com/libretime/libretime/compare/master...radiorabe:feature/liquidsoap-1.3.0.patch | patch -p1
```
Git users can pull from the branch at https://github.com/libretime/libretime/compare/master...radiorabe:feature/liquidsoap-1.3.0 directly.
#### Install old liquidsoap from opam (#192)
You can downgrade an OPAM install of liquidsoap by running the following command.
```bash
opam install "liquidsoap<1.3.0"
```
### No watched folder support
Currently LibreTime does not support watching folders. Uploading files through the web interface works fine and can be automated via a REST API. Re-implementing watched folder support is on the roadmap. Please consider helping out with the code to help speed things along if you want to use the feature.
### No line in support
Line In recording can be enabled in the UI but doesn't currently work. This feature went missing from LibreTime due to the fact that we based our code off of the saas-dev branch of legacy upstream and support for recording hasn't been ported to the new airtime analyzer ingest system. #42 currently tracks the progress being made on line in recording.
### Playout won't work if locale is missing
Some minimal OS installs do not have a default locale configured. This only seems to affect some VPS installs as they often do not have a locale setup in the default images provided.
You can set up the locale using a combination of the following command. You might also want to consult the documentation of your VPS provider as it may contain an official way to set up locales when provisioning a VPS.
```bash
# Set locale using systemds localectl
localectl set-locale LANG="en_US.utf8"
```
These instructions do not seem to work on all Debian based distros so you might need to use `update-locale` as follows.
```bash
#Purge all locales but en_US.UTF-8
sudo locale-gen --purge en_US.UTF-8
#Populate LANGUAGE=
sudo update-locale LANGUAGE="en_US.UTF-8"
```
### Lack of i18n toolchain is disturbing
Some translations might miss the tarball. They didn't get lost but the build chain needs fixing. Work is in #301 and additional work is needed as it has become clear that we proabably want to support bidirectional translation syncing with zanata.
## :memo: Colophon
This is the first release that contains code contributions from more than 5 developers. Also, we reached :100: :star2: a while ago and this is the fifth release since we forked almost a year ago. I'm looking forward to celebrating the one year anniversary of LibreTime soon.
A large thanks from RelEng goes to everyone who put their hard work into LibreTime both here on [GitHub](https://github.com/libretime/libretime) as well as on our [Discourse](https://discourse.libretime.org/). Cutting these releases wouldn't be half as rewarding without the constant feedback from the community.

View File

@ -0,0 +1,199 @@
---
title: LibreTime 3.0.0 alpha 5
---
import ReleaseHead from './\_release-head.md';
<ReleaseHead date="2018-10-12" version="3.0.0-alpha.5"/>
## :rocket: Features
- Interface improvements
- Raspbian 9 support in installer script
- Allow skipping RabbitMQ and PostgreSQL install in installer script with `--no-rabbitmq ` and `--no-postgres`
## :bug: Bug fixes
- Remove `[media-monitor]` section from default install
- Fix last help links that pointed to sourcefabric and update others to point to discourse
- Fix for ShoutCAST DNAS rejecting title updates when artist is missing
- Initial fixes for native IPv6 support
- Support modern pika versions
- Disable podcast subscription limit
- Return proper `Content-Length` for legacy database entries missing the info
## :fire: Deprecation and removal
- Removed Amazon S3 storage support
### Deprecation of Ubuntu 14.04 (Trusty)
This info is an early warning that we are deprecating a major os version.
Ubuntu 16.04 (Xenial) and Ubuntu 18.04 (Bionic) are now available and Trusty is EOL in April 2019.
## :arrow_up: Upgrading
### S3 storage support removal
The configuration file structure has changed. Remove the `amazon_s3` configuration section from the `/etc/airtime/airtime.conf` file, as S3 storage support has been removed.
## :warning: Known issues
The following issues may need a workaround for the time being. Please search the [issues](https://github.com/libretime/libretime/issues) before reporting problems not listed below.
### Media-Monitor config needs manual removing
If you are using the `install` script you should most likely remove the `[media-monitor]` config section from your `/etc/airtime/airtime.conf` file to ensure you do not run into the problems described in
https://github.com/libretime/libretime/issues/450. We recommend you do this before running the update since there are no known LibreTime releases that depend on the config value.
### Outdated silan reports unreliable cue in/out information
Out of the box the installer installs a broken, outdated version of silan on most Debian based Platforms (ie. Ubuntu). This affects all distros supported by the installer except Debian unstable which has the silan 0.3.3 and CentOS which does not have upstream packages and you may either install from source or use the [0.3.3 packages](https://github.com/radiorabe/centos-rpm-silan) from [RaBe APEL](https://build.opensuse.org/project/show/home:radiorabe:audio).
You can check the version of silan by running with `silan --version` which should report `0.3.3` or with `sudo dpkg -s silan | awk '/Version/ {print $2}'` that will show the exact package version you installed. Please include this information if you file bugs concerning silan.
There are multiple workarounds to this issue and [a bug against the upstream](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=855319) has been fixed. Kyle Robbertze @paddatrapper has taken over maintainership of the silan packages in Debian as he is currently packaging LibreTime for Debian. The silan package is in testing as can be seen in the [Debian PTS](https://tracker.debian.org/pkg/silan). This section will get updated once the package is in stable.
Until this is sorted you should pre-install silan from a source you trust. If your distro has not updated to 0.3.3 yet you can also help by asking your distros maintainers for a bump.
The following solutions have been reported to work. If they do not work, please note that it is your responsibility to get working silan packages.
#### Silan from OBS build (https://github.com/libretime/libretime/issues/177#issuecomment-299195796)
Works for all relevant Debian and Ubuntu distros and installs silan `0.3.3~nmu1`.
```bash
sudo apt-get update
sudo apt-get install apt-transport-https
# install package signing key from obs
wget -qO- https://download.opensuse.org/repositories/home:/hairmare:/silan/Debian_7.0/Release.key \
| apt-key add -
# add OBS repo to sources list (pick the distro you need)
# Debian Stretch
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/Debian_9.0_standard/ ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# Debian Jessie
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/Debian_8.0 ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# Ubuntu Xenial
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/xUbuntu_16.04 ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# Ubuntu Trusty (14.04) EOL in April 2019
echo 'deb https://download.opensuse.org/repositories/home:/hairmare:/silan/Ubuntu_14.10_standard/ ./' \
> /etc/apt/sources.list.d/hairmare_silan.list
# update local package database
apt-get update
# install silan 0.3.3 from obs packages
apt-get install silan
```
#### Local armhf builds for Raspberry Pi 3 (https://github.com/libretime/libretime/issues/214#issuecomment-305988355)
Since build.opensuse.org can't build Debian packages on arm due to missing dependencies, the `0.3.3~nmu1` arm package was built in a docker crossdev environment. This is reported to work on Debian Jessie on a Raspberry Pi 3 Model B.
```bash
curl -L -O https://github.com/libretime/libretime/files/1049738/silan_0.3.3.nmu1_armhf.deb.tar.gz
tar xvf silan_0.3.3.nmu1_armhf.deb.tar.gz
sudo dpkg -i silan_0.3.3~nmu1_armhf.deb
```
#### Legacy upstream silan packages (https://github.com/libretime/libretime/issues/197)
Legacy upstream hosts patched packages for Ubuntu Trusty on `apt.sourcefabric.org`. They install as `0.3.2~trusty~sfo-1`.
```bash
sudo apt-get update
sudo apt-get install apt-transport-https
sudo tee -a /etc/apt/sources.list <<EOD
deb https://apt.sourcefabric.org/ trusty main
EOD
sudo apt-get update
sudo apt-get install sourcefabric-keyring
sudo apt-get update
sudo apt-get install --reinstall silan=0.3.2~trusty~sfo-1
```
#### Remove silan completely (https://github.com/libretime/libretime/issues/193#issuecomment-299174997)
It is worth mentioning that you can disable cue point detection by removing silan from the system.
```bash
sudo apt-get uninstall silan
```
Reportedly this might have [side effects](https://github.com/libretime/libretime/issues/214#issuecomment-305748757).
### Liquidsoap Support
Libretime currently only supports liquidsoap `< 1.3.0` out of the box. If you install a current version of liquidsoap [using OPAM](https://www.liquidsoap.info/) or through the [Rabe Liquidsoap Distribution for CentOS (RaBe LSD)](https://build.opensuse.org/project/show/home:radiorabe:liquidsoap) you will most likely have liquidsoap `1.3.2` or `1.3.3` installed.
#352 reports that liquidsoap `< 1.3.0` can exhibit issues on some Debian based installs. One fix for the issue is to install liquidsoap `1.3.0` and to use the following patching steps. Kyle from silan fame is taking the needed steps to get liquidsoap maintained again in Debian so we expect the situation to improve over time.
You can check your liquidsoap version by running `liquidsoap --version`.
If you already have liquidsoap >= 1.3.0 you have a couple of options.
#### Liquidsoap 1.3.0 Patchset (#192)
You can patch your installation of LibreTime to support liquidsoap 1.3.0.
An up to date patch is available through GitHub and can be applied to an unpacked tarball as follows.
```bash
cd libretime-3.0.0-alpha.5/
curl -L https://github.com/libretime/libretime/compare/master...radiorabe:feature/liquidsoap-1.3.0.patch | patch -p1
```
Git users can pull from the branch at https://github.com/libretime/libretime/compare/master...radiorabe:feature/liquidsoap-1.3.0 directly.
#### Install old liquidsoap from opam (#192)
You can downgrade an OPAM install of liquidsoap by running the following command.
```bash
opam install "liquidsoap<1.3.0"
```
### No watched folder support
Currently LibreTime does not support watching folders. Uploading files through the web interface works fine and can be automated via a REST API. Re-implementing watched folder support is on the roadmap. Please consider helping out with the code to help speed things along if you want to use the feature.
### No line in support
Line In recording can be enabled in the UI but doesn't currently work. This feature went missing from LibreTime due to the fact that we based our code off of the saas-dev branch of legacy upstream and support for recording hasn't been ported to the new airtime analyzer ingest system. #42 currently tracks the progress being made on line in recording.
### Playout won't work if locale is missing
Some minimal OS installs do not have a default locale configured. This only seems to affect some VPS installs as they often do not have a locale setup in the default images provided.
You can set up the locale using a combination of the following command. You might also want to consult the documentation of your VPS provider as it may contain an official way to set up locales when provisioning a VPS.
```bash
# Set locale using systemds localectl
localectl set-locale LANG="en_US.utf8"
```
These instructions do not seem to work on all Debian based distros so you might need to use `update-locale` as follows.
```bash
#Purge all locales but en_US.UTF-8
sudo locale-gen --purge en_US.UTF-8
#Populate LANGUAGE=
sudo update-locale LANGUAGE="en_US.UTF-8"
```
### Lack of i18n toolchain is disturbing
Some translations might miss the tarball. They didn't get lost but the build chain needs fixing. Work is in #301 and additional work is needed as it has become clear that we proabably want to support bidirectional translation syncing with zanata.
## :memo: Colophon
Sorry for the _late_ release, RelEng has been busy with adulting and generally having a life as of lately. I'm still very much committed to LibreTime but can only find a limited amount of time to look into Issues due to being busy qualifying LibreTime for production workloads at my station. I plan on re-shifting my focus on pull request reviews and RelEng to address my lack of time going further.

View File

@ -0,0 +1,138 @@
---
title: LibreTime 3.0.0 alpha 6
---
import ReleaseHead from './\_release-head.md';
<ReleaseHead date="2018-12-23" version="3.0.0-alpha.6"/>
## :rocket: Features
- Turn on the podcast album override by default on new installs.
- Ubuntu 18.04 (Bionic) **developer** tooling.
- Collapse advanced configuration in show edit form.
- Clock icon in calendar for autoloading playlists.
- Let user edit podcast name.
- Default to creating dynamic smartblock when creating new smartblocks.
- Move advanced smartblock configuration to collapsed "Advanced options" section.
- Assume "Y" as answer for questions during installer.
## :bug: Bug fixes
- Fix sizing for playlist and smart block on shorter screens.
- Increased celery timeout to 1800 seconds (affects podcast downloads and other tasks like things related to the soundcloud integration).
- remove some obsolete scripts from `utils/`.
- Fix version check for cases where GitHub is not available or temporarily fails.
- Clarify wording for "Autoloading Playlist" (used to be called "Auto Schedule" or other names).
- Remove "Record & Rebroadcast" from ui.
- Fix scrolling issue in "Add Show" dialog.
- Allow ampersand in smartblock search criteria.
- Fix display of selected tracks in Smartblock criteria.
- Add docs into enriched tarball for packagers.
- Improve filling smartblocks, they should not get overscheduled rather than not getting filled up all the way.
- Remove broken ReCaptcha.
- Fix reading metadata from non-mp3 sources (in podcasts and uploads).
- Update mutagen to fix some edge cases when reading metadata from files in analyzer.
- Fix shuffling playlists that contain a smart block.
- Remove unused zfdebug from dev environment.
## :fire: Deprecation and removal
- Dropped support for Ubuntu 14.04 (Trusty) as it is end-of-life
- Remove "Record & Rebroadcast" from ui.
## :warning: Known issues
The following issues may need a workaround for the time being. Please search the [issues](https://github.com/libretime/libretime/issues) before reporting problems not listed below.
### Installer Issues
The installer is generally a bit unstable, we hope to be able to offer some reasonable packages at some point. Some of the GUI driven parts before the first login are also in a somewhat questionable state, ymmv.
For now the installer distro selection is pretty good at auto-detecting your os and usually does an ok job depending on your distro. You should usually not need to pass a --distribution and --release parameter, those are still supported for the time being but their use is not recommended.
The ui works best if you don't use it in an opinionated fashion and change just the bare minimal.
If you want to skip the installer GUI completely you can configure LibreTime using `airtime_mvc/build/airtime.example.conf` as an template. Due to some python/PHP differences you must remove all comments from the example to use it 😞. You'll also have to create some folder structures manually and check if the music dir got properly created directly in the database. Referencing a second `install -fiap` install on a non productive system for reference can help with this type of bootstrap.
### Media-Monitor config needs manual removing
If you are using the `install` script you should most likely remove the `[media-monitor]` config section from your `/etc/airtime/airtime.conf` file to ensure you do not run into the problems described in
https://github.com/libretime/libretime/issues/450. We recommend you do this before running the update since there are no known LibreTime releases that depend on the config value.
### Outdated silan reports unreliable cue in/out information
Out of the box the installer installs a broken, outdated version of silan on some Debian based Platforms (ie. Ubuntu). This affects all distros supported by the installer except Debian testing which has the silan 0.3.3 and CentOS which does not have upstream packages and you may either install from source or use the [0.3.3 packages](https://github.com/radiorabe/centos-rpm-silan) from [RaBe APEL](https://build.opensuse.org/project/show/home:radiorabe:audio).
Check your version of silan by running `silan --version`. This should report `0.3.3` or higher. If not please see the [Silan Installation](https://github.com/libretime/libretime/wiki/Silan-Installation) wiki page for more details & workarounds.
To date silan 0.3.3 or higher is in Debian testing & Ubuntu Bionic. You can check the upstream progress the [Debian PTS](https://tracker.debian.org/pkg/silan) and [Ubuntu launchpad](https://launchpad.net/ubuntu/+source/silan). This section will get removed once the package is in stable.
tldr: **[Silan Installation](https://github.com/libretime/libretime/wiki/Silan-Installation)**
### Liquidsoap Support
Libretime currently only supports liquidsoap `< 1.3.0` out of the box. If you install a current version of liquidsoap [using OPAM](https://www.liquidsoap.info/) or through the [Rabe Liquidsoap Distribution for CentOS (RaBe LSD)](https://build.opensuse.org/project/show/home:radiorabe:liquidsoap) you will most likely have liquidsoap `1.3.2` or `1.3.3` installed.
#352 reports that liquidsoap `< 1.3.0` can exhibit issues on some Debian based installs. One fix for the issue is to install liquidsoap `1.3.0` and to use the following patching steps. Kyle from silan fame is taking the needed steps to get liquidsoap maintained again in Debian so we expect the situation to improve over time.
You can check your liquidsoap version by running `liquidsoap --version`.
If you already have liquidsoap >= 1.3.0 you have a couple of options.
#### Liquidsoap 1.3.0 Patchset (#192)
You can patch your installation of LibreTime to support liquidsoap 1.3.0.
An up to date patch is available through GitHub and can be applied to an unpacked tarball as follows.
```bash
cd libretime-3.0.0-alpha.6/
curl -L https://github.com/libretime/libretime/compare/master...radiorabe:feature/liquidsoap-1.3.0.patch | patch -p1
```
Git users can pull from the branch at https://github.com/libretime/libretime/compare/master...radiorabe:feature/liquidsoap-1.3.0 directly.
#### Install old liquidsoap from opam (#192)
You can downgrade an OPAM install of liquidsoap by running the following command.
```bash
opam install "liquidsoap<1.3.0"
```
### No watched folder support
Currently LibreTime does not support watching folders. Uploading files through the web interface works fine and can be automated via a REST API. Re-implementing watched folder support is on the roadmap. Please consider helping out with the code to help speed things along if you want to use the feature.
### No line in support
This feature went missing from LibreTime due to the fact that we based our code off of the saas-dev branch of legacy upstream and support for recording hasn't been ported to the new airtime analyzer ingest system. #42 currently tracks the progress being made on line in recording.
### Playout won't work if locale is missing
Some minimal OS installs do not have a default locale configured. This only seems to affect some VPS installs as they often do not have a locale setup in the default images provided.
You can set up the locale using a combination of the following commands. You might also want to consult the documentation of your VPS provider as it may contain an official way to set up locales when provisioning a VPS.
```bash
# Set locale using systemds localectl
localectl set-locale LANG="en_US.utf8"
```
These instructions do not seem to work on all Debian based distros so you might need to use `update-locale` as follows.
```bash
#Purge all locales but en_US.UTF-8
sudo locale-gen --purge en_US.UTF-8
#Populate LANGUAGE=
sudo update-locale LANGUAGE="en_US.UTF-8"
```
### Lack of i18n toolchain is disturbing
Some translations might miss the tarball. They didn't get lost but the build chain needs fixing. Work is in #301 and additional work is needed as it has become clear that we probably want to support bidirectional translation syncing with zanata.
## :memo: Colophon
I would like to use this space to extend a warm welcome to our new Maintainers @paddatrapper, @frecuencialibre and @ned-kelly. We are happy to have you on board. Thank you very much for helping maintain LibreTime ❤️

View File

@ -0,0 +1,160 @@
---
title: LibreTime 3.0.0 alpha 7
---
import ReleaseHead from './\_release-head.md';
<ReleaseHead date="2019-04-22" version="3.0.0-alpha.7"/>
## :sparkling_heart: Contributors
The LibreTime project wants to thank the following contributors for contributing to this release:
- @robbt
- @frecuencialibre
- @detobate
- @greenjon
- @xabispacebiker
- @mikeopensauce
- @paddatrapper
- @hairmare
- @ryanrain
## :rocket: Features
- Set default focus to search field on library page.
- PHP 7.2 and 7.3 compatibility (for Ubuntu 18.04.1 LTS (Bionic Beaver) and other modern distros)
- "Podcast Album Override" is now "Podcast Metadata Override " and additionally overrides the track title with the title from the RSS feed. The artist field is set to the podcast name in LibreTime.
- Allowed users to customize the title of podcasts
- Disabled the creation of smartblocks and playlists for new podcasts by default and added a generate button under the edit podcast tab
- Better libvirt integration in Vagrant setup.
- Debian 11 (Buster) support
- Add columns for uploaded and genre to default library view, sorts it by uploaded and removes album column by default
- Add more details to the information returned by the API `onAirLightAction` call
- Update Spanish translations
- Allow admins to edit the owner of a track
- Added system-wide intro and outro playlists for autoloading playlists
- Added show-source info to live-info-v2 API
- Update much of the documentation
- Allow program managers to view listeners statistics
## :bug: Bug fixes
- Fix DOS line-endings in vendorized PHP dependencies for packaging.
- Fix overlapping show names if show does not fit in calendar.
- Fall back to treating file as MP3 if it isn't recognized by mutagen.
- Remove defunct support-setting page.
- Remove legacy AAC code, fix AAC support for SHOUTcast.
- Display Settings menu for all users.
- Make "Time Remaining" Smartblock work in Playlist.
- Fix non-audio enclosure crash when importing badly formed podcast feeds
- Fix flac files not playing out
- Fix 500 error when making API call `onAirLightAction`
- Fix warning message shown in `schedule` API call
- Fix bug where many empty playlists were created when using autoloading
- Passed show variable to smartblocks loaded via playlist to fix time remaining smartblocks with autoloading playlists.
- Restore top right user setting link and logout link to UI
- Fix an unnecessary type conversion to seconds that caused errors with PHP 7.2
- Fix import errors on podcast episodes with long descriptions
- Fix issue with multiple time remaining smartblocks in a single playlist not detecting remaining time correctly
- Fix occasional empty administration page due to null previous file reference
## :fire: Deprecation and removal
### Deprecation of Debian 8 (Jessie)
This info is an early warning that we are deprecating a major os version.
Debian 9 (Stretch) is now available and Jessie is EOL since June 2018.
## :warning: Known issues
The following issues may need a workaround for the time being. Please search the [issues](https://github.com/libretime/libretime/issues) before reporting problems not listed below.
### Installer Issues
The installer is generally a bit unstable, we hope to be able to offer some reasonable packages at some point. Some of the GUI driven parts before the first login are also in a somewhat questionable state, ymmv.
For now the installer distro selection is pretty good at auto-detecting your os and usually does an ok job depending on your distro. You should usually not need to pass a --distribution and --release parameter, those are still supported for the time being but their use is not recommended.
The UI works best if you don't use it in an opinionated fashion and change just the bare minimal.
If you want to skip the installer GUI completely you can configure LibreTime using `airtime_mvc/build/airtime.example.conf` as an template. Due to some python/PHP differences you must remove all comments from the example to use it 😞. You'll also have to create some folder structures manually and check if the music dir got properly created directly in the database. Referencing a second `install -fiap` install on a non productive system for reference can help with this type of bootstrap.
### Media-Monitor config needs manual removing
If you are using the `install` script you should most likely remove the `[media-monitor]` config section from your `/etc/airtime/airtime.conf` file to ensure you do not run into the problems described in
https://github.com/libretime/libretime/issues/450. We recommend you do this before running the update since there are no known LibreTime releases that depend on the config value.
### Outdated silan reports unreliable cue in/out information
Out of the box the installer installs a broken, outdated version of silan (0.3.2) on some Debian based Platforms (ie. Ubuntu). This affects Ubuntu 16.04, Debian Jessie and Debian Stretch. CentOS does not have upstream packages and you may either install from source or use the [0.3.3 packages](https://github.com/radiorabe/centos-rpm-silan) from [RaBe APEL](https://build.opensuse.org/project/show/home:radiorabe:audio).
Check your version of silan by running `silan --version`. This should report `0.3.3` or higher. If not please see the [Silan Installation](https://github.com/libretime/libretime/wiki/Silan-Installation) wiki page for more details & workarounds.
To date silan 0.3.3 or higher is in Debian testing & Ubuntu Bionic. You can check the upstream progress the [Debian PTS](https://tracker.debian.org/pkg/silan) and [Ubuntu launchpad](https://launchpad.net/ubuntu/+source/silan). This section will get removed once the package is in stable.
tldr: **[Silan Installation](https://github.com/libretime/libretime/wiki/Silan-Installation)**
### Liquidsoap Support
Libretime currently only supports liquidsoap `< 1.3.0` out of the box. If you install a current version of liquidsoap [using OPAM](https://www.liquidsoap.info/) or through the [Rabe Liquidsoap Distribution for CentOS (RaBe LSD)](https://build.opensuse.org/project/show/home:radiorabe:liquidsoap) you will most likely have liquidsoap `1.3.2` or `1.3.3` installed.
#352 reports that liquidsoap `< 1.3.0` can exhibit issues on Debian Stretch installs. One fix for the issue is to install liquidsoap `1.3.0` and to use the following patching steps.
You can check your liquidsoap version by running `liquidsoap --version`.
If you already have liquidsoap >= 1.3.0 you have a couple of options.
#### Liquidsoap 1.3.0 Patchset (#192)
You can patch your installation of LibreTime to support liquidsoap 1.3.0.
An up to date patch is available through GitHub and can be applied to an unpacked tarball as follows.
```bash
cd libretime-3.0.0-alpha.7/
curl -L https://github.com/libretime/libretime/compare/master...radiorabe:feature/liquidsoap-1.3.0.patch | patch -p1
```
Git users can pull from the branch at https://github.com/libretime/libretime/compare/master...radiorabe:feature/liquidsoap-1.3.0 directly.
#### Install old liquidsoap from opam (#192)
You can downgrade an OPAM install of liquidsoap by running the following command.
```bash
opam install "liquidsoap<1.3.0"
```
### No watched folder support
Currently LibreTime does not support watching folders. Uploading files through the web interface works fine and can be automated via a REST API. Re-implementing watched folder support is on the roadmap. Please consider helping out with the code to help speed things along if you want to use the feature.
### No line in support
This feature went missing from LibreTime due to the fact that we based our code off of the saas-dev branch of legacy upstream and support for recording hasn't been ported to the new airtime analyzer ingest system. #42 currently tracks the progress being made on line in recording.
### Playout won't work if locale is missing
Some minimal OS installs do not have a default locale configured. This only seems to affect some VPS installs as they often do not have a locale setup in the default images provided.
You can set up the locale using a combination of the following commands. You might also want to consult the documentation of your VPS provider as it may contain an official way to set up locales when provisioning a VPS.
```bash
# Set locale using systemds localectl
localectl set-locale LANG="en_US.utf8"
```
These instructions do not seem to work on all Debian based distros so you might need to use `update-locale` as follows.
```bash
#Purge all locales but en_US.UTF-8
sudo locale-gen --purge en_US.UTF-8
#Populate LANGUAGE=
sudo update-locale LANGUAGE="en_US.UTF-8"
```
### Lack of i18n toolchain is disturbing
Some translations might miss the tarball. They didn't get lost, but the build chain needs fixing. Work is in #301 and additional work is needed as it has become clear that we probably want to support bidirectional translation syncing with zanata.

View File

@ -0,0 +1,132 @@
---
title: LibreTime 3.0.0 alpha 8
---
import ReleaseHead from './\_release-head.md';
<ReleaseHead date="2019-08-02" version="3.0.0-alpha.8"/>
## :sparkling_heart: Contributors
The LibreTime project wants to thank the following contributors for contributing to this release:
- @ciaby
- @hairmare
- @learning-more
- @mirzazulfan
- @paddatrapper
- @Robbt
## :rocket: Features
- The LibreTime project now has a proper logo!
- New "Show Listener Stats" in "Analytics" contains listeners statistics on specific shows.
- Display time of last podcast import in downloaded podcasts view.
- Allow sorting by last play date in smartblocks, makes creating playlists that play the least played track possible.
- Preliminary support for Debian Buster (Remember to [patch the liquidsoap scripts](https://github.com/libretime/libretime/releases#issues-liquidsoap-3.0.0-alpha.8) if you use Buster).
## :bug: Bug fixes
- Widgets now use user specified timezones as they should.
- Podcast view now display proper number of downloaded podcasts rather than just the first 25 podcasts.
- Fix using non-ascii characters in podcast publishing service.
- Fix canceling current show for "linked" shows.
- Fix empty schedule page when previous track is empty.
- Fix focus jumping to search in advanced search.
## :fire: Deprecation and removal
- Dropped support for Debian Jessie as it is end-of-life
- Liquidsoap 1.1.1 support. 3.0.0-alpha.8 is most likely the last version to support liquidsoap 1.1.1 out of the box. The number of distros that install a current version of liquidsoap are gaining the majority and once Ubuntu releases a version of their distro that has liquidsoap 1.3.x we will switch to native liquidsoap 1.3.x support. Users still on liquidsoap 1.1.1 will need to apply a patch to their liquidsoap scripts (or update liquidsoap).
## :warning: Known issues
The following issues may need a workaround for the time being. Please search the [issues](https://github.com/libretime/libretime/issues) before reporting problems not listed below.
### Installer Issues
The installer is generally a bit unstable, we hope to be able to offer some reasonable packages at some point. Some of the GUI driven parts before the first login are also in a somewhat questionable state, ymmv.
For now the installer distro selection is pretty good at auto-detecting your os and usually does an ok job depending on your distro. You should usually not need to pass a --distribution and --release parameter, those are still supported for the time being but their use is not recommended.
The UI works best if you don't use it in an opinionated fashion and change just the bare minimal.
If you want to skip the installer GUI completely you can configure LibreTime using `airtime_mvc/build/airtime.example.conf` as an template. Due to some python/PHP differences you must remove all comments from the example to use it 😞. You'll also have to create some folder structures manually and check if the music dir got properly created directly in the database. Referencing a second `install -fiap` install on a non productive system for reference can help with this type of bootstrap.
### Media-Monitor config needs manual removing
If you are using the `install` script you should most likely remove the `[media-monitor]` config section from your `/etc/airtime/airtime.conf` file to ensure you do not run into the problems described in
https://github.com/libretime/libretime/issues/450. We recommend you do this before running the update since there are no known LibreTime releases that depend on the config value.
### Outdated silan reports unreliable cue in/out information
Out of the box the installer installs a broken, outdated version of silan (0.3.2) on some Debian based Platforms (ie. Ubuntu). This affects Ubuntu 16.04, Debian Jessie and Debian Stretch. CentOS does not have upstream packages and you may either install from source or use the [0.3.3 packages](https://github.com/radiorabe/centos-rpm-silan) from [RaBe APEL](https://build.opensuse.org/project/show/home:radiorabe:audio).
Check your version of silan by running `silan --version`. This should report `0.3.3` or higher. If not please see the [Silan Installation](https://github.com/libretime/libretime/wiki/Silan-Installation) wiki page for more details & workarounds.
To date silan 0.3.3 or higher is in Debian testing & Ubuntu Bionic. You can check the upstream progress the [Debian PTS](https://tracker.debian.org/pkg/silan) and [Ubuntu launchpad](https://launchpad.net/ubuntu/+source/silan). This section will get removed once the package is in stable.
tldr: **[Silan Installation](https://github.com/libretime/libretime/wiki/Silan-Installation)**
### Liquidsoap Support
Libretime currently only supports liquidsoap `< 1.3.0` out of the box. If you install a current version of liquidsoap [using OPAM](https://www.liquidsoap.info/) or through the [Rabe Liquidsoap Distribution for CentOS (RaBe LSD)](https://build.opensuse.org/project/show/home:radiorabe:liquidsoap) you will most likely have liquidsoap `1.3.2` or `1.3.3` installed.
#352 reports that liquidsoap `< 1.3.0` can exhibit issues on Debian Stretch installs. One fix for the issue is to install liquidsoap `1.3.0` and to use the following patching steps.
You can check your liquidsoap version by running `liquidsoap --version`.
If you already have liquidsoap >= 1.3.0 you have a couple of options.
#### Liquidsoap 1.3.0 Patchset (#192)
You can patch your installation of LibreTime to support liquidsoap 1.3.0.
An up to date patch is available through GitHub and can be applied to an unpacked tarball as follows.
```bash
cd libretime-3.0.0-alpha.8/
curl -L https://github.com/libretime/libretime/compare/master...radiorabe:feature/liquidsoap-1.3-for-3.0.0-alpha.7.patch | patch -p1
```
Git users can pull from the branch at https://github.com/libretime/libretime/compare/master...radiorabe:feature/liquidsoap-1.3.0-for-3.0.0-alpha.7 directly.
#### Install old liquidsoap from opam (#192)
You can downgrade an OPAM install of liquidsoap by running the following command.
```bash
opam install "liquidsoap<1.3.0"
```
### No watched folder support
Currently LibreTime does not support watching folders. Uploading files through the web interface works fine and can be automated via a REST API. Re-implementing watched folder support is on the roadmap. Please consider helping out with the code to help speed things along if you want to use the feature.
### No line in support
This feature went missing from LibreTime due to the fact that we based our code off of the saas-dev branch of legacy upstream and support for recording hasn't been ported to the new airtime analyzer ingest system. #42 currently tracks the progress being made on line in recording.
### Playout won't work if locale is missing
Some minimal OS installs do not have a default locale configured. This only seems to affect some VPS installs as they often do not have a locale setup in the default images provided.
You can set up the locale using a combination of the following commands. You might also want to consult the documentation of your VPS provider as it may contain an official way to set up locales when provisioning a VPS.
```bash
# Set locale using systemds localectl
localectl set-locale LANG="en_US.utf8"
```
These instructions do not seem to work on all Debian based distros so you might need to use `update-locale` as follows.
```bash
#Purge all locales but en_US.UTF-8
sudo locale-gen --purge en_US.UTF-8
#Populate LANGUAGE=
sudo update-locale LANGUAGE="en_US.UTF-8"
```
### Lack of i18n toolchain is disturbing
Some translations might miss the tarball. They didn't get lost, but the build chain needs fixing. Work is in #301 and additional work is needed as it has become clear that we probably want to support bidirectional translation syncing with zanata.

View File

@ -0,0 +1,114 @@
---
title: LibreTime 3.0.0 alpha 9
---
import ReleaseHead from './\_release-head.md';
<ReleaseHead date="2021-01-05" version="3.0.0-alpha.9"/>
## :sparkling_heart: Contributors
The LibreTime project wants to thank the following contributors for contributing to this release:
- @caveman99
- @codenift
- @farggus
- glibloc
- @hairmare
- @jeromelebleu
- @kmahelona
- @monkeywithacupcake
- @Numerico
- @paddatrapper
- @q84fh
- @rjhelms
- @Robbt
- @samkitk
- @teotikalki
- @valerio
- @xabispacebiker
- @zklosko
## :rocket: Features
- Display artwork from ID3 tags if available
- Expose track metadata or artwork in new API endpoint
- "Track Type" feature to classify tracks for auto-DJ
- support liquidsoap versions 1.1.1, 1.3.x and 1.4.x out of the box
- Improved French translation
- Updated jquery.cookie to js.cookie
- `forceSSL` config to support TLS on non default ports
- macOS Catalina support for Vagrant
- CentOS 8 Support
- Installer creates a secure icecast password on first run
- Support Multipass as an alternative to Vagrant dev environments
## :bug: Bug fixes
- Fix using outro playlist in "repeat until full" smartblock
- Switch to reliable message consumption to prevent RabbitMQ connections getting dropped side-effects
- Replace absolute css and js URLs with relative URLs
- remove legacy upstream conversion tracking, provisioning, and billing code
- disabled version notification to avoid confusion, users can check current version in Settings > Status.
- Swap out MusesPlayer for HTML5Player for playout
- Make lots of untranslatable strings translatable
## :warning: Known issues
The following issues may need a workaround for the time being. Please search the [issues](https://github.com/libretime/libretime/issues) before reporting problems not listed below.
### Installer Issues
The installer is generally a bit unstable, we hope to be able to offer some reasonable packages at some point. Some of the GUI driven parts before the first login are also in a somewhat questionable state, ymmv.
For now the installer distro selection is pretty good at auto-detecting your os and usually does an ok job depending on your distro. You should usually not need to pass a --distribution and --release parameter, those are still supported for the time being but their use is not recommended.
The UI works best if you don't use it in an opinionated fashion and change just the bare minimal.
If you want to skip the installer GUI completely you can configure LibreTime using `airtime_mvc/build/airtime.example.conf` as an template. Due to some python/PHP differences you must remove all comments from the example to use it 😞. You'll also have to create some folder structures manually and check if the music dir got properly created directly in the database. Referencing a second `install -fiap` install on a non productive system for reference can help with this type of bootstrap.
f
### Media-Monitor config needs manual removing
If you are using the `install` script you should most likely remove the `[media-monitor]` config section from your `/etc/airtime/airtime.conf` file to ensure you do not run into the problems described in
https://github.com/libretime/libretime/issues/450. We recommend you do this before running the update since there are no known LibreTime releases that depend on the config value.
### Outdated silan reports unreliable cue in/out information
Out of the box the installer installs a broken, outdated version of silan (0.3.2) on some Ubuntu 16.04. CentOS does not have upstream packages and you may either install from source or use the [0.3.3 packages](https://github.com/radiorabe/centos-rpm-silan) from [RaBe APEL](https://build.opensuse.org/project/show/home:radiorabe:audio).
Check your version of silan by running `silan --version`. This should report `0.3.3` or higher. If not please see the [Silan Installation](https://github.com/libretime/libretime/wiki/Silan-Installation) wiki page for more details & workarounds.
tldr: **[Silan Installation](https://github.com/libretime/libretime/wiki/Silan-Installation)**
### No watched folder support
Currently LibreTime does not support watching folders. Uploading files through the web interface works fine and can be automated via a REST API. Re-implementing watched folder support is on the roadmap. Please consider helping out with the code to help speed things along if you want to use the feature.
### No line in support
This feature went missing from LibreTime due to the fact that we based our code off of the saas-dev branch of legacy upstream and support for recording hasn't been ported to the new airtime analyzer ingest system. #42 currently tracks the progress being made on line in recording.
### Playout won't work if locale is missing
Some minimal OS installs do not have a default locale configured. This only seems to affect some VPS installs as they often do not have a locale setup in the default images provided.
You can set up the locale using a combination of the following commands. You might also want to consult the documentation of your VPS provider as it may contain an official way to set up locales when provisioning a VPS.
```bash
# Set locale using systemds localectl
localectl set-locale LANG="en_US.utf8"
```
These instructions do not seem to work on all Debian based distros so you might need to use `update-locale` as follows.
```bash
#Purge all locales but en_US.UTF-8
sudo locale-gen --purge en_US.UTF-8
#Populate LANGUAGE=
sudo update-locale LANGUAGE="en_US.UTF-8"
```
### Lack of i18n toolchain is disturbing
Some translations might miss the tarball. They didn't get lost, but the build chain needs fixing. Work is in #301 and additional work is needed as it has become clear that we probably want to support bidirectional translation syncing with zanata.

View File

@ -0,0 +1,138 @@
---
title: LibreTime 3.0.0 alpha 10
---
import ReleaseHead from './\_release-head.md';
<ReleaseHead date="2021-10-15" version="3.0.0-alpha.10"/>
## :sparkling_heart: Contributors
The LibreTime project wants to thank the following contributors for contributing to this release:
- @jooola
- @paddatrapper
- @xabispacebiker
- @malespiaut
- @zklosko
- @brekemeier
- @jeromelebleu
- @danielhjames
- @rjhelms
- @hairmare
## :rocket: Features
- Support `force_ssl` configuration option in Python applications
- Move `airtime_mvc` to `legacy` and move all PHP related files under it
- Support `Authorization: Api-Key` header in API v1
- Use pip for LibreTime Python package installation
- Move Python scripts into `/usr/local/bin`
- Add API v2 (unstable and subject to change)
## :bug: Bug fixes
- Renamed `airtime_analyzer` to `libretime-analyzer`
- Prevent auto load playlists running on deleted show instances
- Playout history can be exported as CSV and PDF
- Explicitly fail if the HTTP requests made by the Python applications fail
- Fix API v2 schedule endpoint item filtering and overlapping playout
- Fix pypo overlapping track playout
- Fix installation when Icecast is already installed
- Request 1Gb of memory on libvirt Vagrant boxes
- Clean up CORS setup in the installer
- Pin the `setuptools` version to ensure older versions of LibreTime can still be installed
## :fire: Deprecation and removal
- Removed broken Soundcloud integration
- Dropped support for Ubuntu Xenial as it is end-of-life
- Dropped support for Debian Stretch as it is end-of-life
- Removed SysV and Upstart init system files
- Removed broken My Podcasts feature
## :arrow_up: Upgrading
### Packages renaming and new install paths
Once the upgrade has taken place, you need to run the following commands to clean up old scripts and configuration:
```bash
# Remove the old packages
sudo pip3 uninstall \
airtime-playout \
airtime-celery \
api_clients
# Remove old entrypoints
sudo rm -f \
/usr/bin/airtime-liquidsoap \
/usr/bin/airtime-playout \
/usr/bin/pyponotify
# Remove old config files
sudo rm -f \
/etc/logrotate.d/airtime-liquidsoap
# Remove the old runtime and PHP directories
sudo rm -rf \
/var/run/airtime \
/run/airtime \
/usr/share/airtime/php/airtime_mvc
# Remove old python libraries entrypoints
sudo rm -f \
/usr/bin/airtime-liquidsoap \
/usr/bin/airtime-playout \
/usr/bin/libretime-analyzer \
/usr/bin/libretime-api \
/usr/bin/collectiongain \
/usr/bin/django-admin \
/usr/bin/django-admin.py \
/usr/bin/markdown_py \
/usr/bin/mid3cp \
/usr/bin/mid3iconv \
/usr/bin/mid3v2 \
/usr/bin/moggsplit \
/usr/bin/mutagen-inspect \
/usr/bin/mutagen-pony \
/usr/bin/pyponotify \
/usr/bin/replaygain \
/usr/bin/sqlformat
```
## :warning: Known issues
The following issues may need a workaround for the time being. Please search the [issues](https://github.com/libretime/libretime/issues) before reporting problems not listed below.
### Interface Customization Issues
The UI works best if you don't use it in an opinionated fashion and change just the bare minimal.
### No watched folder support
Currently LibreTime does not support watching folders. Uploading files through the web interface works fine and can be automated via a REST API. Re-implementing watched folder support is on the roadmap. Please consider helping out with the code to help speed things along if you want to use the feature. This is tracked in [#70](https://github.com/libretime/libretime/issues/70).
### No line in support
This feature went missing from LibreTime due to the fact that we based our code off of the saas-dev branch of legacy upstream and support for recording hasn't been ported to the new airtime analyzer ingest system. #42 currently tracks the progress being made on line in recording. This is tracked in [#42](https://github.com/libretime/libretime/issues/42).
### Playout won't work if locale is missing
Some minimal OS installs do not have a default locale configured. This only seems to affect some VPS installs as they often do not have a locale setup in the default images provided. This is tracked in [#317](https://github.com/libretime/libretime/issues/317).
You can set up the locale using a combination of the following commands. You might also want to consult the documentation of your VPS provider as it may contain an official way to set up locales when provisioning a VPS.
```bash
# Set locale using systemds localectl
localectl set-locale LANG="en_US.utf8"
```
These instructions do not seem to work on all Debian based distros so you might need to use `update-locale` as follows.
```bash
#Purge all locales but en_US.UTF-8
sudo locale-gen --purge en_US.UTF-8
#Populate LANGUAGE=
sudo update-locale LANGUAGE="en_US.UTF-8"
```

View File

@ -0,0 +1,294 @@
---
title: LibreTime 3.0.0 alpha 11
---
import ReleaseHead from './\_release-head.md';
<ReleaseHead date='2022-03-28' version='3.0.0-alpha.11'/>
## :sparkling_heart: Contributors
The LibreTime project wants to thank the following contributors for authoring PRs to this release:
- @jooola
- @paddatrapper
## :rocket: Features
- Use setuptools entrypoints ([#1409](https://github.com/libretime/libretime/issues/1409))
- Support php7.4 ([#1354](https://github.com/libretime/libretime/issues/1354))
- run API tests in CI ([#1421](https://github.com/libretime/libretime/issues/1421))
- add support for Ubuntu Focal 20.04 ([#1168](https://github.com/libretime/libretime/issues/1168))
- debian 11 support ([#1292](https://github.com/libretime/libretime/issues/1292))
- create libretime_shared package ([#1349](https://github.com/libretime/libretime/issues/1349))
- enhance libretime shared ([#1491](https://github.com/libretime/libretime/issues/1491))
- **shared:** let user provide the log level ([#1493](https://github.com/libretime/libretime/issues/1493))
- replace verbosity flag with log-level flag ([#1496](https://github.com/libretime/libretime/issues/1496))
- **playout:** enhance playout logging ([#1495](https://github.com/libretime/libretime/issues/1495))
- **api:** update env var settings loading
- **api:** allow to run without log file for dev
- **analyzer:** enhance analyzer cli and logging ([#1507](https://github.com/libretime/libretime/issues/1507))
- **playout:** migrate notify cli to click ([#1519](https://github.com/libretime/libretime/issues/1519))
- **shared:** allow loading from ini config file
- **shared:** allow cli parametrized decorators ([#1527](https://github.com/libretime/libretime/issues/1527))
- **shared:** add suffix to shared config models
- **analyzer:** load config using shared helpers
- **playout:** change playout working directory
- **playout:** load config using shared helpers
- **analyzer:** analyze replaygain using ffmpeg
- **analyzer:** analyze cuepoint using ffmpeg
- **playout:** change liquidsoap working dir ([#1547](https://github.com/libretime/libretime/issues/1547))
- **legacy:** rename log filepath ([#1551](https://github.com/libretime/libretime/issues/1551))
- **shared:** add url/dsn property to config classes ([#1553](https://github.com/libretime/libretime/issues/1553))
- remove locale generation from installer ([#1560](https://github.com/libretime/libretime/issues/1560))
- **legacy:** consolidate constants ([#1558](https://github.com/libretime/libretime/issues/1558))
- **legacy:** add db config defaults and allow custom port ([#1559](https://github.com/libretime/libretime/issues/1559))
- remove unused ubuntu ppa ([#1591](https://github.com/libretime/libretime/issues/1591))
- **analyzer:** do verify ssl certs on requests
- **analyzer:** rework analyze_metadata step
- **api:** improve uwsgi systemd integration ([#1614](https://github.com/libretime/libretime/issues/1614))
- **analyzer:** rework organise_file using pathlib
- **shared:** load config from str filepath
- **shared:** create general config model
- **shared:** create time functions
- **shared:** return log level and filepath
- remove unused web_server_user config entry
- **legacy:** clean config parsing and add defaults
- **api_client:** load config using shared helpers
- **worker:** load config using shared helpers
- **shared:** do not exit on missing config file
- **api:** remove admin app and static files
- **api:** load config using shared helpers
- **legacy:** replace massivescale/celery-php with jooola/celery-php
- **worker:** set celery timezone to UTC
- **api:** include id in file/webstream serializers
- remove uninstall script ([#1682](https://github.com/libretime/libretime/issues/1682))
- **worker:** add service log filepath ([#1640](https://github.com/libretime/libretime/issues/1640))
## :bug: Bug fixes
- remove rogue buster reference
- correct vagrantfile function call
- declare pypo.notify module
- revert removal of eval for shell commands
- add missing dependencies to celery module
- assume api client is installed
- **shared:** fix tests
- change filepath options type to pathlib.Path ([#1506](https://github.com/libretime/libretime/issues/1506))
- **legacy:** validate id param in show image controller ([#1510](https://github.com/libretime/libretime/issues/1510))
- **playout:** optional log_file for liquidsoap
- **shared:** require click >=8.0.3
- **legacy:** correct linting issues
- make vagrant source.list update idempotent ([#1520](https://github.com/libretime/libretime/issues/1520))
- **api:** duplicate exception raising and close file
- **legacy:** api migration config variable name ([#1522](https://github.com/libretime/libretime/issues/1522))
- **shared:** prevent child override by empty dict
- **shared:** tmp_path fixture type mismatch
- **analyzer:** install missing steps package
- **shared:** type is required for default config submodel ([#1536](https://github.com/libretime/libretime/issues/1536))
- **legacy:** default values when array is null
- **legacy:** do not catch too broad exceptions
- **legacy:** add more null check in api live info
- **legacy:** only render if img creation succeed ([#1540](https://github.com/libretime/libretime/issues/1540))
- **shared:** pin loguru version
- **legacy:** clean sql migrations files ([#1545](https://github.com/libretime/libretime/issues/1545))
- **shared:** set logger encoding and dont assume encoding
- **playout:** proper logger format string
- **playout:** only exclude ended file event
- **api_client:** use same date format as schedule key
- **api_client:** properly enclose events in media dict
- **playout:** properly populate scheduled_now_webstream
- **legacy:** revert default storage path ([#1563](https://github.com/libretime/libretime/issues/1563))
- **legacy:** update setup with new db config schema ([#1567](https://github.com/libretime/libretime/issues/1567))
- **shared:** do not strip vhost slash ([#1594](https://github.com/libretime/libretime/issues/1594))
- **analyzer:** remove bad attributes in shutdown handler ([#1605](https://github.com/libretime/libretime/issues/1605))
- **analyzer:** update docstring for organise_file
- **shared:** fix missing port in public_url
- change celery user in worker service file ([#1638](https://github.com/libretime/libretime/issues/1638))
- **api:** model_bakery is a dev dependency
- **api:** static_url settings is required in dev mode ([#1662](https://github.com/libretime/libretime/issues/1662))
- **api_client:** comply to legacy schedule events
- **playout:** remove stream_buffer_start in event dispatch
- add PPA for newer liquidsoap version on Ubuntu
- upgrade python packages during install ([#1707](https://github.com/libretime/libretime/issues/1707))
- **installer:** test and create correct log path
- **installer:** remove rougue reference to /var/log/airtime ([#1710](https://github.com/libretime/libretime/issues/1710))
- **installer:** remove /var/tmp/airtime reference
- **worker:** drop logfile reference until environment variable expansion works correctly
## :arrow_up: Upgrading
### Analyzer certificate verification
Analyzer no longer ignore certificate verification when performing a request. We recommend using Let's Encrypt to get a certificate. If you do rely on self signed certificate, please read the [requests](https://docs.python-requests.org/) documentation to provide a CA Bundle to verify the cert using environment variables.
### Analyzer new command line interface
The Analyzer command line interface has been reworked and uses new flags.
- `--debug` flag becomes `--log-level <level>`
- `--rmq-config-file` flag becomes `--config <filepath>`
- `--http-retry-queue-file` flag becomes `--retry-queue-filepath`.
- `retry-queue-filepath` default value changed from `/tmp/airtime_analyzer_http_retries` to `retry_queue` in the working directory.
### New configuration schema and validation
The configuration file parsing was improved with validation and the configuration schema was updated. Some deprecated fields were removed and other were renamed.
The `general` section has been changed:
- the `general.web_server_user` entry was removed
- the `general.cache_ahead_hours` entry now defaults to 1
- the `general.airtime_dir` entry is deprecated and can be removed
- the `general.station_id` entry is deprecated and can be removed
- the `general.protocol` (`http` or `https`) entry is recommended over the `general.force_ssl` entry.
- the `general.force_ssl` entry should either be removed or set to a value (`true` or `false`), an empty value will fail validation.
The storage (`current_backend`) section has been changed:
- the `current_backend.storage_backend` entry now defaults to the only valid value `file`.
:::note
You can remove the entire `current_backend` section from your configuration file.
:::
The `database` section has been changed:
- the `database.*` entries now have defaults
- the `database.port` entry was added and defaults to `5432`
- the `database.dbname` entry was renamed to `database.name`
- the `database.dbuser` entry was renamed to `database.user`
- the `database.dbpass` entry was renamed to `database.password`
The `rabbitmq` section has been changed:
- the `rabbitmq.*` entries now have defaults
The `pypo` section has been changed:
- the `pypo` section was renamed to `playout`
- the `pypo.ls_*` entries were renamed to `playout.liquidsoap_*`
- the `pypo.*_dir` entries were removed
- the `pypo.api_client` entry was removed
- the `pypo.record_file_type` entry was renamed to `playout.record_file_format`
- the `pypo.base_recorded_files` entry was removed
- the `pypo.poll_interval` entry was removed
- the `pypo.push_interval` entry was removed
- the `pypo.cue_style` entry was removed
The deprecated sections `monit` and `facebook` are unused, they can be removed from your configuration file.
Unless you use a custom auth backend, the `ldap` section can be removed from your configuration file.
Remove any quoted values in your configuration file, validation might fail otherwise. See the following example:
```ini
# The previously quoted value
ls_port = '1234'
# should become
liquidsoap_port = 1234
```
Please see the [configuration documentation](../admin-manual/setup/configuration.md) for more details.
### Environment variables
The API configuration environment variables names changed:
- `LIBRETIME_CONF_DIR` was removed
- `LIBRETIME_CONF_FILE` was renamed to `LIBRETIME_CONFIG_FILEPATH`
The Analayzer configuration environment variables names changed:
- `LIBRETIME_CONF_DIR` environment variable was replaced with `LIBRETIME_CONFIG_FILEPATH`.
The Worker configuration environment variables names changed:
- `RMQ_CONFIG_FILE` was renamed to `LIBRETIME_CONFIG_FILEPATH`.
### Log files new paths
When running Playout from the command line, the service will not log to a file by default.
When running Playout as a systemd service, the log file moved from `/var/log/airtime/pypo/pypo.log` to `/var/log/libretime/playout.log`
The Playout Notify log file at `/var/log/airtime/pypo-liquidsoap/notify.log` was removed and merged into the existing `/var/log/libretime/liquidsoap.log` log file.
When running Liquidsoap from the command line, the service will not log to a file by default.
When running Liquidsoap as a systemd service, the log file moved from `/var/log/airtime/pypo-liquidsoap/ls_script.log` to `/var/log/libretime/liquidsoap.log`
The Legacy log file moved from `/var/log/airtime/zendphp.log` to `/var/log/libretime/legacy.log`
The API log file moved from `/var/log/airtime/api.log` to `/var/log/libretime/api.log`
Run the following command to create the new and clean the old log directory:
```bash
sudo mkdir -p /var/log/libretime
sudo chown -R www-data:www-data /var/log/libretime
sudo rm -rf /var/log/airtime
```
### Services new working directories
When running Playout as a systemd service, the working directory changed from `/var/tmp/airtime/pypo/` to `/var/lib/libretime/playout`. When running from the command line, the users current working directory is now used by default.
When running Liquidsoap as a systemd service, the working directory is now `/var/lib/libretime/playout`. When running from the command line, the users current working directory is now used by default.
When running Analyzer as a systemd service, the working directory is now `/var/lib/libretime/analyzer`.
When running Worker (celery) as a systemd service, the working directory changed from `/srv/airtime` to `/var/lib/libretime/worker`.
Run the following command to clean the old directory:
```bash
sudo rm -rf /var/tmp/airtime/pypo/
```
### Analyzer new `ffmpeg` based steps
The Analyzer now requires `ffmpeg`. The `silan` system dependency and the `rgain3` python package and it's system dependencies can be removed.
Run the following command to clean the old packages:
```bash
sudo apt purge silan
sudo apt purge \
gir1.2-gtk-3.0 \
libcairo2-dev \
libgirepository1.0-dev \
libglib2.0-dev \
pkg-config \
python3-cairo \
python3-dev \
python3-gi \
python3-gi-cairo \
python3-gst-1.0
sudo pip3 uninstall rgain3
```
### No static files for the API
The API does not rely on static files in production anymore.
Run the following command to clean the old files:
```bash
sudo rm -rf /usr/share/airtime/api
```
## :warning: Known issues
The following issues may need a workaround for the time being. Please search the [issues](https://github.com/libretime/libretime/issues) before reporting problems not listed below.
### Ubuntu 18.04 Playout Status
The playout status notifications in the web interface are not working. The issue
is tracked in [#1606](https://github.com/libretime/libretime/issues/1606). The
playout works correctly and can be heard in Icecast, however the **On Air**
button is greyed out and the status reported on the **Streams** status page can
report errors connecting to Liquidsoap. The current workaround is to upgrade the
server to Ubuntu 20.04.

View File

@ -0,0 +1,23 @@
---
title: LibreTime 3.0.0 alpha 12
---
import ReleaseHead from './\_release-head.md';
<ReleaseHead date='2022-03-29' version='3.0.0-alpha.12'/>
## :sparkling_heart: Contributors
The LibreTime project wants to thank the following contributors for authoring PRs to this release:
- @jooola
- @paddatrapper
## :bug: Bug fixes
- **playout:** add locales to libretime-playout-notify calls ([#1715](https://github.com/libretime/libretime/issues/1715))
- **worker:** enable logfile variable expansion in ExecStart ([#1717](https://github.com/libretime/libretime/issues/1717))
## :memo: Colophon
This release mainly fixes bugs present in the [3.0.0-alpha.11 release](./3.0.0-alpha.11.md).

View File

@ -0,0 +1,15 @@
---
title: Releases
---
:::info
LibreTime is following [semantic versioning](https://semver.org/).
:::
:::note
:sparkles: New LibreTime versions are released when it is ready :tm:.
:::

View File

@ -0,0 +1,2 @@
label: Releases
position: 50

View File

@ -0,0 +1,16 @@
import TarballLink from '@site/src/components/TarballLink';
<p>This version was released the <strong>{props.date}</strong>.</p>
:::info
Please report new issues and/or feature requests in [the issue tracker](https://github.com/libretime/libretime/issues).
Join our [discourse](https://discourse.libretime.org/) or chat with us on our [mattermost](https://chat.libretime.org/) if you need help and for general discussion.
:::
<p>
The full tarball for the <code>{props.version}</code> release of
LibreTime is available <TarballLink version={props.version}>here</TarballLink>.
</p>

View File

@ -0,0 +1,25 @@
---
title: Unreleased
---
import ReleaseHead from './\_release-head.md';
<!-- <ReleaseHead date='2022-01-01' version='3.0.0-alpha.11'/> -->
## :sparkling_heart: Contributors
The LibreTime project wants to thank the following contributors for authoring PRs to this release:
## :rocket: Features
## :bug: Bug fixes
## :fire: Deprecation and removal
## :arrow_up: Upgrading
## :warning: Known issues
The following issues may need a workaround for the time being. Please search the [issues](https://github.com/libretime/libretime/issues) before reporting problems not listed below.
## :memo: Colophon

View File

@ -0,0 +1,21 @@
---
title: User manual
---
Welcome to the **LibreTime user manual**, you should find guides and tutorials for managers, and content creators to use LibreTime.
## Introduction
:construction:
## As manager
:construction:
## As content creator
:construction:
## As guest
:construction:

View File

@ -0,0 +1,2 @@
label: User manual
position: 30

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,55 @@
---
title: Show calendar
---
The Calendar page of the LibreTime administration interface has three views: **day**, **week** and **month**, which can be switched using the grey buttons in the top right corner. By default, the **month** view is shown, with today's date highlighted by a pale grey background.
![](./calendar-screenshot451-calendar.png)
In the top left corner of the page, you can go back or forward through the **Calendar** by clicking on the buttons which have a small grey triangle in a white circle. Click the **today** button to jump to today's date in the current view. (The **today** button will be greyed out if you are already viewing that date). In the **day** or **week** views, there is also a drop-down menu which allows you to set the resolution displayed for the calendar, ranging from one minute per row to sixty minutes per row.
![](./calendar-screenshot452-calendar_resolution.png)
### Editing a show
Show configuration and metadata can be changed at any time, except for **Date/Time Start** and **Record from Line In?** options, which are fixed after broadcast of that show commences. Click the show in the Calendar, and select **Edit Show** from the pop-up context menu. This opens the **Update Show** box, which is almost exactly the same as the **Add this Show** box. Click the **+ Update show** button at the top or bottom of the box when you are done.
![](./calendar-screenshot459-update_show.png)
Episodes of repeating shows also have an **Instance Description** field in which you can add details for that particular episode. Click the episode in the Calendar, click **Edit** on the pop-up menu, then click **Edit this instance**. After entering an Instance Description, click the **+ Update show** button.
![](./calendar-screenshot583-show_instance_description_vc9ooit.png)
Alternatively, individual shows can be clicked on and dragged to new days and times in the calendar. However, LibreTime will not allow you to drag a future show into the past, or drag and drop instances of a repeated show. In the **Day** and **Week** views, show length can be adjusted by clicking on the lower edge of the show box, and dragging the edge of the box upwards or downwards. The new show length is calculated automatically.
### Adding content to a show
To add content to a show, click the show in any view on the Calendar, and select **Schedule Tracks** from the pop-up menu. Shows that do not yet contain any scheduled content are marked with a red exclamation mark icon, to the right of the show start and end times in the top bar. Shows partially filled with content have a yellow exclamation mark icon. During playout of the show, a green play icon will also be shown in the top bar.
![](./calendar-screenshot488-add_remove_content.png)
The **Schedule Tracks** action opens a window with the name of the show. Like when using the **Now Playing** page, you can search for content items and add them to the show schedule on the right side of the page. Refer to the _Now Playing_ chapter for details.
When your show has all the required content, click the **OK** button in the bottom right corner to close the window. Back in the **Calendar**, click the show and select **View** from the pop-up menu to view a list of content now included in the show.
![](./calendar-screenshot489-show_content.png)
The **Contents of Show** window is a read-only interface featuring an orange bar which indicates how much media has been added to the show. Click the **OK** button in the bottom right corner, or the white **x** icon in the top right corner, to close the window.
![](./calendar-screenshot353-contents_of_show.png)
### Removing content from a show
To remove an individual item from a show, click on the show in the **Calendar**, and select **Schedule Tracks** from the pop-up menu. In the window which opens, click any item you wish to remove from the show, then click **Delete** on the pop-up menu, or check the box in the item's row then click the **Remove** icon at the top of the table. To remove all files and playlists from a show, click on the show in the **Calendar**, and select **Clear Show** from the pop-up menu.
### Deleting an upcoming show
To delete an upcoming instance of a repeating show, click on the show in the **Calendar**, and select **Delete**, then **Delete Instance** from the pop-up menu. If you wish to delete all future instances of a repeating show, select **Delete Instance and All Following** from the pop-up menu.
![](./calendar-screenshot490-delete_this_instance.png)
You cannot delete or remove content from shows that have already played out. These shows have only one option on the pop-up menu, which is **View**.
### Cancelling playout
If you wish to cancel playout of a show while it is running, click on the show in the **Calendar** and select **Cancel Show** from the pop-up menu. This action cannot be undone.

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

View File

@ -0,0 +1,121 @@
---
title: Dashboard
---
:::tip
Want to listen to LibreTime's output stream? Click **Listen** below the **On Air** light.
:::
The Dashboard is divided into two sections a Library section divided between
Tracks, Playlists, Smart Blocks, Webstreams, and Podcasts, with the **Scheduled
Shows** dialog on the right. This page provides an overview of the right-hand
interface. Check the links to see information about the other sections which
provide the content that can be scheduled.
The **Scheduled Shows** page provides a view of the content your station is will
playout, or has already played out, which defaults to showing the 3 hours
ahead. This page also enables you to make last-minute changes to running shows.
If you've only just installed LibreTime, there might not be any content shown
yet. Click the calendar and clock icons above the table to change the date and
time range, then click the **Find Shows** button (with the magnifying glass
icon) to the right.
![](./dashboard-now-playing.png)
To display the content of a particular show, click **Filter by Show** and select
the name of the show from the drop-down menu which will appear.
![](./dashboard-filter.png)
On the left side of the page, the **Start** and **End** times, **Duration**
and **Title** of each content item are shown. On the right, **Creator**,
**Album**, **Cue** or **Fade** times and **Mime** type (file format) can also be
shown. This information can help you to prepare voice tracks for insertion into
the show, including time checks if you wish. Putting current time information i
to voice tracks describing specific content can, of course, limit the
re-usability of those voice tracks, unless you always broadcast a particular
item at the same time of day.
Click the **Show/hide columns** button on the right to configure the metadata
displayed, by checking the boxes in the pop-up window.
![](./dashboard-columns.png)
The row for the currently playing item is displayed with a bright green
background. Any underbooked shows (shows with insufficient content to fill the
time allowed) are displayed with a row indicating the length of the underbooking
in minutes and seconds. These rows contain a red exclamation mark in the first
column, and have a pink background.
![](./dashboard-end-gap.png)
### Removing content from a running show
If a show is overbooked, which means the total playout duration is longer than
the time allowed for the show, a brown row indicates that the item will be faded
out when the show ends. A red row indicates that the item will not be played at
all. The length of the overbooking is shown in minutes and seconds in the last
row of the show. To remove the extra items from the end of an overbooked show,
click the **Scissors** button at the top left of the table.
Alternatively, check the boxes for items which have not yet completed playout,
and click the **Trashcan** button, to the right of the Scissors, to remove them
from the schedule. If you remove the currently playing item, playout will skip
to the next item in the show automatically, so you should make sure you have
enough items remaining in the show to avoid dead air.
![](./dashboard-delete-extra.png)
If you have a long schedule displayed, and you wish to skip to the currently
playing item, click the button with the end arrow icon, to the right of the
**Trashcan**.
To cancel the current show completely, click the red button to the right again.
A pop-up window will ask you to confirm the cancellation, as this action cannot
be undone.
Items which are no longer available have an exclamation mark icon in the second
column. This may happen for media files which were part of previous shows, and
were removed from LibreTime's library (main storage or watched folders)
subsequently. Items which are included in forthcoming shows cannot be removed
from the Library via the LibreTime interface.
### Adding content to a running show
After you have found the items that you want using the search tools, you can
then drag and drop them from the library table on the left side of the page into
the shows on the right side, including the current playing show.
If the current show has nothing playing out at the time, the new item will begin
playing immediately. This manual triggering of playout can be used as a live
assist technique, in which the LibreTime server's soundcard output is mixed with
other sources such as microphones or telephone hybrids on its way to a
transmitter, or a separate stream encoder. For instance, a live show's host may
not wish to cut off a studio discussion to play music at a fixed time.
![](./dashboard-drag-and-drop.png)
You can also select multiple items using the **Select** menu button, just
beneath the simple search field, which has the options to **Select this page**
of search results, **Deselect this page** and **Deselect all**. Alternatively,
use the checkboxes on the left side of the library table to select specific
items. Then drag one of the items into the show to add all of the selected
items, or click the **Add to selected show** button, which has a plus icon. If
you wish, you can also use the **Trashcan** button to permanently remove items
from LibreTime's library. Only _admin_ users have permission to delete all
items.
To insert checkbox selected items at a specific time in the show schedule, click
one of the songs in the schedule table. Then click the **Add to selected show**
button in the library table. This will insert the library songs after the
selected scheduled song.
To add a single item at the insertion point, double-click on it in the library.
There is no need to select or drag the item first.
Right-clicking on a song in the schedule table will show a pop-up. This pop-up
menu also enables you to audition the entire show in advance of playout, or
remove the item that was clicked on from the show.

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -0,0 +1,13 @@
---
title: Listener statistics
---
The Listener Stats page on the Analytics menu shows graphs of listener connections to the configured streaming servers for the selected date and time range. On the right side, a green **Status** indicator shows **OK** if the connection to the streaming server is active.
![](./listener-stats-stream-stats.jpg)
If the status indicator is red, check that the **Admin User** and **Admin Password** settings are correct under **Additional Options** for the named mount point, such as _libretime_128_, on the **Streams** page of the **Settings** menu.
To choose which particular streams should have statistics displayed, click the check boxes for the individual colour-coded mount points, just below the graph.
By default, statistics for the last 24 hours of streaming are shown. To change this date and time range, click the calendar and clock icons in the lower left corner of the page, then click the magnifying glass icon.

View File

@ -0,0 +1,73 @@
---
title: Broadcasting live
---
## MIXXX
[Mixxx](https://www.mixxx.org) is a cross-platform Open Source application for DJs.
Installed on a desktop or laptop computer, Mixxx complements your LibreTime server to provide a complete system
for both live and scheduled broadcasting. Although Mixxx has many features designed for dance music DJs
that require beat matching and pitch independent time stretching, the program can be used for any kind of
manually triggered broadcast playout, including live speech shows such as news or current affairs.
Mixxx supports a wide variety of popular hardware control surfaces, which can be connected to your
computer using a USB cable. A control surface might replace or augment an analogue mixer in your studio,
depending on your live mixing and playout requirements.
Mixxx 1.9.0 or later includes a live streaming client which, like LibreTime, is compatible with the Icecast
and SHOUTcast media servers. This feature can also be used to stream from Mixxx directly into LibreTime,
using either the **Show Source** or **Master Source**.
To configure Mixxx for streaming into LibreTime, click **Options**, **Preferences**, then
**Live Broadcasting** on the main Mixxx menu. For server **Type**, select the default of **Icecast 2**.
For **Host**, **Mount**, **Port**, **Login** and **Password**, use the **Input Stream Settings**
configured in the LibreTime **Streams** page, on LibreTime's **System** menu.
## B.U.T.T. (Broadcast Using This Tool)
<html>
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/4GLsU9hPTtM" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</html>
### Setup
1. Download and install [BUTT](https://danielnoethen.de/) for your OS.
_Note: be sure you have butt version 0.1.17 or newer installed_
2. Open up BUTT
3. Click **settings**
4. Under **Main** > **Server** click **ADD**
- Type LibreTime (or your station) under Name
- Click the radio button next to **IceCast** under Type
- Type your stations URL (webpage address) under **Address**:
- Type **8002** under **Port**:
- Type your DJ login password under **Password**
- Type **/show** under IceCast mountpoint:
- Type your dj login under **IceCast user:**
5. Click **ADD**
6. Still in settings click, **Audio** and select your audio input device under
**Audio Device**
### Show time
1. When its almost your show time go to your LibreTime page and look at the time in the top right when your show starts go to Butt.
2. Click the white Play button (third button in the middle).
3. If it says connecting... and then stream time with a counter- congratulations, your are connected!
4. Go to the LibreTime page and at the top right under Source Streams the
tab besides Show Source is to the left and Orange - if it is and Current
shows Live Show you are connected.
5. If it is gray, click on the **Show Source** switch to the right of it and it
will toggle your show on and you will be broadcasting. _Note: whether auto
connect is turned on is a station specific setting so it could work either way_
### Recording your show
You can record your show under butt by clicking the red circle record button on
the left. It will save a mp3 based upon the date and time in your home/user
directory by default.
Everything should now be working and you can broadcast for your entire time
slot. If you choose to stop streaming before it is over click the white square
**Stop** button to disconnect. Then go to the LibreTime page and if the Show
Source didn't automatically disconnect you can click it to the right and it
should turn gray.

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@ -0,0 +1,69 @@
---
title: Playlists and smart blocks
---
## Creating a new playlist
You can create a new playlist on the toolbar of the **Playlists** page.
![](./playlists-playlist-editor.png)
Enter a **Name** and **Description** for the playlist, then click the **Save** button. Setting good quality metadata here will help you find the playlist using the search box later, so you should be as descriptive as possible.
### Adding content to a playlist
With a playlist open, drag and drop items from the search results on the left into the playlist on the right. Jingles and voice tracks can be added before, after or between music items.
After adding files to the playlist, the total playlist time is displayed in the top right corner. The duration of an individual file is shown in each row of the playlist in a white font, and beneath this figure the time since the beginning of the playlist is displayed in a smaller light grey font. This elapsed time figure can be used as a time check for voice tracks, although this option may limit the re-usability of the voice track.
To audition a playlist file in your web browser, click the white triangle button on the left side of its row. (If the format of the file is not supported by your browser, the triangle in this button will be greyed out). If audition of the file format is supported, a pop-up window will open, with the playlist starting at the file you clicked.
Click the small white **x** icon on the right hand side of each row to remove a file from the playlist. You can also drag and drop files to re-order them, or click the **Shuffle** button to re-order files automatically.
When your playlist is complete, click the **New** button in the top left corner to create another playlist, click the close icon (a white cross in a black circle) in the top right corner, or browse to another page of the LibreTime interface.
If you want to edit the playlist content or metadata later, you can find it by **Title**, **Creator**, **Last Modified** date, **Length**, **Owner** or **Year** using one of the search tools on the Library page. Click the playlist in the search results list, and then click **Edit** from the pop-up menu. You can also **Preview** the entire playlist in a pop-up audition window, **Duplicate** or **Delete** one of your playlists from this menu.
### Auto loading playlists
LibreTime will schedule tracks from a selected playlist an hour before a show is scheduled to air. This is a great way to automatically schedule weekly shows which are received via. podcasts.
## Creating a Smartblock
![](./playlists-smartblock-options.png)
Smart blocks are automatically filled with media files from the LibreTime library, according to the criteria that you specify. This feature is intended to save staff time, compared to selecting items for a playlist manually, and can be used to schedule shows that operate in a consistent format.
To create a smart block, click the **Smartblocks** button on the left sidebar, and select **New** from the toolbar. Like a playlist, smart blocks can have a title and description, which you can edit. This helps you find relevant smart blocks in searches.
Fill out the smart block's **Name**, **Search Criteria**, and **Limit to** sections. The search criteria can be any one of LibreTime's metadata categories, such as **Title**, **Creator** or **Genre**. The modifier depends on whether the metadata in question contains letters or numbers. For example, **Title** has modifiers including _contains_ and _starts with_, whereas the modifiers for **BPM** include _is greater than_ and _is in the range_.
If you have a large number of files which meet the criteria that you specify, you may wish to limit the duration of the smart block using the **Limit to** field, so that it fits within the show you have in mind. Select **hours**, **minutes** or **items** from the drop-down menu, and click the **Generate** button again, if it is a static smart block. Then click the **Save** button.
:::note
Smart Blocks by default will not overflow the length of a scheduled show. This is to prevent tracks from being cut-off because they exceed the time limit of a show. If you want a smartblock to schedule tracks until it is longer than the Time Limit you can check **"Allow last track to exceed time limit"** (helpful for avoiding dead air on autoscheduled shows).
:::
![](./playlists-smartblock-advanced.png)
You can also set the **smart block type**. A **Static** smart block will save the criteria and generate the block content immediately. This enables you to edit the contents of the block in the **Library** page before adding it to a show. A **Dynamic** smart block will only save the criteria, and the specific content will be generated at the time the block is added to a show. After that, the content of the show can be changed or re-ordered in the **Now Playing** page.
Click the **plus button** on the left to add OR criteria, such as **Creator** containing _beck_ OR _jimi_. To add AND criteria, such as **Creator** containing _jimi_ AND BPM in the range _120_ to _130_, click the **plus button** on the right. (The criteria are not case sensitive). Click **Preview** to see the results.
:::tip
If you see the message **0 files meet the criteria**, it might mean that the files in the Library have not been tagged with the correct metadata. See the chapter [Preparing media](./preparing-media.md) for tips on tagging content.
:::
![](./playlists-smartblock-content.png)
If you don't like the ordering which is generated, click the **Shuffle** button, or drag and drop the smart block contents into the order that you prefer. You can also remove items or add new items manually from the Library. Changes to static smart block contents are saved automatically when you add items, remove or re-order them, or click the **Generate** button. Click the **Save** button in the upper right corner to save any changes to smart block criteria.
By default, a smart block will not contain repeated items, which will limit the duration of the block if you do not have sufficient items meeting the specified criteria in your **Library**. To override the default behaviour, check the **Allow Repeat Tracks** box. The **Sort tracks by** menu offers the options of **random**, **newest** or **oldest** items first.
Smart blocks can be added to shows in the same way as a manually created playlist is added. Smart blocks can also be added to one or more playlists. In the case of a playlist containing a static smart block, click **Expand Static Block** to view the contents. For a dynamic smart block, you can review the criteria and duration limit by clicking **Expand Dynamic Block**.
Once created, smart blocks can be found under the Smartblocks tab and refined at any time. They can be re-opened by right-clicking on the smart block and selecting **Edit** from the pop-up menu.

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View File

@ -0,0 +1,347 @@
---
title: Playout history
---
On the History menu, the **Playout History** page enables you to view a list of files played within a specific date and time range. This page is designed to help your station prepare reports for music royalty collection societies and regulatory agencies.
Search results can be copied to the clipboard using the **Copy** button, exported as data in **CSV** format (comma separated values), exported as a document in **PDF** format, or displayed in a printer-friendly format using the **Print** button. (Your web browser must have an Adobe Flash plugin installed for these buttons to appear). Press the **Esc** key to return to the LibreTime interface once the print job is complete.
This page has three tabs: **Log Sheet**, **File Summary** and **Show Summary**. On any of these tabs, you can select a date and time range by clicking the calendar and clock icons in the upper left corner of the page. Then click the search button, which has a magnifying glass icon, to the right. A list of files played during that date and time range will appear further down the page.
![](./playout-history-log-sheet.png)
In the **Log Sheet** tab, the playout history is sorted by **Start Time** and **End Time** by default.
The number of times each file was played and the length of the files are shown in the **File Summary** tab. To make optimal use of this feature for royalty reporting purposes, music files must be tagged with **Composer** and **Copyright** metadata. The artist performing a piece of music may not be the original composer of the work, or the copyright holder of the sound recording.
On the **Show Summary** tab, click the name of a show within the search range to expand its row and see its playout details.
### Manual logging
If your station features playout from analogue sources such as turntables or microphones, there is no automatic metadata for LibreTime to collect from these inputs. To ensure that the playout history is complete, you can add log entries manually by clicking the **+ Create Entry** button. This action opens a pop-up window with default fields of Start Time, End Time, Title and Creator. Click the **Find** button to automatically fill the **Choose Show Instance** menu with the names of shows that took place within the specified time range. Then click the **Save** button to enter the new item into the playout history.
Log entries can also be manually deleted, using the button with the trashcan icon, to the right of the **+ Create Entry** button. Pages of entries can be selected for deletion using the **Select** drop-down menu.
## History templates
![](./playout-history-history-templates.png)
The **History Templates** page on the History menu enables you to prepare reports with the exact content required by regulatory agencies in the territories that you are broadcasting to. You can begin creating a custom template by clicking the button **New Log Sheet Template** or the button **New File Summary Template**.
![](./playout-history-new-hist-temp.png)
Either of these actions opens a page in which you can name the new template, and add or remove elements from the list on the left. To add a new element from the list on the right, click the plus icon for the item you require. If the element you require is not listed, you can use the **Add New Field** box at the lower end of the right side column. Select _string_, _boolean_, _integer_, or _float_, depending on the type of data that you wish to log, and then click the **+ Add** button.
When the template is in the format you require, click the **Save** button, and **Set Default Template** if you wish. The new template will now be listed on the History Templates page. If you have set a new default template, any changes will be visible on the tabs of the Playout History page.
## Exporting the schedule {#exporting}
LibreTime has a feature which enables your station's show and schedule information to be displayed on remote websites. This feature is included in LibreTime because you would not usually invite the general public to access your LibreTime server directly. If you had very large numbers of people requesting data from the LibreTime server at once, the burst of network traffic might overload the server, potentially disrupting your broadcasts. If carried out maliciously, this network overload is known as a _denial of service attack_.
Instead, your public-facing web server can retrieve the schedule information from the LibreTime API. It can be presented using Javascript widgets and styled with CSS, in any format that you require.
There are two kinds of information that can be retrieved remotely from the LibreTime API without authentication; the metadata for the current show plus the following show (live-info), or the schedule for the current week and the week ahead (week-info). The week-info metadata includes show names, times, and individual show URLs on your public website. That way, the audience for your station can click through from the schedule information to find out more about a particular show, or download a previous show recording that you might have made available.
If your LibreTime server was accessible at https://libretime.example.com the live show information could be retrieved by your web server using this URL:
```
https://libretime.example.com/api/live-info/?callback
```
The comma-separated text metadata returned to your web server might be something like this:
```json
{
"env": "production",
"schedulerTime": "2013-07-03 14:07:31",
"previous": {
"name": "Earth, Wind &amp; Fire - Boogie Wonderland",
"starts": "2013-07-01 22:53:00",
"ends": "2013-07-01 22:55:00",
"type": "track"
},
"current": {
"name": "Deodato - Also Sprach Zarathustra",
"starts": "2013-07-03 13:07:06",
"ends": "2013-07-03 13:16:05",
"media_item_played": true,
"record": 0,
"type": "track"
},
"next": {
"id": 8,
"instance_id": 10,
"name": "Rock Show",
"url": "https://rock.example.com/",
"start_timestamp": "2013-07-03 14:00:00",
"end_timestamp": "2013-07-03 15:00:00",
"starts": "2013-07-03 14:00:00",
"ends": "2013-07-03 15:00:00",
"record": 0,
"type": "show"
},
"currentShow": [
{
"start_timestamp": "2013-07-03 14:07:00",
"0": "2013-07-03 13:07:00",
"end_timestamp": "2013-07-03 15:00:00",
"1": "2013-07-03 14:00:00",
"name": "Funk Show",
"2": "Funk Show",
"id": 7,
"3": 7,
"instance_id": 9,
"4": 9,
"record": 0,
"5": 0,
"url": "https://funk.example.com/",
"6": "",
"starts": "2013-07-03 14:07:00",
"7": "2013-07-03 13:07:00",
"ends": "2013-07-03 15:00:00",
"8": "2013-07-03 14:00:00"
}
],
"nextShow": [
{
"id": 8,
"instance_id": 10,
"name": "Rock Show",
"url": "https://rock.example.com/",
"start_timestamp": "2013-07-03 15:00:00",
"end_timestamp": "2013-07-03 16:00:00",
"starts": "2013-07-03 15:00:00",
"ends": "2013-07-03 16:00:00",
"record": 0,
"type": "show"
}
],
"timezone": "BST",
"timezoneOffset": "3600",
"AIRTIME_API_VERSION": "1.1"
}
```
The information for the current week's schedule could be retrieved using the URL:
```
https://libretime.example.com/api/week-info/?callback
```
In this case, the metadata returned would be in a different format from the above example, something like the following. To keep the example short, this particular schedule export only contains four shows on a Monday. A full weekly schedule export would contain a great deal more text.
```json
{
"monday": [
{
"start_timestamp": "2013-07-01 12:05:00",
"end_timestamp": "2013-07-01 13:00:00",
"name": "Elvis Show",
"id": 2,
"instance_id": 2,
"record": 0,
"url": "https://elvis.example.com/",
"starts": "2013-07-01 12:05:00",
"ends": "2013-07-01 13:00:00"
},
{
"start_timestamp": "2013-07-01 13:00:00",
"end_timestamp": "2013-07-01 14:00:00",
"name": "News",
"id": 3,
"instance_id": 4,
"record": 0,
"url": "https://news.example.com/",
"starts": "2013-07-01 13:00:00",
"ends": "2013-07-01 14:00:00"
},
{
"start_timestamp": "2013-07-01 14:00:00",
"end_timestamp": "2013-07-01 15:00:00",
"name": "Funk Show",
"id": 4,
"instance_id": 6,
"record": 0,
"url": "https://funk.example.com/",
"starts": "2013-07-01 14:00:00",
"ends": "2013-07-01 15:00:00"
},
{
"start_timestamp": "2013-07-01 15:00:00",
"end_timestamp": "2013-07-01 17:30:00",
"name": "Rock Show",
"id": 5,
"instance_id": 7,
"record": 0,
"url": "https://rock.example.com/",
"starts": "2013-07-01 15:00:00",
"ends": "2013-07-01 17:30:00"
}
],
"tuesday": [],
"wednesday": [],
"thursday": [],
"friday": [],
"saturday": [],
"sunday": [],
"AIRTIME_API_VERSION": "1.1"
}
```
If you see the message _You are not allowed to access this resource_ when attempting to display schedule information in your web browser, log in to the LibreTime administration interface, click _System_ in the main menu, then _Preferences_. Set **Allow Remote Websites To Access "Schedule" Info?** to **Enabled**, click the **Save** button, then refresh the browser window opened on the schedule export URL. If you do not wish to make schedule information available to the public, set this option to **Disabled** instead.
### Caching schedule information
If the LibreTime server is behind a firewall, or you want to protect the LibreTime server from large numbers of schedule requests, you may wish to cache the schedule information on a public-facing or intermediate server. You can then create a firewall rule that only allows the schedule server to connect to the LibreTime server, in addition to any remote users of the LibreTime web interface.
Your system administrator can set up schedule caching on a standard Apache and PHP enabled web server with the _curl_ program installed, using the following steps:
1. Create a shell script on the schedule server (schedule.example.com) that polls the remote LibreTime server (libretime.example.com), and writes the metadata returned into a pair of local temporary files:
```
sudo nano /usr/local/bin/libretime-schedule.sh
```
The content of this file should be like the following script, replacing libretime.example.com with the name of your LibreTime server:
```bash
#!/bin/sh
curl -s "https://libretime.example.com/api/live-info/?callback=***" > /tmp/live-info
curl -s "https://libretime.example.com/api/week-info/?callback=***" > /tmp/week-info
```
2. Make the script executable:
```
sudo chmod +x /usr/local/bin/libretime-schedule.sh
```
3. Create an Apache VirtualHost configuration for the schedule server:
```
sudo nano /etc/apache2/sites-available/schedule
```
containing a definition like the following, replacing `schedule.example.com` with the name of your schedule server:
```apacheconf
<VirtualHost *:80>
ServerName schedule.example.com
DocumentRoot /var/www/schedule/
</VirtualHost>
```
4. In the schedule server's DocumentRoot folder, create the folders `api/live-info/` and `api/week-info/`
```bash
sudo mkdir -p /var/www/schedule/api/live-info/
sudo mkdir -p /var/www/schedule/api/week-info/
```
5. Create an index.php file in the `api/live-info/` folder:
```bash
sudo nano /var/www/schedule/api/live-info/index.php
```
containing the following code:
```php
<?php
$filename = '/tmp/live-info'; // define here the path and name of uploaded live-info file
header('Content-Type: text/javascript');
header("Expires: Thu, 01 Jan 1970 00:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
$callback = empty($_GET['callback']) ? null : $_GET['callback'];
$content = file_get_contents($filename);
$content = str_replace('***', $callback, $content);
echo $content;
?>
```
6. Create an index.php file in the `api/week-info/` folder:
```
sudo nano /var/www/schedule/api/week-info/index.php
```
containing the following code:
```php
<?php
$filename = '/tmp/week-info'; // define here the path and name of uploaded week-info file
header('Content-Type: text/javascript');
header("Expires: Thu, 01 Jan 1970 00:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
$callback = empty($_GET['callback']) ? null : $_GET['callback'];
$content = file_get_contents($filename);
$content = str_replace('***', $callback, $content);
echo $content;
?>
```
7. Enable the new configuration and reload the Apache web server:
```bash
sudo a2ensite schedule
sudo /etc/init.d/apache2 reload
```
8. Create a cron job to run the shell script each minute:
```bash
sudo nano /etc/cron.d/libretime-schedule
```
containing the line:
```
* * * * * www-data /usr/local/bin/libretime-schedule.sh
```
The schedule server will now be serving the same show information as the LibreTime server, with a cache lifetime of one minute. You can adjust the cache lifetime by altering the frequency of the cron job that polls the LibreTime server.
### Pushing schedule information via FTP or SSH
If there is no inbound access to the LibreTime server at all, an FTP script can be used to push cached schedule data from LibreTime to an external web server. The standard ftp command should be available on the LibreTime server and the external web server should have a suitably restricted FTP account set up. After following steps 1 and 2 above to export schedule data to a pair of temporary files on the LibreTime server, create a new script on the LibreTime server to automatically make the upload:
```
sudo nano /usr/local/bin/upload-schedule-data.sh
```
Replace host, user and password values with appropriate values for your external web server:
```bash
#!/bin/sh
HOST='website.example.com'
USER='ftp_user'
PASSWD='ftp_password'
ftp -n -v $HOST << EOT
user $USER $PASSWD
ascii
prompt
put /tmp/airtime-week-info
put /tmp/airtime-live-info
bye
EOT
```
Then make the new script executable and create a cron job to launch it every minute, as in step 8 above. Steps 3 to 7 above should be carried out on the external web server so that it can convert the two temporary files uploaded via FTP into public schedule data.
If you have secure shell access (SSH) to the remote web server, you could write a script to use the secure copy command (scp) instead of ftp.

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

View File

@ -0,0 +1,40 @@
---
title: Podcasts
---
The Podcasts page allows you add subscriptions to podcasts which are often used to syndicated audio files using a URL called a RSS feed. This allows your LibreTime instance to automatically download new shows from the web.
:::info
All podcasts available on iTunes have a RSS feed but it is sometimes hidden. See issue [#510](https://github.com/libretime/libretime/issues/510) for more information. RSS feeds that do not end in _.xml_ may be accepted by LibreTime yet fail to download episodes. A work-around is to download the episode using a podcast client such as [gpodder](https://gpodder.github.io/) and then manually upload and schedule the episode.
Podcast feeds coming from Anchor.fm have been known to have a similar issue.
:::
The podcast interfaces provides you with the ability to generate [Smartblocks](./playlists.md) that can be used in conjunction with autoloading playlists to schedule the newest episode of a podcast without human intervention.
<html>
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/g-4UcD8qvR8" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</html>
### Podcasts dashboard
![](./podcasts-podcasts_dashboard.png)
The podcasts dashboard is similar to the tracks view, allowing you to add, edit, and remove
podcasts by the toolbar, in addition to sorting by columns.
To add a podcast, click on the **+ Add** button on the toolbar and provide the podcast's RSS feed, which usually ends in _.xml_.
Once the podcast's feed is recognized, the editor pane opens for the podcast.
### Editor
![](./podcasts-podcasts_editor.png)
In the podcasts editor, you can rename the podcast, update settings for the podcast, and manage episodes.
A search box is available to search for episodes within the feed.
- To import an episode directly into LibreTime, double-click on an episode or select it and click **+ Import**. The podcast will appear under tracks with the Podcast Name as the Album.
- To delete an episode from LibreTime, select the episode and click on the red trash can on the toolbar.
- If you would like LibreTime to automatically download the latest episodes of a podcast, make sure _Download latest episodes_ is checked. This can be used in conjunction with Smartblocks and Playlists to automate downloading and scheduling shows that are received via podcast feed.

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

View File

@ -0,0 +1,108 @@
---
title: Preparing media for upload
---
Before uploading media to an LibreTime server, there are a number of factors which should be considered. Getting your ingest workflow right will save you a lot of time later.
## Metadata quality
LibreTime automatically imports any metadata that is in the files' ID3 tags. If these tags are incorrect or are missing information, you will have to either edit the metadata manually. Files with metadata such as track title and artist information may be difficult to locate in larger libraries, or add to shows, playlists, or smart blocks.
There are a number of programs available which can be used to correct mistakes or incomplete information in ID3 tags. You can use a music library manager (like Apple Music, Rhythmbox, or Windows Media Player) to edit ID3 tags as well, but you may be required to import the files into your library, which may not always be convenient.
- [TagScanner](https://www.xdlab.ru/en/) (Windows)
- [Mp3tag](https://www.mp3tag.de/en/index.html) (Windows)
- [MusicBrainz Picard](https://picard.musicbrainz.org/) (Mac, Windows, Linux)
- [Ex Falso](https://code.google.com/p/quodlibet/) (Linux)
The _Tags From Path_ feature of Ex Falso is a particularly useful time saver if you have a large archive of untagged files. Sometimes there is useful creator or title information in the file name or directory path structure, which can be converted into an ID3 tag automatically.
![](./preparing-media-screenshot175-ex_falso.png)
## Metadata in legacy character sets
LibreTime expects file tag metadata to be stored in the international _UTF-8_ character set. Programs such as **Ex Falso** (described above) encode metadata in UTF-8 by default. If you have an archive of files encoded with metadata in a legacy character set, such as the Cyrillic encoding _Windows-1251_, you should convert these files before import.
The program **mid3iconv** (part of the **python-mutagen** package in Debian and Ubuntu) can be used to batch convert the metadata character set of files on the command line. You can install **python-mutagen** with the `sudo apt-get install python-mutagen`.
<span id="Convert_MP3_Tags_using_mid3iconv" class="mw-headline"> For example, to preview the conversion of tags from Windows-1251 </span><span id="Convert_MP3_Tags_using_mid3iconv" class="mw-headline">(CP1251)</span><span id="Convert_MP3_Tags_using_mid3iconv" class="mw-headline"> character set to UTF-8 for a whole archive of MP3 files, you could use the command: </span>
```bash
find . -name "*.mp3" -print0 | xargs -0 mid3iconv -e CP1251 -d -p
```
in the base directory of the archive. The **-d** option specifies that the new tag should be printed to the server console (debug mode), and the **-p** option specifies a preview run. This preview will enable you to confirm that the metadata is being read and converted correctly before writing the new tags.
To actually convert all of the tags and strip any legacy ID3v1 tag present from each file at the same time, you could use the command:
```bash
find . -name "*.mp3" -print0 | xargs -0 mid3iconv -e CP1251 --remove-v1
```
The name of the original character set follows the **-e** option. Other legacy character sets that mid3iconv can convert to UTF-8 include:
```
KOI8-R: Russian
KOI8-U: Ukrainian
GBK: Traditional Chinese
GB2312: Simplified Chinese
EUC-KR: Korean
EUC-JP: Japanese
CP1253: Greek
CP1254: Turkish
CP1255: Hebrew
CP1256: Arabic
```
## Audio loudness
On file ingest, LibreTime analyzes each Ogg Vorbis, MP3, AAC or FLAC file's loudness, and stores a _ReplayGain_ value for that file in its database. At playout time, the ReplayGain value is provided to Liquidsoap so that gain can be automatically adjusted to provide an average output of -14 dBFS loudness (14 decibels below full scale). See https://en.wikipedia.org/wiki/ReplayGain for more details of ReplayGain.
Because of this automatic gain adjustment, any files with average loudness higher than -14 dBFS will not sound louder than quieter files at playout time, but the lower crest factor in the louder files (their relatively low peak-to-average ratio) may be apparent in the output, making those files sound less dynamic. This may be an issue for contemporary popular music, which can average at -9 dBFS or louder before ReplayGain adjustment. (See https://www.soundonsound.com/sound-advice/dynamic-range-loudness-war for a detailed analysis of the problem).
Your station's producers should therefore aim for 14dB between peak and average loudness to maintain the crest factor of their prepared material (also known as _DR14_ on some dynamic range meters, such as the command-line DR14 T.meter available from https://sourceforge.net/projects/dr14tmeter/). If the producers are working to a different loudness standard, the ReplayGain modifier in LibreTime's Stream Settings page can be adjusted to suit their material.
Large transient peaks in otherwise quiet files should be avoided, to guard against the need for peak limiting when ReplayGain is applied to those quieter files.
The **vorbisgain** command-line tool, available in the **vorbisgain** package in Debian/Ubuntu, can be used to indicate the ReplayGain of an individual Ogg Vorbis file before ingest into LibreTime. (A similar tool for MP3 files is available in the **mp3gain** package in Debian/Ubuntu).
Here is an example of a very quiet file where the use of ReplayGain would make the output more than 17dB louder:
```bash
$ vorbisgain -d Peter_Lawson-Three_Gymn.ogg
Analyzing files...
Gain | Peak | Scale | New Peak | Track
----------+------+-------+----------+------
+17.39 dB | 4536 | 7.40 | 33585 | Peter_Lawson-Three_Gymn.ogg
```
And here is an example of a very loud file, with lower crest factor, where the output will be more than 7dB quieter with ReplayGain applied:
```bash
$ vorbisgain -d Snoop_Dogg-Doggfather.ogg
Analyzing files...
Gain | Peak | Scale | New Peak | Track
----------+-------+-------+----------+------
-7.86 dB | 36592 | 0.40 | 14804 | Snoop_Dogg-Doggfather.ogg
```
In the output from vorbisgain, _Peak_ is the maximum sample value of the file before any ReplayGain has been applied, where a value of 32,767 represents full scale when decoding to signed 16 bit samples. Note that lossy compressed files can have peaks greater than full scale, due to encoding artifacts. The _New Peak_ value for the Snoop Dogg file may be relatively low due to the hard limiting used in the mastering of that piece of music.
## Silence in media files
Before importing media, it is good practice to check for any silent sections in the media files. While LibreTime compensates for leading and trailing silence with the use of automatic cue-in and cue-out points, it is best to trim these files to the intended length before upload. Two notable audio file editors for removing silent sections are [Audacity](https://www.audacityteam.org/) and [Ocenaudio](https://www.ocenaudio.com/).
:::danger
Gaps in playout or dead air can have legal repercussions for your station. Check with your station manager or local or state communications authority for more information.
:::
Quiet introductions or extended fades can also lead to apparent gaps in your broadcast playout. This is more common when playing back audio from ripped CDs or dubbed from tape or vinyl. Long periods of silence should be removed from files before uploading to LibreTime.
![](./preparing-media-screenshot126-debra_silence.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -0,0 +1,82 @@
---
title: Scheduling shows
---
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/TJtWUzAlP08" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
Log in using your username and password using the link in the upper right corner. (If you just installed
LibreTime, your username/password is admin/admin.)
The main workflow in LibreTime is **Upload** media -> create a show on the **Calendar** -> **Schedule Tracks**.
Once you log in, click on the big blue button on the left navigation that says **Upload**.
![](./scheduling-shows-select_files.png)
Select the type of media you are uploading (Music, Station IDs, etc.) by using the dropdown box
at the top of the pane. After that, either drag and drop media into the area below or click the
dashed rectangle to open a file browser.
Once your files have uploaded and have been successfully imported (as shown in the pane on the right),
click on **Calendar** on the left navigation.
![](./scheduling-shows-screenshot558-add_show.png)
Click on the blue **+ New Show** button to add a new show.
![](./scheduling-shows-screenshot560-show_when.png)
At the very minimum, fill out the show's name and when the show will take place. If the show will repeat regularly,
check the **Repeats?** box and fill out the repeat information. A description of all fields of the New Show box
are in the table below. Finally, click on the grey **+ Add this show** button at the top
of the pane to add your show to the calendar.
Once your show is created, click on it to open its context menu. Select **Schedule Tracks** to open the track scheduler.
![](./scheduling-shows-screenshot561-add_show_content.png)
The track scheduler behaves similarly to iTunes or Windows Media Player: media browser on the left, playlist on the right.
Find the tracks that you would like to schedule by using the search box or sorting columns and then dragging them
into the playlist.
![](./scheduling-shows-screenshot562-drag_show_content.png)
The bar at the end of the show's playlist will show the amount of time the show is underscheduled or overscheduled.
Shows that are underscheduled will have dead air at the end and shows that are overscheduled
will fade out exactly when the show is over (the orange colored entry), meaning tracks scheduled to start
after this point will not play (dark red colored entries). Click the **Ok** button in the bottom right to save.
Show playback will start and end as per each show's start and end times, allowing you to rely completely on
LibreTime for running your station or using LibreTime as a part of your live setup to cover when DJs are not present.
When media is playing, the **On Air** indicator at the top will turn red.
![](./scheduling-shows-on-air-status.png)
You can listen to your stream by going to `yourserverIP:8000` or by clicking the **Listen** button under the On Air
indicator.
### Show properties appendix
| Field | Description |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| _What_ | |
| Name (Required) | The name of your show |
| URL | The URL of your show. Not used on the public page. |
| Genre | The genre of your show. Not used on the public page. |
| Description | Description of your show. Not used on the public page. |
| _When_ | |
| Start Time (Required) | The time and date the show starts. Note that the time element is in 24 hour time. If the **Now** option is selected, the show will be created to immediately start. |
| End Time (Required) | The time and date the show ends. Defaults to a time one hour after the start time, which can be seen in the **Duration** field, which is uneditable. |
| Repeats? | If checked, allows for options to schedule a repeated show. Shows can repeat weekly up to monthly in increments of one week and can be scheduled on multiple days of the same week. An end date can be set, otherwise the show can be deleted by clicking on its entry in the calendar and clicking Delete > Future Occurrences. If **Linked ?** is checked, the playlist scheduled for the next show will also play for all future shows. |
| _Autoloading Playlist_ | |
| Add Autoloading Playlist? | If checked, allows for the following options |
| Select Playlist | Select the playlist the show will autofill from (shows autofill exactly one hour before air). If you wish to use a smartblock you must add it to a playlist and then select that playlist. This can be used to auto-schedule new podcast episodes to air. |
| Repeat Playlist Until Show Is Full | If checked, the playlist will be added to the show multiple times until the slot is full. Useful for applying a one-hour music playlist made up of smartblocks to a two-hour show. |
| _Live Stream Input_ | |
| Use LibreTime/Custom Authentication | |
| Show Source | |
| _Who_ | |
| Search Users, DJs | Program Managers and Admins may assign DJs to a show, giving DJs access to schedule tracks for said show. DJs cannot create shows on their own. |
| _Style_ | |
| Background/Text Color | Set the color of the background and text of entries on the calendar. If not set, LibreTime will select contrasting colors for easy readability. |
| Show Logo | If desired, you can upload a show logo here. The logo does not appear on the public page. |

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -0,0 +1,171 @@
---
title: Settings
---
## General settings
![](./settings-station-info-settings.png)
On the **Settings** menu, click **General** to set your **Station Name**. This
text is shown in your web browser's title bar when your station staff are logged
into LibreTime, and optionally in stream metadata. You can also set a **Station
Description** and **Station Logo** here.
![](./settings-general-playback-settings.png)
The **Default Interface Language** drop-down menu sets the default localization
for your LibreTime instance, and the **Station Timezone** drop-down menu can be
used to display local time at your station. LibreTime stores show times
internally in UTC format (similar to _Greenwich Mean Time_), but displays local
time for the convenience of your station staff. You can also set the day of the
week that you wish to start your station's weekly schedule on, which defaults
to Sunday.
The **Track Type Default** enables you to select a track type default for uploads.
Initially, the **Default Fade In** and **Default Fade Out** times for automated
fades are set to half a second, and the **Default Crossfade Duration** is set to
zero seconds. Custom fade and crossfade times can be set for adjacent items in a
playlist or static smart block. See the chapter _Library_ for details.
The **Intro Autoloading Playlist** enables you to select a playlist that will be
scheduled at the beginning of every show that has enabled an autoloading
playlist. This can be used for instance to insert a station ID or other
announcements a the top of every show.
The **Outro Autoloading Playlist** enables you to select a playlist that will be
scheduled after the content of every show with an autoloading playlist.
The **Overwrite Podcast Episode Metatags** option which is enabled by default
causes LibreTime to override the Artist, Title & Album fields on any tracks
downloaded from a podcast with information from the RSS feed.
The **Generate a smartblock and a playlist upon creation of a new podcast**
option when enabled will create a smartblock matching the newest episode of a
podcast and a playlist containing that smartblock automatically upon adding a
podcast to LibreTime. This can also be done manually by the generate smartblock
and playlist button under a podcasts settings which is why it is disabled by
default.
![](./settings-api-settings.png)
You can opt-in to test new features with the **Feature Previews** option.
Features that we soft rollout this way may need more feedback or still have
tolerable bugs. This contains but is not limited to features like large ui
refactors. You can switch back at any time.
You can enable live, read-only access to the LibreTime schedule calendar for
your station's public website with the **Public LibreTime API** option, if you
wish. (There is more about this feature in the
[_Exporting the schedule_](./playout-history.md) chapter, in the
_Advanced Configuration_ section of this book).
The **Allowed CORS URLs** is intended to deal with situations where you want a
remote site with a different domain to access the API. This is relevant when
there is a reverse proxy server in front of LibreTime. If you are using a
reverse proxy, the URLs that will be used to access it should be added here.
The **Display login button on your Radio Page?** will determine whether visitors
to your site see a link to login. If this is disabled, DJs and admins will need
to goto http://example.org/login to be able to login.
The **Tune-In Settings** section is intended for stations that have partnered
with TuneIn to automatically push their now playing metadata to TuneIn. This
hasn't been tested and also requires special credentials from TuneIn.
The **Dangerous Options** section provides an administrator the ability to erase LibreTime's track library.
:::danger
Erasing LibreTime's track library cannot be undone.
:::
Individual LibreTime users can choose another interface localization when they
log in, or set personal preferences for localization and time zone by clicking
their username on the right side of the menu bar.
---
## Track types
### Create track types
1. Click **Settings**
1. Click **Track Types**
1. Click **New Track Type**
1. On the "Code" field, type a unique code that can be easily identifiable. Example, for Music use "MUS" or for Sound Effects use something like "FX".
1. On the "Type Name" field, type a the name of the type of tracks. Example, "Station IDs".
1. On the "Description" field, enter the description of the type given.
1. On the "Visibility" drop down menu, choose to enable or disable the track type. By default, it is enabled. If disabled, it won't be shown across LibreTime or in the API for developers.
1. Click **Save**.
---
## Stream settings
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/QPNo52Fc0ck" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
### Global settings
You can configure direct Icecast and SHOUTcast streams and sound card output by clicking **Streams** on the **System** menu.
At the top left of the **Stream Settings** page are global settings including **Hardware Audio Output**, which enables playout from the default sound card on the server, if one is fitted. The default **Output Type** of _ALSA_ on the drop-down menu will be suitable for most servers with a sound card. If not, you have the option to choose from other Liquidsoap interfaces available, such as _OSS_ or _PortAudio_.
The second checkbox under Global Settings enables the sending of **Icecast Vorbis Metadata** with direct streams. This setting is optional, because some media players have a bug which makes them disconnect from Ogg Vorbis streams when an Icecast server notifies the player that a new track is starting.
The **Stream Label** radio button allows you to set the metadata that will be sent with direct streams; _Artist_ and _Title_, _Show_, _Artist_ and _Title_, or _Station name_ and _Show name_.
The **Off Air Metadata** field configures the text that will be sent to any configured streaming servers, and from there on to media players, when Airtime is not streaming any output.
Below this is the **Enable Replay Gain** checkbox which, if checked, automatically adjusts Airtime's output level to an average of -14dBFS, based on prior analysis of the level of individual files in the **Library**. This feature helps guard against unwanted changes in Airtime's output level caused by the typical variation in average level of recordings made in different studios at different times. The correction value for each file can be viewed by enabling the ReplayGain column in the **Library**.
If Replay Gain is enabled, output level can be adjusted up to 10dB louder or quieter from the reference level of -14dBFS by clicking and dragging the **Replay Gain Modifier** control. Increasing level too far is likely to result in clipping (distortion) since the output level is adjusted to be greater than that of the original files. This scenario is indicated by amplitude correction factors greater than 1.0 in the Liquidsoap log file.
Click the **Save** button on the right side of the page to save any changes that you have made to global settings. If you are only using the hardware audio output, and will not be streaming to or from Airtime, you can leave the **Stream Settings** page after clicking the **Save** button.
### Input stream settings
On the lower left side of the Stream Settings page you can configure remote live input streams from DJ programs such as **Mixxx** or **IDJC**, or smartphone applications used by broadcast journalists. A bug with **Butt** versions 1.14 to 1.16 causes streams not to connect to LibreTime. A fix has been introduced with **Butt** version 1.17 that allows it to be used by LibreTime.
Airtime supports two types of live input stream; the **Show Source**, which enables a specific person to stream in during their own show, and the **Master Source**, which can override the Show Source if necessary. If neither type of live input is available, Airtime will fall back to **Scheduled Play** (playlists, smart blocks, remote streams and files scheduled in Airtime, in advance of or during a show).
The **Auto Switch Off** and **Auto Switch On** checkboxes enable playout to be switched automatically to the highest priority source whenever an authenticated input source disconnects from or connects to Airtime, respectively. The field **Switch Transition Fade** sets the length of the audio fade as scheduled playout is switched to a remote input source, and back.
Each type of input stream requires a username and password before the remote broadcaster can connect to Airtime. The **Master Username** and **Master Password** can be set in the Input Stream Settings box, while the authentication for individual Show Sources is set up in Airtime's schedule calendar. See the _Calendar_ chapter for details.
Input streams must have a **Port** for the remote broadcaster to connect to, which should be a number in the range from 1024 to 49151. If you have the Icecast or SHOUTcast streaming server running on the same machine as Airtime, you should avoid using port 8000 or 8001 for either type of Airtime input stream. This is because both Icecast and SHOUTcast use port 8000, and SHOUTcast also uses port 8001. If the usernames and passwords were similar, remote broadcasters might accidentally connect to the streaming server directly, bypassing Airtime.
To avoid further confusion, it is also recommended that you set a different **Mount Point** (the specific filename for broadcasters and listeners to connect to) from that used on your public Icecast or SHOUTcast server.
If your Airtime server is behind a firewall, and you wish remote broadcasters to connect input streams to it across the public Internet, you may need to click the **Override** link to set a **Connection URL** which is available from outside your local area network. This URL might be based on the domain name assigned to the router which forwards the appropriate port to your Airtime server. Then click **OK** to save the new connection URL.
### Switching input streams
In the Master Panel, available input source streams are shown with an orange line connecting the source to the switch, which you could think of like a patch cable connecting a source to a broadcast mixer. When that switch is active, another orange line connects the switch to the On Air indicator, like a patch cable connecting a mixer to a transmitter.
![](./settings-libretime-master-source-stream.png)
If you have checked the **Auto Switch On** box in the Stream Settings page, the **Master Source** switch will move automatically to the active position, on the left, when an authenticated master source connects to Airtime. Otherwise, you can activate the switches manually by clicking the left side of each switch, or deactivate them by clicking the right side. The switches do not have to be dragged with the mouse, in the way that a switch on a hardware mixer would be pushed sideways. **Show Source** live input streams can also be manually activated or deactivated in the same way. If neither the show source or master source is active then LibreTime will default to what is scheduled to play in the Calendar.
![](./settings-libretime-show-source-stream.png)
If you have the **Auto Switch Off** box checked LibreTime will resume scheduled playback whenever a stream disconnects. Otherwise you will need to slide to disable a source after a DJ stops streaming.
You can also force disconnection of a live remote source, for example when the remote input source has crashed and is no longer sending audio data, click the **X** icon to the left of the source name.
### Output stream settings
The Default Streaming radio button that is configured by default currently relies upon an insecure icecast password. You will want to change the Icecast2 password and select Custom Streaming. See the notice above for a tutorial on how to fix this.
On the right side of the page, you can configure up to three independent output streams with different bit rates or formats, and send these streams to different Icecast or SHOUTcast servers. By default, only Stream 1 is enabled, with this stream being sent the Icecast server configured at installation time.
To configure another stream, click the bar with the stream number to expand its box, and make sure **Enabled** is checked. Enter at least the streaming **Server** IP address or domain name, and **Port** details. The default port for Icecast and SHOUTcast servers is 8000.
Click **Additional Options** to expand a box in which you can enter the usernames, passwords and metadata to send to the streaming server. The default **Username** for Icecast servers is _source_, and if this the name in use on your streaming server, you can leave this field empty. The **Admin User** and **Admin Password** settings are optional, and are used to query the streaming server for audience numbers by the **Listener Stats** page on the **System** menu.
You can also set the specific **Mount Point** that listeners will connect to here. Then click one of the **Save** buttons in the upper or lower right corner of the page to update the Airtime server's settings.
Airtime supports output to Icecast in Ogg Vorbis, Ogg Opus, MP3 and AAC formats. When selecting a SHOUTcast server from the **Service Type** drop-down menu, you are restricted to using MP3 or AAC formats only, so the choice of Ogg Vorbis and Opus formats is greyed out in the **Stream Type** drop-down menu. The SHOUTcast username for stream sources is fixed, so you do not need to enter this value under **Additional Options**, but you will usually have to enter a password.
Any connection problems between Liquidsoap and Icecast or SHOUTcast are shown on the Stream Settings page. For example, if you enter the wrong password, you will see an _Authentication Required_ error message. To fix this, enter the correct password in the **Additional Options** box, and click the **Save** button. If the streaming server is down for any reason, or you have entered an incorrect **Server** name or **Port** number, you will see the message _Can not connect to the streaming server_.

Some files were not shown because too many files have changed in this diff Show More