Beginning to prepare pages of new site

Could load the theme from an external repo, so everything will need to fit in here. Can be built locally, though.
This commit is contained in:
Zachary Klosko 2020-05-22 18:04:15 -04:00
parent 3a01503f87
commit f87977b80f
37 changed files with 1599 additions and 973 deletions

2
.gitignore vendored
View File

@ -16,3 +16,5 @@ airtime_mvc/tests/log/*.log
.vagrant/
.DS_Store
.idea/
/docs/_site
/docs/.jekyll-cache

View File

@ -1,54 +0,0 @@
I"L<hr />
<p>layout: page
title: Contributing to LibreTime
blurb: LibreTime is a community project, maintained by an awesome group of volunteers. Being a “free as in freedom” project, we need the help of our users to keep the project going. You dont have to know how to write code in order to help. Check out some of ways you can give back to the LibreTime project below.</p>
<h2 id="bug-reporting">Bug reporting</h2>
<p>If you think youve found a bug, please report it on our <a href="https://github.com/LibreTime/libretime/issues/new/choose">Github issues page</a>.
Create a bug report by selecting <strong>Get Started</strong> next to <strong>Bug Report</strong>. That way, the LibreTime team can keep track of
your problem and notify you when it has been fixed. You can also suggest
improvements and new features for LibreTime on that site.</p>
<h2 id="feature-requests">Feature requests</h2>
<p>Have an idea that would make LibreTime even better than it is right now? Start a <strong>Feature request</strong> on our
<a href="https://github.com/LibreTime/libretime/issues/new/choose">Github issues page</a>.</p>
<h2 id="help-translate-libretime">Help translate LibreTime</h2>
<p>LibreTime can run in over 15 different languages due to the gracious help of our volunteers. Is your language not
supported? Follow <a href="interface-localization">this guide</a> to add your language to LibreTime!</p>
<h2 id="help-write-code-for-libretime">Help write code for LibreTime</h2>
<p>Are you familar with coding in PHP? Have you made projects in Liquidsoap and some of the other services we use?
Take a look at the bugs and feature requests <a href="https://github.com/LibreTime/libretime/issues">here</a>, and then
fork our repo and have a go! Just use the <strong>Fork</strong> button at the top of our <strong>Code</strong> page, clone the forked repo to
your desktop, open up a favorite editor and make some changes, and then commit, push, and open a pull request.
Knowledge on how to use <a href="https://guides.github.com/activities/hello-world/">Github</a> and <a href="https://git-scm.com/docs/gittutorial">Git</a>
will suit you well, use the links for a quick 101.</p>
<h3 id="testing-libretime-in-vagrant">Testing LibreTime in Vagrant</h3>
<p>Before submitting code to the project, its a good idea to test it first. To do this, its easiest to install
LibreTime in a virtural machine on your local system or in a cloud VM. Instructions on how to set up a virtural
instance of LibreTime with Vagrant are located <a href="vagrant">here</a>.</p>
<p>If you would like to try LibreTime in a Docker image,
Odclive has instructions <a href="https://github.com/kessibi/libretime-docker">here</a> for setting up a test image
and a more persistant install.</p>
<h3 id="modifying-the-database">Modifying the Database</h3>
<p>LibreTime is designed to work with a <a href="https://www.postgresql.org/">PostgreSQL</a> database server running locally.
LibreTime uses <a href="http://propelorm.org">PropelORM</a> to interact with the ZendPHP components and create the database.</p>
<p>If you are a developer seeking to add new columns to the database here are the steps.</p>
<ol>
<li>Modify <code class="highlighter-rouge">airtime_mvc/build/schema.xml</code> with any changes.</li>
<li>Run <code class="highlighter-rouge">dev_tools/propel_generate.sh</code></li>
<li>Update the upgrade.sql under <code class="highlighter-rouge">airtime_mvc/application/controllers/upgrade_sql/VERSION</code> for example
<code class="highlighter-rouge">ALTER TABLE imported_podcast ADD COLUMN album_override boolean default 'f' NOT NULL;</code></li>
</ol>
:ET

View File

@ -1,35 +0,0 @@
I"¬<h2 id="listen">Listen</h2>
<p><img src="img/listen-button.png" alt="" /></p>
<p>In the Master Panel, beneath the <strong>ON AIR</strong> indicator, you will find the <strong>LISTEN</strong> button. This button opens a
pop-up <strong>Live stream</strong> window, which enables you to monitor the streams that have been configured previously
in the <strong>Streams</strong> page on the <strong>System</strong> menu. In the <strong>Live stream</strong> window, a drop-down menu enables you to
switch between the streams which are currently available. Both the streaming server and name of the stream are
shown. Your station logo is shown in the top left corner of the window, if you have uploaded one via
the <strong>Preferences</strong> page on the <strong>System</strong> menu.</p>
<p><img src="img/Screenshot477-Live_stream_chooser.png" alt="" /></p>
<blockquote>
<p>Note: the volume controls in the Listen window only affect what you hear on your computer, not LibreTime’s main output</p>
</blockquote>
<p><img src="img/Screenshot478-Live_stream_mute.png" alt="" /> </p>
<p>To display the URL of the stream you are monitoring, so that you can copy and paste it into an email or web page, click the <strong>Share</strong> button. Click the <strong>X</strong> icon to the right of the URL to return to the drop-down menu of available streams.</p>
<p><img src="img/Screenshot479-Live_stream_share.png" alt="" /></p>
<h2 id="radio-page">Radio page</h2>
<p><img src="img/radio-page.png" alt="" /></p>
<p>LibreTime includes a mini-site, which can be accessed at <em>serverIP</em> (for local installations), or
<em>libretime.yourdomain.com</em> or <em>cloudvmIP</em> (for installations to a server on a domain). The site includes your
logo and station description (set under Settings &gt; 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 the currently playing artist and track displayed.</p>
<p>The background of the radio page can be changed; see instructions <a href="interface-customization">here</a>.
Image comes from <a href="https://www.catsonsynthesizersinspace.com/">CATS ON SYNTHESIZERS IN SPACE</a>.</p>
:ET

View File

@ -1,31 +0,0 @@
I"<h1 id="frequently-asked-questions">Frequently Asked Questions</h1>
<p><strong>What is LibreTime?</strong></p>
<p>LibreTime is a community managed fork of the AirTime project.</p>
<p>It is managed by a friendly inclusive community of stations
from around the globe that use, document and improve LibreTime.</p>
<p><strong>Can I upgrade to LibreTime?</strong></p>
<p>In theory you can update any pre 3.0 version of AirTime to
LibreTime 3.0.0 and above. More information on <a href="upgrading">Upgrading</a>
is in the docs.</p>
<p>LibreTime is complex software, as such it is close to impossible
to guarantee that every upgrade path works as intended. This
means you should trial the update on a parallel test
infrastructure to minimize possible downtime.</p>
<p>Please let the community know if you encounter issues with the
update process.</p>
<p><strong>Why are Cue-In/Out points wrong in some tracks? / Whats with silan?</strong></p>
<p>The silan silence detection is currently outdated on almost all distributions. The older versions report clearly wrong information and may segfault at the worst. Versions starting with 0.3.3 (and some patched 0.3.2 builds) are much better but still need thorough testing. Please see the <a href="https://github.com/LibreTime/libretime/releases">release notes</a> for up to date mitigation scenarios and details on the issues.</p>
<p><strong>Why did you fork AirTime?</strong></p>
<p>See this <a href="https://gist.github.com/hairmare/8c03b69c9accc90cfe31fd7e77c3b07d">open letter to the Airtime community</a>.</p>
:ET

View File

@ -13,9 +13,44 @@ topnav:
url: contribute
docsnav:
- page: Config
url: config1
- page: More config
url: config2
- page: Admin stuff
url: adminstuff
- section: Install
contents:
- page: Quick Install
url: quickstart
- page: Host Configuration
url: host-configuration
- page: Setting the Server Time
url: setting-the-server-time
- page: Configuring Track Types
url: track-types
- page: Setting up SSL
url: ssl-config
- page:
- section: Using LibreTime
contents:
- page: Preparing Media
url: preparing-media
- page: Scheduling Shows
url: scheduling-shows
- page: Broadcasting Live
url: live-broadcast
- page: Adding Users
url: users
- page: Help!
url: troubleshooting
- page: Advanced Configuration
url: advanced-configuration
- page:
- section: Radio Broadcasting 101
contents:
- page: UNESCO Public Radio Guide
url: learnradio-unescoguide
- page:
- section: Appendix
contents:
- page: HD Audio Modules
url: hd-audio-modules
- page: Rights and Royalties
url: rights-royalties
- page: Media Folders used by LibreTime
url: folders

View File

@ -85,15 +85,34 @@ layout: default
</div>
</nav>
<!-- Sidebar -->
<div id="sidebar">
<ul>
{% for item in site.data.nav.docsnav %}
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="{{ item.url }}">{{ item.page }}</a>
<a class="nav-link" href="{{ item.url }}">{{ item.page }}</a>
</li>
{% endfor %}
</ul>
</div>
<nav id="sidebar">
<div class="sidebar-header">
<h3>Table of Contents</h3>
</div>
{% for item in site.data.nav.docsnav %}
<ul class="list-unstyled components">
<i>{{ item.section }}</i>
{% for entry in item.contents %}
<li>
<a href="{{ entry.url }}">{{ entry.page }}</a>
</li>
{% endfor %}
</ul>
{% endfor %}
</nav>
<div class="container-fluid">
<!-- This is the main content of the page getting pulled from the MDs -->
<div class="content">

View File

@ -226,7 +226,9 @@
<h5>Follow the docs, and you'll be off the ground in no time!</5>
<div class="start-buttons" style="padding: 20px;">
<a class="btn btn-light btn-xl sr-button" target="_blank" href="http://libretime.org/#getting-started">Vagrant/Manual Install</a>
<a class="btn btn-light btn-xl sr-button" target="_blank" href="quickstart">Quick Install</a>
<a class="btn btn-light btn-xl sr-button" target="_blank" href="vagrant">Vagrant</a>
<a class="btn btn-light btn-xl sr-button" target="_blank" href="https://github.com/ned-kelly/docker-multicontainer-libretime/blob/master/README.md">Docker Deployment</a>
</div>

View File

@ -1,49 +0,0 @@
Tutorials
------
This page contains links to number of tutorials.
Please provide any feedback on this [discourse forum post](https://discourse.libretime.org/t/new-tutorials-available-on-libretime-wiki/270/2).
There are also a number of tutorials in Spanish on [Vimeo](https://vimeo.com/user90812787)
## Understanding the Main Menus
* [Upload](upload)
* [Dashboard](dashboard)
* [Tracks](tracks)
* [Playlists](playlists)
* [Smart Blocks](smartblocks)
* [Webstreams](webstreams)
* [Podcasts](podcasts)
* [Radio Page](radio-page)
* [Calendar](calendar)
* Settings
* [General](general-settings)
* [Users](users)
* [Streams](stream-settings)
* [Status](status)
* Analytics
* [Playout History](history)
* [History Templates](history-templates)
* [Listener Stats](listener-stats)
* [Help](help)
* [Listen](listen)
## For Program Managers
* [Building a schedule](build-schedule)
* [How to set up an automatic top of the hour ID with intro playlist feature](intro-playlist)
* [How to setup a Auto DJ to play music from certain genres for unscheduled shows](autodj)
* [Preventing dead air between shows without cutting off tracks](outro-playlist)
* [How to schedule automatic underwriting/advertising announcements (YouTube)](https://www.youtube.com/watch?v=F7rMut7Trb4)
* [How to schedule a repeating webstream with a linked show (YouTube)](https://www.youtube.com/watch?v=Ha3X6aYdY04)
* [How to export a schedule of played tracks](exporting-the-schedule)
## For Server Administrators
* [How to configure API Authentication](api)
* [Information on reverse proxy connections](reverse-proxy)
* [Configuring FreeIPA authentication](freeipa)
* [Using and configuring Icecast and Shoutcast](icecast-shoutcast)
* [Interface Customization](interface-customization)
* [Promoting your station through your Icecast stream](promoting-your-station)
* [How to back up the LibreTime media folder and database](backing-up-the-server)
* [Upgrading LibreTime](upgrading)
* [Uninstalling LibreTime](uninstall)

View File

@ -1,74 +0,0 @@
Backing up the server
--------------------
The following shell commands can be used for database backup and restore on a
running *PostgreSQL* server in an LibreTime system.
You can dump the entire database to a zipped file with the combination of the
**pg\_dumpall** command and **gzip**. The **pg\_dumpall** command is executed
as the user *postgres*, by using the **sudo** command and the **-u** switch. It
is separated from the **gzip** command with the pipe symbol.
```bash
sudo -u postgres pg_dumpall | gzip -c > libretime-backup.gz
```
This command can be automated to run on a regular basis using the standard
**cron** tool on your server.
When restoring a production database on a cleanly installed LibreTime system, it
may be necessary to drop the empty database that was created during the new
installation, by using the **dropdb** command. Again, this command is executed
with **sudo** as the user *postgres*: 
```bash
sudo -u postgres dropdb airtime
```
This **dropdb** command above is necessary to avoid 'already exists' errors on
table creation when overwriting an empty LibreTime database in the next step.
These errors might prevent some data from being restored, such as user account
data.
To restore, first unzip the backup file with **gunzip**, then use the **psql**
command as the *postgres* user:
```bash
gunzip libretime-backup.gz
sudo -u postgres psql -f libretime-backup
```
You should now be able to log in to the LibreTime web interface in the usual way.
For safety reasons, your regular database backups should be kept in a directory
which is backed up by your storage backup tool of choice; for example, the
*/srv/airtime/database\_backups* directory. This should ensure that a storage
restore can be made along with a matching and complete version of the LibreTime
database from the day that the storage backup was made. 
Storage backup
--------------
Backing up the LibreTime database with **pg\_dumpall** will not back up the
LibreTime media storage server, which is likely to need a great deal more backup
space. Creating a compressed file from hundreds of gigabytes of storage server
contents is likely to take a very long time, and may have little benefit for the
amount of CPU power used, if the media files are already stored in a highly
compressed format. It is also impractical to copy very large backup files across
the network on a daily basis.
Instead, it is preferable to use an incremental backup technique to synchronize
the production LibreTime server storage with a backup server each day or night. If
the backup server also contains an LibreTime installation, it should be possible
to switch playout to this second machine relatively quickly, in case of a
hardware failure or other emergency on the production server.
A standard incremental backup tool on GNU/Linux servers is *rsync*
[(http://rsync.samba.org/)](http://rsync.samba.org/)) which can be installed
using the package manager of your GNU/Linux distribution. However, incremental
backup alone cannot help in the scenario where a file which later proves to be
important has been deleted by an administrator. For backups that can be rolled
back to restore from an earlier date than the current backup, the tool
*rdiff-backup*
[(http://www.nongnu.org/rdiff-backup/](http://www.nongnu.org/rdiff-backup/)) can
be deployed.  

View File

@ -1,253 +0,0 @@
Exporting the schedule
----------------------
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. This information can then be displayed on your broadcast station or affiliate websites by a content management system, such as Sourcefabric's **Newscoop** (<http://newscoop.sourcefabric.org/>). It can be presented using Javascript widgets and styled with CSS, in any format that you require. The **Broadcaster** theme for Newscoop (<https://github.com/newscoop/theme-Broadcaster>) integrates these widgets with ready-to-use styles.
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:
({"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.
({"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.
![](img/Screenshot497-System_preferences_240.png)
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:
#!/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:
<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/*
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:
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
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
$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:
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
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:
#!/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.

View File

@ -1 +1 @@
<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.0.1">Jekyll</generator><link href="http://localhost:4000/feed.xml" rel="self" type="application/atom+xml" /><link href="http://localhost:4000/" rel="alternate" type="text/html" /><updated>2020-05-22T17:33:13-04:00</updated><id>http://localhost:4000/feed.xml</id><title type="html">LibreTime Radio Automation</title><subtitle>An open source radio automation server made for (and made by) low-power FM stations and the rest of us.</subtitle></feed>
<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.0.1">Jekyll</generator><link href="http://localhost:4000/feed.xml" rel="self" type="application/atom+xml" /><link href="http://localhost:4000/" rel="alternate" type="text/html" /><updated>2020-05-22T18:01:11-04:00</updated><id>http://localhost:4000/feed.xml</id><title type="html">LibreTime Radio Automation</title><subtitle>An open source radio automation server made for (and made by) low-power FM stations and the rest of us.</subtitle></feed>

View File

@ -1,4 +1,312 @@
<h1 id="media-library-folders">Media Library Folders</h1>
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<!-- Custom fonts for this template -->
<link href="vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Merriweather:400,300,300italic,400italic,700,700italic,900,900italic' rel='stylesheet' type='text/css'>
<!-- Plugin CSS -->
<link href="vendor/magnific-popup/magnific-popup.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="css/creative.min.css" rel="stylesheet">
<style>
header.masthead {
padding-top: 10rem;
padding-bottom: calc(10rem - 56px);
background-image: url("img/header.jpg");
background-position: center center;
background-size: cover;
}
.bg-dark{
padding:2rem 0
}
</style>
<title>LibreTime Radio Automation - </title>
</head>
<body id="page-top">
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-light fixed-top navbar-shrink" id="mainNav">
<div class="container">
<a class="navbar-brand js-scroll-trigger" href="index"> LibreTime Radio Automation </a>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="quickstart">Install</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="features">Features</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="tour">Tour</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="faq">FAQ</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="advanced-configuration">Docs</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="contribute">Help Us!</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container-lg">
<nav class="content">
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<!-- Custom fonts for this template -->
<link href="vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Merriweather:400,300,300italic,400italic,700,700italic,900,900italic' rel='stylesheet' type='text/css'>
<!-- Plugin CSS -->
<link href="vendor/magnific-popup/magnific-popup.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="css/creative.min.css" rel="stylesheet">
<style>
/* "CONTENT" From Above */
.content {
/* size of my container minus sidebar width */
width: calc(80%);
/* Estimated height of largest sidebar in case of short content */
min-height: 800px;
}
/* SIDEBAR */
.sidebar {
position: absolute;
right: 0;
top: 57px;
width: 20%;
height: 100%; /* Super important! */
background-color: #212529;
color: #fff;
}
.link-style {
color: rgba(255,255,255,.9);
}
/* SIDEBAR CONTAINER */
.sidebar-item {
position: absolute;
top: 5px;
left: 10%;
width: 100%;
height: 25%;
/* Position the items */
&:nth-child(2) { top: 25%; }
&:nth-child(3) { top: 50%; }
&:nth-child(4) { top: 75%; }
}
</style>
<title>LibreTime Radio Automation - </title>
</head>
<body id="page-top">
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-light fixed-top navbar-shrink" id="mainNav">
<div class="container">
<a class="navbar-brand js-scroll-trigger" href="index"> LibreTime Radio Automation </a>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="quickstart">Install</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="features">Features</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="tour">Tour</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="faq">FAQ</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="advanced-configuration">Docs</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="contribute">Help Us!</a>
</li>
</ul>
</div>
</div>
</nav>
<!-- Sidebar -->
<div id="sidebar">
<ul>
<li class="nav-item">
<a class="nav-link" href=""></a>
</li>
<li class="nav-item">
<a class="nav-link" href=""></a>
</li>
<li class="nav-item">
<a class="nav-link" href=""></a>
</li>
<li class="nav-item">
<a class="nav-link" href=""></a>
</li>
</ul>
</div>
<nav id="sidebar">
<div class="sidebar-header">
<h3>Table of Contents</h3>
</div>
<ul class="list-unstyled components">
<i>Install</i>
<li>
<a href="quickstart">Quick Install</a>
</li>
<li>
<a href="host-configuration">Host Configuration</a>
</li>
<li>
<a href="setting-the-server-time">Setting the Server Time</a>
</li>
<li>
<a href="track-types">Configuring Track Types</a>
</li>
<li>
<a href="ssl-config">Setting up SSL</a>
</li>
<li>
<a href=""></a>
</li>
</ul>
<ul class="list-unstyled components">
<i>Using LibreTime</i>
<li>
<a href="preparing-media">Preparing Media</a>
</li>
<li>
<a href="scheduling-shows">Scheduling Shows</a>
</li>
<li>
<a href="live-broadcast">Broadcasting Live</a>
</li>
<li>
<a href="users">Adding Users</a>
</li>
<li>
<a href="troubleshooting">Help!</a>
</li>
<li>
<a href="advanced-configuration">Advanced Configuration</a>
</li>
<li>
<a href=""></a>
</li>
</ul>
<ul class="list-unstyled components">
<i>Radio Broadcasting 101</i>
<li>
<a href="learnradio-unescoguide">UNESCO Public Radio Guide</a>
</li>
<li>
<a href=""></a>
</li>
</ul>
<ul class="list-unstyled components">
<i>Appendix</i>
<li>
<a href="hd-audio-modules">HD Audio Modules</a>
</li>
<li>
<a href="rights-royalties">Rights and Royalties</a>
</li>
<li>
<a href="folders">Media Folders used by LibreTime</a>
</li>
</ul>
</nav>
<div class="container-fluid">
<!-- This is the main content of the page getting pulled from the MDs -->
<div class="content">
<h1 id="media-library-folders">Media Library Folders</h1>
<p>LibreTimes media library is inside the <em>/srv/airtime/stor/</em> folder on your server, by default.
Tracks are uploaded into the imported subdirectory and then a separate directory based upon the user
@ -10,3 +318,34 @@ move towards enabling cloud-based file hosting. There are currently two works in
imports and sync but neither of them have been finished as of the time of this writing. See
<a href="https://github.com/LibreTime/libretime/issues/70">#70</a>. In addition LibreTime does not write metadata changes
back to the files. See <a href="https://github.com/LibreTime/libretime/issues/621">#621</a></p>
</div>
</div>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
</body>
</html>
</nav>
</div>
<footer>
<section class="bg-dark text-white">
<div class="text-footer">
<small>Hosted on GitHub Pages &mdash; Theme by <a href="https://github.com/ned-kelly">ned-kelly</a> and <a href="https://github.com/zklosko">Zachary Klosko</a> &nbsp; | &nbsp;</small>
<small>Code and docs licensed under GPLv2. More details <a href="http://sourcefabric.booktype.pro/airtime-25-for-broadcasters/about-this-manual/">here</a>. </small>
</div>
</section>
</footer>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
</body>
</html>

View File

@ -1,81 +0,0 @@
# Settings
![](img/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.
![](img/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.
![](img/api-settings.png)
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*](exporting-the-schedule) 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://SITEURL/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.
![](img/dangerous-options.png)
The **Dangerous Options** section provides an administrator the ability to erase
the entire LibreTime library.
When you are done remember click the **Save** button at the top or bottom of the
form.
![](img/save-button.png)
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.
![](img/Screenshot475-Edit_own_user_account.png)

View File

@ -1,4 +1,312 @@
<h2 id="host-configuration">Host configuration</h2>
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<!-- Custom fonts for this template -->
<link href="vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Merriweather:400,300,300italic,400italic,700,700italic,900,900italic' rel='stylesheet' type='text/css'>
<!-- Plugin CSS -->
<link href="vendor/magnific-popup/magnific-popup.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="css/creative.min.css" rel="stylesheet">
<style>
header.masthead {
padding-top: 10rem;
padding-bottom: calc(10rem - 56px);
background-image: url("img/header.jpg");
background-position: center center;
background-size: cover;
}
.bg-dark{
padding:2rem 0
}
</style>
<title>LibreTime Radio Automation - </title>
</head>
<body id="page-top">
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-light fixed-top navbar-shrink" id="mainNav">
<div class="container">
<a class="navbar-brand js-scroll-trigger" href="index"> LibreTime Radio Automation </a>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="quickstart">Install</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="features">Features</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="tour">Tour</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="faq">FAQ</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="advanced-configuration">Docs</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="contribute">Help Us!</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container-lg">
<nav class="content">
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<!-- Custom fonts for this template -->
<link href="vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Merriweather:400,300,300italic,400italic,700,700italic,900,900italic' rel='stylesheet' type='text/css'>
<!-- Plugin CSS -->
<link href="vendor/magnific-popup/magnific-popup.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="css/creative.min.css" rel="stylesheet">
<style>
/* "CONTENT" From Above */
.content {
/* size of my container minus sidebar width */
width: calc(80%);
/* Estimated height of largest sidebar in case of short content */
min-height: 800px;
}
/* SIDEBAR */
.sidebar {
position: absolute;
right: 0;
top: 57px;
width: 20%;
height: 100%; /* Super important! */
background-color: #212529;
color: #fff;
}
.link-style {
color: rgba(255,255,255,.9);
}
/* SIDEBAR CONTAINER */
.sidebar-item {
position: absolute;
top: 5px;
left: 10%;
width: 100%;
height: 25%;
/* Position the items */
&:nth-child(2) { top: 25%; }
&:nth-child(3) { top: 50%; }
&:nth-child(4) { top: 75%; }
}
</style>
<title>LibreTime Radio Automation - </title>
</head>
<body id="page-top">
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-light fixed-top navbar-shrink" id="mainNav">
<div class="container">
<a class="navbar-brand js-scroll-trigger" href="index"> LibreTime Radio Automation </a>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="quickstart">Install</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="features">Features</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="tour">Tour</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="faq">FAQ</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="advanced-configuration">Docs</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="contribute">Help Us!</a>
</li>
</ul>
</div>
</div>
</nav>
<!-- Sidebar -->
<div id="sidebar">
<ul>
<li class="nav-item">
<a class="nav-link" href=""></a>
</li>
<li class="nav-item">
<a class="nav-link" href=""></a>
</li>
<li class="nav-item">
<a class="nav-link" href=""></a>
</li>
<li class="nav-item">
<a class="nav-link" href=""></a>
</li>
</ul>
</div>
<nav id="sidebar">
<div class="sidebar-header">
<h3>Table of Contents</h3>
</div>
<ul class="list-unstyled components">
<i>Install</i>
<li>
<a href="quickstart">Quick Install</a>
</li>
<li>
<a href="host-configuration">Host Configuration</a>
</li>
<li>
<a href="setting-the-server-time">Setting the Server Time</a>
</li>
<li>
<a href="track-types">Configuring Track Types</a>
</li>
<li>
<a href="ssl-config">Setting up SSL</a>
</li>
<li>
<a href=""></a>
</li>
</ul>
<ul class="list-unstyled components">
<i>Using LibreTime</i>
<li>
<a href="preparing-media">Preparing Media</a>
</li>
<li>
<a href="scheduling-shows">Scheduling Shows</a>
</li>
<li>
<a href="live-broadcast">Broadcasting Live</a>
</li>
<li>
<a href="users">Adding Users</a>
</li>
<li>
<a href="troubleshooting">Help!</a>
</li>
<li>
<a href="advanced-configuration">Advanced Configuration</a>
</li>
<li>
<a href=""></a>
</li>
</ul>
<ul class="list-unstyled components">
<i>Radio Broadcasting 101</i>
<li>
<a href="learnradio-unescoguide">UNESCO Public Radio Guide</a>
</li>
<li>
<a href=""></a>
</li>
</ul>
<ul class="list-unstyled components">
<i>Appendix</i>
<li>
<a href="hd-audio-modules">HD Audio Modules</a>
</li>
<li>
<a href="rights-royalties">Rights and Royalties</a>
</li>
<li>
<a href="folders">Media Folders used by LibreTime</a>
</li>
</ul>
</nav>
<div class="container-fluid">
<!-- This is the main content of the page getting pulled from the MDs -->
<div class="content">
<h2 id="host-configuration">Host configuration</h2>
<p>The streaming host configuration for LibreTime is shown in the file <em>/etc/airtime/liquidsoap.cfg</em> which is automatically generated by the <strong>Streams</strong> page, found on the <strong>System</strong> 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.</p>
@ -173,3 +481,34 @@ push_interval = 1# in seconds
# (needs the post_processor patch)
cue_style = pre
</code></pre></div></div>
</div>
</div>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
</body>
</html>
</nav>
</div>
<footer>
<section class="bg-dark text-white">
<div class="text-footer">
<small>Hosted on GitHub Pages &mdash; Theme by <a href="https://github.com/ned-kelly">ned-kelly</a> and <a href="https://github.com/zklosko">Zachary Klosko</a> &nbsp; | &nbsp;</small>
<small>Code and docs licensed under GPLv2. More details <a href="http://sourcefabric.booktype.pro/airtime-25-for-broadcasters/about-this-manual/">here</a>. </small>
</div>
</section>
</footer>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
</body>
</html>

View File

@ -246,7 +246,9 @@
<h5>Follow the docs, and you'll be off the ground in no time!</5>
<div class="start-buttons" style="padding: 20px;">
<a class="btn btn-light btn-xl sr-button" target="_blank" href="http://libretime.org/#getting-started">Vagrant/Manual Install</a>
<a class="btn btn-light btn-xl sr-button" target="_blank" href="quickstart">Quick Install</a>
<a class="btn btn-light btn-xl sr-button" target="_blank" href="vagrant">Vagrant</a>
<a class="btn btn-light btn-xl sr-button" target="_blank" href="https://github.com/ned-kelly/docker-multicontainer-libretime/blob/master/README.md">Docker Deployment</a>
</div>

View File

@ -1,4 +1,312 @@
<h1 id="interface-localization">Interface Localization</h1>
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<!-- Custom fonts for this template -->
<link href="vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Merriweather:400,300,300italic,400italic,700,700italic,900,900italic' rel='stylesheet' type='text/css'>
<!-- Plugin CSS -->
<link href="vendor/magnific-popup/magnific-popup.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="css/creative.min.css" rel="stylesheet">
<style>
header.masthead {
padding-top: 10rem;
padding-bottom: calc(10rem - 56px);
background-image: url("img/header.jpg");
background-position: center center;
background-size: cover;
}
.bg-dark{
padding:2rem 0
}
</style>
<title>LibreTime Radio Automation - </title>
</head>
<body id="page-top">
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-light fixed-top navbar-shrink" id="mainNav">
<div class="container">
<a class="navbar-brand js-scroll-trigger" href="index"> LibreTime Radio Automation </a>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="quickstart">Install</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="features">Features</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="tour">Tour</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="faq">FAQ</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="advanced-configuration">Docs</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="contribute">Help Us!</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container-lg">
<nav class="content">
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<!-- Custom fonts for this template -->
<link href="vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Merriweather:400,300,300italic,400italic,700,700italic,900,900italic' rel='stylesheet' type='text/css'>
<!-- Plugin CSS -->
<link href="vendor/magnific-popup/magnific-popup.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="css/creative.min.css" rel="stylesheet">
<style>
/* "CONTENT" From Above */
.content {
/* size of my container minus sidebar width */
width: calc(80%);
/* Estimated height of largest sidebar in case of short content */
min-height: 800px;
}
/* SIDEBAR */
.sidebar {
position: absolute;
right: 0;
top: 57px;
width: 20%;
height: 100%; /* Super important! */
background-color: #212529;
color: #fff;
}
.link-style {
color: rgba(255,255,255,.9);
}
/* SIDEBAR CONTAINER */
.sidebar-item {
position: absolute;
top: 5px;
left: 10%;
width: 100%;
height: 25%;
/* Position the items */
&:nth-child(2) { top: 25%; }
&:nth-child(3) { top: 50%; }
&:nth-child(4) { top: 75%; }
}
</style>
<title>LibreTime Radio Automation - </title>
</head>
<body id="page-top">
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-light fixed-top navbar-shrink" id="mainNav">
<div class="container">
<a class="navbar-brand js-scroll-trigger" href="index"> LibreTime Radio Automation </a>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="quickstart">Install</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="features">Features</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="tour">Tour</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="faq">FAQ</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="advanced-configuration">Docs</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="contribute">Help Us!</a>
</li>
</ul>
</div>
</div>
</nav>
<!-- Sidebar -->
<div id="sidebar">
<ul>
<li class="nav-item">
<a class="nav-link" href=""></a>
</li>
<li class="nav-item">
<a class="nav-link" href=""></a>
</li>
<li class="nav-item">
<a class="nav-link" href=""></a>
</li>
<li class="nav-item">
<a class="nav-link" href=""></a>
</li>
</ul>
</div>
<nav id="sidebar">
<div class="sidebar-header">
<h3>Table of Contents</h3>
</div>
<ul class="list-unstyled components">
<i>Install</i>
<li>
<a href="quickstart">Quick Install</a>
</li>
<li>
<a href="host-configuration">Host Configuration</a>
</li>
<li>
<a href="setting-the-server-time">Setting the Server Time</a>
</li>
<li>
<a href="track-types">Configuring Track Types</a>
</li>
<li>
<a href="ssl-config">Setting up SSL</a>
</li>
<li>
<a href=""></a>
</li>
</ul>
<ul class="list-unstyled components">
<i>Using LibreTime</i>
<li>
<a href="preparing-media">Preparing Media</a>
</li>
<li>
<a href="scheduling-shows">Scheduling Shows</a>
</li>
<li>
<a href="live-broadcast">Broadcasting Live</a>
</li>
<li>
<a href="users">Adding Users</a>
</li>
<li>
<a href="troubleshooting">Help!</a>
</li>
<li>
<a href="advanced-configuration">Advanced Configuration</a>
</li>
<li>
<a href=""></a>
</li>
</ul>
<ul class="list-unstyled components">
<i>Radio Broadcasting 101</i>
<li>
<a href="learnradio-unescoguide">UNESCO Public Radio Guide</a>
</li>
<li>
<a href=""></a>
</li>
</ul>
<ul class="list-unstyled components">
<i>Appendix</i>
<li>
<a href="hd-audio-modules">HD Audio Modules</a>
</li>
<li>
<a href="rights-royalties">Rights and Royalties</a>
</li>
<li>
<a href="folders">Media Folders used by LibreTime</a>
</li>
</ul>
</nav>
<div class="container-fluid">
<!-- This is the main content of the page getting pulled from the MDs -->
<div class="content">
<h1 id="interface-localization">Interface Localization</h1>
<p>The LibreTime administration interface can be localized using the standard GNU <strong>gettext</strong> method. Using GitHub for this task means you dont have to tackle the whole of a localization yourself; just as much as you can manage.</p>
@ -63,3 +371,34 @@ msgstr ""
<p>Finally, <strong>git add</strong>, <strong>git commit</strong> and <strong>git push</strong> these new .mo and .po files to your GitHub fork of the project, and send a git pull request (<a href="https://help.github.com/articles/using-pull-requests">https://help.github.com/articles/using-pull-requests</a>) to the LibreTime developers. The localization can then be added to a forthcoming LibreTime release.</p>
<p>If you dont want to work with git, thats 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.</p>
</div>
</div>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
</body>
</html>
</nav>
</div>
<footer>
<section class="bg-dark text-white">
<div class="text-footer">
<small>Hosted on GitHub Pages &mdash; Theme by <a href="https://github.com/ned-kelly">ned-kelly</a> and <a href="https://github.com/zklosko">Zachary Klosko</a> &nbsp; | &nbsp;</small>
<small>Code and docs licensed under GPLv2. More details <a href="http://sourcefabric.booktype.pro/airtime-25-for-broadcasters/about-this-manual/">here</a>. </small>
</div>
</section>
</footer>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
</body>
</html>

View File

@ -1,9 +0,0 @@
# Radio Broadcasting 101 - UNESCO Public Radio Guide
The UNESCO publication [*Community Radio - A user's guide to the technology*](img/CommunityRadioUserGuide.pdf)
features a very comprehensive guide to setting up a community radio station.
This guide is aimed at people thinking about setting up a radio station in
India, but includes lots of practical advice that would be useful in any
country.
More guides will be coming soon. Don't touch that dial!

View File

@ -1,86 +0,0 @@
# Broadcasting live with MIXXX or B.U.T.T.
[![How to Livestream Your Show](http://img.youtube.com/vi/4GLsU9hPTtM/0.jpg)](https://www.youtube-nocookie.com/embed/4GLsU9hPTtM "How to Livestream Your Show")
This how to is intended for DJs using BUTT or MIXXX to stream to their LibreTime
server with an external USB audio card setup to route a mixer and sound.
Live shows with MIXXX
---------------------
Mixxx is a cross-platform Open Source application for DJs, available [here](https://www.mixxx.org).
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**.
![](img/Screenshot369-Mixxx_streaming_preferences.png)
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. See [stream settings](stream-settings)
for remote input connection details.
Live shows with B.U.T.T. (Broadcast Using This Tool)
------------------------------------------------------
## Set Up
1. Download and install butt from <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** under **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 external sound card under
**Audio Device** *Note: if you only have an internal sound card you maybe able
to use it but that is OS specific and outside of this tutorial. We are assuming
you have a mic and mixer or a USB mixer hooked up to or as an external soundcard*
## 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 didnt automatically disconnect you can click it to the right and it
should turn gray.
You are now done streaming.
If you have issues connecting check with your system administrator to see if you
have the details right.

View File

@ -1,97 +0,0 @@
# Preparing media for uploading to LibreTime
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, or suffer the consequences. For example, if the files have creator or genre metadata missing, it will be impossible to search for, create playlists or generate smart blocks according to these criteria until you add it.
There are a number of programs available which can be used to correct mistakes or incomplete information in ID3 tags. On GNU/Linux, the program **Ex Falso** ([http://code.google.com/p/quodlibet/](http://code.google.com/p/quodlibet/) "http://sourceforge.net/projects/dr14tmeter/")) can be useful for batch setting and editing ID3 tags before importing files into your LibreTime server. On a Debian or Ubuntu desktop machine, you can install this program with the command:
sudo apt-get install exfalso
After installation, you can run this program with the command:
exfalso
or from the desktop menu. The *Tags From Path* feature of this program 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.
![](img/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 command:
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>
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
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 <http://www.replaygain.org/> 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 <http://www.soundonsound.com/sos/sep11/articles/loudness.htm> 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 <http://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:
$ 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:
$ 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 may be preferable to trim these files to the intended length before upload. This is because media in the LibreTime library could potentially be re-used in many different systems. **Audacity** is a cross-platform editor suitable for the task of trimming audio files, available from [http://audacity.sourceforge.net/](http://audacity.sourceforge.net "http://sourceforge.net/projects/dr14tmeter/")
Very quiet introductions or over-long fades can also lead to apparent gaps in your broadcast playout. Some audio CDs feature a 'hidden track' at the end, which in fact uses a long period of silence within the final track, rather than an actual separate track on the disc. This means that CD encoding programs will often encode both the hidden material and the silence in the media file. For example, the track *Debra* from the CD *Midnite Vultures* by *Beck* includes hidden material preceded by seven minutes of silence, as shown in the screen shot from Audacity below.
![](img/Screenshot126-Debra_silence.png)

View File

@ -1,113 +0,0 @@
# Reverse Proxy Connections
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 functionality, 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**](general-settings). These origins should include any
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
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
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 is not. All the SSL certificates
live on the reverse proxy and can be renewed there instead of on the individual
containers.
## Setup
There are known bugs when using LibreTime behind a reverse proxy ([#957](https://github.com/LibreTime/libretime/issues/957)
tracks the issue and contains a temporary workaround). 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 will also 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 `proxy` and LibreTime will be installed on `libretime`. You will need root
access on both. `libretime` also needs to be able to be accessed from `proxy`
(`ping libretime` on `proxy`).
On `libretime`, install LibreTime as described in the [install guide](install). In short
this means run the following commands:
```
git clone https://github.com/LibreTime/libretime.git
cd libretime
sudo ./install -fiap
```
Once it has installed, replace `<hostname>localhost</hostname>` in
`/etc/icecast2/icecast.xml` with the following:
```
<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:
```
sudo systemctl restart icecast2
```
On `proxy`, run the following:
```
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://libretime/;
}
}
EOF
```
This Nginx configuration ensures that all traffic uses SSL to the reverse proxy, and
traffic is proxied to `libretime`.
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](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
```

View File

@ -1,4 +1,312 @@
<h1 id="rights-and-royalties">Rights and Royalties</h1>
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<!-- Custom fonts for this template -->
<link href="vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Merriweather:400,300,300italic,400italic,700,700italic,900,900italic' rel='stylesheet' type='text/css'>
<!-- Plugin CSS -->
<link href="vendor/magnific-popup/magnific-popup.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="css/creative.min.css" rel="stylesheet">
<style>
header.masthead {
padding-top: 10rem;
padding-bottom: calc(10rem - 56px);
background-image: url("img/header.jpg");
background-position: center center;
background-size: cover;
}
.bg-dark{
padding:2rem 0
}
</style>
<title>LibreTime Radio Automation - </title>
</head>
<body id="page-top">
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-light fixed-top navbar-shrink" id="mainNav">
<div class="container">
<a class="navbar-brand js-scroll-trigger" href="index"> LibreTime Radio Automation </a>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="quickstart">Install</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="features">Features</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="tour">Tour</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="faq">FAQ</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="advanced-configuration">Docs</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="contribute">Help Us!</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container-lg">
<nav class="content">
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<!-- Custom fonts for this template -->
<link href="vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Merriweather:400,300,300italic,400italic,700,700italic,900,900italic' rel='stylesheet' type='text/css'>
<!-- Plugin CSS -->
<link href="vendor/magnific-popup/magnific-popup.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="css/creative.min.css" rel="stylesheet">
<style>
/* "CONTENT" From Above */
.content {
/* size of my container minus sidebar width */
width: calc(80%);
/* Estimated height of largest sidebar in case of short content */
min-height: 800px;
}
/* SIDEBAR */
.sidebar {
position: absolute;
right: 0;
top: 57px;
width: 20%;
height: 100%; /* Super important! */
background-color: #212529;
color: #fff;
}
.link-style {
color: rgba(255,255,255,.9);
}
/* SIDEBAR CONTAINER */
.sidebar-item {
position: absolute;
top: 5px;
left: 10%;
width: 100%;
height: 25%;
/* Position the items */
&:nth-child(2) { top: 25%; }
&:nth-child(3) { top: 50%; }
&:nth-child(4) { top: 75%; }
}
</style>
<title>LibreTime Radio Automation - </title>
</head>
<body id="page-top">
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-light fixed-top navbar-shrink" id="mainNav">
<div class="container">
<a class="navbar-brand js-scroll-trigger" href="index"> LibreTime Radio Automation </a>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="quickstart">Install</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="features">Features</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="tour">Tour</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="faq">FAQ</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="advanced-configuration">Docs</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="contribute">Help Us!</a>
</li>
</ul>
</div>
</div>
</nav>
<!-- Sidebar -->
<div id="sidebar">
<ul>
<li class="nav-item">
<a class="nav-link" href=""></a>
</li>
<li class="nav-item">
<a class="nav-link" href=""></a>
</li>
<li class="nav-item">
<a class="nav-link" href=""></a>
</li>
<li class="nav-item">
<a class="nav-link" href=""></a>
</li>
</ul>
</div>
<nav id="sidebar">
<div class="sidebar-header">
<h3>Table of Contents</h3>
</div>
<ul class="list-unstyled components">
<i>Install</i>
<li>
<a href="quickstart">Quick Install</a>
</li>
<li>
<a href="host-configuration">Host Configuration</a>
</li>
<li>
<a href="setting-the-server-time">Setting the Server Time</a>
</li>
<li>
<a href="track-types">Configuring Track Types</a>
</li>
<li>
<a href="ssl-config">Setting up SSL</a>
</li>
<li>
<a href=""></a>
</li>
</ul>
<ul class="list-unstyled components">
<i>Using LibreTime</i>
<li>
<a href="preparing-media">Preparing Media</a>
</li>
<li>
<a href="scheduling-shows">Scheduling Shows</a>
</li>
<li>
<a href="live-broadcast">Broadcasting Live</a>
</li>
<li>
<a href="users">Adding Users</a>
</li>
<li>
<a href="troubleshooting">Help!</a>
</li>
<li>
<a href="advanced-configuration">Advanced Configuration</a>
</li>
<li>
<a href=""></a>
</li>
</ul>
<ul class="list-unstyled components">
<i>Radio Broadcasting 101</i>
<li>
<a href="learnradio-unescoguide">UNESCO Public Radio Guide</a>
</li>
<li>
<a href=""></a>
</li>
</ul>
<ul class="list-unstyled components">
<i>Appendix</i>
<li>
<a href="hd-audio-modules">HD Audio Modules</a>
</li>
<li>
<a href="rights-royalties">Rights and Royalties</a>
</li>
<li>
<a href="folders">Media Folders used by LibreTime</a>
</li>
</ul>
</nav>
<div class="container-fluid">
<!-- This is the main content of the page getting pulled from the MDs -->
<div class="content">
<h1 id="rights-and-royalties">Rights and Royalties</h1>
<p>If youre new to broadcasting, or have not streamed your station online before,
reading the following brief explanation of compensation rules for songwriters,
@ -80,3 +388,34 @@ 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? Thats the kind of thing that could get
you in trouble with the licensing authorities and copyright holders.</p>
</div>
</div>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
</body>
</html>
</nav>
</div>
<footer>
<section class="bg-dark text-white">
<div class="text-footer">
<small>Hosted on GitHub Pages &mdash; Theme by <a href="https://github.com/ned-kelly">ned-kelly</a> and <a href="https://github.com/zklosko">Zachary Klosko</a> &nbsp; | &nbsp;</small>
<small>Code and docs licensed under GPLv2. More details <a href="http://sourcefabric.booktype.pro/airtime-25-for-broadcasters/about-this-manual/">here</a>. </small>
</div>
</section>
</footer>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
</body>
</html>

View File

@ -1,51 +0,0 @@
# Scheduling Shows
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**.
![](img/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.
![](img/Screenshot558-Add_Show.png)
Click on the blue **+ New Show** button to add a new show.
![](img/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. 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.
![](img/Screenshot561-Add_show_content.png)
The track scheduler behaves similar to iTunes or Windows Media Player: media browser on the left, playlist on the right.
Find the tracks that you'd like to schedule by using the search box or sorting columns and then drag them
into the playlist.
![](img/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.
![](img/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.

View File

@ -1,15 +1,107 @@
<h1 id="using-vagrant-and-virturalbox-for-developing-libretime">Using Vagrant and Virturalbox for developing LibreTime</h1>
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<p>The <strong>LibreTime Vagrant install</strong> is the fastet way to get LibreTime up and running in a way
to hack on its source code or to test it locally. There are two supported providers: libvirt
and VirtualBox.</p>
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<!-- Custom fonts for this template -->
<link href="vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Merriweather:400,300,300italic,400italic,700,700italic,900,900italic' rel='stylesheet' type='text/css'>
<h2 id="prerequisites">Prerequisites</h2>
<!-- Plugin CSS -->
<link href="vendor/magnific-popup/magnific-popup.css" rel="stylesheet">
<ul>
<li><a href="https://git-scm.com/">Git</a></li>
<li><a href="https://vagrantup.com">Vagrant</a></li>
</ul>
<!-- Custom styles for this template -->
<link href="css/creative.min.css" rel="stylesheet">
<style>
header.masthead {
padding-top: 10rem;
padding-bottom: calc(10rem - 56px);
background-image: url("img/header.jpg");
background-position: center center;
background-size: cover;
}
.bg-dark{
padding:2rem 0
}
</style>
<title>LibreTime Radio Automation - Using Vagrant and Virturalbox for developing LibreTime</title>
</head>
<body id="page-top">
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-light fixed-top navbar-shrink" id="mainNav">
<div class="container">
<a class="navbar-brand js-scroll-trigger" href="index"> LibreTime Radio Automation </a>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="quickstart">Install</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="features">Features</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="tour">Tour</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="faq">FAQ</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="advanced-configuration">Docs</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="contribute">Help Us!</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container-lg">
<nav class="content">
<html>
<head>
<style>
section{padding:4rem 0}
</style>
</head>
<body>
<section class="bg-primary">
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto text-center">
<h2 class="section-heading text-white"> Using Vagrant and Virturalbox for developing LibreTime </h2>
<hr class="light my-4">
<p class="text-faded mb-4">
The fastest way to get LibreTime up and running in a way to hack on its source code or to test it locally.
</p>
</div>
</div>
</div>
</section>
<blockquote>
<p>Prerequisites: git, <a href="https://vagrantup.com">Vagrant</a>, libvirt or VirturalBox</p>
</blockquote>
<h3 id="virtual-box">Virtual Box</h3>
@ -135,3 +227,27 @@ to re-run the installer.</p>
<p>If you only want to re-run parts of the installer, use <code class="highlighter-rouge">--provision-with $step</code>. The
supported steps are <code class="highlighter-rouge">prepare</code>, <code class="highlighter-rouge">install</code>, <code class="highlighter-rouge">install-mkdocs</code> and <code class="highlighter-rouge">start-mkdocs</code>.</p>
</body>
</html>
</nav>
</div>
<footer>
<section class="bg-dark text-white">
<div class="text-footer">
<small>Hosted on GitHub Pages &mdash; Theme by <a href="https://github.com/ned-kelly">ned-kelly</a> and <a href="https://github.com/zklosko">Zachary Klosko</a> &nbsp; | &nbsp;</small>
<small>Code and docs licensed under GPLv2. More details <a href="http://sourcefabric.booktype.pro/airtime-25-for-broadcasters/about-this-manual/">here</a>. </small>
</div>
</section>
</footer>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
</body>
</html>

View File

@ -1,5 +1,7 @@
Tutorials
------
---
layout: docs
---
This page contains links to number of tutorials.
Please provide any feedback on this [discourse forum post](https://discourse.libretime.org/t/new-tutorials-available-on-libretime-wiki/270/2).

View File

@ -1,3 +1,7 @@
---
layout: docs
---
Backing up the server
--------------------

View File

@ -1,3 +1,7 @@
---
layout: docs
---
Exporting the schedule
----------------------

View File

@ -1,5 +1,5 @@
---
sidebar: appendix
layout: docs
---
# Media Library Folders

View File

@ -1,3 +1,7 @@
---
layout: docs
---
# Settings
![](img/station-info-settings.png)

View File

@ -1,5 +1,5 @@
---
sidebar: installer
layout: docs
---
Host configuration

View File

@ -1,5 +1,5 @@
---
sidebar: devs
layout: docs
---
# Interface Localization

View File

@ -1,3 +1,7 @@
---
layout: docs
---
# Radio Broadcasting 101 - UNESCO Public Radio Guide
The UNESCO publication [*Community Radio - A user's guide to the technology*](img/CommunityRadioUserGuide.pdf)

View File

@ -1,3 +1,7 @@
---
layout: docs
---
# Broadcasting live with MIXXX or B.U.T.T.
[![How to Livestream Your Show](http://img.youtube.com/vi/4GLsU9hPTtM/0.jpg)](https://www.youtube-nocookie.com/embed/4GLsU9hPTtM "How to Livestream Your Show")

View File

@ -1,3 +1,7 @@
---
layout: docs
---
# Preparing media for uploading to LibreTime
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.

View File

@ -1,3 +1,7 @@
---
layout: docs
---
# Reverse Proxy Connections
In some deployments, the LibreTime server is deployed behind a reverse proxy,

View File

@ -1,5 +1,5 @@
---
sidebar: appendix
layout: docs
---
# Rights and Royalties

View File

@ -1,3 +1,7 @@
---
layout: docs
---
# Scheduling Shows
Log in using your username and password using the link in the upper right corner. (If you just installed

View File

@ -1,17 +1,10 @@
---
sidebar: devs
layout: page
title: Using Vagrant and Virturalbox for developing LibreTime
blurb: The fastest way to get LibreTime up and running in a way to hack on its source code or to test it locally.
---
# Using Vagrant and Virturalbox for developing LibreTime
The **LibreTime Vagrant install** is the fastet way to get LibreTime up and running in a way
to hack on its source code or to test it locally. There are two supported providers: libvirt
and VirtualBox.
## Prerequisites
* [Git](https://git-scm.com/)
* [Vagrant](https://vagrantup.com)
> Prerequisites: git, [Vagrant](https://vagrantup.com), libvirt or VirturalBox
### Virtual Box