How to do community radio workshop

From HacktionLab: A UK-wide network tech-activists providing meet-ups, events, workshops, national skillshare gatherings and hacklabs
Jump to navigationJump to search

Content

This workshop is a practical knowledge-sharing session drawing on the experience of those attending it and the articles at RadioVague:


  1. Overview of streaming based on this RadioVague article. Covers the basic block components of the stream source, server and client framework, and also should include something about publishing of streams (announcements).
  2. Stream source:
    1. Looking at audio equipment (based around this article:
      1. Types of microphone
      2. Cables and connectors
      3. Mixers
      4. Sound cards
      5. The laptop
        1. Windows + WinAmp (sending MP3 and sending OGG
        2. OS X + Nicecast
        3. Linux + Darkice/Ardour
        4. Campcaster
  3. Streaming server
    1. Run one yourself or use another one?
      1. Icecast vs Shoutcast vs Quicktime vs Real vs FMS (Red5 and FMS)
      2. GISS and other such projects providing free and open servers.
  4. Clients
    1. Announcing your stream on the net
    2. Providing links to your stream
    3. Providing embedded players on your site (iTheora, JWPlayer, Adobe Flash Media Playback and Adobe OSMF Strobe Media Playback )
    4. Producing and providing podcasts (
  5. Hooking it all up: Producing audio and a programme
    1. Designing a schedule
    2. Producing a jingle
    3. Mobile recording and broadcasting
    4. Recording your shows for prosperity and podcasting (e.g. http://www.radiovague.com/creamtease/vaguecast.xml)

Examples

Darkice configuration file

Podcast XML example

http://www.radiovague.com/creamtease/vaguecast.xml

<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
  <channel>
    <ttl>60</ttl>
    <title>Radio Vague presents Cream Tease</title>
    <link>http://www.radiovague.com/creamtease/</link>
    <language>en-GB</language>
    <copyright>℗ & © 2009 Radio Vague</copyright>

    <itunes:subtitle>Ninety minutes of live music and special guests from Oxford UK</itunes:subtitle>
    <itunes:author>Cream Tease / Radio Vague</itunes:author>
    <itunes:summary>
      A new monthly regular for Sundays on Radio Vague starting at 4.30pm and running until 6pm.  With a host of guests, Cream Tease pulls in the best of live music and gossip from in and around Oxford.
    </itunes:summary>
    <itunes:owner>
      <itunes:name>Cream Tease / Radio Vague</itunes:name>
      <itunes:email>creamtease@radiovague.com</itunes:email>

    </itunes:owner>
    <itunes:image href="http://www.radiovague.com/creamtease/cream-tea-small.jpg" />
    <itunes:category text="Arts & Entertainment"/>
    <itunes:category text="Public Radio"/>

    <item>
      <title>Cream Tease 13/09/2009: When the vikings invaded Mexico (they stopped by Whitby on the way)</title>
      <itunes:author>Cream Tease / Radio Vague</itunes:author>

      <itunes:subtitle>Cream Tease show of 13th September 2009</itunes:subtitle>
      <itunes:summary>The first edition of the Cream Tease took place on 13th September 2009 and the 90 minute show tackled topics as difficult and wide-reaching as holidaying in Whitby, whether Holst was a german spy and how toplessness is the only way to truly be at one with yourself.  All brought to you with very special guests Alex, Ali, Dave and Ed, your host DJ 1-Eye and delicious scones, strawberry jam and cream.  Yum!</itunes:summary>
      <enclosure url="http://live1.radiovague.com:8000/archives/creamtease/creamtease-090913.mp3" length="103656744" type="audio/mpeg" />
      <guid>http://live1.radiovague.com:8000/archives/creamtease/creamtease-090913.mp3</guid>
      <pubDate>Sun, 13 Sep 2009 16:30:00 GMT</pubDate>
      <itunes:duration>1:34:37</itunes:duration>

      <itunes:keywords>live music oxford england cream teatime gossip news chat</itunes:keywords>
    </item>

    <item>
      <title>Cream Tease 11/10/2009: My favourite nerd girl loved a crooner</title>
      <itunes:author>Cream Tease / Radio Vague</itunes:author>
      <itunes:subtitle>Cream Tease show of 11th October 2009</itunes:subtitle>

      <itunes:summary>The Cream Tease's second outing happened on 11th October 2009.  90 minutes of some great tracks interspaced with guests going on about nerd girls, actors that are singers, recent eco-successes in compost corner and festivals.  Brought to you with very special guests Alex, Ali, Dave and Ed, your host DJ 1-Eye and delicious scones, strawberry jam and cream.  Yum!</itunes:summary>
      <enclosure url="http://live1.radiovague.com:8000/archives/creamtease/creamtease-091011.mp3" length="127665098" type="audio/mpeg" />
      <guid>http://live1.radiovague.com:8000/archives/creamtease/creamtease-091011.mp3</guid>
      <pubDate>Sun, 11 Oct 2009 16:30:00 GMT</pubDate>
      <itunes:duration>1:34:37</itunes:duration>
      <itunes:keywords>live music oxford england cream teatime gossip news chat compost corner green issues sticky jammy jamming</itunes:keywords>

    </item>

    <item>
      <title>Cream Tease 08/11/2009: Making moutains out of molehills</title>
      <itunes:author>Cream Tease / Radio Vague</itunes:author>
      <itunes:subtitle>Cream Tease show of 8th November 2009</itunes:subtitle>
      <itunes:summary>The Cream Tease was pleased to be joined by some salacious and solubrious new guests for our November show, with tales of pioneering mountaineering expeditious, the issue of the red poppy and rememberance sunday, another dig around in our <em>compost corner</em> and a lucky competition winner.</itunes:summary>

      <enclosure url="http://live1.radiovague.com:8000/archives/creamtease/creamtease-091108.mp3" length="76705112" type="audio/mpeg" />
      <guid>http://live1.radiovague.com:8000/archives/creamtease/creamtease-091108.mp3</guid>
      <pubDate>Sun, 8 Nov 2009 16:30:00 GMT</pubDate>
      <itunes:duration>1:50:10</itunes:duration>
      <itunes:keywords>live music oxford england cream teatime gossip news chat compost corner green issues sticky jammy jamming</itunes:keywords>
    </item>

    <item>
      <title>Cream Tease 06/12/2009: The low-cal edition</title>
      <itunes:author>Cream Tease / Radio Vague</itunes:author>
      <itunes:subtitle>Cream Tease show of 6th December 2009</itunes:subtitle>
      <itunes:summary>Somewhat shorter (by 12 minutes) than our previous shows, this not-a-Christmas-special edition covered topics such as Christmas cards, art gallery visits around London and other cities, a super competition with another lucky winner and some tunes as usual.</itunes:summary>
      <enclosure url="http://live1.radiovague.com:8000/archives/creamtease/creamtease-091206.mp3" length="98195529" type="audio/mpeg" />
      <guid>http://live1.radiovague.com:8000/archives/creamtease/creamtease-091206.mp3</guid>

      <pubDate>Sun, 11 Oct 2009 16:30:00 GMT</pubDate>
      <itunes:duration>1:18:04</itunes:duration>
      <itunes:keywords>live music oxford england cream teatime gossip news chat compost corner green issues sticky jammy jamming</itunes:keywords>
    </item>

  </channel>
</rss>

..

JW Player embedding code, connecting to FMS

http://picassolive.xtreamlab.net/prova.html

   <script type="text/javascript" src="mediaplayer/swfobject.js"></script>

    <div id="player1">This text will be replaced</div>

    <script type="text/javascript">
      var so = new SWFObject('mediaplayer/player.swf','mpl','340','272','9');
      so.addParam('wmode','opaque');
      so.addParam('allowscriptaccess','always');
      so.addParam('allowfullscreen','true');
      so.addParam('flashvars','&image=http://w3.bcn.es/fitxers/icub/museupicasso/fotoninainterior.036.jpg&file=picassolive&provider=rtmp&streamer=rtmp://live1.xtreamlab.net/live');
      so.write('player1');
    </script>

Strobe Media Playback embedding example

http://picassolive.xtreamlab.net/provasmp.html

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0 ,0" 
width="360" height="288"> 
  <param name="movie" value="10.0/StrobeMediaPlayback.swf"></param>
  <param name="flashvars" value="src=rtmp%3A%2F%2Flive1.xtreamlab.net%2Flive%2Fpicassolive&poster=h
ttp%3A%2F%2Fw3.bcn.es%2Ffitxers%2Ficub%2Fmuseupicasso%2Ffotoninainterior.036.jpg&playButtonOverlay=false&streamType=live&scaleMode=none"></param>
  <param name="allowFullScreen" value="true"></param>
  <param name="allowscriptaccess" value="always"></param>
  <embed src="FlashMediaPlayback.swf" type="application/x-shockwave-flash" allowscriptaccess="always" 
allowfullscreen="true" width="360" height="288" 
flashvars="src=rtmp%3A%2F%2Flive1.xtreamlab.net%2Flive%2Fpicassolive&
poster=http%3A%2%2Fw3.bcn.es%2Ffitxers%2Ficub%2Fmuseupicasso%2Ffotoninainterior.036.jpg&
playButtonOverlay=false&streamType=live&scaleMode=none"></embed>
</object>

RadioVague Icecast server XSLT examples

List of audio streams (MP3 and OGG)

http://live1.radiovague.com:8000/rvlist.xsl

<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
  <xsl:output omit-xml-declaration="yes" method="xml" indent="yes" encoding="ISO-8859-1" />
  <xsl:template match = "/icestats" >
    <xsl:if test="source">
      <xsl:for-each select="source">
	<xsl:if test="server_name">
	  <xsl:if test="(subtype = 'Vorbis') or (server_type = 'audio/mpeg')">
	    <li class="nav"><a href="http://live1.radiovague.com:8000{@mount}.m3u"><xsl:choose><xsl:when test="server_name = 'unnamed ices stream'"><xsl:value-of select="title" />
</xsl:when><xsl:otherwise><xsl:value-of select="server_name" /></xsl:otherwise></xsl:choose>
	    <span class="stream-details"> (
	    <xsl:choose>
	      <xsl:when test="subtype = 'Vorbis'">
		<xsl:if test="audio_bitrate"><xsl:text> </xsl:text><xsl:value-of select="audio_bitrate div 1000" /><xsl:text> </xsl:text><acronym title="kilobits per second">kb/s<
/acronym></xsl:if>
		<xsl:text> Ogg/Vorbis</xsl:text>
	      </xsl:when>
	      <xsl:otherwise>
		<xsl:if test="bitrate"><xsl:value-of select="bitrate" /><xsl:text> </xsl:text><acronym title="kilobits per second">kb/s</acronym></xsl:if>
		<xsl:if test="server_type = 'audio/mpeg'">
		  <xsl:text> MP3</xsl:text>
		</xsl:if>
	      </xsl:otherwise>
	    </xsl:choose>
	    <xsl:text> </xsl:text>
	    )</span></a></li>
	  </xsl:if>
	</xsl:if>
      </xsl:for-each>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

List of video streams

http://live1.radiovague.com:8000/vtvlist.xsl

<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
  <xsl:output omit-xml-declaration="yes" method="xml" indent="yes" encoding="ISO-8859-1" />
  <xsl:template match = "/icestats" >
    <xsl:if test="source">
      <ul class="nav">
	<xsl:for-each select="source">
	  <xsl:if test="server_name">
	    <xsl:if test="subtype = 'Vorbis/Theora'">
	      <li class="nav"><a href="http://live1.radiovague.com:8000{@mount}.m3u"><xsl:value-of select="server_name" />
	      (
	      <xsl:if test="frame_size">
		<xsl:text> </xsl:text>
		<xsl:value-of select="frame_size" />
		<xsl:if test="frame_rate">
		  <xsl:text> @ </xsl:text>
		  <xsl:value-of select="frame_rate" />
		  <acronym title="frames per second">fps</acronym>
		</xsl:if>
	      </xsl:if>
	      <xsl:if test="incoming_bitrate">
		<xsl:text>, </xsl:text>
		<xsl:value-of select="incoming_bitrate / 1000" />
		<xsl:text> </xsl:text><acronym title="kilobits per second">kb/s</acronym>
	      </xsl:if>
	      <xsl:text> Vorbis/Theora</xsl:text>
	      <xsl:text> </xsl:text>
	      )</a></li>
	    </xsl:if>
	  </xsl:if>
	</xsl:for-each>
      </ul>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

List of audio streams as an RSS (RDF) feed

http://live1.radiovague.com:8000/rvrdflist.xsl

<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
  <xsl:output omit-xml-declaration="no" method="xml" indent="yes" encoding="ISO-8859-1" />
  <xsl:template match = "/icestats" >
    <rdf:RDF
	xmlns="http://purl.org/rss/1.0/"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:str="http://web.resource.org/rss/1.0/modules/streaming/"
	>
      <channel rdf:about="http://www.radiovague.com">
	<title>Radio Vague</title>
	<link>http://www.radiovague.com</link>
	<description>RSS feed of live audio streams from Radio Vague. Copy the URL of this document and open it in your RSS news reader.  For more information visit the 'What is R
SS?' link from the Radio Vague home page.  Somewhere on your dial we may be syndicating our transmissions.</description>
	<str:type>both</str:type>
	<dc:language>en-gb</dc:language>
	<dc:rights>Copyright 2002-2006 Radio Vague</dc:rights>
	<dc:publisher>Radio Vague</dc:publisher>
	<dc:creator>someone@radiovague.com</dc:creator>
	<dc:subject>Live audio streams from Radio Vague</dc:subject>
	<dc:date>2005-12-14T00:00+00:00</dc:date>
	<syn:updatePeriod>hourly</syn:updatePeriod>
	<syn:updateFrequency>6</syn:updateFrequency>
	<syn:updateBase>1970-01-01T00:00+00:00</syn:updateBase>
	<xsl:if test="source">
	  <items>
	    <rdf:Seq>
	      <xsl:for-each select="source">
		<xsl:if test="(subtype = 'Vorbis') or (server_type = 'audio/mpeg')">
		  <rdf:li>
		    <xsl:attribute name="rdf:resource">http://live1.radiovague.com:8000<xsl:value-of select="@mount" />.m3u</xsl:attribute>
		  </rdf:li>
		</xsl:if>
	      </xsl:for-each>
	    </rdf:Seq>
	  </items>
	</xsl:if>
      </channel>
      <image rdf:about="http://www.radiovague.com/title.gif">
	<title>Radio Vague</title>
	<url>http://www.radiovague.com/title.gif</url>
	<link>http://www.radiovague.com</link>
      </image>
      <xsl:if test="source">
	<xsl:for-each select="source">
	  <xsl:if test="(subtype = 'Vorbis') or (server_type = 'audio/mpeg')">
	    <item>
	      <xsl:attribute name="rdf:about">http://live1.radiovague.com:8000<xsl:value-of select="@mount" />.m3u</xsl:attribute>
	      <title>RV: <xsl:value-of select="server_name" /></title>
	      <description><xsl:if test="server_description"><xsl:value-of select="server_description" /> - </xsl:if><xsl:if test="artist"><xsl:value-of select="artist" /> - </xsl
:if><xsl:if test="title"><xsl:value-of select="title" /></xsl:if></description>
	      <str:type>audio</str:type>
	      <link>http://live1.radiovague.com:8000<xsl:value-of select="@mount" />.m3u</link>
	      <xsl:choose>
		<xsl:when test="subtype = 'Vorbis'">
		  <str:codec>ogg/vorbis</str:codec>
		  <str:codec.downloadUri>http://www.vorbis.org</str:codec.downloadUri>
		</xsl:when>
		<xsl:otherwise>
		  <str:codec>audio/mpeg</str:codec>
		</xsl:otherwise>
	      </xsl:choose>
	      <str:associatedApplication>VLC</str:associatedApplication>
	      <str:associatedApplication.downloadUri>http://www.videolan.org/vlc/</str:associatedApplication.downloadUri>
	      <str:live>live</str:live>
	      <xsl:if test="audio_channels">
		<xsl:choose>
		  <xsl:when test="audio_channels = 1">
		    <str:codec.stereo>mono</str:codec.stereo>
		  </xsl:when>
		  <xsl:when test="audio_channels = 2">
		    <str:codec.stereo>stereo</str:codec.stereo>
		  </xsl:when>
		  <xsl:otherwise>
		    <xsl:value-of select="audio_channels" />
		  </xsl:otherwise>
		</xsl:choose>
	      </xsl:if>
	      <xsl:if test="audio_samplerate">
		<str:codec.sampleRate><xsl:value-of select="audio_samplerate" /></str:codec.sampleRate>
	      </xsl:if>
	      <str:live.contactUri>irc://darksun.psand.net:6667#rv</str:live.contactUri>
	    </item>
	  </xsl:if>
	</xsl:for-each>
      </xsl:if>
    </rdf:RDF>
  </xsl:template>
</xsl:stylesheet>

Kit list

  • large mixing desk (Beringher 24 channel)
  • small mixing desk (Yamaha 6 channel)
  • Edirol UA24 external sound card
  • 2 x standard SURE vocal mics
  • 1 x condensor mic
  • examples of assorted instrument mics
  • various leads for mics, instruments and computers
  • examples of connectors and converters (XLR, jack, mini-jack, phono)
  • laptop computers (Mac running Nicecast, Windows running WinAmp and Linux running Darkice/Campcaster)
  • headphones

Additional kit for recording workshop

  • various audio recording devices
  • microphones
  • headphones

Notes from Bradford 2010

Bradford 2010 Audio