Removing cache uploaded by mistake

This commit is contained in:
Zachary Klosko 2020-05-22 20:49:41 -04:00
parent f87977b80f
commit 3a54f8548e
1671 changed files with 3 additions and 69907 deletions

4
.gitignore vendored
View File

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

View File

@ -1 +0,0 @@
I"«{"source"=>"/Users/zacharyklosko/Documents/GitHub/libretime/docs", "destination"=>"/Users/zacharyklosko/Documents/GitHub/libretime/docs/_site", "collections_dir"=>"", "cache_dir"=>".jekyll-cache", "plugins_dir"=>"_plugins", "layouts_dir"=>"_layouts", "data_dir"=>"_data", "includes_dir"=>"_includes", "collections"=>{"posts"=>{"output"=>true, "permalink"=>"/:categories/:year/:month/:day/:title:output_ext"}}, "safe"=>false, "include"=>[".htaccess"], "exclude"=>[".sass-cache", ".jekyll-cache", "gemfiles", "Gemfile", "Gemfile.lock", "node_modules", "vendor/bundle/", "vendor/cache/", "vendor/gems/", "vendor/ruby/"], "keep_files"=>[".git", ".svn"], "encoding"=>"utf-8", "markdown_ext"=>"markdown,mkdown,mkdn,mkd,md", "strict_front_matter"=>false, "show_drafts"=>nil, "limit_posts"=>0, "future"=>false, "unpublished"=>false, "whitelist"=>[], "plugins"=>["jekyll-feed"], "markdown"=>"kramdown", "highlighter"=>"rouge", "lsi"=>false, "excerpt_separator"=>"\n\n", "incremental"=>false, "detach"=>false, "port"=>"4000", "host"=>"127.0.0.1", "baseurl"=>nil, "show_dir_listing"=>false, "permalink"=>"date", "paginate_path"=>"/page:num", "timezone"=>nil, "quiet"=>false, "verbose"=>false, "defaults"=>[], "liquid"=>{"error_mode"=>"warn", "strict_filters"=>false, "strict_variables"=>false}, "kramdown"=>{"auto_ids"=>true, "toc_levels"=>"1..6", "entity_output"=>"as_char", "smart_quotes"=>"lsquo,rsquo,ldquo,rdquo", "input"=>"GFM", "hard_wrap"=>false, "guess_lang"=>true, "footnote_nr"=>1, "show_warnings"=>false, "syntax_highlighter"=>"rouge", "syntax_highlighter_opts"=>{:guess_lang=>true}, "coderay"=>{}}, "title"=>"LibreTime Radio Automation", "description"=>"An open source radio automation server made for (and made by) low-power FM stations and the rest of us.", "logo"=>"144px.png", "show_downloads"=>false, "favicon"=>"144px.png", "headimage"=>"img/header.jpg", "headtext"=>"Open Source Radio Automation", "headsubtext"=>"Everything you need to get your terrestrial / on-line radio station up and broadcasting like a pro - without breaking the bank!", "headbuttonurl"=>"https://libretime.org", "headbuttontext"=>"Get LibreTime", "livereload_port"=>35729, "serving"=>true, "watch"=>true, "url"=>"http://localhost:4000"}:ET

View File

@ -1,103 +0,0 @@
I"<h1 id="what-is-libretime">What is LibreTime?</h1>
<p><a href="http://libretime.org/" title="LibreTime homepage">LibreTime</a> is the open broadcast
software for scheduling and remote station management. Web browser access to
the station’s media library, multi-file upload and automatic metadata import
features are coupled with a collaborative online scheduling calendar and
playlist management. The scheduling calendar is managed through an easy-to-use
interface and triggers playout with sub-second precision.</p>
<p><img src="img/Screenshot540-Now_playing_250.png" alt="" /></p>
<p>LibreTime is intended to provide a solution for a wide range of broadcast
projects, from community to public and commercial stations. The scalability of
LibreTime allows implementation in a number of scenarios, ranging from an
unmanned broadcast unit accessed remotely through the Internet, to a local
network of machines accessing a central LibreTime storage system. LibreTime
supports the playout of lossy compressed audio files in both MP3 and AAC
formats and the open, royalty-free equivalent
<a href="http://www.vorbis.com/" title="Ogg Vorbis homepage">Ogg Vorbis</a>. It also supports
playout of lossless FLAC and WAV format audio files.</p>
<p>LibreTime manages the <a href="http://savonet.sourceforge.net/">Liquidsoap</a> stream
generator at the heart of the system. Liquidsoap generates streams from files
in the LibreTime library and any remote input streams that you specify.
Available stream output formats include Ogg Vorbis, Ogg Opus, MP3, and AAC. The
library is indexed in a <a href="http://www.postgresql.org/">PostgreSQL</a> database to
enable searching. Live shows can be recorded automatically with
<a href="http://eca.cx/ecasound/" title="Ecasound homepage">Ecasound</a>, using the sound card
line input. News editors, DJs and station controllers can use LibreTime to
build playlists or smart blocks and manage media files (upload, edit metadata,
manage advertisements) at the station or via the Internet.</p>
<p>The scheduler in LibreTime has a calendar view, organized by months, weeks or
days. Program editors can schedule playlists and shows here for their
broadcast station. In some scenarios, the transmitter is situated outside the
reach of the broadcaster and all program management has to be maintained
through the web interface. Possible reasons for this scenario might be of a
pragmatic nature (running many stations from one central office due to limited
human resources) or an emergency (running a transmitter in a crisis area
without putting staff at risk).</p>
<h2 id="libretime-services">LibreTime services</h2>
<table>
<thead>
<tr>
<th>Service</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>libretime-analyzer</td>
<td>Keeps track of files being added, renamed, moved or removed from storage, and reads their metadata using the Mutagen library.</td>
</tr>
<tr>
<td><a href="https://www.postgresql.org/">PostgreSQL</a></td>
<td>Contains the location of those media files and their metadata. This means you can search for and playlist a set of media files according to the specific metadata that you require, or use a ‘smart block’ to select the files for you. The database also contains details of specified remote input streams.</td>
</tr>
<tr>
<td>Pypo</td>
<td>(Python Playout engine) Downloads media from the storage up to 24 hours ahead of playout and checks it for average level (with ReplayGain tools) and leading or trailing silence (with Silan). At playout time, the media to be broadcast is sent to Liquidsoap.</td>
</tr>
<tr>
<td><a href="https://www.liquidsoap.info/">Liquidsoap</a></td>
<td>Takes individual media files and remote input streams, and assembles them into a continuous output stream. This stream can be sent to a sound card (e.g. for a broadcast mixer, on the way to an FM or DAB transmitter) or to a streaming server for IP network distribution, over the LAN, local WiFi or the Internet. You can stream to a sound card and up to three different stream distribution servers with the same LibreTime server, if you wish.</td>
</tr>
<tr>
<td><a href="https://www.icecast.org/">Icecast</a> or <a href="https://shoutcast.com/">Shoutcast</a></td>
<td>Audio streaming server, used for creating an internet radio stream from LibreTime. Icecast is included in the LibreTime installation by default. Note: If a suitable Liquidsoap output is not available for your streaming service of choice, you can send audio from Liquidsoap to a separate encoding or streaming machine via a sound card or relay stream.</td>
</tr>
<tr>
<td><a href="https://mmonit.com/monit/">Monit</a></td>
<td>Monitors the health of pypo, libretime-analyzer and Liquidsoap, and reports the status of these services to LibreTime.</td>
</tr>
<tr>
<td><a href="https://www.rabbitmq.com/">RabbitMQ</a></td>
<td>Pushes messages from LibreTime to libretime-analyzer and pypo about changes to media files and the playout schedule.</td>
</tr>
</tbody>
</table>
<h2 id="example-studio-broadcast-system">Example studio broadcast system</h2>
<p>In the diagram of an FM radio station below, LibreTime is hosted on a server
connected to the local network, with direct soundcard access. Liquidsoap
outputs streams to both the transmitter, via the main studio mixer, and
streaming media servers. The machine running LibreTime is behind a firewall
because it is also connected to the Internet for remote access by media
contributors. This enables LibreTime to offer password-protected access to the
media library and scheduling from both inside and outside the studio building.</p>
<p><img src="img/libretime_architecture.svg" alt="" /></p>
<h2 id="example-web-broadcast-system">Example web broadcast system</h2>
<p>In the diagram below, LibreTime is hosted on a remote web server, and has no
soundcard. There does not need to be a centralised studio, although LibreTime
can enable remote studios to stream in to Liquidsoap at authorised times.
Optionally, the outgoing Icecast stream can be relayed to a transmitter.</p>
<p><img src="img/libretime_web_architecture.svg" alt="" /></p>
:ET

View File

@ -1,109 +0,0 @@
I"N<blockquote>
<p>Note: this guide is assuming you are using Ubuntu 18.04 LTS for installation, which comes with <code class="highlighter-rouge">ufw</code> and <code class="highlighter-rouge">netplan</code>,
and that you have already installed <code class="highlighter-rouge">git</code> and configured <code class="highlighter-rouge">ntp</code>. NTP configuration instructions can be found <a href="setting-the-server-time">here</a>.
While it is possible to install LibreTime on other OSes, such as CentOS 7, Debian 9 and 10, and Raspbian 9 and 10,
these are less tested. Firewall and static IP address configuration will need to be done according to your OSes instructions.</p>
</blockquote>
<h2 id="minimum-system-requirements">Minimum System Requirements</h2>
<table>
<thead>
<tr>
<th>On-Premises Install (FM + Internet Radio)</th>
<th>Cloud Install (Internet Radio Only)</th>
</tr>
</thead>
<tbody>
<tr>
<td>1 Ghz Processor</td>
<td>1vCPU</td>
</tr>
<tr>
<td>2 GB RAM</td>
<td>2 GB RAM</td>
</tr>
<tr>
<td>Wired ethernet connection and a static IP address (see below for instructions)</td>
<td>2 TB of data transfer/month</td>
</tr>
</tbody>
</table>
<p><a href="https://www.digitalocean.com/pricing/#Compute">DigitalOcean</a> and <a href="https://www.linode.com/pricing/#row--compute">Linode</a>
have similar plans that meet Cloud Install requirements. Both plans cost $10/month.</p>
<h2 id="preparing-the-server">Preparing the server</h2>
<p>Configure the server to have a static IP address by modifying the Netplan configuration.
If youre using a cloud VM, you likely already have a static IP address. Check with your provider to confirm this.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cd /etc/netplan &amp;&amp; ls # find the netplan filename
sudo nano ##-netcfg.yaml
</code></pre></div></div>
<p>If the Netplan configuration is empty, fill in the file with the example below. Otherwise,
input the IP address reserved for the server in <code class="highlighter-rouge">xxx.xxx.xxx.xxx/yy</code> format, the gateway (the IP address
of your router), and the DNS nameserver. If you dont have a nameserver on your network,
feel free to use Cloudflares: <code class="highlighter-rouge">1.1.1.1</code> and <code class="highlighter-rouge">1.0.0.1</code>.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses: [192.168.88.8/24]
gateway4: 192.168.88.1
nameservers:
addresses: 192.168.88.1
</code></pre></div></div>
<p>Next, configure Ubuntus firewall by running:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo ufw enable
sudo ufw allow 80/tcp
sudo ufw allow 8000/tcp
</code></pre></div></div>
<p>Unblock ports 8001 and 8002 if you plan on broadcasting live with Libretime.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo ufw enable 8001/tcp
sudo ufw enable 8002/tcp
</code></pre></div></div>
<blockquote>
<p>If needed, instuctions for setting up a reverse proxy can be found <a href="reverse-proxy">here</a>.</p>
</blockquote>
<h2 id="installing-libretime">Installing LibreTime</h2>
<p>Installing LibreTime consists of running the following commands in the terminal:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git clone https://github.com/LibreTime/libretime.git
cd libretime
sudo ./install -fiap
</code></pre></div></div>
<p>After the install is completed, head to the IP address of the server LibreTime was just installed on
to complete the welcome wizard. While not strictly necessary, it is recommended that you change the passwords prompted in the welcome wizard if you intend on accessing the server from the Internet. The welcome wizard will
walk you through the rest of the installation process.</p>
<p>Congratulations! Youve successfully set up LibreTime!</p>
<h2 id="post-install">Post-install</h2>
<p>If you plan to have LibreTime output analog audio directly from its server to a mixing console or transmitter,
the <code class="highlighter-rouge">www-data</code> user needs to be added to the <code class="highlighter-rouge">audio</code> user group using the command below.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo adduser www-data audio
</code></pre></div></div>
<p>Now that the install is complete, use these guides to help you continue to set up your LibreTime server</p>
<ul>
<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>
</ul>
:ET

View File

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

View File

@ -1,34 +0,0 @@
I"C<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 LibreTimes 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>.</p>
:ET

View File

@ -1,145 +0,0 @@
I"%<h1 id="setting-up-ssl">Setting up SSL</h1>
<p>To increase the security of your server, you can enable encrypted access to the LibreTime administration interface, and direct your users towards this more secure login page. The main advantage of using this encryption is that your remote users login names and passwords are not sent in plain text across the public Internet or untrusted local networks, such as shared Wi-Fi access points.</p>
<h2 id="deploying-a-certificate-with-certbot">Deploying a certificate with Certbot</h2>
<p>One of the fastest, easiest, and cheapest ways to get an SSL certificate is through <a href="https://certbot.eff.org/">Certbot</a>, as created by the
<a href="https://www.eff.org/">Electronic Frontier Foundation</a>. There are some requirements for this process:</p>
<ul>
<li>you have an HTTP website (already installed and configured by default by the LibreTime installer) and</li>
<li>this website is open to the public internet (likely via. port forwarding if your computer is behind a firewall) and</li>
<li>the server is accessible to the public via. port 80</li>
</ul>
<p>If you arent able to verify all three requirements, you may want to try a self-signed certificate (see next section).</p>
<p>These instructions come from Certbots website and assume that you are using an Apache web server
running on Ubuntu 18.04 LTS (the Apache web server is installed with LibreTime by default).
Instructions for other Debian-based OSes are similar, but check with Certbot for clarification.</p>
<p>Note: all instructions require you to have sudo priveledges</p>
<p>First, add Certbots PPA using:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code> sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
</code></pre></div></div>
<p>Next, install Certbot and install the SSL certificate using the below commands:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install certbot python3-certbot-apache
sudo certbot --apache # get and install the certificate
sudo certbot certonly --apache # to only get the certificate, not install it using Certbot
</code></pre></div></div>
<p>You can test certificate renewal by running <code class="highlighter-rouge">sudo certbot renew --dry-run</code>.
Head to your servers IP address to check to see that the installation worked.</p>
<h2 id="deploying-a-self-signed-certificate">Deploying a self-signed certificate</h2>
<p>The Debian/Ubuntu package <em>ssl-cert</em> creates a <em>snakeoil</em> certificate and key based on your servers hostname. This gratis certificate and key pair created under the <em>/etc/ssl/certs</em>/ and <em>/etc/ssl/private/</em> directories will not be recognised by users browsers without manual intervention. You can install the <em>ssl-cert</em> package with the command:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install ssl-cert
</code></pre></div></div>
<p>If the hostname of your server does not match the domain name you intend to use with the LibreTime virtual host, the users browser will present an additional security warning. You can set the domain name of the certificate by editing the file <em>/usr/share/ssl-cert/ssleay.cnf</em> to replace the <em>@HostName@</em> variable:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>commonName = @HostName@
</code></pre></div></div>
<p>with the domain name used by LibreTime:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>commonName = airtime.example.com
</code></pre></div></div>
<p>Then save the file and regenerate the certificate with the command:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo make-ssl-cert generate-default-snakeoil --force-overwrite
</code></pre></div></div>
<p>You should enable additional Apache modules for page redirections, custom headers and secure access:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo a2enmod alias headers ssl
</code></pre></div></div>
<p>Next, edit the virtual host configuration for your LibreTime server to include a stanza for the https:// interface on port 443 and a redirect for logins from port 80:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo nano /etc/apache2/sites-available/airtime-vhost.conf
</code></pre></div></div>
<p>Using the following configuration for Apache 2.2 as a guide, replace <em>airtime.example.com</em> with the name of your server and <em>admin@example.com</em> with your email address. The older SSLv2 and SSLv3 protocols and SSL compression should be disabled, as they are generally believed to be insecure. You may wish to create a <em>ServerAlias</em> for users to access the administration interface over https:// if required.</p>
<p>On port 80, Apaches <em>alias</em> module is used to set a <em>Redirect permanent</em> for the login page. Optionally, access could be denied to all sites except <em>localhost</em> and any other LibreTime servers on your network, so that unencrypted communication between LibreTime components can continue.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;VirtualHost *:443&gt;
SSLEngine on
SSLProtocol All -SSLv2 -SSLv3
SSLCompression off
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
Header always set Strict-Transport-Security "max-age=31536000"
ServerName airtime.example.com
#ServerAlias www.example.com
ServerAdmin admin@example.com
DocumentRoot /usr/share/airtime/php/airtime_mvc/public
DirectoryIndex index.php
&lt;Directory /usr/share/airtime/php/airtime_mvc/public&gt;
Options -Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
Allow from all
&lt;/Directory&gt;
&lt;/VirtualHost&gt;
&lt;VirtualHost *:80&gt;
ServerName airtime.example.com
ServerAdmin admin@example.com
DocumentRoot /usr/share/airtime/php/airtime_mvc/public
Redirect permanent /login https://airtime.example.com/login
SetEnv APPLICATION_ENV "production"
&lt;Directory /usr/share/airtime/php/airtime_mvc/public&gt;
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
&lt;/Directory&gt;
&lt;/VirtualHost&gt;
</code></pre></div></div>
<p>Save the file with <strong>Ctrl+O</strong> and exit the <strong>nano</strong> editor with <strong>Ctrl+X</strong>. Then restart Apache with the command:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo service apache restart
</code></pre></div></div>
<p>When attempting to log into your server via http:// in future, you should be redirected to https:// automatically.</p>
<h3 id="importing-a-self-signed-certificate-into-the-browser">Importing a self-signed certificate into the browser</h3>
<p>The first time you access an LibreTime server with a self-signed certificate over https:// your browser will block the login page and display a security warning. In <strong>Mozilla Firefox</strong>, you can click <strong>Technical Details</strong> to confirm that the warning is due to the certificate being self-signed before clicking the <strong>Add Exception</strong> button. In <strong>Google Chrome</strong>, the button to click on the security warning page is <strong>Proceed Anyway</strong>.</p>
<p><img src="img/Screenshot547-connection_untrusted.png" alt="" /></p>
<p>On the next page in Firefox, click the <strong>Get Certificate</strong> button to inspect the details of the self-signed certificate. If all is well, click the <strong>Confirm Security Exception</strong> button. You should now be able to proceed to the https:// login page.  </p>
<p><img src="img/Screenshot548-confirm_exception.png" alt="" /></p>
<p>If the users of your LibreTime server wish to avoid going through these steps, or they do not trust the remote LibreTime server to be what it claims to be, it is also possible to import a trusted local copy of a certificate file into the browser. For example, in Firefox version 30 preferences, you can go into the <strong>Advanced</strong> section, click the <strong>Certificates</strong> tab, then click the <strong>View Certificates</strong> button. On the <strong>Servers</strong> tab of the <strong>Certificate Manager</strong>, there is an <strong>Import</strong> button which enables you to load a certificate file from the local computer.</p>
<h2 id="mixed-encrypted-and-unencrypted-content">Mixed encrypted and unencrypted content</h2>
<p>Whether your certificate is self-signed or not, you will see browser security warnings whenever a https:// page is delivering unencrypted content, such as the stream from an Icecast server. In Firefox, an exclamation mark icon is displayed in the address bar of the <strong>Listen</strong> pop-up.</p>
<p><img src="img/Screenshot549-unencrypted_warning.png" alt="" /></p>
:ET

View File

@ -1,91 +0,0 @@
I"Ž<h1 id="troubleshooting">Troubleshooting</h1>
<p>Having trouble with your LibreTime installation? We’ve got you covered!</p>
<p>Since LibreTime is effectively a web site running on a LAPP stack, individual components of the system can be started, stopped, restarted or checked in the server console using the <strong>systemctl</strong> command:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo systemctl start|stop|restart|status libretime-liquidsoap
sudo systemctl start|stop|restart|status libretime-playout
sudo systemctl start|stop|restart|status libretime-celery
sudo systemctl start|stop|restart|status libretime-analyzer
sudo systemctl start|stop|restart|status apache2
sudo systemctl start|stop|restart|status rabbitmq-server
</code></pre></div></div>
<p>For example, to restart the Airtime playout engine, you could enter the command:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo systemctl restart libretime-playout
</code></pre></div></div>
<h2 id="log-files">Log files</h2>
<p>Airtime stores log files under the directory path <em>/var/log/airtime/</em> which can be useful for diagnosing the cause of any problems. Copies of these log files may be requested by LibreTime developers while they are providing technical support for your Airtime deployment.</p>
<h2 id="test-tones">Test tones</h2>
<p>If you need to test your computer’s soundcard, you can use <code class="highlighter-rouge">speaker-test</code>, a tone generator for ALSA.
This does not come installed with LibreTime but can be installed with <code class="highlighter-rouge">sudo apt install speaker-test</code>.</p>
<p>speaker-test [-D] [-f]</p>
<p>Where:
-D device name
-f frequency of test tone</p>
<p>The <strong>airtime-test-stream</strong> command enables you to send a test tone to a local or remote streaming media server. Press <strong>Ctrl+C</strong> on your keyboard to stop the tone being streamed.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>airtime-test-stream [-v]
[-o icecast | shoutcast ] [-H hostname] [-P port]
[-u username] [-p password] [-m mount]
[-h]
Where:
     -v verbose mode
     -o stream server type (default: icecast)
     -H hostname (default: localhost)
     -P port (default: 8000)
     -u user (default: source)
     -p password (default: hackme)
     -m mount (default: test)
-h show help menu
</code></pre></div></div>
<h2 id="rabbitmq-hostname-changes">RabbitMQ hostname changes</h2>
<p>If the Airtime logs indicate failures to connect to the RabbitMQ server, such as:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>2013-10-31 08:21:11,255 ERROR - [pypomessagehandler.py : main() : line
99] - Error connecting to RabbitMQ Server. Trying again in few seconds
2013-10-31 08:21:11,255 ERROR - \[pypomessagehandler.py : main() : line 99\] - Error connecting to RabbitMQ Server. Trying again in few seconds - See more at: http://forum.sourcefabric.org/discussion/16050/\#sthash.W8OJrNFm.dpuf
</code></pre></div></div>
<p>but the RabbitMQ server is running normally, this error might be due to a change in the server’s hostname since Airtime installation. Directory names under <em>/var/lib/rabbitmq/mnesia/</em> indicate that RabbitMQ’s database files are organised according to the hostname of the server, for example:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>rabbit@airtime
</code></pre></div></div>
<p>where the hostname is <em>airtime.example.com</em>. If the hostname has changed, it may be necessary to reconfigure RabbitMQ manually, as follows:</p>
<ol>
<li>
<p>Delete the files in <em>/var/lib/rabbitmq/mnesia/</em></p>
<p>sudo rm -r /var/lib/rabbitmq/mnesia/*</p>
</li>
<li>
<p>Restart RabbitMQ:</p>
<p>sudo systemctl restart rabbitmq-server</p>
</li>
<li>
<p>Enter the following commands to set up authentication and grant permissions. The <em>rabbitmqctl add_user</em> command requires the RabbitMQ password from the /etc/airtime/airtime.conf file as an argument. The <em>rabbitmqctl set_permissions</em> command should be entered on one line, with the list of Airtime services repeated three times:</p>
<p>rabbitmqctl add_vhost /airtime
rabbitmqctl add_user airtime XXXXXXXXXXXXXXXXXXXX
rabbitmqctl set_permissions -p /airtime airtime
“airtime-pypo|pypo-fetch|airtime-analyzer|media-monitorâ€<C3A2>
  “airtime-pypo|pypo-fetch|airtime-analyzer|media-monitorâ€<C3A2>
 â€<C3A2>airtime-pypo|pypo-fetch|airtime-analyzer|media-monitorâ€<C3A2></p>
</li>
</ol>
:ET

View File

@ -1,13 +0,0 @@
I"<h2 id="the-webstreams-page">The Webstreams page</h2>
<h2 id="adding-a-webstream">Adding a webstream</h2>
<p>A web stream URL and metadata can be added to the LibreTime library, so that a remote stream can be searched for and scheduled to be <em>pulled</em> into a show. For example, at the top of the hour your station may pull a news report from journalists working in another studio. This is a different concept from <strong>Master Source</strong> and <strong>Show Source</strong> remote streams which are <em>pushed</em> into the LibreTime playout schedule.</p>
<p>To add a web stream, click the <strong>+ New</strong> button on the left side of the Webstreams page. Like a playlist, web streams in the Library can have a title and <strong>Description</strong>, which may help you find them in searches later.</p>
<p><img src="webstream.jpg" alt="" /></p>
<p>The <strong>Stream URL</strong> setting must include the <em>port number</em> (such as 8000) and <em>mount point</em> (such as remote_stream) of the remote stream, in addition to the streaming server name. A <strong>Default Length</strong> for the remote stream can also be set. If the stream is added at the end of a show which becomes overbooked as a result, it will be faded out when the show ends.</p>
<p>Note: LibreTime checks the remote webstream’s status upon editing stream settings, so an offline stream will result in an error. There are many tools such as <a href="https://danielnoethen.de/butt/">BUTT</a> and <a href="https://www.mixxx.org">MIXXX</a> that can be used to send a test stream to LibreTime can save it; read more <a href="../live-shows-with-mixxx/index.md">here</a>.</p>
:ET

View File

@ -1,38 +0,0 @@
I".
<h1 id="welcome-to-libretime">Welcome to LibreTime</h1>
<p>LibreTime makes it easy to run your own online or terrestrial radio station.
Dont believe us? Check out our <a href="quickstart">Quick Install</a> page to see just how easy it is to install and use LibreTime!</p>
<p>Some of LibreTimes main features include:</p>
<ul>
<li><em>Web-based remote station management</em> - authorized personnel can add
programme material, create playlists or smart blocks, and stream in live,
all via a web interface.</li>
<li><em>Automation</em> - LibreTime has a scheduler function that enables users to
create shows with content for playback at the exact date and time specified.
Playlists, smart blocks and remote stream URLs can be used multiple times.</li>
<li><em>Solid playout</em> - LibreTime uses the open source Liquidsoap streaming language
for reliable and precise playback to multiple outputs.</li>
<li><em>Open source</em> - run LibreTime royalty-free, make changes to the code, and contribute to the project as you see fit, under the GNU AGPLv3 license.</li>
<li><em>Multilingual</em> - supports over 15 languages both in the interface and inside file metadata</li>
<li><em>Low system requirements</em>
<ul>
<li>For servers: 1Ghz processor, 2 GB RAM, and a wired ethernet connection with a static IP address</li>
<li>For end-users: a modern version of Firefox, Chrome, or Safari, and a screen resolution of at least 1280x768</li>
</ul>
</li>
</ul>
<p>LibreTime is a fork of AirTime due to stalled development of the FLOSS version. For background on this, see this <a href="https://gist.github.com/hairmare/8c03b69c9accc90cfe31fd7e77c3b07d">open letter to the Airtime community</a>.</p>
<p>We have a number of <a href="tutorials">how-to guides</a> that contain step-by-step instructions for various common tasks for both end users and administrators.</p>
<p>There are currently no companies offering turn-key LibreTime hosting so if you are interested in running it you will need to have some familiarity with running a Linux server.
You can always reach out to help from the community at our <a href="http://discourse.libretime.org">forum</a>. You can also join our <a href="https://chat.libretime.org/">Mattermost instance</a> and talk with other developers and users.</p>
<h3 id="proud-users">Proud Users</h3>
<p><img src="img/stations/rabe956.svg" alt="Rabe95.6" /> <img src="img/stations/radiocampus933.png" alt="RadioCampus93.3" /> <img src="img/stations/wrcs927.png" alt="WRCS92.7" /> <img src="img/stations/wrir973.png" alt="WRIR 97.3" /></p>
:ET

View File

@ -1,13 +0,0 @@
I"Ù<h1 id="media-library-folders">Media Library Folders</h1>
<p>LibreTime’s 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
ID # of the user who uploaded it and then into a folder based upon the artist.</p>
<p>LibreTime unlike Airtime does not currently monitor the files for changes after they are uploaded.
The media library is not designed to be edited directly after files are uploaded. This was done as part of a
move towards enabling cloud-based file hosting. There are currently two works in progress to support filesystem
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>
:ET

View File

@ -1,49 +0,0 @@
I"Ï <h2 id="bug-reporting">Bug reporting</h2>
<p>If you think you’ve 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, it’s a good idea to test it first. To do this, it’s 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,176 +0,0 @@
I" <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>
<h2 id="database-and-rabbitmq-hosts">Database and RabbitMQ hosts</h2>
<p>Optionally, you may wish to edit the file <em>/etc/airtime/airtime.conf</em> to set the PostgreSQL database host, and the username and password to connect to the database with:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo nano /etc/airtime/airtime.conf
</code></pre></div></div>
<p>You can also set options for RabbitMQ messaging, the LibreTime server and SoundCloud uploads in this file, although you should not normally need to adjust the defaults unless you are running a large LibreTime system distributed across multiple servers. To run the LibreTime server in demo mode, which changes the greeting on the login page and prevents user accounts from being created or modified, set the value of <em>demo</em> to 1.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[database]
host = localhost
dbname = airtime
dbuser = airtime
dbpass = airtime
[rabbitmq]
host = 127.0.0.1
port = 5672
user = airtime
password = XXXXXXXXXXXXXXXXXXXX
vhost = /airtime
[general]
api_key = XXXXXXXXXXXXXXXXXXXXX
web_server_user = www-data
airtime_dir = /usr/share/airtime
base_url = libretime.example.com
base_port = 80
base_dir = /
cache_ahead_hours = 1
[monit]
monit_user = guest
monit_password = airtime
[soundcloud]
connection_retries = 3
time_between_retries = 60
[demo]
demo = 0
</code></pre></div></div>
<p>Save and close the file with <strong>Ctrl+O</strong> and <strong>Ctrl+X</strong>. In order to update the configuration
used by the various components of LibreTime, run the following commands</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo systemctl restart libretime-liquidsoap
sudo systemctl restart libretime-playout
sudo systemctl restart libretime-celery
sudo systemctl restart libretime-analyzer
</code></pre></div></div>
<h2 id="changing-the-default-postgresql-passwords">Changing the default PostgreSQL passwords</h2>
<p>Two of the most important passwords that should be changed <em>immediately</em> after installation
are the passwords used by the PostgreSQL database.
It is strongly recommended that you do this before exposing your server to the internet beyond your internal network.</p>
<ol>
<li>Login to PostgreSQL with <code class="highlighter-rouge">sudo -u postgres psql</code>. The PostgreSQL shell - <code class="highlighter-rouge">postgres=#</code> - means that you have logged in successfully.</li>
<li>Change the admin password with <code class="highlighter-rouge">ALTER USER postgres PASSWORD 'myPassword';</code>, where <code class="highlighter-rouge">myPassword</code> is the new password.
Make sure to include the semicolon at the end! A response of <code class="highlighter-rouge">ALTER ROLE</code> means that the command ran successfully.</li>
<li>Change the password for the <em>airtime</em> user with <code class="highlighter-rouge">ALTER USER airtime WITH PASSWORD 'new_password';</code>
A response of <code class="highlighter-rouge">ALTER ROLE</code> means that the command ran successfully.</li>
<li>If all is successful, logout of PostgreSQL with <code class="highlighter-rouge">\q</code>, go back to <em>/etc/airtime/airtime.conf</em> to edit the password
in the config file, and restart all services mentioned in the previous section.</li>
</ol>
<h2 id="api-client-configuration">API client configuration</h2>
<p>If you have changed the <em>base_url</em>, <em>base_port</em> or <em>base_dir</em> setting in <em>/etc/airtime/airtime.conf</em> from the defaults, you will probably also have to update the <em>Hostname</em> settings in the file <em>/etc/airtime/api_client.cfg</em> accordingly.**</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>bin_dir = /usr/lib/airtime/api_clients
api_key = 'XXXXXXXXXXXXXXXXXXXX'
api_base = api
host = libretime.example.com
base_port = 80
base_dir = /
</code></pre></div></div>
<h2 id="apache-max-file-size-configuration">Apache max file size configuration</h2>
<p>By default, the maximum upload file size is 500 MB, which may not be large enough for some stations, especially if they are uploading prerecorded shows. The setting for this is located in <em>/etc/apache2/sites-available/airtime.config</em>. Search for and update the following in megabytes:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>; Maximum allowed size for uploaded files.
upload_max_filesize = 40M
; Must be greater than or equal to upload_max_filesize
post_max_size = 40M
</code></pre></div></div>
<p>For quick reference, 1024 MB = 1 GB and 2048 MB = 2 GB, but most will be okay with rounding to the nearest thousand. After updating the config file, restart Apache by <code class="highlighter-rouge">sudo systemctl apache restart</code>.</p>
<h2 id="playout-and-recorder-settings">Playout and recorder settings</h2>
<p>Settings for pypo, the playout and recording engine used by LibreTime, are found in the file <em>/etc/airtime/airtime.conf</em>. After making changes to this file, you will have to issue the command:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo systemctl restart libretime-playout
</code></pre></div></div>
<p>for the changes to take effect.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>############################################
# pypo - configuration #
############################################
# Set the type of client you are using.
# Currently supported types:
# 1) "obp" = Open Broadcast Platform
# 2) "airtime"
#
api_client = airtime
############################################
# Cache Directories #
# *include* trailing slash !! #
############################################
cache_dir = /var/tmp/airtime/pypo/cache/
file_dir = /var/tmp/airtime/pypo/files/
tmp_dir = /var/tmp/airtime/pypo/tmp/
############################################
# Setup Directories #
# Do *not* include trailing slash !! #
############################################
cache_base_dir = /var/tmp/airtime/pypo
bin_dir = /usr/lib/airtime/pypo
log_base_dir = /var/log/airtime
pypo_log_dir = /var/log/airtime/pypo
liquidsoap_log_dir = /var/log/airtime/pypo-liquidsoap
############################################
# Liquidsoap settings #
############################################
ls_host = 127.0.0.1
ls_port = 1234
############################################
# RabbitMQ settings #
############################################
rabbitmq_host = localhost
rabbitmq_user = airtime
rabbitmq_password = XXXXXXXXXXXXXXXXXXXX
rabbitmq_vhost = /airtime
############################################
# pypo preferences #
############################################
# Poll interval in seconds.
#
# This will rarely need to be changed because any schedule changes are
# automatically sent to pypo immediately.
#
# This is how often the poll script downloads new schedules and files from the
# server in the event that no changes are made to the schedule.
#
poll_interval = 3600# in seconds.
# Push interval in seconds.
#
# This is how often the push script checks whether it has something new to
# push to liquidsoap.
#
# It's hard to imagine a situation where this should be more than 1 second.
#
push_interval = 1# in seconds
# 'pre' or 'otf'. 'pre' cues while playlist preparation
# while 'otf' (on the fly) cues while loading into ls
# (needs the post_processor patch)
cue_style = pre
</code></pre></div></div>
:ET

View File

@ -1,129 +0,0 @@
I"z5<h1 id="calendar">Calendar</h1>
<p>The Calendar page of the LibreTime administration interface has three views: <strong>day</strong>, <strong>week</strong> and <strong>month</strong>, which can be switched using the grey buttons in the top right corner. By default, the <strong>month</strong> view is shown, with todays date highlighted by a pale grey background.</p>
<p><img src="img/Screenshot451-Calendar.png" alt="" /></p>
<p>In the top left corner of the page, you can go back or forward through the <strong>Calendar</strong> by clicking on the buttons which have a small grey triangle in a white circle. Click the <strong>today</strong> button to jump to todays date in the current view. (The <strong>today</strong> button will be greyed out if you are already viewing that date). In the <strong>day</strong> or <strong>week</strong> views, there is also a drop-down menu which allows you to set the resolution displayed for the calendar, ranging from one minute per row to sixty minutes per row.</p>
<p><img src="img/Screenshot452-Calendar_resolution.png" alt="" /></p>
<h2 id="adding-a-show">Adding a show</h2>
<p>Only <em>Admins</em> and <em>Program Managers</em> can use this feature. To add a new show to the Calendar, click the <strong>+ New Show</strong> button in the top left corner of the page, or click on any future row or box in the Calendar which is empty. Either of these actions opens the <strong>Add this show</strong> box, which has seven sections, arranged vertically: <strong>What</strong>, <strong>Autoloading Playlist</strong>, <strong>When</strong>, <strong>Live Stream Input</strong>, <strong>Record &amp; Rebroadcast</strong>, <strong>Who</strong>, and <strong>Style</strong>. Click the small orange triangle to the left of the section name if you wish to minimize or maximize it.</p>
<h2 id="what">What</h2>
<p>In the <strong>What</strong> box, enter the <strong>Name</strong>, public website <strong>URL</strong>, <strong>Genre</strong> and <strong>Description</strong> for the show that you are creating.</p>
<p><img src="img/Screenshot453-Show_what.png" alt="" /></p>
<h2 id="autoloading-playlist">Autoloading Playlist</h2>
<p>In this section, you can select a playlist that will be used for this show. The playlist must already be defined in your library. <strong>Auto Schedule Playlist</strong> needs to be checked for <strong>Select Playlist</strong> and <strong>Repeat AutoPlaylist Until Show is Full</strong> to be visible.</p>
<p><img src="img/Screenshot454-Show_playlist.png" alt="" /></p>
<h2 id="when">When</h2>
<p>Next, in the <strong>When</strong> section, if you clicked on a date in the <strong>Calendar</strong> this should already be entered in the <strong>Date/Time Start</strong> field. To set another date for the show, click on the date in the <strong>Date/Time Start</strong> field and select the date that you require from the small pop-up calendar which will appear. Click on the adjacent time field to set the start time for the show, with the pop-up <strong>Hour</strong> and <strong>Minute</strong> box. The Minute values in the pop-up time boxes are rounded to the nearest five minutes. You can also adjust the times manually by clicking into the fields and typing. Repeat the process to set the <strong>Date/Time End</strong> fields. The <strong>Start Time</strong> can be <strong>Now</strong> or <strong>In the Future</strong>. A show that starts now, will start at the time save is pressed, while a future show will start at the time set. The <strong>Duration</strong> of the show will be displayed automatically, based on the start and end times you have set.</p>
<p>By default, the <strong>Timezone</strong> of the show start and end times will be the timezone of the station, as set on the Preferences page on the System menu. You can specify an alternative time zone using the drop-down menu, if you wish. The time zone displayed in the Calendar when you log in depends on your personal settings. See Updating your own account in the chapter <em>Users</em> for more details.</p>
<p><img src="img/Screenshot526-Add_show_when_250.png" alt="" /></p>
<p>LibreTime will only allow you to enter valid times for shows. If you attempt to schedule show times which would be impossible, by ending the show before it begins, LibreTime will highlight the error with a pink background.</p>
<p><img src="img/Screenshot527-negative_time250.png" alt="" /></p>
<p>To schedule a regular show, check the <strong>Repeats?</strong> box, which will make a new section of the dialog appear. Optionally, click the <strong>Link:</strong> box to automatically schedule the same content in the repeated shows as in the original show.</p>
<p><img src="img/Screenshot528-Link_shows_250.png" alt="" /></p>
<p>Then select either <strong>weekly</strong>, <strong>every 2 weeks</strong>, <strong>every 3 weeks</strong>, <strong>every 4 weeks</strong> or <strong>monthly</strong> from the <strong>Repeat Type</strong> drop-down menu. If you have selected a weekly option, check the boxes for the days of the week that you want to schedule the regular show on. If you have selected <strong>monthly</strong>, you have the option to <strong>Repeat By: day of the month</strong> (for example the 9th of each month) or <strong>day of the week</strong> (for example the second Wednesday of each month).</p>
<p><img src="img/Screenshot529-repeat_type_monthly_250.png" alt="" /></p>
<p>Uncheck the <strong>No End?</strong> box and set the <strong>Date End</strong> for the regular show to finish, or leave the <strong>No End?</strong> box checked to schedule the show indefinitely.</p>
<p><img src="img/Screenshot530-show_end_date_250.png" alt="" /></p>
<h2 id="live-stream-input">Live Stream Input</h2>
<p>The <strong>Live Stream Input</strong> section can be used to enable live input streams during the show, and also to configure authentication for them. If you check the <strong>Use LibreTime Authentication</strong> box, the DJs (presenters) of the show will be able to connect a live stream to LibreTimes <strong>Show Source Mount Point</strong> using their login name and password. See the chapter <em>Stream Settings</em> for details.</p>
<p>If you check the <strong>Use Custom Authentication</strong> box instead, you can set a one-time username and password pair for live stream input to the show. For example, you may wish to create an authenticated live stream input for a particular remote news reporter, without providing any further access to your LibreTime server for that person.</p>
<p><img src="img/Screenshot457-Live_stream_input.png" alt="" /></p>
<p>A reminder of the connection <strong>Host</strong>, <strong>Port</strong> and <strong>Mount</strong> for the live input stream to use is shown at the end of the <strong>Live Stream Input</strong> section.</p>
<h2 id="record--rebroadcast">Record &amp; Rebroadcast</h2>
<p>The <strong>Record &amp; Rebroadcast</strong> section is currently not working, and so has been removed from the web interface. If this feature is important to you, please search for relevant issues in the <a href="https://github.com/LibreTime/libretime/search?q=record&amp;type=Issues">LibreTime github repository</a> and help us make it happen!</p>
<h2 id="who">Who</h2>
<p>In the <strong>Who</strong> section, type the first few letters of the name of the shows DJ (presenter) in the <strong>Search Users</strong> field to select a name from the LibreTime database, or check one of the <strong>DJs</strong> boxes in the vertical list below. This association of a DJ name with a particular show enables that presenter to add playout media to the show, and also to connect a live Show Source input stream (if that has been enabled), so it is important to get the DJs name right.</p>
<p><img src="img/Screenshot161-Show_users.png" alt="" /></p>
<h2 id="style">Style</h2>
<p>Show colours in the Calendar are set automatically, based on the <strong>Name</strong> of the show, so that individual shows can be easily identified in the <strong>Calendar</strong>. If you wish, you can select a <strong>Background Colour</strong> and <strong>Text Colour</strong> manually by clicking the boxes in the <strong>Style</strong> section. Click the coloured circle icon in the lower right corner to close this pop-up window.</p>
<p><img src="img/Screenshot162-Show_colours.png" alt="" /> </p>
<p>Optionally, you can upload a Show Logo by clicking the <strong>Browse</strong> button.</p>
<p><img src="img/Screenshot584-Show_logo.png" alt="" /></p>
<p>Finally, click the <strong>Add this show</strong> button at the top or bottom of the box. The new show will now be displayed in the <strong>Calendar</strong>, with a regular slot if you have chosen to schedule one. </p>
<h2 id="editing-a-show">Editing a show</h2>
<p>Show configuration and metadata can be changed at any time, except for <strong>Date/Time Start</strong> and <strong>Record from Line In?</strong> options, which are fixed after broadcast of that show commences. Click the show in the Calendar, and select <strong>Edit Show</strong> from the pop-up context menu. This opens the <strong>Update Show</strong> box, which is almost exactly the same as the <strong>Add this Show</strong> box. Click the <strong>+ Update show</strong> button at the top or bottom of the box when you are done.</p>
<p><img src="img/Screenshot459-Update_show.png" alt="" /></p>
<p>Episodes of repeating shows also have an <strong>Instance Description</strong> field in which you can add details for that particular episode. Click the episode in the Calendar, click <strong>Edit</strong> on the pop-up menu, then click <strong>Edit this instance</strong>. After entering an Instance Description, click the <strong>+ Update show</strong> button.</p>
<p><img src="img/Screenshot583-Show_instance_description_vC9ooiT.png" alt="" /></p>
<p>Alternatively, individual shows can be clicked on and dragged to new days and times in the calendar. However, LibreTime will not allow you to drag a future show into the past, or drag and drop instances of a repeated show. In the <strong>Day</strong> and <strong>Week</strong> views, show length can be adjusted by clicking on the lower edge of the show box, and dragging the edge of the box upwards or downwards. The new show length is calculated automatically.</p>
<h2 id="adding-content-to-a-show">Adding content to a show</h2>
<p>To add content to a show, click the show in any view on the Calendar, and select <strong>Schedule Tracks</strong> from the pop-up menu. Shows that do not yet contain any scheduled content are marked with a red exclamation mark icon, to the right of the show start and end times in the top bar. Shows partially filled with content have a yellow exclamation mark icon. During playout of the show, a green play icon will also be shown in the top bar.</p>
<p><img src="img/Screenshot488-Add_remove_content.png" alt="" /></p>
<p>The <strong>Schedule Tracks</strong> action opens a window with the name of the show. Like when using the <strong>Now Playing</strong> page, you can search for content items and add them to the show schedule on the right side of the page. Refer to the <em>Now Playing</em> chapter for details.</p>
<p>When your show has all the required content, click the <strong>OK</strong> button in the bottom right corner to close the window. Back in the <strong>Calendar</strong>, click the show and select <strong>View</strong> from the pop-up menu to view a list of content now included in the show.</p>
<p><img src="img/Screenshot489-Show_Content.png" alt="" /></p>
<p>The <strong>Contents of Show</strong> window is a read-only interface featuring an orange bar which indicates how much media has been added to the show. Click the <strong>OK</strong> button in the bottom right corner, or the white <strong>x</strong> icon in the top right corner, to close the window.</p>
<p><img src="img/Screenshot353-Contents_of_show.png" alt="" /></p>
<h2 id="removing-content-from-a-show">Removing content from a show</h2>
<p>To remove an individual item from a show, click on the show in the <strong>Calendar</strong>, and select <strong>Schedule Tracks</strong> from the pop-up menu. In the window which opens, click any item you wish to remove from the show, then click <strong>Delete</strong> on the pop-up menu, or check the box in the items row then click the <strong>Remove</strong> icon at the top of the table. To remove all files and playlists from a show, click on the show in the <strong>Calendar</strong>, and select <strong>Clear Show</strong> from the pop-up menu. </p>
<h2 id="deleting-an-upcoming-show">Deleting an upcoming show</h2>
<p>To delete an upcoming instance of a repeating show, click on the show in the <strong>Calendar</strong>, and select <strong>Delete</strong>, then <strong>Delete Instance</strong> from the pop-up menu. If you wish to delete all future instances of a repeating show, select <strong>Delete Instance and All Following</strong> from the pop-up menu.</p>
<p><img src="img/Screenshot490-Delete_this_instance.png" alt="" /></p>
<p>You cannot delete or remove content from shows that have already played out. These shows have only one option on the pop-up menu, which is <strong>View</strong>.</p>
<h2 id="cancelling-playout">Cancelling playout</h2>
<p>If you wish to cancel playout of a show while it is running, click on the show in the <strong>Calendar</strong> and select <strong>Cancel Show</strong> from the pop-up menu. LibreTime will ask you if you are sure about this action, as it cannot be undone.</p>
<p><img src="img/Screenshot357-Cancel_current_show.png" alt="" /></p>
:ET

View File

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

View File

@ -1,42 +0,0 @@
I"t<h1 id="the-playlists-page">The Playlists page</h1>
<h2 id="creating-a-new-playlist">Creating a new playlist</h2>
<p>You can create a new playlist on the toolbar of the <strong>Playlists</strong> page.</p>
<p>At first, the new playlist will be shown as <em>Untitled Playlist</em>. Click the pencil icon on the right to give the playlist a name.</p>
<p><img src="img/Screenshot502-Untitled_playlist_240.png" alt="" /></p>
<p>Type the name you have chosen, then press the <strong>Enter</strong> key on your keyboard to save the new name. You can edit the name of the playlist later, by clicking on the pencil icon again.</p>
<p><img src="img/Screenshot503-My_playlist_240.png" alt="" /></p>
<p>Click the link <strong>View / edit description</strong> to expand a box where you can enter a <strong>Description</strong> for the playlist, then click the <strong>Save</strong> button. Setting good quality metadata here will help you find the playlist using the search box later, so you should be as descriptive as possible.</p>
<p><img src="img/Screenshot504-Example_playlist_240.png" alt="" /></p>
<h2 id="adding-content-to-a-playlist">Adding content to a playlist</h2>
<p>With a playlist open, drag and drop items from the search results on the left into the playlist on the right. Jingles and voice tracks can be added before, after or between music items.</p>
<p><img src="img/Screenshot505-Add_item_to_playlist_240.png" alt="" /></p>
<p>After adding files to the playlist, the total playlist time is displayed in the top right corner. The duration of an individual file is shown in each row of the playlist in a white font, and beneath this figure the time since the beginning of the playlist is displayed in a smaller light grey font. This elapsed time figure can be used as a time check for voice tracks, although this option may limit the re-usability of the voice track.</p>
<p>To audition a playlist file in your web browser, click the white triangle button on the left side of its row. (If the format of the file is not supported by your browser, the triangle in this button will be greyed out). If audition of the file format is supported, a pop-up window will open, with the playlist starting at the file you clicked.</p>
<p>Click the small white <strong>x</strong> icon on the right hand side of each row to remove a file from the playlist. You can also drag and drop files to re-order them, or click the <strong>Shuffle</strong> button to re-order files automatically.</p>
<p><img src="img/Screenshot506-Drag_drop_playlist_240.png" alt="" /></p>
<p>To adjust start and end fades, click the playlist <strong>Fade</strong> button (two horizontal white arrows crossing in a grey rectangle), to the left of the <strong>Delete</strong> and <strong>Save</strong> buttons. This action opens a beige bar in which you can set the <strong>Fade in</strong> duration for the first item in this playlist, and the <strong>Fade out</strong> duration for the last item. This duration figure represents the length of the fade, in seconds and tenths of a second, not the time at which the fade takes place. The default fade duration is set in the <strong>Preferences</strong> page on the <strong>System</strong> menu.</p>
<p><img src="img/Screenshot507-Fade_in_out_240.png" alt="" /></p>
<p>When your playlist is complete, click the <strong>New</strong> button in the top left corner to create another playlist, click the close icon (a white cross in a black circle) in the top right corner, or browse to another page of the LibreTime interface.</p>
<p>If you want to edit the playlist content or metadata later, you can find it by <strong>Title</strong>, <strong>Creator</strong>, <strong>Last Modified</strong> date, <strong>Length</strong>, <strong>Owner</strong> or <strong>Year</strong> using one of the search tools on the Library page. Click the playlist in the search results list, and then click <strong>Edit</strong> from the pop-up menu. You can also <strong>Preview</strong> the entire playlist in a pop-up audition window, <strong>Duplicate</strong> or <strong>Delete</strong> one of your playlists from this menu.</p>
<p><img src="img/Screenshot501-Edit_playlist_240.png" alt="" /></p>
:ET

View File

@ -1,66 +0,0 @@
I"ž<h1 id="the-users-page">The Users page</h1>
<blockquote>
<p>Note: if your Airtime server is accessible from the public Internet (ex. being hosted in a cloud VM)
it is recommended that you create a second administrator account with a secure password and then
delete the <code class="highlighter-rouge">admin</code> account, for best security practice.</p>
</blockquote>
<h2 id="adding-user-accounts">Adding user accounts</h2>
<p>To add further user accounts to the system, one for each of your station staff that need access to Airtime, click the <strong>New User</strong> button with the plus icon. Enter a user name, password and contact details, and then select the <strong>User Type</strong> from the drop down menu, which can be <em>Admin</em>, <em>Program Manager</em>, <em>DJ</em>, or <em>Guest</em>. The difference between these user types is:</p>
<ul>
<li>Guests
<ul>
<li>Can view shows and the playout log on the Calendar and Dashboard, respectively</li>
<li>Listen to the output stream without leaving the interface</li>
</ul>
</li>
<li>DJs
<ul>
<li>Everything Guests can do, plus</li>
<li>Upload media (music, PSAs, underwriting, shows, etc.) to their own library (DJs cannot view other libraries)</li>
<li>Edit metadata, delete, and schedule media in their own library to shows they are assigned to</li>
<li>Preview uploaded media <em>without</em> affecting the live playout</li>
<li>Create Playlists, Smart Blocks, and connect Podcasts and Webstreams to LibreTime</li>
<li>Publish media items to LibreTime’s built-in My Podcast function or 3rd party sources such as Soundcloud</li>
</ul>
</li>
<li>Program Managers
<ul>
<li>Everything DJs can do, plus</li>
<li>Manage other users’ libraries in addition to their own</li>
<li>Create, edit, and delete color-coded shows on the Calender and assign them to DJs (if needed)</li>
<li>Shows can be scheduled to repeat, with the option of linking content between the shows (helpful if a DJ livestreams in each week)</li>
<li>View listener statistics</li>
<li>Export playout logs for analysis or reporting for music royalties</li>
</ul>
</li>
<li>Administrators
<ul>
<li>Everything Program Managers can do, plus</li>
<li>Manage all user accounts, including the ability to reset passwords</li>
<li>Configure Track Types for easy sorting of uploaded content</li>
<li>Change system settings</li>
</ul>
</li>
</ul>
<h2 id="editing-or-deleting-user-accounts">Editing or deleting user accounts</h2>
<p>New user accounts that you add will be shown in the table on the left side of the <strong>Users</strong> page. If you have a
large number of users on the system, you can use the search tool above the table (which has a magnifying glass icon)
to identify specific user accounts. Click the white chevrons in the table headings to sort the search results
by <strong>Username</strong>, <strong>First Name</strong>, <strong>Last Name</strong> or <strong>User Type</strong>.</p>
<p>To edit a user account, click on that user’s row in the table, change the user’s details in the box on the
right side, and then click the <strong>Save</strong> button. To remove a user account, click the small <strong>x</strong> icon to the right
side of its row in the table. You cannot delete your own user account, and usernames cannot be changed once created.</p>
<p><img src="img/Screenshot474-Save_user_details.png" alt="" /></p>
<p>Users can update their own password, and their contact, language and time zone details, by clicking their username on the
right side of the main menu bar, next to the <strong>Logout</strong> link.</p>
:ET

View File

@ -1,37 +0,0 @@
I"Ê
<h1 id="the-podcasts-page">The Podcasts page</h1>
<p>The Podcasts page allows you add subscriptions to podcasts which are often used to syndicated audio files using a URL called a RSS feed. This allows your LibreTime instance to automatically download new shows from the web.</p>
<p>In order to add a podcast you need to get the RSS feed. All podcasts available on iTunes have a RSS feed but it is sometimes hidden. See this issue on our github page <a href="https://github.com/LibreTime/libretime/issues/510">#510</a> for more information. RSS feeds that do not end in <em>.xml</em> may be accepted by LibreTime but might fail to download episodes; in that case, download the episode using a podcast client such as <a href="https://gpodder.github.io/">gpodder</a> and then manually upload and schedule the episode. Podcast feeds coming from Anchor.fm have been known to have this issue.</p>
<p>The podcast interfaces provides you with the ability to generate <a href="smartblocks">Smartblocks</a> that can be used in conjunction with <a href="../calendar/#autoloading-playlist">Autoloading Playlists</a> to schedule the newest episode of a podcast without human intervention.</p>
<h3 id="video-tutorials">Video Tutorials</h3>
<ul>
<li><a href="https://www.youtube.com/watch?v=g-4UcD8qvR8">How to schedule a podcast to play the latest episode automatically</a></li>
</ul>
<h2 id="dashboard">Dashboard</h2>
<p><img src="img/Podcasts_Dashboard.png" alt="" /></p>
<p>The podcasts dashboard is similar to the tracks view, allowing you to add, edit, and remove
podcasts by the toolbar, in addition to sorting by columns.</p>
<p>To add a podcast, click on the <strong>+ Add</strong> button on the toolbar and provide the podcast’s RSS feed, which usually ends in <em>.xml</em>.
Once the podcast’s feed is recognized, the editor pane opens for the podcast.</p>
<h2 id="editor">Editor</h2>
<p><img src="img/Podcasts_Editor.png" alt="" /></p>
<p>In the podcasts editor, you can rename the podcast, update settings for the podcast, and manage episodes.
A search box is available to search for episodes within the feed.</p>
<ul>
<li>To import an episode directly into LibreTime, double-click on an episode or select it and click <strong>+ Import</strong>. The podcast will appear under tracks with the Podcast Name as the Album.</li>
<li>To delete an episode from LibreTime, select the episode and click on the red trash can on the toolbar.</li>
<li>If you would like LibreTime to automatically download the latest episodes of a podcast, make sure <em>Download latest episodes</em> is checked. This can be used in conjunction with Smartblocks and Playlists to automate downloading and scheduling shows that are received via podcast feed.</li>
</ul>
:ET

View File

@ -1,66 +0,0 @@
I"<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 don’t have to tackle the whole of a localization yourself; just as much as you can manage.</p>
<p><img src="img/Screenshot464-Korean_stream_setting.png" alt="" /></p>
<p>First, you should check if a localization is already under way for your locale of choice. The best way to do this is to take a look at the ‘master’ branch in the GitHub repository for LibreTime at <a href="https://github.com/LibreTime/libretime">https://github.com/LibreTime/libretime</a>. You can also ask in the LibreTime development forum at <a href="https://discourse.libretime.org/">https://discourse.libretime.org/</a>, where you might find community members who can help you with the translation.</p>
<p>GNU <strong>gettext</strong> means using a .po file for each language or dialect, a specially formatted plain text file with groups of three or more lines, like this example from LibreTime’s Korean localization:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#: airtime_mvc/application/configs/navigation.php:57
msgid "Media Folders"
msgstr "미디어 í<>´ë<C2B4>”"
</code></pre></div></div>
<p>The first of these three lines starts with the hash symbol, and references where this string of text is found in the source code by its file name and line number. If this string is found more than once in the source code, you will see other reference lines here. The second line contains the <strong>msgid</strong>, which is the original version of the string. The third line contains the <strong>msgstr</strong>, which is the translation of that string for the localization that this particular .po file relates to.</p>
<p>If you use the cross-platform program <strong>Poedit</strong> (<a href="http://www.poedit.net/">http://www.poedit.net/</a>) to edit the .po file, this formatting of the text is hidden by an easy-to-use GUI. The <em>poedit</em> package can be installed on most GNU/Linux distributions using the standard software installer. Versions of Poedit for Mac and Windows are available for free download from the project’s homepage.</p>
<p>Before manually translating strings in Poedit from scratch, you should take a look at the online translation services available, such as Lingohub (<a href="https://lingohub.com">https://lingohub.com</a>) or Google’s Translator Toolkit (<a href="http://translate.google.com/toolkit/">http://translate.google.com/toolkit/</a>), which both support gettext .po files. If using automatic translation, you can then use Poedit to fine-tune the localization and fix any formatting errors.</p>
<p>If you don’t already have a GitHub account, you can sign up at <a href="https://github.com/signup/free">https://github.com/signup/free</a>. Once you have a GitHub account, you can fork a copy (<a href="https://help.github.com/articles/fork-a-repo">https://help.github.com/articles/fork-a-repo</a>) of the LibreTime project. Work for the next major version of the software is done in the <strong>master</strong> branch of each project, so that’s the branch to <strong>checkout</strong> after you have made the initial <strong>git clone</strong>.</p>
<p>In the locale code <em>de_CH</em>, for example, <em>de</em> represents the German language and the suffix <em>_CH</em> indicates the dialect spoken in Switzerland. Some languages have a wide variety of dialect localizations, which can be differentiated with a suffix in this way. You should update the header information in the .po file, which includes the language code and a country code, using one of the existing .po files as a guide.</p>
<p>After forking the LibreTime git repository, make sure you’re in the <strong>master</strong> branch:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git branch
devel
* master
</code></pre></div></div>
<p>Create a new locale directory (e.g. <em>airtime_mvc/locale/de_CH/LC_MESSAGES/</em> for German as spoken in Switzerland):</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mkdir -p airtime_mvc/locale/de_CH/LC_MESSAGES/
</code></pre></div></div>
<p>Copy the template <em>airtime.po</em> file into the directory you just created:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cp airtime_mvc_locale/template/airtime.po airtime_mvc/locale/de_CH/LC_MESSAGES
</code></pre></div></div>
<p>and update the header information in the new copy of the <em>airtime.po</em> file using the <strong>nano</strong> editor:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nano airtime_mvc/locale/de_CH/LC_MESSAGES/airtime.po
</code></pre></div></div>
<p>For the example of Swiss German, the header of the file should now look like this:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code># SWISS GERMAN (de_CH) translation for LibreTime.
# Copyright (C) 2013 Sourcefabric
# This file is distributed under the same license as the LibreTime package.
# Sourcefabric &lt;contact@sourcefabric.org&gt;, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: LibreTime 3.0-Alpha\n"
"Report-Msgid-Bugs-To: https://discourse.libretime.org/\n"
</code></pre></div></div>
<p>After using an online translation tool to begin a new localization, you can load the exported .po file into Poedit and complete your translation there. Enter the localization team’s contact information and language into Poedit’s <strong>Edit -&gt; Preferences</strong> and <strong>Catalog -&gt; Settings</strong> dialogs, which will be added to the .po file. When you save a .po file in Poedit, the corresponding binary .mo file will be compiled automatically.</p>
<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 don’t want to work with git, that’s no problem - download a copy of the .po template file, edit the header, run it through an automatic translator and check it with Poedit. Then email your contribution to the LibreTime team as an attachment - it will be very welcome! However, learning to use git is a good idea, because it means you can work directly on the current source code, share the localization work with the LibreTime community, and avoid duplicated effort.</p>
:ET

View File

@ -1,138 +0,0 @@
I"m<h1 id="using-vagrant-and-virturalbox-for-developing-libretime">Using Vagrant and Virturalbox for developing LibreTime</h1>
<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>
<h2 id="prerequisites">Prerequisites</h2>
<ul>
<li><a href="https://git-scm.com/">Git</a></li>
<li><a href="https://vagrantup.com">Vagrant</a></li>
</ul>
<h3 id="virtual-box">Virtual Box</h3>
<p>You will need to install <a href="https://www.virtualbox.org">VirtualBox</a> and may want to consider
installing <a href="https://github.com/dotless-de/vagrant-vbguest">vagrant-vbguest</a> to update the
guest extensions to match your host system on vagrant up.</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>vagrant plugin <span class="nb">install </span>vagrant-vbguest
</code></pre></div></div>
<h3 id="libvirt">Libvirt</h3>
<p>Setting the libvirt provider up on (Ubuntu and Debian)[#Ubuntu and Debian] is straight
forward, using the distribution provided packages. While on
(Other Distributions)[#Other Distributions] it can be built from within vagrant.</p>
<p>If you try run a libvirt provided box after using a VirtualBox one, you will receive an
error:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Error while activating network:
Call to virNetworkCreate failed: internal error: Network is already in use by interface vboxnet0.
</code></pre></div></div>
<p>This is fixed by stopping virtualbox and re-creating the vagrant box:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo systemctl stop virtualbox
vagrant destroy ubuntu-xenial
vagrant up ubuntu-xenial --provider=libvirt
</code></pre></div></div>
<h4 id="debian-and-ubuntu">Debian and Ubuntu</h4>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>apt <span class="nb">install </span>vagrant vagrant-libvirt libvirt-daemon-system vagrant-mutate libvirt-dev
<span class="nb">sudo </span>usermod <span class="nt">-a</span> <span class="nt">-G</span> libvirt <span class="nv">$USER</span>
<span class="c"># Reboot</span>
vagrant box add bento/ubuntu-16.04 <span class="nt">--provider</span><span class="o">=</span>virtualbox
vagrant mutate bento/ubuntu-16.04 libvirt
vagrant up ubuntu-xenial <span class="nt">--provider</span><span class="o">=</span>libvirt
</code></pre></div></div>
<h4 id="other-distributions">Other Distributions</h4>
<p>You will need to install <a href="https://libvirt.org/">libvirt</a> and <code class="highlighter-rouge">vagrant-mutate</code> and then run</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>vagrant plugin <span class="nb">install </span>vagrant-libvirt
<span class="nb">sudo </span>usermod <span class="nt">-a</span> <span class="nt">-G</span> libvirt <span class="nv">$USER</span>
<span class="c"># Reboot</span>
vagrant plugin <span class="nb">install </span>vagrant-mutate
vagrant box fetch bento/ubuntu-16.04
vagrant mutate bento/ubuntu-16.04 libvirt
vagrant up ubuntu-xenial <span class="nt">--provider</span><span class="o">=</span>libvirt
</code></pre></div></div>
<h2 id="starting-libretime-vagrant">Starting LibreTime Vagrant</h2>
<p>To get started you clone the repo and run <code class="highlighter-rouge">vagrant up</code>. The command accepts a parameter to
change the default provider if you have multiple installed. This can be done by appending
<code class="highlighter-rouge">--provider=virtualbox</code> or <code class="highlighter-rouge">--provider=libvirt</code> as applicable.</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git clone https://github.com/libretime/libretime.git
<span class="nb">cd </span>libretime
vagrant up ubuntu-xenial
</code></pre></div></div>
<p>If everything works out, you will find LibreTime on <a href="http://localhost:8080">port 8080</a>,
icecast on <a href="http://localhost:8000">port 8000</a> and the docs on
<a href="http://localhost:8888">port 8888</a>.</p>
<p>Once you reach the web setup GUI you can click through it using the default values. To
connect to the vagrant machine you can run <code class="highlighter-rouge">vagrant ssh ubuntu-xenial</code> in the libretime
directory.</p>
<h2 id="alternative-os-installations">Alternative OS installations</h2>
<p>With the above instructions LibreTime is installed on Ubuntu Xenial Xerus. The Vagrant setup
offers the option to choose a different operation system according to you needs.</p>
<table>
<thead>
<tr>
<th>OS</th>
<th>Command</th>
<th>Comment</th>
</tr>
</thead>
<tbody>
<tr>
<td>Debian 10</td>
<td><code class="highlighter-rouge">vagrant up debian-buster</code></td>
<td>Install on Debian Buster.</td>
</tr>
<tr>
<td>Debian 9</td>
<td><code class="highlighter-rouge">vagrant up debian-stretch</code></td>
<td>Install on current Debian Stretch. Needs manual intervention due to Liquidsoap 1.3.3.</td>
</tr>
<tr>
<td>Ubuntu 18.04</td>
<td><code class="highlighter-rouge">vagrant up ubuntu-bionic</code></td>
<td>Install on current Ubuntu Bionic Beaver.</td>
</tr>
<tr>
<td>Ubuntu 16.04</td>
<td><code class="highlighter-rouge">vagrant up ubuntu-xenial</code></td>
<td>Install on Ubuntu Xenial Xerus.</td>
</tr>
<tr>
<td>CentOS</td>
<td><code class="highlighter-rouge">vagrant up centos</code></td>
<td>Extremely experimental install on 7.3 with native systemd support and activated SELinux. Needs manual intervention due to Liquidsoap 1.3.3.</td>
</tr>
</tbody>
</table>
<h2 id="troubleshooting">Troubleshooting</h2>
<p>If anything fails during the initial provisioning step you can try running <code class="highlighter-rouge">vagrant provision</code>
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>
:ET

View File

@ -1,83 +0,0 @@
I"©<h1 id="setting-the-server-time">Setting the server time</h1>
<p>Accurate time keeping on your server is vital for LibreTime performance. You can confirm that the date and time of your server are set correctly with the <strong>date</strong> command:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>date
</code></pre></div></div>
<p>The server should respond with the date, time, time zone and year in a format similar to the following example:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Tue Jul 2 15:08:57 BST 2013
</code></pre></div></div>
<p>If the time on your server is wrong, it is recommended that you take LibreTime off-air until the problem is fixed.</p>
<h2 id="configuring-ntp">Configuring NTP</h2>
<p>Although it is possible to set the date and time of the server manually, this is not recommended because the server clock can drift over time, compromising the accuracy of your broadcast schedule. If your LibreTime server is permanently connected to the Internet, you can synchronize your server to a time server with the <strong>ntp</strong> ** program. If <strong>ntp</strong> is not yet installed, you can enter the following command on Debian or Ubuntu:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install ntp
</code></pre></div></div>
<p>Optionally, open the <strong>ntp</strong> configuration file in the <strong>nano</strong> editor to add further time server names:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo nano /etc/ntp.conf
</code></pre></div></div>
<p>On Ubuntu GNU/Linux, the default time server is <em>ntp.ubuntu.com</em>, but there are many other time servers available on the public Internet, including the group of servers listed at <a href="http://www.pool.ntp.org/">http://www.pool.ntp.org/</a> for each country. Using a variety of NTP servers located closely to your LibreTime server should produce the most accurate results. For example, for a server in the United Kingdom you could use the following list:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code># You do need to talk to an NTP server or two (or three).
server ntp.ubuntu.com
server 0.uk.pool.ntp.org
server 1.uk.pool.ntp.org
server 2.uk.pool.ntp.org
server 3.uk.pool.ntp.org
</code></pre></div></div>
<p>Enter the server names you require, press <strong>Ctrl+O</strong> to write out the <em>/etc/ntp.conf</em> file, then <strong>Ctrl+X</strong> to exit <strong>nano</strong>. Restart the <strong>ntp</strong> service with:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo invoke-rc.d ntp restart
</code></pre></div></div>
<p>The server should respond:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>* Stopping NTP server ntpd                                 [ OK ]
* Starting NTP server ntpd                                 [ OK ]
</code></pre></div></div>
<p>Then use the <strong>ntpq -p</strong> command to confirm that <strong>ntp</strong> is working. This command should produce output similar to the following:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ntpq -p
remote      refid    st t when poll reach delay offset jitter
==================================================================
europium. 193.79.237.14  2 u   28   64    3 39.571  12.600  3.590
norb.v4.c 46.227.200.72  3 u   28   64    3 47.856  -6.908 10.028
82.113.15 193.62.22.82   2 u   29   64    3 11.458  -0.513  2.629
ntppub.le 158.43.192.66  2 u   91   64    2 122.781  44.864  0.001
dns0.rmpl 195.66.241.3   2 u   27   64     22.171   1.464  4.242
</code></pre></div></div>
<h2 id="adjusting-the-server-time-zone">Adjusting the server time zone</h2>
<p>The data centre which hosts your LibreTime server could be located anywhere in the world. Some servers are set to <em>Coordinated Universal Time</em> or UTC (similar to <em>Greenwich Mean Time</em> or GMT), regardless of their location. LibreTime uses UTC time in its database for scheduling purposes, independent of the server time zone.</p>
<p>If the server time zone is not appropriate for integration with your station’s other systems, on a Debian or Ubuntu server you can reconfigure the <strong>tzdata</strong> (time zone data) package with the command:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo dpkg-reconfigure tzdata
</code></pre></div></div>
<p>This command opens a menu in which you can select the continent that you require, by pressing the Enter key.</p>
<p><img src="img/Screenshot15-Configuring_tzdata.png" alt="" /></p>
<p>The next step is to select your nearest city, again by pressing the Enter key. The appropriate time zone is selected according to the information that you have entered.</p>
<p><img src="img/Screenshot16-Configure_city.png" alt="" /></p>
<p>The console output from the <strong>dpkg-reconfigure tzdata</strong> command will confirm the new setting:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Current default time zone: 'Europe/London'
Local time is now: Tue Jul 2 15:18:01 BST 2013.
Universal Time is now: Tue Jul 2 14:18:01 UTC 2013.
</code></pre></div></div>
:ET

View File

@ -1,29 +0,0 @@
I"Ú<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? / What’s 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

@ -6,7 +6,7 @@ show_downloads: false
layouts_dir: _layouts
data_dir: _data
favicon: 144px.png
favicon:
# For splash page layout only
headimage: img/header.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

View File

@ -1,119 +0,0 @@
<!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">
<style type="text/css" media="screen">
.container {
margin: 10px auto;
max-width: 600px;
text-align: center;
}
h1 {
margin: 30px 0;
font-size: 4em;
line-height: 1;
letter-spacing: -1px;
}
</style>
<div class="container">
<h1>404</h1>
<p><strong>Page not found :(</strong></p>
<p>The requested page could not be found.</p>
</div>
</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,54 +0,0 @@
LibreTime API Usage
--------------------
The LibreTime API enables many types of information about the broadcast schedule and configuration to be retrieved from the LibreTime server. Other than the live-info and week-info data fetched by website widgets (see the chapter *Exporting the schedule*), all API requests must be authenticated using the secret API key stored in the file */etc/airtime/api\_client.cfg* on the LibreTime server. This key is autogenerated during LibreTime installation and should be unique for each server.
If you intend to use the LibreTime API across a public network, for security reasons it is highly recommended that all API requests are sent over encrypted https: and that the web server is configured to accept requests to the api/ directory from specific host names or IP addresses only.
The format of API requests is:
https://libretime.example.com/api/api-action/format/json/api_key/XXXXXX
where api-action is the type of request and XXXXXX is the secret API key. Available actions include:
- on-air-light - return true if the station is on air
- status - get the status of LibreTime components and resource usage
- version - returns the version of LibreTime installed
- get-files-without-silan-value - list files for which silence detection has not yet been performed
- get-stream-setting - gets the settings of LibreTime output streams
- get-stream-parameters - gets the parameters of LibreTime output streams
For example, using the action *get-stream-setting* returns the following output for the first configured stream:
{"keyname":"s1_type","value":"ogg","type":"string"},
{"keyname":"s1_host","value":"streaming.example.com","type":"string"},
{"keyname":"s1_port","value":"8000","type":"integer"},
{"keyname":"s1_mount","value":"airtime_128","type":"string"},
{"keyname":"s1_url","value":"http:\/\/airtime.sourcefabric.org","type":"string"},
{"keyname":"s1_description","value":"Airtime Radio! Stream
#1","type":"string"},
{"keyname":"s1_genre","value":"Screamo","type":"string"},
which is enough information to construct a player widget dynamically. (s1\_url is the station's homepage, not the stream URL). The same information is provided with an s2\_ prefix for the second stream, and s3\_ prefix for the third stream.
Some API requests require the directory ID number to be specified as *dir\_id* including:
- list-all-files - list files in the specified directory
- get-files-without-replay-gain - list files in the specified directory for which ReplayGain has not been calculated yet
For example, using a request such as:
http://libretime.example.com/api/list-all-files/format/json/api_key/XXXXXX/dir_id/1/
returns the full path to each media file in the LibreTime storage directory:
{"files":[
"imported\/1\/Mark Ronson feat. Saigon\/Here Comes the Fuzz\/7-Diduntdidunt-unknown.flac",
"imported\/1\/Jimi Tenor & Tony Allen\/Inspiration Information\/3-Selfish Gene-128kbps.mp3",
"]}

File diff suppressed because it is too large Load Diff

View File

@ -1,106 +0,0 @@
# How to Setup Genre based AutoDJ
* YouTube video
[![How to Setup Genre based AutoDJ](http://img.youtube.com/vi/XNVIDnczrOk/0.jpg)](https://www.youtube-nocookie.com/embed/XNVIDnczrOk "How to Setup Genre based AutoDJ")
## Text-based Step-by-step
In this tutorial we will focus on how to build a traditional auto DJ system
where we use a feature called smart blocks and auto loading playlists to play
random music tracks of a certain genre during a show. This tutorial is
primarily focused on program managers but users who are DJs can also benefit
from smart blocks but will only be able to manually schedule them.
So for the purposes of this tutorial we are going to assume that you
have uploaded a number of files of music with the genre metadata all
matching a specific genre, for instance, Alternative. This can be done
ahead of time, but LibreTime has no way of automatically grouping sub
genres and so it is important that you spend some time curating the
track metadata before you upload it to LibreTime as there is not
currently a way to bulk edit tracks from inside LibreTime. Also once
tracks are uploaded the metadata of the track itself isnt changed but
just how it is represented in the LibreTime database. This might change
in the future but would only affect you if you were downloading tracks
and uploading them to another instance and hoped that the changes you
made were saved.
So we can bulk upload a number of creative commons licensed tracks that
have their genre all set to specific genres as one way of getting tracks
if you dont have a mp3 collection of your own to draw from. See links
below for some spots where you can procure tracks where the creators
gave permission for everyone to redistribute play and share them.
One the tracks are uploaded to the system and imported we can now create
a smartblock that will select the tracks that match a certain genre. For
this we will use Genre contains Jazz this will match any track that
has genre anywhere in its genre so big band jazz and swing jazz
would match as well as acid jazz. Any subgenre that doesnt include
jazz explicitly such as be bop would need to be added as a new
modifier.
For the purposes of this smart block we want to select 4 random items.
We also want to avoid really long tracks that are longer than 10
minutes. So we will add the modifier Length is less than 00:10:00
and now this smart block will pull 4 smart blocks. Be sure to preview it
to make sure that you have some matches in your library. This will also
save it.
Now we are going to create a new smart block that plays one promo or
station ID.
Click smartblock and new and then type in the name promo OR ID and then
change the criteria Genre to is promo and now click new modifier and
then is TOTHID.
And then change limit to 1 items.
Now we are going to create a playlist that contains these two smart
blocks.
Click new and then type Jazz with promos
and then click smartblocks and add the Jazz Songs followed by the Promo
or ID smart block.
Now this playlist can be dragged into a schedule show to add 3 random
jazz songs followed by a promo. You can manually repeat the selection in
the playlist to create a long auto DJ playlist. For instance lets add 3
more Jazz Songs and then add 3 Jazz Songs again followed by a Promo or
ID. Now lets save this playlist and go and add it to a scheduled show.
This is a quick and easy way for you to manually schedule a large chunk
of time. You can also use this as an autoloading playlist.
Lets assign this to a new 3 hour show. Called lots of Jazz. Now lets go
under Autoloading Playlist and enable that and in this spot we will
check repeat until full. This will mean that the system will keep
scheduling this playlist until the show is completely full. The only
problem here is that at the end of the show it is almost assured that a
track will be cut off. If you are a web station and you just want to
schedule music for long lengths of time you can schedule shows that are
up to 24 hours long.
On the other hand if you are an FCC licensed station you are required to
have top of the hour IDs as close as possible to the top of the hour. In
this case the random selection of tracks might not suffice for
compliance.
If you have a station ID playlist smartblock in your intro playlist (see
previous tutorial linked below) and you have your tracks broken up
hourly this shouldnt be an issue but it still might result in tracks
being cut of in the middle.
So the best option currently is to change the music tracks to fill the
remaining show from the previous selection of 3 items. And then be sure
to add a promos or musical sound bridges at the end that are also time
remaining but allow overfill.
It is possible that we could improve the way the autoloading playlists
work in the future, please check out LibreTime.org for the latest
release notes and feel free to ask any questions at our forum at
[https://discourse.LibreTime.org](https://discourse.LibreTime.org/)
Thanks for tuning in to another LibreTime tutorial. Our next tutorial
will show you how to use autoloading playlists to add show specific
underwriting or advertisements.

View File

@ -1,39 +0,0 @@
# How to Build Your Schedule
* YouTube video
[![Build Station Schedule](http://img.youtube.com/vi/EfNhl-yQcn8/0.jpg)](https://www.youtube-nocookie.com/embed/EfNhl-yQcn8 "How to build your schedule")
## Step-by-step Text Based
A description of the steps involved in adding a show to the LibreTime calendar
schedule for future playback including repeating shows
**Audience**: Program Managers and Admins
1. Click on the Calendar menu item on the left side of the screen
1. Click on the blue New Show button
1. Under **What** - type in a Name to replace Untitled Show
1. Optional add URL, Genre and Description
1. Under **When** click **In The Future**
1. Select a date and time for the **Start Time** and **End Time**
1. Time is entered as 00:00 where the first 2 digits are the hour in 24 hour
time and the second 2 digits are the minutes. So 15:00 is 3PM. *Note: 24 hours
is the maximum show time and Midnight is 00:00 of the next date.*
1. Click **Repeats** if this show will air more than once.
1. If it airs at the same time of the day on more than one day of the week then
check the boxes next to the Days it should repeat on.
1. If this is a limited engagement show uncheck **No End?** and select the date
at which this show should no longer be on the schedule.
* **Autoloading Playlist** is used if you will generate the content for this
show using a playlist possibly containing smartblocks to dynamically generate
it. Ihf this is checked and a playlist is selected, LibreTime will schedule it
an hour before the show is set to air as well as any **Intro & Outro Playlist**
configured in the Admin settings. See other How Tos for ideas about how to use Autoloading playlists.
1. **Live Stream Input** contains the streaming information for DJs and if
**Use LibreTime Authentication** is checked then DJs can login to stream live
if they are added to the **Who** section.
1. **Who** is where you can give DJ users permission to schedule tracks for
this show and stream live during the show spot. You can check the box
next to them or type their name and click the drop down.
1. **Style** allows you to select a custom color and add a show Logo for this
show.

View File

@ -1,128 +0,0 @@
<h1 id="calendar">Calendar</h1>
<p>The Calendar page of the LibreTime administration interface has three views: <strong>day</strong>, <strong>week</strong> and <strong>month</strong>, which can be switched using the grey buttons in the top right corner. By default, the <strong>month</strong> view is shown, with todays date highlighted by a pale grey background.</p>
<p><img src="img/Screenshot451-Calendar.png" alt="" /></p>
<p>In the top left corner of the page, you can go back or forward through the <strong>Calendar</strong> by clicking on the buttons which have a small grey triangle in a white circle. Click the <strong>today</strong> button to jump to todays date in the current view. (The <strong>today</strong> button will be greyed out if you are already viewing that date). In the <strong>day</strong> or <strong>week</strong> views, there is also a drop-down menu which allows you to set the resolution displayed for the calendar, ranging from one minute per row to sixty minutes per row.</p>
<p><img src="img/Screenshot452-Calendar_resolution.png" alt="" /></p>
<h2 id="adding-a-show">Adding a show</h2>
<p>Only <em>Admins</em> and <em>Program Managers</em> can use this feature. To add a new show to the Calendar, click the <strong>+ New Show</strong> button in the top left corner of the page, or click on any future row or box in the Calendar which is empty. Either of these actions opens the <strong>Add this show</strong> box, which has seven sections, arranged vertically: <strong>What</strong>, <strong>Autoloading Playlist</strong>, <strong>When</strong>, <strong>Live Stream Input</strong>, <strong>Record &amp; Rebroadcast</strong>, <strong>Who</strong>, and <strong>Style</strong>. Click the small orange triangle to the left of the section name if you wish to minimize or maximize it.</p>
<h2 id="what">What</h2>
<p>In the <strong>What</strong> box, enter the <strong>Name</strong>, public website <strong>URL</strong>, <strong>Genre</strong> and <strong>Description</strong> for the show that you are creating.</p>
<p><img src="img/Screenshot453-Show_what.png" alt="" /></p>
<h2 id="autoloading-playlist">Autoloading Playlist</h2>
<p>In this section, you can select a playlist that will be used for this show. The playlist must already be defined in your library. <strong>Auto Schedule Playlist</strong> needs to be checked for <strong>Select Playlist</strong> and <strong>Repeat AutoPlaylist Until Show is Full</strong> to be visible.</p>
<p><img src="img/Screenshot454-Show_playlist.png" alt="" /></p>
<h2 id="when">When</h2>
<p>Next, in the <strong>When</strong> section, if you clicked on a date in the <strong>Calendar</strong> this should already be entered in the <strong>Date/Time Start</strong> field. To set another date for the show, click on the date in the <strong>Date/Time Start</strong> field and select the date that you require from the small pop-up calendar which will appear. Click on the adjacent time field to set the start time for the show, with the pop-up <strong>Hour</strong> and <strong>Minute</strong> box. The Minute values in the pop-up time boxes are rounded to the nearest five minutes. You can also adjust the times manually by clicking into the fields and typing. Repeat the process to set the <strong>Date/Time End</strong> fields. The <strong>Start Time</strong> can be <strong>Now</strong> or <strong>In the Future</strong>. A show that starts now, will start at the time save is pressed, while a future show will start at the time set. The <strong>Duration</strong> of the show will be displayed automatically, based on the start and end times you have set.</p>
<p>By default, the <strong>Timezone</strong> of the show start and end times will be the timezone of the station, as set on the Preferences page on the System menu. You can specify an alternative time zone using the drop-down menu, if you wish. The time zone displayed in the Calendar when you log in depends on your personal settings. See Updating your own account in the chapter <em>Users</em> for more details.</p>
<p><img src="img/Screenshot526-Add_show_when_250.png" alt="" /></p>
<p>LibreTime will only allow you to enter valid times for shows. If you attempt to schedule show times which would be impossible, by ending the show before it begins, LibreTime will highlight the error with a pink background.</p>
<p><img src="img/Screenshot527-negative_time250.png" alt="" /></p>
<p>To schedule a regular show, check the <strong>Repeats?</strong> box, which will make a new section of the dialog appear. Optionally, click the <strong>Link:</strong> box to automatically schedule the same content in the repeated shows as in the original show.</p>
<p><img src="img/Screenshot528-Link_shows_250.png" alt="" /></p>
<p>Then select either <strong>weekly</strong>, <strong>every 2 weeks</strong>, <strong>every 3 weeks</strong>, <strong>every 4 weeks</strong> or <strong>monthly</strong> from the <strong>Repeat Type</strong> drop-down menu. If you have selected a weekly option, check the boxes for the days of the week that you want to schedule the regular show on. If you have selected <strong>monthly</strong>, you have the option to <strong>Repeat By: day of the month</strong> (for example the 9th of each month) or <strong>day of the week</strong> (for example the second Wednesday of each month).</p>
<p><img src="img/Screenshot529-repeat_type_monthly_250.png" alt="" /></p>
<p>Uncheck the <strong>No End?</strong> box and set the <strong>Date End</strong> for the regular show to finish, or leave the <strong>No End?</strong> box checked to schedule the show indefinitely.</p>
<p><img src="img/Screenshot530-show_end_date_250.png" alt="" /></p>
<h2 id="live-stream-input">Live Stream Input</h2>
<p>The <strong>Live Stream Input</strong> section can be used to enable live input streams during the show, and also to configure authentication for them. If you check the <strong>Use LibreTime Authentication</strong> box, the DJs (presenters) of the show will be able to connect a live stream to LibreTimes <strong>Show Source Mount Point</strong> using their login name and password. See the chapter <em>Stream Settings</em> for details.</p>
<p>If you check the <strong>Use Custom Authentication</strong> box instead, you can set a one-time username and password pair for live stream input to the show. For example, you may wish to create an authenticated live stream input for a particular remote news reporter, without providing any further access to your LibreTime server for that person.</p>
<p><img src="img/Screenshot457-Live_stream_input.png" alt="" /></p>
<p>A reminder of the connection <strong>Host</strong>, <strong>Port</strong> and <strong>Mount</strong> for the live input stream to use is shown at the end of the <strong>Live Stream Input</strong> section.</p>
<h2 id="record--rebroadcast">Record &amp; Rebroadcast</h2>
<p>The <strong>Record &amp; Rebroadcast</strong> section is currently not working, and so has been removed from the web interface. If this feature is important to you, please search for relevant issues in the <a href="https://github.com/LibreTime/libretime/search?q=record&amp;type=Issues">LibreTime github repository</a> and help us make it happen!</p>
<h2 id="who">Who</h2>
<p>In the <strong>Who</strong> section, type the first few letters of the name of the shows DJ (presenter) in the <strong>Search Users</strong> field to select a name from the LibreTime database, or check one of the <strong>DJs</strong> boxes in the vertical list below. This association of a DJ name with a particular show enables that presenter to add playout media to the show, and also to connect a live Show Source input stream (if that has been enabled), so it is important to get the DJs name right.</p>
<p><img src="img/Screenshot161-Show_users.png" alt="" /></p>
<h2 id="style">Style</h2>
<p>Show colours in the Calendar are set automatically, based on the <strong>Name</strong> of the show, so that individual shows can be easily identified in the <strong>Calendar</strong>. If you wish, you can select a <strong>Background Colour</strong> and <strong>Text Colour</strong> manually by clicking the boxes in the <strong>Style</strong> section. Click the coloured circle icon in the lower right corner to close this pop-up window.</p>
<p><img src="img/Screenshot162-Show_colours.png" alt="" /> </p>
<p>Optionally, you can upload a Show Logo by clicking the <strong>Browse</strong> button.</p>
<p><img src="img/Screenshot584-Show_logo.png" alt="" /></p>
<p>Finally, click the <strong>Add this show</strong> button at the top or bottom of the box. The new show will now be displayed in the <strong>Calendar</strong>, with a regular slot if you have chosen to schedule one. </p>
<h2 id="editing-a-show">Editing a show</h2>
<p>Show configuration and metadata can be changed at any time, except for <strong>Date/Time Start</strong> and <strong>Record from Line In?</strong> options, which are fixed after broadcast of that show commences. Click the show in the Calendar, and select <strong>Edit Show</strong> from the pop-up context menu. This opens the <strong>Update Show</strong> box, which is almost exactly the same as the <strong>Add this Show</strong> box. Click the <strong>+ Update show</strong> button at the top or bottom of the box when you are done.</p>
<p><img src="img/Screenshot459-Update_show.png" alt="" /></p>
<p>Episodes of repeating shows also have an <strong>Instance Description</strong> field in which you can add details for that particular episode. Click the episode in the Calendar, click <strong>Edit</strong> on the pop-up menu, then click <strong>Edit this instance</strong>. After entering an Instance Description, click the <strong>+ Update show</strong> button.</p>
<p><img src="img/Screenshot583-Show_instance_description_vC9ooiT.png" alt="" /></p>
<p>Alternatively, individual shows can be clicked on and dragged to new days and times in the calendar. However, LibreTime will not allow you to drag a future show into the past, or drag and drop instances of a repeated show. In the <strong>Day</strong> and <strong>Week</strong> views, show length can be adjusted by clicking on the lower edge of the show box, and dragging the edge of the box upwards or downwards. The new show length is calculated automatically.</p>
<h2 id="adding-content-to-a-show">Adding content to a show</h2>
<p>To add content to a show, click the show in any view on the Calendar, and select <strong>Schedule Tracks</strong> from the pop-up menu. Shows that do not yet contain any scheduled content are marked with a red exclamation mark icon, to the right of the show start and end times in the top bar. Shows partially filled with content have a yellow exclamation mark icon. During playout of the show, a green play icon will also be shown in the top bar.</p>
<p><img src="img/Screenshot488-Add_remove_content.png" alt="" /></p>
<p>The <strong>Schedule Tracks</strong> action opens a window with the name of the show. Like when using the <strong>Now Playing</strong> page, you can search for content items and add them to the show schedule on the right side of the page. Refer to the <em>Now Playing</em> chapter for details.</p>
<p>When your show has all the required content, click the <strong>OK</strong> button in the bottom right corner to close the window. Back in the <strong>Calendar</strong>, click the show and select <strong>View</strong> from the pop-up menu to view a list of content now included in the show.</p>
<p><img src="img/Screenshot489-Show_Content.png" alt="" /></p>
<p>The <strong>Contents of Show</strong> window is a read-only interface featuring an orange bar which indicates how much media has been added to the show. Click the <strong>OK</strong> button in the bottom right corner, or the white <strong>x</strong> icon in the top right corner, to close the window.</p>
<p><img src="img/Screenshot353-Contents_of_show.png" alt="" /></p>
<h2 id="removing-content-from-a-show">Removing content from a show</h2>
<p>To remove an individual item from a show, click on the show in the <strong>Calendar</strong>, and select <strong>Schedule Tracks</strong> from the pop-up menu. In the window which opens, click any item you wish to remove from the show, then click <strong>Delete</strong> on the pop-up menu, or check the box in the items row then click the <strong>Remove</strong> icon at the top of the table. To remove all files and playlists from a show, click on the show in the <strong>Calendar</strong>, and select <strong>Clear Show</strong> from the pop-up menu. </p>
<h2 id="deleting-an-upcoming-show">Deleting an upcoming show</h2>
<p>To delete an upcoming instance of a repeating show, click on the show in the <strong>Calendar</strong>, and select <strong>Delete</strong>, then <strong>Delete Instance</strong> from the pop-up menu. If you wish to delete all future instances of a repeating show, select <strong>Delete Instance and All Following</strong> from the pop-up menu.</p>
<p><img src="img/Screenshot490-Delete_this_instance.png" alt="" /></p>
<p>You cannot delete or remove content from shows that have already played out. These shows have only one option on the pop-up menu, which is <strong>View</strong>.</p>
<h2 id="cancelling-playout">Cancelling playout</h2>
<p>If you wish to cancel playout of a show while it is running, click on the show in the <strong>Calendar</strong> and select <strong>Cancel Show</strong> from the pop-up menu. LibreTime will ask you if you are sure about this action, as it cannot be undone.</p>
<p><img src="img/Screenshot357-Cancel_current_show.png" alt="" /></p>

View File

@ -1,173 +0,0 @@
<!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 - Contributing to 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"> Contributing to LibreTime </h2>
<hr class="light my-4">
<p class="text-faded mb-4">
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 don't 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>
</div>
</div>
</div>
</section>
<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>
</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,259 +0,0 @@
/*!
* Start Bootstrap - Libretime v1.0.0 ()
* Copyright 2013-2018
* Licensed under MIT (https://github.com/BlackrockDigital/libretime-website/blob/master/LICENSE)
*/
body,html{
width:100%;height:100%
}
body{
font-family:Merriweather,'Helvetica Neue',Arial,sans-serif;
padding-top: 57px;
}
hr{
max-width:50px;border-width:3px;border-color:#f05f40
}
hr.light{
border-color:#fff
}
img{
width:100%;
max-width: 600px;
}
a{
color:#f05f40;
-webkit-transition:all .2s;
transition:all .2s
}
a:hover{
color:#f05f40
}
h1,h2,h3,h4,h5,h6{
font-family:'Open Sans','Helvetica Neue',Arial,sans-serif
}
.bg-primary{
background-color:#f05f40!important
}
.bg-dark{
background-color:#212529!important
}
.text-faded{
color:rgba(255,255,255,.9)
}
div.text-footer{
text-align: center;
}
section{padding:8rem 0}
.section-heading{margin-top:0}
::-moz-selection{color:#fff;background:#212529;text-shadow:none}
::selection{color:#fff;background:#212529;text-shadow:none}
img::-moz-selection{color:#fff;background:0 0}
img::selection{color:#fff;background:0 0}
img::-moz-selection{color:#fff;background:0 0}
#mainNav{
border-bottom:1px solid rgba(33,37,41,.1);background-color:#fff;font-family:'Open Sans','Helvetica Neue',Arial,sans-serif;-webkit-transition:all .2s;transition:all .2s
}
#mainNav .navbar-brand{
font-weight:700;
text-transform:uppercase;
color:#f05f40;
font-family:'Open Sans','Helvetica Neue',Arial,sans-serif
}
#mainNav .navbar-brand:focus,
#mainNav .navbar-brand:hover{color:#f05f40}
#mainNav .navbar-nav>li.nav-item>a.nav-link,
#mainNav .navbar-nav>li.nav-item>a.nav-link:focus{
font-size:.9rem;font-weight:700;text-transform:uppercase;color:#212529
}
#mainNav .navbar-nav>li.nav-item>a.nav-link:focus:hover,
#mainNav .navbar-nav>li.nav-item>a.nav-link:hover{color:#f05f40}
#mainNav .navbar-nav>li.nav-item>a.nav-link.active,
#mainNav .navbar-nav>li.nav-item>a.nav-link:focus.active{color:#f05f40!important;background-color:transparent}
#mainNav .navbar-nav>li.nav-item>a.nav-link.active:hover,
#mainNav .navbar-nav>li.nav-item>a.nav-link:focus.active:hover{background-color:transparent}
@media (min-width:992px){
#mainNav{border-color:transparent;background-color:transparent
}
#mainNav .navbar-brand{color:rgba(255,255,255,.7)}
#mainNav .navbar-brand:focus,#mainNav .navbar-brand:hover{color:#fff}
#mainNav .navbar-nav>li.nav-item>a.nav-link{padding:.5rem 1rem}
#mainNav .navbar-nav>li.nav-item>a.nav-link,
#mainNav .navbar-nav>li.nav-item>a.nav-link:focus{color:rgba(255,255,255,.7)}
#mainNav .navbar-nav>li.nav-item>a.nav-link:focus:hover,
#mainNav .navbar-nav>li.nav-item>a.nav-link:hover{color:#fff}
#mainNav.navbar-shrink{border-bottom:1px solid rgba(33,37,41,.1);background-color:#fff}
#mainNav.navbar-shrink .navbar-brand{color:#f05f40}
#mainNav.navbar-shrink .navbar-brand:focus,
#mainNav.navbar-shrink .navbar-brand:hover{color:#f05f40}
#mainNav.navbar-shrink .navbar-nav>li.nav-item>a.nav-link,
#mainNav.navbar-shrink .navbar-nav>li.nav-item>a.nav-link:focus{color:#212529}
#mainNav.navbar-shrink .navbar-nav>li.nav-item>a.nav-link:focus:hover,
#mainNav.navbar-shrink .navbar-nav>li.nav-item>a.nav-link:hover{color:#f05f40}}
/* CSS for docs navbar*/
#docsNav{
border-bottom:1px solid rgba(33,37,41,.1);
background-color:#fff;
font-family:'Open Sans','Helvetica Neue',Arial,sans-serif;
-webkit-transition:all .2s;
transition:all .2s
}
#docsNav .navbar-brand{
font-weight:650;
text-transform:uppercase;
color:#f05f40;
font-family:'Open Sans','Helvetica Neue',Arial,sans-serif
}
#docsNav .navbar-brand:focus,
#docsNav .navbar-brand:hover{color:#f05f40}
#docsNav .navbar-nav>li.nav-item>a.nav-link,
#docsNav .navbar-nav>li.nav-item>a.nav-link:focus{
font-size:.8rem;font-weight:650;text-transform:uppercase;color:#212529
}
#docsNav .navbar-nav>li.nav-item>a.nav-link:focus:hover,
#docsNav .navbar-nav>li.nav-item>a.nav-link:hover{color:#f05f40}
#docsNav .navbar-nav>li.nav-item>a.nav-link.active,
#docsNav .navbar-nav>li.nav-item>a.nav-link:focus.active{color:#f05f40!important;background-color:transparent}
#docsNav .navbar-nav>li.nav-item>a.nav-link.active:hover,
#docsNav .navbar-nav>li.nav-item>a.nav-link:focus.active:hover{background-color:transparent}
@media (min-width:992px){
#docsNav{border-color:transparent;background-color:transparent
}
#docsNav .navbar-brand{color:rgba(255,255,255,.7)}
#docsNav .navbar-brand:focus,#docsNav .navbar-brand:hover{color:#fff}
#docsNav .navbar-nav>li.nav-item>a.nav-link{padding:.5rem 1rem}
#docsNav .navbar-nav>li.nav-item>a.nav-link,
#docsNav .navbar-nav>li.nav-item>a.nav-link:focus{color:rgba(255,255,255,.7)}
#docsNav .navbar-nav>li.nav-item>a.nav-link:focus:hover,
#docsNav .navbar-nav>li.nav-item>a.nav-link:hover{color:#fff}
#docsNav.navbar-shrink{border-bottom:1px solid rgba(33,37,41,.1);background-color:#fff}
#docsNav.navbar-shrink .navbar-brand{color:#f05f40}
#docsNav.navbar-shrink .navbar-brand:focus,
#docsNav.navbar-shrink .navbar-brand:hover{color:#f05f40}
#docsNav.navbar-shrink .navbar-nav>li.nav-item>a.nav-link,
#docsNav.navbar-shrink .navbar-nav>li.nav-item>a.nav-link:focus{color:#212529}
#docsNav.navbar-shrink .navbar-nav>li.nav-item>a.nav-link:focus:hover,
#docsNav.navbar-shrink .navbar-nav>li.nav-item>a.nav-link:hover{color:#f05f40}}
header.masthead{
padding-top:10rem;padding-bottom:calc(10rem - 56px);
background-image:url(../img/header.jpg);
background-position:center center;
background-size:cover
}
header.masthead hr{
margin-top:30px;
margin-bottom:30px
}
header.masthead h1{font-size:2rem}
header.masthead p{font-weight:300}
@media (min-width:768px){
header.masthead p{font-size:1.15rem}
}
@media (min-width:992px){
header.masthead{
height:100vh;min-height:650px;padding-top:0;padding-bottom:0
}
header.masthead h1{font-size:3rem}
}
@media (min-width:1200px){
header.masthead h1{font-size:4rem}
}
.service-box{max-width:400px}
.portfolio-box{position:relative;display:block;max-width:650px;margin:0 auto}
.portfolio-box .portfolio-box-caption{
position:absolute;bottom:0;display:block;width:100%;height:100%;text-align:center;opacity:0;color:#fff;background:rgba(240,95,64,.9);-webkit-transition:all .2s;transition:all .2s
}
.portfolio-box .portfolio-box-caption .portfolio-box-caption-content{
position:absolute;top:50%;width:100%;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center
}
.portfolio-box .portfolio-box-caption .portfolio-box-caption-content .project-category,.portfolio-box .portfolio-box-caption .portfolio-box-caption-content .project-name{
padding:0 15px;font-family:'Open Sans','Helvetica Neue',Arial,sans-serif
}
.portfolio-box .portfolio-box-caption .portfolio-box-caption-content .project-category{
font-size:14px;font-weight:600;text-transform:uppercase
}
.portfolio-box .portfolio-box-caption .portfolio-box-caption-content .project-name{font-size:18px}.portfolio-box:hover .portfolio-box-caption{opacity:1}.portfolio-box:focus{outline:0}
@media (min-width:768px){
.portfolio-box .portfolio-box-caption .portfolio-box-caption-content .project-category{font-size:16px}
.portfolio-box .portfolio-box-caption .portfolio-box-caption-content .project-name{font-size:22px}
}
.text-primary{color:#f05f40!important}
.btn{
font-weight:700;text-transform:uppercase;border:none;border-radius:300px;font-family:'Open Sans','Helvetica Neue',Arial,sans-serif
}
.btn-xl{padding:1rem 2rem}
.btn-primary{background-color:#f05f40;border-color:#f05f40}
.btn-primary:active,.btn-primary:focus,.btn-primary:hover{color:#fff;background-color:#ee4b28!important}
.btn-primary:active,.btn-primary:focus{
-webkit-box-shadow:0 0 0 .2rem rgba(240,95,64,.5)!important;box-shadow:0 0 0 .2rem rgba(240,95,64,.5)!important
}
.btn-outline-full-width{border:1px solid #888;margin:5px;width:100%}
/* Blockquotes */
blockquote {
border: 1px solid #212529;
border-left: 10px solid #f05f40;
border-radius: 0px;
background: #212529;
color: white;
font-size: .9rem;
margin: 10px;
padding: 10px 20px;
}
blockquote p {
margin: 0;
line-height: 30px;
padding-bottom: 20px;
}
blockquote .small {
display: block;
font-size: 80%;
color: brown;
text-align: right;
}
/* Sidebar */
#sidebar {
position: absolute;
top: 57px;
right: 0;
width: 20%;
height: 100%;
background-color: #fff
}

View File

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

View File

@ -1,170 +0,0 @@
<!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 - Frequently Asked Questions</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:2rem 0}
</style>
</head>
<body>
<section class="bg-dark">
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto text-center">
<h2 class="section-heading text-white"> Frequently Asked Questions </h2>
<hr class="light my-4">
<p class="text-faded mb-4">
You've got questions, we've got answers
<br><small>by LibreTime Community on May 22, 2020</small>
</p>
</div>
</div>
</div>
</section>
<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>
<!-- Work in progress... aiming to create list of blog posts -->
<section class="bg-dark">
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto text-center">
<h2 class="section-heading text-white"> Other Posts </h2>
<hr class="light my-4">
<p class="text-faded mb-4">
<ul>
</ul>
</p>
</div>
</div>
</div>
</section>
</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,227 +0,0 @@
<!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 - Features</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"> Features </h2>
<hr class="light my-4">
<p class="text-faded mb-4">
</p>
</div>
</div>
</div>
</section>
<h1 id="what-is-libretime">What is LibreTime?</h1>
<p><a href="http://libretime.org/" title="LibreTime homepage">LibreTime</a> is the open broadcast
software for scheduling and remote station management. Web browser access to
the stations media library, multi-file upload and automatic metadata import
features are coupled with a collaborative online scheduling calendar and
playlist management. The scheduling calendar is managed through an easy-to-use
interface and triggers playout with sub-second precision.</p>
<p><img src="img/Screenshot540-Now_playing_250.png" alt="" /></p>
<p>LibreTime is intended to provide a solution for a wide range of broadcast
projects, from community to public and commercial stations. The scalability of
LibreTime allows implementation in a number of scenarios, ranging from an
unmanned broadcast unit accessed remotely through the Internet, to a local
network of machines accessing a central LibreTime storage system. LibreTime
supports the playout of lossy compressed audio files in both MP3 and AAC
formats and the open, royalty-free equivalent
<a href="http://www.vorbis.com/" title="Ogg Vorbis homepage">Ogg Vorbis</a>. It also supports
playout of lossless FLAC and WAV format audio files.</p>
<p>LibreTime manages the <a href="http://savonet.sourceforge.net/">Liquidsoap</a> stream
generator at the heart of the system. Liquidsoap generates streams from files
in the LibreTime library and any remote input streams that you specify.
Available stream output formats include Ogg Vorbis, Ogg Opus, MP3, and AAC. The
library is indexed in a <a href="http://www.postgresql.org/">PostgreSQL</a> database to
enable searching. Live shows can be recorded automatically with
<a href="http://eca.cx/ecasound/" title="Ecasound homepage">Ecasound</a>, using the sound card
line input. News editors, DJs and station controllers can use LibreTime to
build playlists or smart blocks and manage media files (upload, edit metadata,
manage advertisements) at the station or via the Internet.</p>
<p>The scheduler in LibreTime has a calendar view, organized by months, weeks or
days. Program editors can schedule playlists and shows here for their
broadcast station. In some scenarios, the transmitter is situated outside the
reach of the broadcaster and all program management has to be maintained
through the web interface. Possible reasons for this scenario might be of a
pragmatic nature (running many stations from one central office due to limited
human resources) or an emergency (running a transmitter in a crisis area
without putting staff at risk).</p>
<h2 id="libretime-services">LibreTime services</h2>
<table>
<thead>
<tr>
<th>Service</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>libretime-analyzer</td>
<td>Keeps track of files being added, renamed, moved or removed from storage, and reads their metadata using the Mutagen library.</td>
</tr>
<tr>
<td><a href="https://www.postgresql.org/">PostgreSQL</a></td>
<td>Contains the location of those media files and their metadata. This means you can search for and playlist a set of media files according to the specific metadata that you require, or use a smart block to select the files for you. The database also contains details of specified remote input streams.</td>
</tr>
<tr>
<td>Pypo</td>
<td>(Python Playout engine) Downloads media from the storage up to 24 hours ahead of playout and checks it for average level (with ReplayGain tools) and leading or trailing silence (with Silan). At playout time, the media to be broadcast is sent to Liquidsoap.</td>
</tr>
<tr>
<td><a href="https://www.liquidsoap.info/">Liquidsoap</a></td>
<td>Takes individual media files and remote input streams, and assembles them into a continuous output stream. This stream can be sent to a sound card (e.g. for a broadcast mixer, on the way to an FM or DAB transmitter) or to a streaming server for IP network distribution, over the LAN, local WiFi or the Internet. You can stream to a sound card and up to three different stream distribution servers with the same LibreTime server, if you wish.</td>
</tr>
<tr>
<td><a href="https://www.icecast.org/">Icecast</a> or <a href="https://shoutcast.com/">Shoutcast</a></td>
<td>Audio streaming server, used for creating an internet radio stream from LibreTime. Icecast is included in the LibreTime installation by default. Note: If a suitable Liquidsoap output is not available for your streaming service of choice, you can send audio from Liquidsoap to a separate encoding or streaming machine via a sound card or relay stream.</td>
</tr>
<tr>
<td><a href="https://mmonit.com/monit/">Monit</a></td>
<td>Monitors the health of pypo, libretime-analyzer and Liquidsoap, and reports the status of these services to LibreTime.</td>
</tr>
<tr>
<td><a href="https://www.rabbitmq.com/">RabbitMQ</a></td>
<td>Pushes messages from LibreTime to libretime-analyzer and pypo about changes to media files and the playout schedule.</td>
</tr>
</tbody>
</table>
<h2 id="example-studio-broadcast-system">Example studio broadcast system</h2>
<p>In the diagram of an FM radio station below, LibreTime is hosted on a server
connected to the local network, with direct soundcard access. Liquidsoap
outputs streams to both the transmitter, via the main studio mixer, and
streaming media servers. The machine running LibreTime is behind a firewall
because it is also connected to the Internet for remote access by media
contributors. This enables LibreTime to offer password-protected access to the
media library and scheduling from both inside and outside the studio building.</p>
<p><img src="img/libretime_architecture.svg" alt="" /></p>
<h2 id="example-web-broadcast-system">Example web broadcast system</h2>
<p>In the diagram below, LibreTime is hosted on a remote web server, and has no
soundcard. There does not need to be a centralised studio, although LibreTime
can enable remote studios to stream in to Liquidsoap at authorised times.
Optionally, the outgoing Icecast stream can be relayed to a transmitter.</p>
<p><img src="img/libretime_web_architecture.svg" alt="" /></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 +0,0 @@
<?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,351 +0,0 @@
<!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
ID # of the user who uploaded it and then into a folder based upon the artist.</p>
<p>LibreTime unlike Airtime does not currently monitor the files for changes after they are uploaded.
The media library is not designed to be edited directly after files are uploaded. This was done as part of a
move towards enabling cloud-based file hosting. There are currently two works in progress to support filesystem
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,104 +0,0 @@
# FreeIPA configuration
You can configure LibreTime to delegate all authentication to a FreeIPA server.
This allows you users to use their existing FreeIPA credentials. For this to
work you need to configure Apache to use `mod_authnz_pam` and `mod_intercept_form_submit`.
## Apache configuration
After installing the needed modules you can set up Apache to intercept form logins and
check them against pam.
```apache
<Location /login>
InterceptFormPAMService http-libretime
InterceptFormLogin username
InterceptFormPassword password
InterceptFormLoginSkip admin
InterceptFormPasswordRedact on
InterceptFormLoginRealms INT.RABE.CH
Require pam-account http-libretime
</Location>
<Location />
<RequireAny>
<RequireAny>
Require pam-account http-libretime
Require all granted
</RequireAny>
<RequireAll>
Require expr %{REQUEST_URI} =~ /(index.php|login|favicon.ico|js|css|locale)/
Require all granted
</RequireAll>
</RequireAny>
</Location>
```
## PAM configuration
The above configuration expects a PAM configuration for the `http-libretime` service.
To confiure this you need to create the file `/etc/pam.d/http-libretime` with the following contents.
```
auth required pam_sss.so
account required pam_sss.so
```
## LDAP configuration
LibreTime needs direct access to LDAP so it can fetch additional information. It does so with
a [system account](https://www.freeipa.org/page/HowTo/LDAP#System_Accounts) that you need to
set up beforehand.
You can configure everything pertaining to how LibreTime accesses LDAP in
`/etc/airtime/airtime.conf`. The default file has the following values you need to change.
```ini
#
# ----------------------------------------------------------------------
# L D A P
# ----------------------------------------------------------------------
#
# hostname: Hostname of LDAP server
#
# binddn: Complete DN of user used to bind to LDAP
#
# password: Password for binddn user
#
# account_domain: Domain part of username
#
# basedn: base search DN
#
# filter_field: Name of the uid field for searching
# Usually uid, may be cn
#
# groupmap_*: Map LibreTime user types to LDAP groups
# Lets LibreTime assign user types based on the
# group a given user is in.
#
[ldap]
hostname = ldap.example.org
binddn = 'uid=libretime,cn=sysaccounts,cn=etc,dc=int,dc=example,dc=org'
password = hackme
account_domain = INT.EXAMPLE.ORG
basedn = 'cn=users,cn=accounts,dc=int,dc=example,dc=org'
filter_field = uid
groupmap_guest = 'cn=guest,cn=groups,cn=accounts,dc=int,dc=example,dc=org'
groupmap_host = 'cn=host,cn=groups,cn=accounts,dc=int,dc=example,dc=org'
groupmap_program_manager = 'cn=program_manager,cn=groups,cn=accounts,dc=int,dc=example,dc=org'
groupmap_admin = 'cn=admins,cn=groups,cn=accounts,dc=int,dc=example,dc=org'
groupmap_superadmin = 'cn=superadmin,cn=groups,cn=accounts,dc=int,dc=example,dc=org'
```
## Enable FreeIPA auth
After everything is set up properly you can enable FreeIPA auth in `airtime.conf`:
```
[general]
auth = LibreTime_Auth_Adaptor_FreeIpa
```
You should now be able to use your FreeIPA credentials to log in to LibreTime.

View File

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

View File

@ -1,4 +0,0 @@
History Templates
-----------------
Coming soon.

View File

@ -1,40 +0,0 @@
# History
On the History menu, the **Playout History** page enables you to view a list of files played within a specific date and time range. This page is designed to help your station prepare reports for music royalty collection societies and regulatory agencies.
Search results can be copied to the clipboard using the **Copy** button, exported as data in **CSV** format (comma separated values), exported as a document in **PDF** format, or displayed in a printer-friendly format using the **Print** button. (Your web browser must have an Adobe Flash plugin installed for these buttons to appear). Press the **Esc** key to return to the LibreTime interface once the print job is complete.
This page has three tabs: **Log Sheet**, **File Summary** and **Show Summary**. On any of these tabs, you can select a date and time range by clicking the calendar and clock icons in the upper left corner of the page. Then click the search button, which has a magnifying glass icon, to the right. A list of files played during that date and time range will appear further down the page.
In the **Log Sheet** tab, the playout history is sorted by **Start Time** and **End Time** by default.
![](img/Screenshot533-Playout_history_250.png)
The number of times each file was played and the length of the files are shown in the **File Summary** tab. To make optimal use of this feature for royalty reporting purposes, music files must be tagged with **Composer** and **Copyright** metadata. The artist performing a piece of music may not be the original composer of the work, or the copyright holder of the sound recording.
![](img/Screenshot534-File_summary_250.png)
On the **Show Summary** tab, click the name of a show within the search range to expand its row and see its playout details.
![](img/Screenshot535-Show_summary_250.png)
## Manual logging
If your station features playout from analogue sources such as turntables or microphones, there is no automatic metadata for LibreTime to collect from these inputs. To ensure that the playout history is complete, you can add log entries manually by clicking the **+ Create Entry** button. This action opens a pop-up window with default fields of Start Time, End Time, Title and Creator. Click the **Find** button to automatically fill the **Choose Show Instance** menu with the names of shows that took place within the specified time range. Then click the **Save** button to enter the new item into the playout history.
![](img/Screenshot536-Manual_login_250.png)
Log entries can also be manually deleted, using the button with the trashcan icon, to the right of the **+ Create Entry** button. Pages of entries can be selected for deletion using the **Select** drop-down menu.
## History Templates
The **History Templates** page on the History menu enables you to prepare reports with the exact content required by regulatory agencies in the territories that you are broadcasting to. You can begin creating a custom template by clicking the button **New Log Sheet Template** or the button **New File Summary Template**.
![](img/Screenshot537-History_templates.png)
Either of these actions opens a page in which you can name the new template, and add or remove elements from the list on the left. To add a new element from the list on the right, click the plus icon for the item you require. If the element you require is not listed, you can use the **Add New Field** box at the lower end of the right side column. Select *string*, *boolean*, *integer*, or *float*, depending on the type of data that you wish to log, and then click the **+ Add** button.
![](img/Screenshot538-Log_sheet_template_250.png)
When the template is in the format you require, click the **Save** button, and **Set Default Template** if you wish. The new template will now be listed on the History Templates page. If you have set a new default template, any changes will be visible on the tabs of the Playout History page.

View File

@ -1,514 +0,0 @@
<!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>
<h2 id="database-and-rabbitmq-hosts">Database and RabbitMQ hosts</h2>
<p>Optionally, you may wish to edit the file <em>/etc/airtime/airtime.conf</em> to set the PostgreSQL database host, and the username and password to connect to the database with:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo nano /etc/airtime/airtime.conf
</code></pre></div></div>
<p>You can also set options for RabbitMQ messaging, the LibreTime server and SoundCloud uploads in this file, although you should not normally need to adjust the defaults unless you are running a large LibreTime system distributed across multiple servers. To run the LibreTime server in demo mode, which changes the greeting on the login page and prevents user accounts from being created or modified, set the value of <em>demo</em> to 1.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[database]
host = localhost
dbname = airtime
dbuser = airtime
dbpass = airtime
[rabbitmq]
host = 127.0.0.1
port = 5672
user = airtime
password = XXXXXXXXXXXXXXXXXXXX
vhost = /airtime
[general]
api_key = XXXXXXXXXXXXXXXXXXXXX
web_server_user = www-data
airtime_dir = /usr/share/airtime
base_url = libretime.example.com
base_port = 80
base_dir = /
cache_ahead_hours = 1
[monit]
monit_user = guest
monit_password = airtime
[soundcloud]
connection_retries = 3
time_between_retries = 60
[demo]
demo = 0
</code></pre></div></div>
<p>Save and close the file with <strong>Ctrl+O</strong> and <strong>Ctrl+X</strong>. In order to update the configuration
used by the various components of LibreTime, run the following commands</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo systemctl restart libretime-liquidsoap
sudo systemctl restart libretime-playout
sudo systemctl restart libretime-celery
sudo systemctl restart libretime-analyzer
</code></pre></div></div>
<h2 id="changing-the-default-postgresql-passwords">Changing the default PostgreSQL passwords</h2>
<p>Two of the most important passwords that should be changed <em>immediately</em> after installation
are the passwords used by the PostgreSQL database.
It is strongly recommended that you do this before exposing your server to the internet beyond your internal network.</p>
<ol>
<li>Login to PostgreSQL with <code class="highlighter-rouge">sudo -u postgres psql</code>. The PostgreSQL shell - <code class="highlighter-rouge">postgres=#</code> - means that you have logged in successfully.</li>
<li>Change the admin password with <code class="highlighter-rouge">ALTER USER postgres PASSWORD 'myPassword';</code>, where <code class="highlighter-rouge">myPassword</code> is the new password.
Make sure to include the semicolon at the end! A response of <code class="highlighter-rouge">ALTER ROLE</code> means that the command ran successfully.</li>
<li>Change the password for the <em>airtime</em> user with <code class="highlighter-rouge">ALTER USER airtime WITH PASSWORD 'new_password';</code>
A response of <code class="highlighter-rouge">ALTER ROLE</code> means that the command ran successfully.</li>
<li>If all is successful, logout of PostgreSQL with <code class="highlighter-rouge">\q</code>, go back to <em>/etc/airtime/airtime.conf</em> to edit the password
in the config file, and restart all services mentioned in the previous section.</li>
</ol>
<h2 id="api-client-configuration">API client configuration</h2>
<p>If you have changed the <em>base_url</em>, <em>base_port</em> or <em>base_dir</em> setting in <em>/etc/airtime/airtime.conf</em> from the defaults, you will probably also have to update the <em>Hostname</em> settings in the file <em>/etc/airtime/api_client.cfg</em> accordingly.**</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>bin_dir = /usr/lib/airtime/api_clients
api_key = 'XXXXXXXXXXXXXXXXXXXX'
api_base = api
host = libretime.example.com
base_port = 80
base_dir = /
</code></pre></div></div>
<h2 id="apache-max-file-size-configuration">Apache max file size configuration</h2>
<p>By default, the maximum upload file size is 500 MB, which may not be large enough for some stations, especially if they are uploading prerecorded shows. The setting for this is located in <em>/etc/apache2/sites-available/airtime.config</em>. Search for and update the following in megabytes:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>; Maximum allowed size for uploaded files.
upload_max_filesize = 40M
; Must be greater than or equal to upload_max_filesize
post_max_size = 40M
</code></pre></div></div>
<p>For quick reference, 1024 MB = 1 GB and 2048 MB = 2 GB, but most will be okay with rounding to the nearest thousand. After updating the config file, restart Apache by <code class="highlighter-rouge">sudo systemctl apache restart</code>.</p>
<h2 id="playout-and-recorder-settings">Playout and recorder settings</h2>
<p>Settings for pypo, the playout and recording engine used by LibreTime, are found in the file <em>/etc/airtime/airtime.conf</em>. After making changes to this file, you will have to issue the command:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo systemctl restart libretime-playout
</code></pre></div></div>
<p>for the changes to take effect.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>############################################
# pypo - configuration #
############################################
# Set the type of client you are using.
# Currently supported types:
# 1) "obp" = Open Broadcast Platform
# 2) "airtime"
#
api_client = airtime
############################################
# Cache Directories #
# *include* trailing slash !! #
############################################
cache_dir = /var/tmp/airtime/pypo/cache/
file_dir = /var/tmp/airtime/pypo/files/
tmp_dir = /var/tmp/airtime/pypo/tmp/
############################################
# Setup Directories #
# Do *not* include trailing slash !! #
############################################
cache_base_dir = /var/tmp/airtime/pypo
bin_dir = /usr/lib/airtime/pypo
log_base_dir = /var/log/airtime
pypo_log_dir = /var/log/airtime/pypo
liquidsoap_log_dir = /var/log/airtime/pypo-liquidsoap
############################################
# Liquidsoap settings #
############################################
ls_host = 127.0.0.1
ls_port = 1234
############################################
# RabbitMQ settings #
############################################
rabbitmq_host = localhost
rabbitmq_user = airtime
rabbitmq_password = XXXXXXXXXXXXXXXXXXXX
rabbitmq_vhost = /airtime
############################################
# pypo preferences #
############################################
# Poll interval in seconds.
#
# This will rarely need to be changed because any schedule changes are
# automatically sent to pypo immediately.
#
# This is how often the poll script downloads new schedules and files from the
# server in the event that no changes are made to the schedule.
#
poll_interval = 3600# in seconds.
# Push interval in seconds.
#
# This is how often the push script checks whether it has something new to
# push to liquidsoap.
#
# It's hard to imagine a situation where this should be more than 1 second.
#
push_interval = 1# in seconds
# 'pre' or 'otf'. 'pre' cues while playlist preparation
# while 'otf' (on the fly) cues while loading into ls
# (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

@ -1,82 +0,0 @@
# Icecast and Shoutcast stream configuration
LibreTime supports direct connection to two popular streaming media servers, the open source **Icecast** (<http://www.icecast.org>) and the proprietary **SHOUTcast** (<http://www.shoutcast.com>). Apart from the software license, the main difference between these two servers is that Icecast supports simultaneous MP3, AAC, Ogg Vorbis or Ogg Opus streaming from LibreTime, whereas SHOUTcast supports MP3 and AAC streams but not Ogg Vorbis or Opus. The royalty-free Ogg Vorbis format has the advantage of better sound quality than MP3 at lower bitrates, which has a direct impact on the amount of bandwidth that your station will require to serve the same number of listeners. Ogg Opus also benefits from good sound quality at low bitrates, with the added advantage of lower latency than other streaming formats. Opus is now an IETF standard (<http://tools.ietf.org/html/rfc6716>) and requires Icecast 2.4 or later to be installed on the streaming server.
Ogg Vorbis playback is supported in **Mozilla Firefox**, **Google Chrome** and **Opera** browsers, via **jPlayer** (<http://jplayer.org/>), and is also supported in several popular media players, including VideoLAN Client, also known as VLC (<http://www.videolan.org/vlc/>). (See the chapter *Stream player for your website* on how to deliver **jPlayer** to your audience). Ogg Opus is relatively new and is supported natively in the very latest browsers, such as Mozilla Firefox 25.0, and media players including VLC 2.0.4 or later.
Streaming MP3 below a bitrate of 128kbps is not recommended for music, because of a perceptible loss of high audio frequencies in the broadcast playout. A 96kbps or 64kbps MP3 stream may be acceptable for voice broadcasts if there is a requirement for compatibility with legacy hardware playback devices which do not support Ogg Vorbis or Opus streams.
Because LibreTime supports simultaneous streaming in multiple formats, it is possible to offer one or more streams via your website, and another independent stream for direct connection from hardware players. You can test whether Ogg streams sound better at low bitrates for yourself, by using the **LISTEN** button in LibreTime's **Master Panel** to switch between streaming formats.
Conversely, you may have a music station which wants to stream at 160kbps or 192kbps to offer a quality advantage over stations streaming at 128kbps or less. Since Ogg, AAC and MP3 formats use lossy compression, listeners will only hear the benefit of higher streaming bitrates if the media files in the LibreTime storage server are encoded at an equivalent bitrate, or higher.
UTF-8 metadata in Icecast MP3 streams
-------------------------------------
When sending metadata about your stream to an Icecast server in non-Latin alphabets, you may find that Icecast does not display the characters correctly for an MP3 stream, even though they are displayed correctly for an Ogg Vorbis stream. In the following screenshot, Russian characters are being displayed incorrectly in the *Current Song* field for the MP3 stream:
![](img/Screenshot223-Icecast_UTF-8_metadata.png)
The solution is to specify that the metadata for the MP3 mount point you are using should be interpreted using UTF-8 encoding. You can do this by adding the following stanza to the */etc/icecast2/icecast.xml* file, where *libretime.mp3* is the name of your mount point:
  <mount>
       <mount-name>/libretime.mp3</mount-name>
       <charset>UTF-8</charset>
  </mount>
After saving the */etc/icecast2/icecast.xml* file, you should restart the Icecast server:
sudo invoke-rc.d icecast2 restart
Restarting icecast2: Starting icecast2
Detaching from the console
icecast2.
Icecast handover configuration
------------------------------
In a typical radio station configuration, the live output from the broadcast studio and the scheduled output from LibreTime are mixed together before being sent further along the broadcast chain, to a transmitter or streaming media server on the Internet. (This may not be the case if your LibreTime server is remote from the studio, and you are using the **Show Source Mount Point** or **Master Source Mount Point** to mix live and scheduled content. See the *Stream Settings* chapter for details).
If your **Icecast** server is hosted in a remote data centre, you may not have the option to handover the streaming media source manually, because you have no physical access to connect a broadcast mixer to the server. Disconnecting the stream and beginning another is less than ideal, because the audience's media players will also be disconnected when that happens.
The **Icecast** server has a *fallback-mount* feature which can be used to move clients (media players used by listeners or viewers) from one source to another, as new sources become available. This makes it possible to handover from LibreTime output to a show from another source, and handover to LibreTime again once the other show has ended.
To enable fallback mounts, edit the main Icecast configuration file to define the mount points you will use, and the relationship between them.
sudo nano /etc/icecast2/icecast.xml
The example *<mount>* section provided in the *icecast.xml* file is commented out by default. Before or after the commented section, add three mount point definitions. The default mount point used by LibreTime is */airtime\_128* which is shown in the */etc/airtime/liquidsoap.cfg* file. You must also define a mount point for the live source (called */live.ogg* in this example) and a mount point for the public to connect to (called */stream.ogg* in this example).
<mount>
<mount-name>/airtime_128</mount-name>
<hidden>0</hidden>
</mount>
<mount>
<mount-name>/live.ogg</mount-name>
<fallback-mount>/airtime_128</fallback-mount>
<fallback-override>1</fallback-override>
<hidden>0</hidden>
</mount>
<mount>
<mount-name>/stream.ogg</mount-name>
<fallback-mount>/live.ogg</fallback-mount>
<fallback-override>1</fallback-override>
<hidden>0</hidden>
</mount>
These mount point definitions mean that a client connecting to a URL such as *http://icecast.example.com:8000/stream.ogg* will first fall back to the */live.ogg* mount point if it is available. If not, the client will fall back in turn to the */airtime\_128* mount point for LibreTime playout.
Setting the value of *<fallback-override>* to 1 (enabled) means that when the */live.ogg* mount point becomes available again, the client will be re-connected to it.  If you wish to hide the */airtime\_128* and */live.ogg* mount points from the public Icecast web interface, set the value of *<hidden>* in each of these definitions to 1.
Source configuration
--------------------
Connect the other source to the Icecast server with the same parameters defined in the */etc/airtime/liquidsoap.cfg* file, except for the mount point. This should one of the mount points you have defined in the */etc/icecast2/icecast.xml* file, such as */live.ogg* in the example above.
To configure **Mixxx** for streaming to Icecast, click *Options*, *Preferences*, then *Live Broadcasting*. For server *Type*, select the default of *Icecast 2* when streaming to Debian or Ubuntu servers, as this is the current version of Icecast supplied with those GNU/Linux distributions.
![](img/Screenshot123-Mixxx_Preferences.png) 
By default, Icecast streams are buffered to guard against network problems, which causes latency for remote listeners. When monitoring the stream from a remote location, you may have to begin the live stream a few seconds before the previous stream ends to enable a smooth transition.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 242 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 544 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 560 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 337 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 317 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

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