docs: fix prose linting errors

- Properly enclose code between triple backticks
- Put paths and url between backticks
- Remove links <> enclosing
- Libretime styled name is LibreTime
- Put urls and paths betwen backticks
- Use sentence like capitalization for headings
- Put tools name between backticks
- Update links
This commit is contained in:
jo 2022-02-10 12:15:23 +01:00 committed by Jonas L
parent 75e3760f2e
commit 94d3c5e496
37 changed files with 414 additions and 319 deletions

View File

@ -0,0 +1,7 @@
(?i)icecast
(?i)liquidsoap
(?i)playout
(?i)rabbitmq
(?i)ogg
(?i)vorbis

View File

@ -2,13 +2,13 @@
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**:
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:
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 {
@ -26,15 +26,15 @@ Any custom changes that you make to the administration interface should be backe
# 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 are 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.
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 are 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:
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 _&lt;title&gt;_ and _&lt;h2&gt;_ 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.
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 _&lt;title&gt;_ and _&lt;h2&gt;_ 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.

View File

@ -1,12 +1,12 @@
---
title: Interface Localization
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.
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:
@ -18,11 +18,11 @@ 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.
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.
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**.
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.
@ -34,19 +34,19 @@ git branch
* main
```
Create a new locale directory (e.g. _legacy/locale/de_CH/LC_MESSAGES/_ for German as spoken in Switzerland):
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:
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:
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
@ -68,6 +68,6 @@ msgstr ""
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 -&gt; Preferences** and **Catalog -&gt; 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.
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

@ -1,5 +1,5 @@
---
title: Built-in Microsite
title: Built-in microsite
---
![](/img/radio-page.png)
@ -8,7 +8,7 @@ LibreTime includes a microsite, which can be accessed at _serverIP_ or a domain
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
## 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`.

View File

@ -2,7 +2,7 @@
title: Troubleshooting
---
Is something not working for your Libretime installation? Here's a quick guide to help you
Is something not working for your LibreTime installation? Here's a quick guide to help you
troubleshoot most issues you'll run into.
## 1. Let's check the basics
@ -16,14 +16,14 @@ current time with tracks or an autoplaylist scheduled?
## 2. Are all services working?
If you can log in to Libretime, go to **Settings** > **Status** to see the service indicators.
If you can log in to LibreTime, go to **Settings** > **Status** to see the service indicators.
A fully working server should have green checkmarks next to all services.
![](/img/Screenshot521-System_status_240.png)
If one of the services isn't working, text will display with a terminal command to restart the service
or get status information for a particular service. For example (for Ubuntu 18.04), the following
commands would restart or check the status of Libretime's Liquidsoap instance, respectively.
commands would restart or check the status of LibreTime's Liquidsoap instance, respectively.
```bash
sudo systemctl restart libretime-liquidsoap
@ -40,10 +40,10 @@ If you have one of these issues, please try to resolve it with the instructions
troubleshooting checklist.
- **Streaming player on Microsite and Listen player on Dashboard not working?** The problem could be caused by a bug in writing to the database during the setup wizard. This can be fixed by going to **Settings** -> **Stream Settings** and toggling the **Default Streaming** and **Custom/ 3rd Party Streaming** option, accepting the popup dialogues, and clicking **Save** at the top of the settings page.
- **File not importing successfully?** Libretime has been known to work with MP3 and WAV files, encoded using 41,100 Hz. Variable Bit Rate (VBR) files are currently hit or miss with the importer. Please convert your file to an MP3 or WAV at 41,100 Hz. and try uploading again.
- **File not importing successfully?** LibreTime has been known to work with MP3 and WAV files, encoded using 41,100 Hz. Variable Bit Rate (VBR) files are currently hit or miss with the importer. Please convert your file to an MP3 or WAV at 41,100 Hz. and try uploading again.
- **Podcast hosted by Anchor.fm not importing?** There is no known work-around at this time. Ask your producers to provide their show files manually or check with the show's distributer.
- **Tracks won't publish?** We know the Publish screen is broken and we're working on it. A potential work-around is to use an external podcast host like [Anchor.fm](https://www.anchor.fm) or [Blubrry](https://blubrry.com/).
- **Can't hear any sound coming from your soundcard (for analog audio output)?** If you are using ALSA as your audio driver, use `alsamixer` to see the current volume your system is set to. If still nothing, go to **Settings** > **Streams** and make sure **Hardware Audio Output** is checked. If you need to play a tone to help you troubleshoot, you can use `speaker-test` (does not come installed with Libretime).
- **Can't hear any sound coming from your soundcard (for analog audio output)?** If you are using ALSA as your audio driver, use `alsamixer` to see the current volume your system is set to. If still nothing, go to **Settings** > **Streams** and make sure **Hardware Audio Output** is checked. If you need to play a tone to help you troubleshoot, you can use `speaker-test` (does not come installed with LibreTime).
## 4. Read the docs
@ -51,7 +51,7 @@ Our main documentation listing is [here](/docs) and can be searched [here](/sear
## 5. Reach out to the developers
Libretime is still in active development, meaning bugs and issues are expected to pop up every so often.
LibreTime is still in active development, meaning bugs and issues are expected to pop up every so often.
See if an issue is still open by looking at our [Issues page](https://github.com/LibreTime/libretime/issues).
If you don't get the help you need, please [open an issue](https://github.com/LibreTime/libretime/issues/new/choose)
so we can take a look at it.

View File

@ -1,20 +1,22 @@
---
title: LibreTime API Usage
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.
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.
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
```
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:
@ -27,20 +29,21 @@ where api-action is the type of request and XXXXXX is the secret API key. Availa
For example, using the action _get-stream-setting_ returns the following output for the first configured stream:
{"keyname":"s1_type","value":"ogg","type":"string"},
```json
{"keyname":"s1_type","value":"ogg","type":"string"},
{"keyname":"s1_host","value":"streaming.example.com","type":"string"},
{"keyname":"s1_host","value":"streaming.example.com","type":"string"},
{"keyname":"s1_port","value":"8000","type":"integer"},
{"keyname":"s1_port","value":"8000","type":"integer"},
{"keyname":"s1_mount","value":"airtime_128","type":"string"},
{"keyname":"s1_mount","value":"airtime_128","type":"string"},
{"keyname":"s1_url","value":"http:\/\/airtime.sourcefabric.org","type":"string"},
{"keyname":"s1_url","value":"http:\/\/airtime.sourcefabric.org","type":"string"},
{"keyname":"s1_description","value":"Airtime Radio! Stream
#1","type":"string"},
{"keyname":"s1_description","value":"Airtime Radio! Stream #1","type":"string"},
{"keyname":"s1_genre","value":"Screamo","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.
@ -51,11 +54,17 @@ Some API requests require the directory ID number to be specified as _dir_id_ in
For example, using a request such as:
http://libretime.example.com/api/list-all-files/format/json/api_key/XXXXXX/dir_id/1/
```
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:
{"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",
"]}
```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"
]
}
```

View File

@ -1,5 +1,5 @@
---
title: HD Audio Modules
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.

View File

@ -1,5 +1,5 @@
---
title: Rights and Royalties
title: Rights and royalties
---
If you're new to broadcasting, or have not streamed your station online before,
@ -52,8 +52,8 @@ 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
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),
@ -74,7 +74,7 @@ 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.
(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

View File

@ -2,23 +2,23 @@
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.
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
## Getting started
Before using the widgets, make sure Libretime's Public API is enabled in **Settings** > **General**.
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.
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
## 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.
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>
@ -26,7 +26,7 @@ The streaming player widget inserts your Libretime stream into your website. One
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](/docs/guides/settings)). **Auto detect** should be fine for most.
## Show Schedule Widget
## Show schedule widget
![](./widgets-widgets_schedule.png)

View File

@ -1,4 +1,4 @@
{
"label": "Getting Started",
"label": "Getting started",
"position": 2
}

View File

@ -3,17 +3,17 @@ title: Change Default Passwords
sidebar_position: 3
---
## Libretime
## LibreTime
To change the password of the current user:
1. Log in to Libretime
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
1. Log in to LibreTime
2. Go to **Settings** > **Manage Users**
3. Select the user, enter the new password twice, and click **Save**
@ -28,7 +28,7 @@ It is strongly recommended that you do this before exposing your server to the i
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
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
@ -51,7 +51,7 @@ Replace the admin and _changeme_ fields below.
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.
> 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

View File

@ -3,7 +3,7 @@ title: Installation
sidebar_position: 1
---
## Minimum System Requirements
## Minimum system requirements
- One of the following Linux distributions
- Ubuntu [current LTS](https://wiki.ubuntu.com/Releases)
@ -16,7 +16,7 @@ sidebar_position: 1
Configure the server to have a static IP address by modifying the Netplan configuration.
```
```bash
cd /etc/netplan && ls # find the netplan filename
sudo nano ##-network-manager-all.yaml
```
@ -107,7 +107,7 @@ If an error is returned, try adding `.service` to the end of each command.
:::
## User Permissions
## User permissions
If you plan to have LibreTime output analog audio directly to a mixing console or transmitter,
the `www-data` user needs to be added to the `audio` user group using the command below:

View File

@ -14,7 +14,7 @@ domains that will be 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 is displayed when you first install LibreTime
### Reverse Proxy Basics
### Reverse proxy basics
A reverse proxy allows the LibreTime server to not be connected to the open internet. In
this configuration, it is rather behind another server that proxies traffic to it from
@ -42,7 +42,7 @@ access on both. `libretime` also needs to be able to be accessed from `proxy`
On `libretime`, install LibreTime as described in the [install guide](/docs/getting-started/install). Once it has installed, replace `<hostname>localhost</hostname>` in
`/etc/icecast2/icecast.xml` with the following:
```
```xml
<hostname>icecast.example.com</hostname>
```
@ -103,7 +103,7 @@ http://localhost
Finally, the configuration file needs updating. Under `[general]`, `force_ssl`
needs to be set to true:
```
```ini
[general]
...
force_ssl = true

View File

@ -18,9 +18,11 @@ Although it is possible to set the date and time of the server manually, this is
Optionally, open the **ntp** configuration file in the **nano** editor to add further time server names:
sudo nano /etc/ntp.conf
```
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 <http://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:
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).
@ -31,7 +33,7 @@ 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`.
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:

View File

@ -8,7 +8,7 @@ To increase the security of your server, you can enable encrypted access to the
## Deploying a certificate with Certbot (Recommended)
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.
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.
@ -16,15 +16,19 @@ If you aren't able to use Certbot, you may want to try a self-signed certificate
## Deploying a self-signed certificate
The Debian/Ubuntu package _ssl-cert_ creates a _snakeoil_ certificate and key based on your server's hostname. This gratis certificate and key pair created under the _/etc/ssl/certs_/ and _/etc/ssl/private/_ directories will not be recognised by users' browsers without manual intervention. You can install the _ssl-cert_ package with `sudo apt-get install ssl-cert`.
The Debian/Ubuntu package `ssl-cert` creates a `snakeoil` certificate and key based on your server's hostname. This gratis certificate and key pair created under the `/etc/ssl/certs/` and `/etc/ssl/private/` directories will not be recognised by users' browsers without manual intervention. You can install the `ssl-cert` package with `sudo apt-get install ssl-cert`.
If the hostname of your server does not match the domain name you intend to use with the LibreTime virtual host, the user's browser will present an additional security warning. You can set the domain name of the certificate by editing the file _/usr/share/ssl-cert/ssleay.cnf_ to replace the _@HostName@_ variable:
If the hostname of your server does not match the domain name you intend to use with the LibreTime virtual host, the user's browser will present an additional security warning. You can set the domain name of the certificate by editing the file `/usr/share/ssl-cert/ssleay.cnf` to replace the `@HostName@` variable:
commonName = @HostName@
```
commonName = @HostName@
```
with the domain name used by LibreTime:
commonName = airtime.example.com
```
commonName = airtime.example.com
```
Then save the file and regenerate the certificate with
@ -44,7 +48,7 @@ Next, edit the virtual host configuration for your LibreTime server to include a
sudo nano /etc/apache2/sites-available/airtime-vhost.conf
```
Using the following configuration as a guide, replace _libretime.example.com_ with the name of your server and *admin@example.com* with your email address. The older SSLv2 and SSLv3 protocols and SSL compression should be disabled, as they are generally believed to be insecure. You may wish to create a _ServerAlias_ for users to access the administration interface over https:// if required.
Using the following configuration as a guide, replace `libretime.example.com` with the name of your server and *admin@example.com* with your email address. The older SSLv2 and SSLv3 protocols and SSL compression should be disabled, as they are generally believed to be insecure. You may wish to create a _ServerAlias_ for users to access the administration interface over https:// if required.
On port 80, Apache's _alias_ module is used to set a _Redirect permanent_ for the login page. Optionally, access could be denied to all sites except _localhost_ and any other LibreTime servers on your network, so that unencrypted communication between LibreTime components can continue.

View File

@ -4,7 +4,7 @@ title: Dashboard
:::tip
Want to listen to Libretime's output stream? Click **Listen** below the **On Air** light.
Want to listen to LibreTime's output stream? Click **Listen** below the **On Air** light.
:::

View File

@ -1,5 +1,5 @@
---
title: Listener Statistics
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.

View File

@ -48,7 +48,7 @@ configured in the LibreTime **Streams** page, on LibreTime's **System** menu.
6. Still in settings click, **Audio** and select your audio input device under
**Audio Device**
### Show Time
### 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).

View File

@ -1,5 +1,5 @@
---
title: Playlists and Smartblocks
title: Playlists and smart blocks
---
## Creating a new playlist
@ -24,9 +24,9 @@ When your playlist is complete, click the **New** button in the top left corner
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.
### Autoloading Playlists
### 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.
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

View File

@ -22,7 +22,7 @@ If your station features playout from analogue sources such as turntables or mic
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
## History templates
![](./playout-history-history-templates.png)
@ -44,125 +44,158 @@ There are two kinds of information that can be retrieved remotely from the Libre
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
```
https://libretime.example.com/api/live-info/?callback
```
The comma-separated text metadata returned to your web server might be something like this:
({"env":"production",
"schedulerTime":"2013-07-03 14:07:31",
```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"},
"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"},
"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"}],
"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"}],
"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"})
"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
```
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.
({"monday":[
```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 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 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 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"
}
],
{"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"})
"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.
@ -174,86 +207,112 @@ Your system administrator can set up schedule caching on a standard Apache and P
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
```
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:
#!/bin/sh
```bash
#!/bin/sh
curl -s "https://libretime.example.com/api/live-info/?callback=***" > /tmp/live-info
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
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
```
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
```
sudo nano /etc/apache2/sites-available/schedule
```
containing a definition like the following, replacing _schedule.example.com_ with the name of your schedule server:
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/_
4. In the schedule server's DocumentRoot folder, create the folders `api/live-info/` and `api/week-info/`
sudo mkdir -p /var/www/schedule/api/live-info/
sudo mkdir -p /var/www/schedule/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:
5. Create an index.php file in the `api/live-info/` folder:
sudo nano /var/www/schedule/api/live-info/index.php
```bash
sudo nano /var/www/schedule/api/live-info/index.php
```
containing the following code:
<?php
$filename = '/tmp/live-info'; // define here the path and name of uploaded live-info file
```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");
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;
?>
$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:
6. Create an index.php file in the `api/week-info/` folder:
sudo nano /var/www/schedule/api/week-info/index.php
```
sudo nano /var/www/schedule/api/week-info/index.php
```
containing the following code:
<?php
$filename = '/tmp/week-info'; // define here the path and name of uploaded week-info file
```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");
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;
?>
$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:
sudo a2ensite schedule
sudo /etc/init.d/apache2 reload
```bash
sudo a2ensite schedule
sudo /etc/init.d/apache2 reload
```
8. Create a cron job to run the shell script each minute:
sudo nano /etc/cron.d/libretime-schedule
```bash
sudo nano /etc/cron.d/libretime-schedule
```
containing the line:
* * * * * www-data /usr/local/bin/libretime-schedule.sh
```
* * * * * 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.
@ -261,23 +320,27 @@ The schedule server will now be serving the same show information as the LibreTi
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
```
sudo nano /usr/local/bin/upload-schedule-data.sh
```
Replace host, user and password values with appropriate values for your external web server:
#!/bin/sh
HOST='website.example.com'
USER='ftp_user'
PASSWD='ftp_password'
```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
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.

View File

@ -18,7 +18,7 @@ The podcast interfaces provides you with the ability to generate [Smartblocks](/
<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 dashboard
![](./podcasts-podcasts_dashboard.png)

View File

@ -27,37 +27,43 @@ The program **mid3iconv** (part of the **python-mutagen** package in Debian and
<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>
find . -name "*.mp3" -print0 | xargs -0 mid3iconv -e CP1251 -d -p
```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:
find . -name "*.mp3" -print0 | xargs -0 mid3iconv -e CP1251 --remove-v1
```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
```
KOI8-R: Russian
KOI8-U: Ukrainian
GBK: Traditional Chinese
GB2312: Simplified Chinese
GBK: Traditional Chinese
GB2312: Simplified Chinese
EUC-KR: Korean
EUC-JP: Japanese
EUC-KR: Korean
EUC-JP: Japanese
CP1253: Greek
CP1254: Turkish
CP1255: Hebrew
CP1256: Arabic
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).
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.
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.
@ -65,21 +71,25 @@ The **vorbisgain** command-line tool, available in the **vorbisgain** package in
Here is an example of a very quiet file where the use of ReplayGain would make the output more than 17dB louder:
$ vorbisgain -d Peter_Lawson-Three_Gymn.ogg
Analyzing files...
```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
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:
$ vorbisgain -d Snoop_Dogg-Doggfather.ogg
Analyzing files...
```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
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.
@ -93,6 +103,6 @@ Gaps in playout or dead air can have legal repercussions for your station. Check
:::
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.
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)

View File

@ -55,7 +55,7 @@ When media is playing, the **On Air** indicator at the top will turn red.
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
### Show properties appendix
| Field | Description |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

View File

@ -2,7 +2,7 @@
title: Settings
---
## General Settings
## General settings
![](./settings-station-info-settings.png)
@ -67,7 +67,7 @@ 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://SITEURL/login to be able to login.
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
@ -77,7 +77,7 @@ The **Dangerous Options** section provides an administrator the ability to erase
:::danger
Erasing Libretime's track library cannot be undone.
Erasing LibreTime's track library cannot be undone.
:::
@ -87,7 +87,7 @@ their username on the right side of the menu bar.
---
## Track Types
## Track types
### Create track types
@ -97,12 +97,12 @@ their username on the right side of the menu bar.
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. 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
## 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>

View File

@ -1,5 +1,5 @@
---
title: System Status
title: System status
---
On the **Settings** menu, the **Status** page provides an overview of the health and resource usage of the various

View File

@ -1,5 +1,5 @@
---
title: Managing Users
title: Managing users
---
:::danger
@ -8,7 +8,7 @@ It is strongly recommended not to use the default `admin` account in production,
:::
## User Account Types
## User account types
To add further user accounts to the system, one for each of your station staff that need access to Airtime, click the **New User** button with the plus icon. Enter a user name, password and contact details, and then select the **User Type** from the drop down menu, which can be _Admin_, _Program Manager_, _DJ_, or _Guest_.
@ -25,7 +25,7 @@ To add further user accounts to the system, one for each of your station staff t
- Preview uploaded media _without_ affecting the live playout
- Create Playlists, Smart Blocks, and connect Podcasts and Webstreams to LibreTime
### Program Managers
### Program managers
- Everything DJs can do, plus
- Manage other users' libraries in addition to their own

View File

@ -4,11 +4,11 @@ sidebar_position: 1
# Introduction
Libretime is an open-source radio automation system. It can be used for music and show playout in a radio studio or start an internet radio station on its own. Libretime runs on Ubuntu and Debian Linux; [we're also working on making Docker images](https://github.com/LibreTime/libretime/issues/949).
LibreTime is an open-source radio automation system. It can be used for music and show playout in a radio studio or start an internet radio station on its own. LibreTime runs on Ubuntu and Debian Linux; [we're also working on making Docker images](https://github.com/LibreTime/libretime/issues/949).
## Getting Started
## Getting started
Get started by installing Libretime on your server. Open up your terminal and enter
Get started by installing LibreTime on your server. Open up your terminal and enter
```bash
git clone https://github.com/LibreTime/libretime.git
@ -49,7 +49,7 @@ When you're done, click **Ok** at the bottom of the window.
You just scheduled your first show! It will automatically begin playing back at the time your show is set to start. You can listen to what is playing live by clicking the **Listen** button under the On Air indicator in the top right corner.
## Next Steps
## Next steps
- Make sure you [set the time on your server](/docs/getting-started/set-server-time)
- Learn how to [work with podcasts](/docs/guides/podcasts)

View File

@ -1,5 +1,5 @@
---
title: Local Development
title: Local development
---
## Vagrant
@ -112,7 +112,7 @@ 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](/docs/getting-started/install).
After you enter the shell for the first time, you will still need to [run the LibreTime installer](/docs/getting-started/install).
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.

View File

@ -1,4 +1,4 @@
{
"label": "Server Configuration",
"label": "Server configuration",
"position": 5
}

View File

@ -1,14 +1,14 @@
---
title: Backing Up Libretime
title: Backing up LibreTime
---
:::info
At the moment, there is no script to cleanly restore a Libretime backup. To restore a Libretime backup, install a fresh copy, go through the standard setup process, and reupload the backed-up media files.
At the moment, there is no script to cleanly restore a LibreTime backup. To restore a LibreTime backup, install a fresh copy, go through the standard setup process, and reupload the backed-up media files.
:::
A backup script is supplied for your convenience in the _utils/_ folder of the Libretime repo.
A backup script is supplied for your convenience in the `utils/` folder of the LibreTime repo.
Run it using:
```
@ -37,13 +37,13 @@ be backed up.
/organize - A temporary holding place for uploaded media as the importer works
/etc
/airtime
airtime.conf - The main Libretime configuration
airtime.conf - The main LibreTime configuration
icecast_pass - Holds the password for the Icecast server
liquidsoap.cfg - The main configuration file for Liquidsoap
```
In addition, you should keep a copy of the database current to the backup. The below code
can be used to export the Libretime database to a file.
can be used to export the LibreTime database to a file.
```
sudo -u postgres pg_dumpall filename

View File

@ -1,5 +1,5 @@
---
title: FreeIPA Configuration
title: FreeIPA configuration
---
You can configure LibreTime to delegate all authentication to a FreeIPA server.
@ -7,12 +7,12 @@ 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 {#apache}
## Apache configuration
After installing the needed modules you can set up Apache to intercept form logins and
check them against pam.
```apache
```apacheconf
<Location /login>
InterceptFormPAMService http-libretime
InterceptFormLogin username
@ -37,7 +37,7 @@ check them against pam.
</Location>
```
## PAM configuration {#pam}
## PAM configuration
The above configuration expects a PAM configuration for the `http-libretime` service.
@ -48,7 +48,7 @@ auth required pam_sss.so
account required pam_sss.so
```
## LDAP configuration {#ldap}
## 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
@ -94,7 +94,7 @@ 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 {#freeipa}
## Enable FreeIPA authentication
After everything is set up properly you can enable FreeIPA auth in `airtime.conf`:

View File

@ -1,12 +1,12 @@
---
title: Host Configuration
title: Host configuration
---
The streaming host configuration for LibreTime is shown in the file _/etc/airtime/liquidsoap.cfg_ which is automatically generated by the **Streams** page, found on the **System** menu of the LibreTime administration interface. For this reason, you would not normally edit the streaming configuration manually, as any changes are likely to be overwritten by the administration interface.
The streaming host configuration for LibreTime is shown in the file `/etc/airtime/liquidsoap.cfg` which is automatically generated by the **Streams** page, found on the **System** menu of the LibreTime administration interface. For this reason, you would not normally edit the streaming configuration manually, as any changes are likely to be overwritten by the administration interface.
## Database and RabbitMQ hosts
Optionally, you may wish to edit the file _/etc/airtime/airtime.conf_ to set the PostgreSQL database host, and the username and password to connect to the database with.
Optionally, you may wish to edit the file `/etc/airtime/airtime.conf` to set the PostgreSQL database host, and the username and password to connect to the database with.
You can also set options for RabbitMQ messaging and the LibreTime server in this file, although you should not normally need to adjust the defaults unless you are running a large LibreTime system distributed across multiple servers. To run the LibreTime server in demo mode, which changes the greeting on the login page and prevents user accounts from being created or modified, set the value of _demo_ to 1.
@ -42,7 +42,7 @@ monit_password = airtime
demo = 0
```
Save and close the file then, run the following commands to restart Libretime's services:
Save and close the file then, run the following commands to restart LibreTime's services:
```bash
sudo systemctl restart libretime-liquidsoap
@ -53,11 +53,11 @@ sudo systemctl restart libretime-analyzer
## API client configuration
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.
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.
If you have changed the _base_url_, _base_port_ or _base_dir_ setting in _/etc/airtime/airtime.conf_ from the defaults, you will probably also have to update the _Hostname_ settings in the file _/etc/airtime/api_client.cfg_ accordingly.
If you have changed the _base_url_, _base_port_ or _base_dir_ setting in `/etc/airtime/airtime.conf` from the defaults, you will probably also have to update the _Hostname_ settings in the file `/etc/airtime/api_client.cfg` accordingly.
```ini
bin_dir = /usr/lib/airtime/api_clients
@ -70,7 +70,7 @@ base_dir = /
## Apache max file size configuration
By default, the maximum upload file size is 40 MB, which may not be large enough for some stations, especially if they are uploading prerecorded shows. The setting for this is located in _/etc/apache2/sites-available/airtime.config_. Search for and update the following in megabytes:
By default, the maximum upload file size is 40 MB, which may not be large enough for some stations, especially if they are uploading prerecorded shows. The setting for this is located in `/etc/apache2/sites-available/airtime.config`. Search for and update the following in megabytes:
```ini
; Maximum allowed size for uploaded files.
@ -84,7 +84,7 @@ For quick reference, 1024 MB = 1 GB and 2048 MB = 2 GB, but most will be okay wi
## Playout settings
Settings for pypo, the playout engine used by LibreTime, are found in the file _/etc/airtime/airtime.conf_. After making changes to this file, run `sudo systemctl restart libretime-playout`.
Settings for pypo, the playout engine used by LibreTime, are found in the file `/etc/airtime/airtime.conf`. After making changes to this file, run `sudo systemctl restart libretime-playout`.
```ini
############################################
@ -168,9 +168,9 @@ If the Airtime logs indicate failures to connect to the RabbitMQ server, such as
2013-10-31 08:21:11,255 ERROR - \[pypomessagehandler.py : main() : line 99\] - Error connecting to RabbitMQ Server. Trying again in few seconds - See more at: https://forum.sourcefabric.org/discussion/16050/#sthash.W8OJrNFm.dpuf
```
but the RabbitMQ server is running normally, this error might be due to a change in the server's hostname since Libretime installation. Directory names under _/var/lib/rabbitmq/mnesia/_ indicate that RabbitMQ's database files are organised according to the hostname of the server (ex. `rabbit@airtime`) where the hostname is _airtime.example.com_. If the hostname has changed, it may be necessary to reconfigure RabbitMQ manually, as follows:
but the RabbitMQ server is running normally, this error might be due to a change in the server's hostname since LibreTime installation. Directory names under `/var/lib/rabbitmq/mnesia/` indicate that RabbitMQ's database files are organised according to the hostname of the server (ex. `rabbit@airtime`) where the hostname is `airtime.example.com`. If the hostname has changed, it may be necessary to reconfigure RabbitMQ manually, as follows:
1. Delete the files in _/var/lib/rabbitmq/mnesia/_
1. Delete the files in `/var/lib/rabbitmq/mnesia/`
```bash
sudo rm -r /var/lib/rabbitmq/mnesia/*

View File

@ -4,9 +4,9 @@ title: Icecast Configuration
## Background
LibreTime supports direct connection to two popular streaming media servers, the open source Icecast (<http://www.icecast.org>) and the proprietary SHOUTcast (<http://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](http://tools.ietf.org/html/rfc6716) and requires Icecast 2.4 or later to be installed on the streaming server.
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](http://www.videolan.org/vlc/).
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.
@ -14,7 +14,7 @@ Because LibreTime supports simultaneous streaming in multiple formats, it is pos
:::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.
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.
:::
@ -24,7 +24,7 @@ When sending metadata about your stream to an Icecast server in non-Latin alphab
![](./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:
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>
@ -33,7 +33,7 @@ The solution is to specify that the metadata for the MP3 mount point you are usi
</mount>
```
After saving the _/etc/icecast2/icecast.xml_ file, restart the Icecast server with `sudo systemctl restart icecast2`.
After saving the `/etc/icecast2/icecast.xml` file, restart the Icecast server with `sudo systemctl restart icecast2`.
## Icecast handover configuration
@ -45,7 +45,7 @@ The Icecast server has a _fallback-mount_ feature which can be used to move clie
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_).
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>
@ -68,13 +68,13 @@ The example mount section provided in the _icecast.xml_ file is commented out by
</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.
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.
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.
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
@ -94,23 +94,23 @@ This section covers how to edit Icecast's configuration to broadcast your statio
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](http://dir.xiph.org).
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>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
<yp-url>https://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
</directory>
```
The Indymedia stream directory at <http://radio.indymedia.org/en/yp> links to grassroots independent radio projects around the world. You can add your station to their list with an additional _directory_ section, as follows:
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>http://radio.indymedia.org/cgi-bin/yp-cgi</yp-url>
<yp-url>https://radio.indymedia.org/cgi-bin/yp-cgi</yp-url>
</directory>
```

View File

@ -1,10 +1,10 @@
---
title: Upgrading Libretime
title: Upgrading LibreTime
---
:::caution
While upgrading your installation may not cause any station downtime or data loss, always plan for the worst. Only upgrade your installation when Libretime isn't playing out shows, notify your DJs and essential personnel, and back up your database, configuration files, and media library before you make any changes.
While upgrading your installation may not cause any station downtime or data loss, always plan for the worst. Only upgrade your installation when LibreTime isn't playing out shows, notify your DJs and essential personnel, and back up your database, configuration files, and media library before you make any changes.
:::
@ -27,7 +27,7 @@ While upgrading your installation may not cause any station downtime or data los
:::note
Airtime's _linked files_ and _watched folders_ features currently do not work in Libretime.
Airtime's _linked files_ and _watched folders_ features currently do not work in LibreTime.
:::

View File

@ -1,6 +1,6 @@
# Shared
The `libretime_shared` package contains reusable functions and classes for the Libretime project.
The `libretime_shared` package contains reusable functions and classes for the LibreTime project.
## Usage

View File

@ -1,8 +1,8 @@
---
title: Contribute to Libretime
title: Contribute to LibreTime
---
# Contribute to Libretime
# Contribute to LibreTime
LibreTime is a fork of AirTime due to stalled development of the open source version. For background on this, see this [open letter to the Airtime community](https://gist.github.com/hairmare/8c03b69c9accc90cfe31fd7e77c3b07d).
@ -73,7 +73,7 @@ financially, you can do so through our
LibreTime can run in over 15 different languages due to the gracious help of our volunteers.
Libretime is now localized using [Weblate](https://weblate.org/en/). If you would like to contribute a language translation, create an account and start working on [our Weblate page](https://hosted.weblate.org/projects/libretime/).
LibreTime is now localized using [Weblate](https://weblate.org/en/). If you would like to contribute a language translation, create an account and start working on [our Weblate page](https://hosted.weblate.org/projects/libretime/).
## Write documentation

View File

@ -1,8 +1,8 @@
---
title: Libretime 3.0 Alpha 10 Released
title: LibreTime 3.0 Alpha 10 Released
---
# Release Notes for Libretime 3.0 Alpha 10
# Release Notes for LibreTime 3.0 Alpha 10
The full tarball for the **3.0.0-alpha.10** release of LibreTime is available [here](https://github.com/LibreTime/libretime/releases/download/3.0.0-alpha.10/libretime-3.0.0-alpha.10.tar.gz).