<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="chapter.overview">
  <title>System Overview</title>
<!--
  <mediaobject>
    <imageobject>
      <imagedata fileref="manual-outputdefault.png" scale="30"/>
    </imageobject>
  </mediaobject>
-->
  <sect1 xml:id="sect.overview.introducting_rivendell">
    <title>Introducing Rivendell</title>
    <para>
      Rivendell is a digital audio content management and delivery system
      that is targeted for use in professional radio broadcast environments.
      It includes robust tools for the acquisition, organization, management
      and play out of audio material from and to a diverse array of sources
      and destinations.  Support for a wide variety of external third party
      hardware devices and software packages commonly used in the radio
      industry is featured, including interfaces for:
    </para>
    <para>
      <itemizedlist>
	<listitem>Audio Routing Switchers</listitem>
	<listitem>Satellite Downlink Receivers</listitem>
	<listitem>Audio Mixing Consoles</listitem>
	<listitem>Commercial Traffic and Music Scheduling Systems</listitem>
      </itemizedlist>
    </para>
    <para>
      Rivendell is made available under the terms of the
      <link linkend="appendix.gplv2">GNU General Public License,
      version 2</link>.
      As such, it comes with <emphasis>absolutely no warranty</emphasis>,
      not even the implied
      warranties of merchantability or fitness for a particular purpose.
      See the full text of the GPLv2 for details.
    </para>
    <para>
      Rivendell has been designed and developed from the ground up to run
      on the popular and highly stable <trademark>GNU/Linux</trademark>
      operating system. Full source code is available online at
      <link xlink:href="https://github.com/ElvishArtisan/rivendell">https://github.com/ElvishArtisan/rivendell</link>.
    </para>
    <para>
      Rivendell has been designed to be able to operate in a wide variety
      of roles, ranging from single, self-contained workstations to large,
      multi-station clusters consisting of multiple workstations and
      centralized servers.  Also included are redundancy and hot-standby
      capabilities to allow for reliable operation even in the face of
      hardware faults.
    </para>
    <para>
      Rivendell is implemented as a set of interactive tools or 'modules'
      that collectively provide the complete functionality of the system.
      Briefly, these modules and their functions are:
    </para>
    <para>
      <variablelist>
	<varlistentry>
	  <term><link linkend="chapter.rdlibrary">RDLibrary</link></term>
	  <listitem>
	    Library content management
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term><link linkend="chapter.rdcatch">RDCatch</link></term>
	  <listitem>
	    Automatic time-driven event scheduler
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term><link linkend="chapter.rdairplay">RDAirPlay</link></term>
	  <listitem>
	    On-air play out application
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term><link linkend="chapter.rdlogedit">RDLogEdit</link></term>
	  <listitem>
	    Log editing and voicetracking tool
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term><link linkend="chapter.rdlogmanager">RDLogManager</link></term>
	  <listitem>
	    Automated log generation and interface utility
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term><link linkend="chapter.rdlogin">RDLogin</link></term>
	  <listitem>
	    Set the current user on a Rivendell host
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term><link linkend="chapter.rdcartslots">RDCartSlots</link></term>
	  <listitem>
	    Emulate a traditional broadcast cart machine
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term>RDPanel</term>
	  <listitem>
	    Large &quot;cart wall&quot; application
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term>RDCastManager</term>
	  <listitem>
	    Podcast feed manager
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term><link linkend="chapter.rdadmin">RDAdmin</link></term>
	  <listitem>
	    System wide configuration
	  </listitem>
	</varlistentry>
      </variablelist>
    </para>
    <para>
      The operation of each of these modules is explained in detail in the
      chapters that follow.  However, we first need to cover some basic
      concepts common to all Rivendell modules.
    </para>
    <sect2 xml:id="sect.overview.the_rivendell_object_paradigm">
      <title>The Rivendell Object Paradigm</title>
      <para>
	All Rivendell modules make use of the following four classes of
	system resources:
      </para>
      <para>
	<itemizedlist>
	  <listitem>
	    <link linkend="sect.overview.hosts">Hosts</link>
	  </listitem>
	  <listitem>
	    <link linkend="sect.overview.users">Users</link>
	  </listitem>
	  <listitem>
	    <link linkend="sect.overview.groups">Groups</link>
	  </listitem>
	  <listitem>
	    <link linkend="sect.overview.services">Services</link>
	  </listitem>
	</itemizedlist>
      </para>
      <para>
	We'll cover each of these concepts in turn.
      </para>
      <sect3 xml:id="sect.overview.hosts">
	<title>Hosts</title>
	<para>
	  Every physical computer within a given network that is running
	  Rivendell software is referred to as a <emphasis>host</emphasis>.
	  Any host in a
	  Rivendell network can be individually configured and controlled
	  from any other host (provided the system administrator has enabled
	  this capability).  Hosts can be used for a wide variety of
	  applications, including content ingestion and management,
	  automatic recording (sometimes referred to as
	  &quot;netcatching&quot;),
	  on-air play out or log (sometimes also referred to as playlist)
	  generation.  It is also possible for a single host to perform all
	  of these functions.
	</para>
      </sect3>
      <sect3 xml:id="sect.overview.users">
	<title>Users</title>
	<para>
	  Every host on a Rivendell network has one or more
	  <emphasis>users</emphasis> available
	  to it.  In this context, a 'user' is merely a set of access
	  policies established by the system administrator that defines what
	  tasks that user is or is not allowed to perform. The set of
	  available users is global to every host in a given Rivendell system;
	  with each host operating under exactly one user at a time. Each
	  host also has one user designated to be the
	  <emphasis>default user</emphasis>. As the name
	  suggests, this is the set of user policies that are loaded by
	  default when the system starts up.  It is also possible to change
	  the user currently in use on a given host by running the RDLogin
	  module. 
	</para>
      </sect3>
      <sect3 xml:id="sect.overview.groups">
	<title>Groups</title>
	<para>
	  A Rivendell <emphasis>group</emphasis> is a system of categories
	  that is used by the
	  audio library to classify and organize the audio within the library.
	  Groups are a very powerful capability, and many operations within
	  Rivendell can be specified on the basis of group membership.
	  The actual classification scheme, including the number of available
	  groups and their names, is completely arbitrary so as to allow each
	  facility to tailor a schema that best fits its own operational
	  requirements. Designing and implementing the group schema is one
	  of the most important tasks facing the Rivendell system
	  administrator, as a well-designed schema can make long-term
	  maintenance and management of the system substantially easier
	  vis-a-vis a poorly thought out one.  We will cover groups in
	  detail in the chapters devoted to the RDLibrary and RDAdmin modules.
	</para>
      </sect3>
      <sect3 xml:id="sect.overview.services">
	<title>Services</title>
	<para>
	  Every facility at which Rivendell is deployed is presumed to have 
	  one or more ultimate destinations for which audio is intended.
	  These could be radio stations --e.g. WAVA--, satellite uplink
	  channels, live Internet audio streams, or any mix of the above.
	  Each of these sorts of destinations is referred to in Rivendell
	  as a <emphasis>service</emphasis>, and certain parameters,
	  particularly as regards
	  audio play out and log (playlist) creation, can be configured on
	  the basis of what particular service is being referenced.
	</para>
      </sect3>
    </sect2>
    <sect2 xml:id="sect.overview.the_rivendell_hardware_paradigm">
      <title>The Rivendell Hardware Paradigm</title>
      <para>
	In addition to the core computer hardware (CPU, motherboard, etc),
	each Rivendell host typically interacts with specialized hardware
	required to accomplish the task at hand.  Three main categories of
	such 'special' hardware are of interest to us here, the three being
	audio adapters, serial ports and GPIO/switcher devices.  We'll
	cover each below.
      </para>
      <sect3 xml:id="sect.overview.audio_adapters">
	<title>Audio Adapters</title>
	<para>
	  An <emphasis>audio adapter</emphasis> in Rivendell is simply a
	  device or facility for
	  getting audio into and/or out of a host on a realtime basis.
	  Often this will be a sound card, although other
	  possibilities (such as AoIP or direct routing
	  to other audio applications) also exist.  The three main classes
	  of audio adapters supported by Rivendell are:
	</para>
	<para>
	  <variablelist>
	    <varlistentry>
	      <term>Advanced Linux Sound Architecture (ALSA)</term>
	      <listitem>
		<para>
		  The standard Linux sound card driver starting with the 2.6.x
		  kernel series, ALSA supports a huge array of commercially
		  available sound cards, ranging from entry level 'game' cards
		  to high-end cards aimed at professional audio uses.
		  More information, including a current list of supported
		  cards, is available at the ALSA web site,
		  <link xlink:href="http://www.alsa-project.org/">http://www.alsa-project.org/</link>.
		</para>
	      </listitem>
	    </varlistentry>
	    <varlistentry>
	      <term>HPI Adapters</term>
	      <listitem>
		<para>
		  These are high-performance sound cards manufactured by
		  AudioScience Corporation.  Designed and built specifically
		  for broadcast automation applications, many feature advanced
		  capabilities (such as on-board MPEG codecs and AES3 i/o)
		  specially aimed for use in that setting.  They are so-called
		  because Rivendell uses AudioScience's special 'HPI' driver
		  to access and control them.  More information is available
		  at AudioScience's web site at 
		  <link xlink:href="http://www.audioscience.com/">http://www.audioscience.com/</link>.
		</para>
	      </listitem>
	    </varlistentry>
	    <varlistentry>
	      <term>JACK Audio Interconnect Kit</term>
	      <listitem>
		<para>
		  JACK is not a class of hardware devices, but rather
		  an audio 'framework' that allows compliant applications to
		  share audio resources and route audio in realtime amongst
		  themselves. JACK is different from similar efforts within
		  the Linux realm in that it was designed from the ground up
		  for professional audio work, with particular focus upon
		  low-latency operation and synchronous  execution of all
		  clients. More information can be found at the JACK web
		  site, <link xlink:href="https://jackaudio.org/">https://jackaudio.org/</link>.
		</para>
	      </listitem>
	    </varlistentry>
	  </variablelist>
	</para>
      </sect3>
      <sect3 xml:id="sect.overview.serial_ports">
	<title>Serial Ports</title>
	<para>
	  Commonly known in the DOS/Windows world as 'COM ports', 
	  <emphasis>serial ports</emphasis> are often used to communicate
	  with outboard gear, such as
	  satellite receivers and audio switchers.  Up to eight serial ports
	  can be accessed simultaneously by each Rivendell host.
	</para>
      </sect3>
      <sect3 xml:id="sect.overview.gpio_switcher_devices">
	<title>GPIO/Switcher Devices</title>
	<para>
	  Because these capabilities are often (although not always)
	  bundled together in the same device, Rivendell lumps GPIO and
	  switcher devices together within the same class.
	  <emphasis>GPIO</emphasis> stands
	  for 'General Purpose Input Output'.  As the name implies, these
	  devices can be used to interface to a huge variety of outboard
	  equipment by means of control lines. <emphasis>GPI</emphasis>
	  (General Purpose Input)
	  lines can be used to sense changes in an outboard system's state
	  (and Rivendell programmed to take various actions on the basis of
	  that), while <emphasis>GPO</emphasis> (General Purpose Output)
	  lines can be used to
	  send commands to an outboard system.  The actual physical
	  interfacing of GPIO devices is complex and generally beyond
	  the scope of this document.  Readers are encouraged to consult
	  a good handbook on radio engineering for more information. 
	  A current list of GPIO/Switcher devices supported by Rivendell
	  can be found in <xref linkend="appendix.gpio_switcher_devices" />.
	</para>
      </sect3>
    </sect2>
  </sect1>
</chapter>
