Capturing and Encoding on the Cheap

November 1, 2002


Many years ago, when a station wanted to capture four, one-hour blocks of audio each day, it involved writing scripts that would interact with the GUI of the audio encoding tool (send an ALT-F to the encoder window, send the filename, send the down arrow four times). There would be problems with it, but for the most part, it worked for capturing the content. Each day the captured files would be edited by hand, manually up-loaded and then the HTML pages would be updated to show links to the new files.

I got tired of doing things manually and started looking for a better way. I left the capture program the way it was, and I wrote scripts to allow other people to edit the files automatically (the times were nearly always the same), and taught them how to upload them as well. I even created a CGI that wrote to an included HTML file, so that others could post the links to the Realmedia files without my interaction, simply by submitting a form from a browser. It still required manual labor, but it wasn't my labor, so I didn't mind nearly as much.

As time went by, some people began to mind, and I began exploring ways to automate more of the process. The script to interact with the encoder GUI was replaced with a command-line program, so there were fewer chances for something to go wrong. Because the files always needed the same amount of time removed from their beginning, I automated that as well. Then the files would be sent automatically via FTP to the server, and the links would be displayed only if the file existed. Completely automatic, but all done in a proprietary automation program.



Real Systems Real Producer has a command-line program called rmbatch, which can be set up to schedule encoding tasks.

Nowadays most of these tasks are fulfilled by the programs themselves, so users don't need to write a lot of custom code. It's almost as easy as point, click and leave.

Timing is everything

The single most important piece in this puzzle is the time source. Computer clocks are notoriously inaccurate, and this process requires capturing content from an accurate fixed schedule. If possible, use the same time source as the rest of the station, perhaps from the automation system or from a satellite feed or GPS clock. If those options aren't available, download one of the many programs designed to keep the computer's clock accurate from time sources like NIST, the Naval Observatory or Abouttime from Arachnoid.com. There are dozens of these programs available. Whichever you choose, install it, configure it to set the clock at least once an hour, and make sure it starts automatically when the computer is restarted. This will produce an accurate timebase to start from.



File-transfer programs can also be set up to automate file transfers, ensuring that the most recent file is always posted.

Schedule it: Nearly all operating systems now have a built-in scheduling program. Windows 98 offers Task Scheduler; Windows NT provides the AT command; Linux variants offer Cron; and Windows ME, XP and 2000 all have similar schedulers. If you are already familiar with it, you can even find a version of Cron for use on Windows.

Encode it: Real Systems Real Producer has built-in, command-line encoding with a program called rmbatch, so it's a natural choice for scheduled encoding (from a pre-existing file, or from a live source). After reading the manual and determining which settings to use (the user controls all of them, including bit rate, audio and video codecs, duration, filename, title, capture to a file and stream live to a server), simply create a scheduled task to run at the specified time. Check the documentation for the actual parameters, but for live encoding, it's something along the lines of this:

RMBatch.exe /L /O C:\foo.rm /T 0,1 /A 0 /V 0 /F 1 /B “My Clip”

Just set up a task with the scheduler and it is finished.

Edit it: Most task schedulers can only launch a program at the beginning of a minute, but odds are the content the user wants to encode starts 30 seconds after the minute. Simply encode more than is needed, and trim it later. Realproducer uses rmeditor, a command-line editor for encoded files. Add a second scheduled task, and remove the first 30 seconds of extraneous content. Again, check the documentation, but here's a quick usage guide:

rmeditor -i -o [-t ] [-a <author>] [-c <copyright>]</b></p><!--end paragraph--> <!--begin paragraph--><p><b>[-C <comment>] [-r <allow recording>] [-k <allow download>]</b></p><!--end paragraph--> <!--begin paragraph--><p><b>[-s <start time>] [-e <end time>] [-l <log file>] [-d <dump file>]</b></p><!--end paragraph--> <!--begin paragraph--><p><b>[-q <description>] [-n <keywords>] [-IN <allowing indexing>] [-AR <audience rating>]</b></p><!--end paragraph--> <!--begin paragraph--><p>Removing trailing content should be just as simple.</p><!--end paragraph--> <!--begin paragraph--><p>Upload it: Yes, you could spend a lot of time creating a scheduled task to upload the encoded content to the appropriate server. Or, write a command-line batch file to FTP the file and schedule it to run at the correct day and time using the operating system's built-in scheduler. It would work fine. Instead, save a lot of trouble and use an FTP program with its own scheduling function, such as WS_FTP Pro. A few easy clicks and the file is set up to be transferred without writing a single line of code.</p><!--end paragraph--> <!--begin paragraph--><p>Post it: There are many ways to display a link to the file on the station's Web page. One way is to always use the same file name for the encoded content, so the link is already on the page and the file just changes when it gets uploaded. A second way is to set up an additional scheduled FTP for the new HTML page, and have it upload after the encoded file has been uploaded. Yet another way is to use PHP, Perl or a similar language, and check for the existence of the encoded file on the server. If it exists, display the link in the page. Otherwise, it can display something else.</p><!--end paragraph--><h2>Alternate technologies</h2> <!--begin paragraph--><p>Apply these same principles to a system using Windows Media Encoder with one small change: the command-line encoding utility for Windows Media Encoder does not allow input to be from a live source. The user will have to capture the content to a .wav or .avi first by using some other command-line capture utility, and then run that file through the batch job Windows Media Encoder. The user will have to download the Windows Media 8 Encoding Utility (search the Microsoft website for wm8eutil) to get command-line ability for batch encoding, which will read something like this:</p><!--end paragraph--> <!--begin paragraph--><p><b>wm8eutil -input clip.avi -output clip.wmv</b></p><!--end paragraph--> <!--begin paragraph--><p>Serve it: There isn't much to discuss on this topic because once the encoded files are uploaded, and links have been posted to them on the website, it is automated about as much as it can be. But recent developments in server technology ask to be touched on here.</p><!--end paragraph--> <!--begin paragraph--><p>Real Networks (<a href="http://www.realnetworks.com" target="_blank">www.realnetworks.com</a>) has just released its new Helix Universal Server, which has the ability to stream nearly any file format: Real Audio (.rm), Real Video (.rm, .rmvb), Real Pix (.rp), Real Text (.rt), Macromedia Flash (.swf), Windows Media (.asf, .wma, .wmv), Quicktime (.mov), MPEG-1, MPEG-2, MPEG-4, MP3 and others with the addition of plug-ins. This means there can be a Real Networks and a Windows Media stream without the need for two separate streaming servers.</p><!--end paragraph--> <!--begin paragraph--><p>The drawback of this single-server system is that Real Server licenses will now cover Windows Media streams as well. The user now has to pay for concurrent streams of Windows Media, something that previously wasn't a concern. With a stand-alone Windows Media server, there can be as many streams as desired, all license-free and cost free.</p><!--end paragraph--> <!--begin paragraph--><p>This is just the basis of a system with much more potential. For example, with these tools someone has to set up four scheduled tasks each time he wanted to encode, upload and post anything — fine for a one-time broadcast, but not ideal for a show that airs Monday through Friday. Write simple scripts to automatically name the encoded file for the date and time it gets encoded, and not have to set up a scheduled task for each encoded file. I have one setup that encodes 24 one-hour files each day, and makes a month's worth of audio available online, all with one scheduled task.</p><!--end paragraph--> <!--begin paragraph--><p><table align="right" width="255"> <tr> <td> <hr color="ff0000" /> <img src="/oldradimage/images/archive/1102/211br2204.jpg" /><br /> <font color="0000FF" size="-2">Most encoding software packages provide utilities to automate some functions.</font> <hr color="ff0000" /> </td> </tr> </table> </p><!--end paragraph--><h2>Automation programs</h2> <!--begin paragraph--><p>If there is something that simply cannot be scheduled because it doesn't have a built-in scheduler, and there is no command-line version of the program, there are a couple of programs designed to interact with just about anything else on a machine.</p><!--end paragraph--> <!--begin paragraph--><p>Winbatch from Wilson Windowware (<a href="http://www.winbatch.com" target="_blank">www.winbatch.com</a>) is an interpreter-based language that can be used to automate nearly any Windows task. It has extenders for the language to let you interact with network servers (Microsoft or Netware), ODBC databases, printers, serial and parallel ports. Winbatch makes it a snap to name files based on date and time of encoding.</p><!--end paragraph--> <!--begin paragraph--><p>Automize from Hitek Software (<a href="http://www.hiteksoftware.com" target="_blank">www.hiteksoftware.com</a>) is a cross-platform automation package written primarily in Java, so it can be used on Windows machines, Macs and even Linux machines with a GUI. It should also be able to automate most redundant tasks.</p><!--end paragraph--> <!--begin paragraph--><p>No matter what route the station chooses, be sure to write down what is and what is not automated. Six months later, when there is a problem, it's nice to have notes about what is supposed to be happening before you try to fix it.</p><!--end paragraph--> <!--begin paragraph--><p><hr /> </p><!--end paragraph--> <!--begin paragraph--><p><i>Harrison is senior applications developer for Toad.net, an Internet service provider in Severna Park, MD.</i></p><!--end paragraph--> <!--begin paragraph--><p><hr /></p><!--end paragraph--> </div></div><!--end page--><!--endclickprintinclude--><!-- Pagination at the bottom of the page --><div class="pagination"></div><!-- /Pagination --><br /><div class="icopyCont"><p class="icopy"><!-- template test --></p></div><!--#include virtual="/radio_rating_widget.txt" --><!--#include virtual="/article_commenting.txt" --><!--#include virtual="/most_recent.txt" --><!-- GOOGLE AD CREATIVE START --><script type="text/javascript"><!-- function google_ad_request_done(ads) { var s = ''; if (ads.length == 0) { return; } s += '<div class="googlead">'; s += '<p class="googleadTitle"><span>' + google_attribution_text + '</span></p>'; for (i = 0; i < ads.length; ++i) { s += '<p><a href="' + ads[i].url + '" >' + ads[i].line1 + '</a><br>' + ads[i].line2 + ' ' + ads[i].line3 + '<br> <span class="googleadViewLink">' + ads[i].visible_url + '</span></p>'; } s += '</div>'; document.write(s); return; } // need to customize the colors in the ad unit? do it here with these vars google_attribution_text = 'Ads by Google'; google_ad_output = 'js'; google_max_num_ads = '3'; google_ad_client = 'ca-penton_html'; google_ad_channel = 'fixed-bottom-js'; google_safe = 'high'; // turn this to 'off' when launching! google_ad_test = 'off';// --></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> <!-- GOOGLE AD CREATIVE END --><!-- San Template Test 10/14/2011 --> </td> </tr> </table> <script> /** * Function that tracks a click on an outbound link in Google Analytics. * This function takes a valid URL string as an argument, and uses that URL string * as the event label. */ var trackOutboundLink = function(url) { ga('send', 'event', 'newsletter_on_article_RM', 'click', url, {'hitCallback': function () { return true; } }); } </script> <h4>Want to read more stories like this?<br> <a style="text-decoration: underline;" onclick="trackOutboundLink('https://www.b2bmediaportal.com/nbmedia/subscribe.aspx?b=RDM');" target="_blank" href="https://www.b2bmediaportal.com/nbmedia/subscribe.aspx?b=RDM">Get our Free Newsletter Here!</a></h4> </div> <!-- /POST BODY --> <!--//// SHARE THIS POST /////--> <div class="share-this-post row clearfix"> <h4>Share This Post</h4> <div class="post-share bot"> <!--**** MAKE SURE TO CHANGE ADDTHIS:URL ****--> <div class="addthis_toolbox addthis_counter_style clearfix"> <a addthis:url='http://www.radiomagonline.com/misc/0082/capturing-and-encoding-on-the-cheap/26101' fb:like:layout="button_count" class="addthis_button_facebook_like"></a> <a addthis:url='http://www.radiomagonline.com/misc/0082/capturing-and-encoding-on-the-cheap/26101' class="addthis_button_tweet"></a> <a addthis:url='http://www.radiomagonline.com/misc/0082/capturing-and-encoding-on-the-cheap/26101' class="addthis_counter addthis_pill_style"></a> </div> </div> </div> <!--//// WIRE /////--> <!--// THE WIRE // --> <div class="wire clearfix row"> <span><a href="/thewire" id="dnn_ArticleLeft1_TheWire_A1" class="theWireMarquee"><strong>The Wire:</strong> </a></span> <div class="marquee"> <div class="wire-prev"></div> <div class="wire-next"></div> <div class="wire-wrap"> <dl id="bc-wire"> <dd><a href='/thewire/hal-leoanrd-publishes-electronic-dance-music-grooves/7093/view'>Hal Leoanrd Publishes ELECTRONIC DANCE MUSIC GROOVES</a></dd> <dd><a href='/thewire/streamguys-addresses-evolving-audio-codec-universe-with-new-transcoding-service/7092/view'>StreamGuys Addresses Evolving Audio Codec Universe with New Transcoding Service</a></dd> <dd><a href='/thewire/radiohio-virtualizes-automation-core-with-enco/7090/view'>RadiOhio Virtualizes Automation Core with ENCO</a></dd> <dd><a href='/thewire/delec-audio-announces-unito-series-dante-audio-networking-interfaces/7091/view'>DELEC Audio Announces unito Series Dante™ Audio Networking Interfaces</a></dd> <dd><a href='/thewire/wherever-you-are-going-make-sure-you-take-sadie/7088/view'>Wherever You Are Going, Make Sure You Take SADiE</a></dd> <dd><a href='/thewire/sound-devices-highly-anticipated-sl6-powering-and-wireless-system-now-shipping/7089/view'>Sound Devices’ Highly Anticipated SL-6 Powering and Wireless System Now Shipping</a></dd> <dd><a href='/thewire/belar-integrates-new-hd-radio-diversity-delay-features/7087/view'>Belar Integrates New HD Radio Diversity Delay Features</a></dd> <dd><a href='/thewire/gatesair-appoints-omnicast-as-an-australian-distribution-channel/7084/view'>GatesAir Appoints Omnicast as an Australian Distribution Channel</a></dd> <dd><a href='/thewire/neutrik-announces-cat-5e-ethercon-rightangle-feedthrough-connectors/7085/view'>Neutrik Announces Cat 5e etherCON® Right-Angle Feedthrough Connectors</a></dd> <dd><a href='/thewire/michael-beinhorn-harmonic-distortions-part-one/7083/view'>Michael Beinhorn: Harmonic Distortions, Part One</a></dd> </dl> </div> </div> </div> <div class="post-hd row"> <h1>Comments</h1> </div> <div id="disqus_thread"></div> <script type="text/javascript"> /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */ var disqus_shortname = 'radiomagonline'; // required: replace example with your forum shortname /* * * DON'T EDIT BELOW THIS LINE * * */ (function () { var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); })(); </script> <noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript> <script type="text/javascript"> /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */ var disqus_shortname = 'radiomagonline'; // required: replace example with your forum shortname /* * * DON'T EDIT BELOW THIS LINE * * */ (function () { var s = document.createElement('script'); s.async = true; s.type = 'text/javascript'; s.src = '//' + disqus_shortname + '.disqus.com/count.js'; (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s); }()); </script> </div> <!-- /INNER PAD --> </article> </section> <script> $(document).ready(function () { $("#dnn_ArticleLeft1_ArticleDetail").find('base').removeAttr('target'); //$("#aswift_0_expand").css("display", "none"); $("ins").remove(); }); </script> <section class="right-rail above-wire"> <div style="padding-bottom:15px;"> <script language="JavaScript"> <!-- OAS_AD('Position1'); //--> </SCRIPT> </div> <div style="margin-top: 20px;"></div> <!--//// TABBED ////--> <div class="widget tabbed inside-issue events industry"> <div id="tab-container-1"> <ul id="tab-container-1-nav" class="clearfix tabbed-nav"> <li><a href="#tab1">Most Read<div class="tab-arrow-down"></div> </a></li> <li class="last"><a href="#tab2">Recent Comments<div class="tab-arrow-down"></div> </a></li> </ul> <div class="tab" id="DivMostRead"> <div class="cols-holder clearfix"> <div class="col col01 img-holder left"> <img src="/Portals/0/Akamai State of the Internet.jpg" /> </div> <div class="col col02 article-holder right"> <div class="group"> <article> <span class="gold">Online</span> <h4><a href='/online/0025/akamai-publishes-q1-2015-state-of-the-internet-report/36679'>Akamai Publishes Q1 2015 "State of the Internet" Report</a></h4> </article> </div> </div> </div> <div class="cols-holder clearfix"> <div class="col col01 img-holder left"> <img src="/Portals/0/Dante Cube.jpg" /> </div> <div class="col col02 article-holder right"> <div class="group"> <article> <span class="gold">Networking</span> <h4><a href='/networking/0011/audinates-dante-media-networking-supports-virginia-tech-cube/36686'>Audinate’s Dante Media Networking Supports Virginia Tech ‘Cube’</a></h4> </article> </div> </div> </div> <div class="cols-holder clearfix"> <div class="col col01 img-holder left"> <img src="/Portals/0/Netia Radio Assist.jpg" /> </div> <div class="col col02 article-holder right"> <div class="group"> <article> <span class="gold">Music Scheduling</span> <h4><a href='/music-scheduling/0075/trans-world-radio-upgrades-netia-radioassist-installations/36690'>Trans World Radio Upgrades NETIA Radio-Assist Installations</a></h4> </article> </div> </div> </div> <div class="cols-holder clearfix"> <div class="col col01 img-holder left"> </div> <div class="col col02 article-holder right"> <div class="group"> <article> <span class="gold">Events</span> <h4><a href='/events/0083/broadcast-education-workshop-2015/36649'>Broadcast Education Workshop 2015</a></h4> </article> </div> </div> </div> <div class="cols-holder clearfix"> </div> <div id="dnn_RightControl_mostRead_divMoreLink" class="cols-holder clearfix last"> <div class="col col01 img-holder left"> <!--<img src="/images/tabbed.png">--> </div> <div class="col col02 article-holder right"> <a href="" style="display:none;" class="see-all">More →</a> <!--<div class="group">--> <!-- <article>--> <!-- <span class="gold">Industry News</span>--> <!-- <h4><a href="">Seacrest Studios Comes to Cincinnati Children's Hospital</a></h4>--> <!-- </article>--> <!--</div>--> </div> </div> </div> <!-- /TAB --> <div class="tab" id="DivMostreadRecentComment"> <div class="cols-holder clearfix"> <span id="dnn_RightControl_mostRead_lblRecentComments" style="color:red; font:13px; font-weight:bold; padding:10px;">No records found</span> </div> </div> <!-- /TAB --> </div> <!-- / TAB CONTAINER --> </div> <div style="margin-top: 20px;"></div> <script language="JavaScript"> <!-- OAS_AD('Position2'); //--> </SCRIPT> <div style="margin-top: 20px;"></div> <!---//// NEWSLETTER ////--> <div class="widget newsletter"> <div class="red-tab clearfix"><span>Newsletter Signup</span></div> <div class="widget-bd"> <h4>Free E-Newsletters</h4> <span class="sub">Subscribe to our FREE eNewsletters</span> <form class="clearfix"> <fieldset> <input name="dnn$RightControl$newsletter$txtEmailAddress" type="text" id="dnn_RightControl_newsletter_txtEmailAddress" class="border-box emailtext" placeholder="ENTER YOUR EMAIL ADDRESS" /> <input type="submit" name="dnn$RightControl$newsletter$btnNewsletter" value="Subscribe" onclick="opentab(); return false;" id="dnn_RightControl_newsletter_btnNewsletter" class="red-button" /> </fieldset> <!-- /LEFT --> <!-- /RIGHT --> </form> </div> </div> <!-- /NEWSLETTER --> <script type="text/javascript"> function opentab() { var value = $('#dnn_RightControl_newsletter_txtEmailAddress').val(); if (value == "") { alert("Please enter email address"); return false; } else if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(value) == false) { alert("Email entered is invalid"); return false; } else { window.open('https://www.b2bmediaportal.com/nbmedia/subscribe.aspx?b=RDM&eml=' + value); } } </script> <div class="widget events inside-issue"> <div class="red-tab"> <span>Inside The Current Issue</span> <a href='/currentissuearchive'>Archive →</a> </div> <div class="widget-bd"> <div id="dnn_RightControl_currentIssue_divRecords" class="cols-holder clearfix"> <div class="col col01 img-holder left"> <a href="/currentissue"> <img src="/Portals/0/june cover 2015 resized.jpg" id="dnn_RightControl_currentIssue_imdThumbnail" /></a> </div> <div class="col col02 article-holder right"> <div class="group"> <article> <h4><a target="_blank" href='/deep-dig/0005/weve-opened--pandoras-box-elder/36619'>We’ve Opened Pandora’s Box (Elder)</a></h4> </article> <article> <h4><a target="_blank" href='/deep-dig/0005/where-is-your-pinakes/36623'>Where Is Your Pinakes?</a></h4> </article> <article> <h4><a target="_blank" href='/field-reports/0033/tascam-dr10x-compact-linear-pcm-recorder/36620'>TASCAM DR-10X Compact Linear PCM Recorder</a></h4> </article> <article> <a href="/currentissue" id="dnn_RightControl_currentIssue_anchCurrentissue" class="see-all">More →</a> </article> </div> </div> </div> </div> </div> <!---//// EVENTS ////--> <div class="widget events"> <div class="red-tab"> <span>Events</span> <a id="dnn_RightControl_Events_eventLink" href="/content/events/83">See All Events →</a> </div> <div class="widget-bd"> <div class="group"> <article> <h4><a href='/events/0083/blackmagic-workflow-tour/36682'>Blackmagic Workflow Tour</a></h4> <p>Miami, July 9 </p> </article> </div> <div class="group"> <article> <h4><a href='/events/0083/alabama-broadcasters-engineering-academy/36662'>Alabama Broadcasters Engineering Academy</a></h4> <p>July 13–17, ABA Training Center Hoover, Ala.</p> </article> </div> <div class="group"> <article> <h4><a href='/events/0083/59th-aes-conference/36580'>59th AES Conference</a></h4> <p>July 15-17, Montreal</p> </article> </div> <div class="group"> <article> <h4><a href='/events/0083/40th-conclave-learning-conference/36542'>40th Conclave Learning Conference</a></h4> <p>July 16-17, Minneapolis </p> </article> </div> </div> </div> </section> </div> </div> <div id="dnn_ContentPane" class="DNNEmptyPane"></div> <div class="people row"> <div class="wrapper"> <div class="pad"> <em><strong>News</strong> Feed</em> <a class="people-prev"></a> <a class="people-next"></a> <div class="news_feed"> <div id="bc-people"> <div class="slide"> <a href='/field-reports/0033/tascam-dr10x-compact-linear-pcm-recorder/36620'> <img src='/Portals/0/Tascam thumbnail.jpg'></a> <div class="p-caption"> <h5><a href='/field-reports/0033/tascam-dr10x-compact-linear-pcm-recorder/36620'>TASCAM DR-10X Compact Linear PCM Recorder</a></h5> </div> </div> <div class="slide"> <a href='/deep-dig/0005/mustattend-mustlearn-mustreads/36630'> <img src='/Portals/0/Doug Irwin thumbnail.jpg'></a> <div class="p-caption"> <h5><a href='/deep-dig/0005/mustattend-mustlearn-mustreads/36630'>Must-Attend, Must-Learn, Must-Reads</a></h5> </div> </div> <div class="slide"> <a href='/deep-dig/0005/weve-opened--pandoras-box-elder/36619'> <img src='/Portals/0/box.jpg'></a> <div class="p-caption"> <h5><a href='/deep-dig/0005/weve-opened--pandoras-box-elder/36619'>We’ve Opened Pandora’s Box (Elder)</a></h5> </div> </div> <div class="slide"> <a href='/fcc/0019/fcc-strikes-new-deal-with-house-ec-committee/36622'> <img src='/Portals/0/FCC logo thumbnail.jpg'></a> <div class="p-caption"> <h5><a href='/fcc/0019/fcc-strikes-new-deal-with-house-ec-committee/36622'>FCC Strikes New Deal With House E&C Committee</a></h5> </div> </div> <div class="slide"> <a href='/streaming/0023/apple-introduces-apple-music-at-wwdc-in-san-francisco/36614'> <img src='/Portals/0/Apple music.jpg'></a> <div class="p-caption"> <h5><a href='/streaming/0023/apple-introduces-apple-music-at-wwdc-in-san-francisco/36614'>Apple Introduces Apple Music at WWDC in San Fran</a></h5> </div> </div> </div> <!-- /BC PEOPLE --> </div> </div> <!-- /PAD --> </div> <!-- /WRAPPER --> </div> <div align="center" style="background-color: #ccc;padding: 15px;"> <script language="JavaScript"> <!-- OAS_AD('Bottom'); //--> </SCRIPT> </div> <div class="network row"> <div class="wrapper"> <div class="pad clearfix"> <div class="block"> <div class="inner-pad"> <a target="_blank" href="http://www.radioworld.com/" class="thumb"><img style="padding-bottom:10px;" src="/images/logo_radioworld.png"></a> <div class="story_text"> <p> <article> <a target="_blank" href='http://www.radioworld.com/TabId/64/Default.aspx?ArticleId=276510'>Broadcasters Foundation Chooses Mason</a> </article> </p> </div> <div class="story_text"> <p> <article> <a target="_blank" href='http://www.radioworld.com/TabId/64/Default.aspx?ArticleId=276509'>NRB Announces Proclaim 16</a> </article> </p> </div> <div class="story_text"> <p> <article> <a target="_blank" href='http://www.radioworld.com/TabId/64/Default.aspx?ArticleId=276508'>LPFM Regulation Series</a> </article> </p> </div> </div> </div> <div class="block"> <div class="inner-pad"> <a target="_blank" href="http://www.tvtechnology.com/" class="thumb"><img src="/images/logo_tvtech.png"></a> <div class="story_text"> <p> <article> <a target="_blank" href='http://www.tvtechnology.com/news/0002/sinclair-mgm-team-on-scifi-multichannel-network/276500'>Sinclair, MGM Team on Sci-Fi Multi-Channel Network</a> </article> </p> </div> <div class="story_text"> <p> <article> <a target="_blank" href='http://www.tvtechnology.com/expertise/0003/cutting-to-picture-for-impact/276490'>Cutting to Picture for Impact</a> </article> </p> </div> <div class="story_text"> <p> <article> <a target="_blank" href='http://www.tvtechnology.com/news/0002/dave-lougee-elected-nab-joint-board-chairman/276489'>Dave Lougee Elected NAB Joint Board Chairman</a> </article> </p> </div> </div> </div> <div class="block"> <div class="inner-pad"> <a target="_blank" href="http://www.avnetwork.com/" class="thumb"><img style="padding-bottom:10px;" src="/images/logo_avn.png"></a> <div class="story_text"> <p> <article> <a target="_blank" href='http://www.avnetwork.com/av-technology/0002/relive-digital-summit-2015/95598'>Relive Digital Summit 2015</a> </article> </p> </div> <div class="story_text"> <p> <article> <a target="_blank" href='http://www.avnetwork.com/av-technology/0002/aurora-multimedia-shipping-hd-control-panel/95597'>Aurora Multimedia Shipping HD Control Panel</a> </article> </p> </div> <div class="story_text"> <p> <article> <a target="_blank" href='http://www.avnetwork.com/av-technology/0002/tree-of-life-stands-tall-at-universal-exposition/95596'>Tree of Life Stands Tall at Universal Exposition</a> </article> </p> </div> </div> </div> </div> <!-- /PAD --> </div> <!-- /WRAPPER --> </div> <div class="push"></div> </section> <!--============================ FOOTER ============================--> <footer class="global"> <div class="wrapper"> <div class="pad "> <div class="top-row clearfix"> <div class="col col-1"> <nav> <a href="/multisection/products/2">Products</a> <a href="/multisection/industry/3">Industry</a> <a href="/multisection/trends/4">Trends</a> <a href="/multisection/deep-dig/5">Deep Dig</a> <a href="/multisection/gallery/6">Gallery</a> <a target="_blank" href="https://www.b2bmediaportal.com/Dynamicregister/Register.aspx?fid=RDMFD&key=J15WEB">Subscribe</a> </nav> </div> <div class="col col-2"> <a target="_blank" href="https://www.b2bmediaportal.com/Dynamicregister/Register.aspx?fid=RDMFD&key=J15WEB">Subscribe</a> <a target="_blank" href="https://www.b2bmediaportal.com/nbmedia/subscribe.aspx?b=RDM">Newsletter Signup</a> <a href="http://myradiomag.com/" target="_blank">Customer Service</a> <a href="/rss">RSS Feed</a> <a href="/currentissuearchive">Archive</a> <a href="/currentissue">Current Issue</a> <a href="/login" id="dnn_Footer1_anchlogin">Login</a> </div> <div class="col col-3"> <a href="http://www.newbaymedia.com/privacy-policy/" target="_blank">Privacy Policy</a> <a href="http://www.newbaymedia.com/terms-and-conditions/" target="_blank">Terms of Use</a> <a href="http://www.newbaymedia.com/broadcastvideo/" target="_blank">About Us</a> <a href="http://www.newbaymedia.com/contact-us-2/" target="_blank">Contact Us</a> <a href="http://www.newbaymedia.com/contact-us/broadcast-video-group-sales-contacts/" target="_blank">Advertise</a> </div> <div class="col-hide select-menu-holder"> <form class="select-menu"> <!-- set the option value to the page location like "/about-us" --> <select onchange="window.location.assign(this.options[this.selectedIndex].value)"> <option>More</a> <option value="https://www.b2bmediaportal.com/Dynamicregister/Register.aspx?fid=RDMFD&key=J15WEB">Subscribe</a> <option value="https://www.b2bmediaportal.com/nbmedia/subscribe.aspx?b=RDM">Newsletter Signup</a> <option value="http://myradiomag.com/">Customer Service</a> <option value="/rss">RSS Feed</a> <option value="/currentissuearchive">Archive</a> <option value="/currentissue">Current Issue</a> <option value="http://www.newbaymedia.com/privacy-policy/">Privacy Policy</a> <option value="http://www.newbaymedia.com/terms-and-conditions/">Terms of Use</a> <option value="http://www.newbaymedia.com/broadcastvideo/">About Us</a> <option value="http://www.newbaymedia.com/contact-us-2/">Contact Us</a> <option value="http://www.newbaymedia.com/contact-us/broadcast-video-group-sales-contacts/">Advertise</a> </select> </form> </div> <div class="col col-4"> <ul class="socials"> <li class="fb-link"><a target="_blank" href="http://www.facebook.com/RadioMagazine"></a><span>Facebook</span></li> <li class="twtr-link"><a target="_blank" href="http://www.twitter.com/radiomagazine"></a><span>Twitter</span></li> <li class="rss-link"><a target="_blank" href="/rss"></a><span>RSS</span></li> <li class="yt-link"><a target="_blank" href="http://www.youtube.com/RadioMagOnline"></a><span>Youtube</span></li> </ul> </div> <div class="col col-5"> <ul class="socials"> <li class="pt-link"><a target="_blank" href="http://www.pinterest.com/radiomagazine"></a><span>Pinterest</span></li> <li class="gp-link"><a target="_blank" href="http://www.google.com/+RadioMagOnline"></a><span>Google +</span></li> <li class="li-link"><a target="_blank" href="http://www.linkedin.com/groups?gid=3210911"></a><span>Linked In</span></li> </ul> </div> <div class="col-hide more-brands-holder"> <div class="label">Related NewBay Media Brands</div> <nav> <a target="_blank" href="http://www.radioworld.com/">Radioworld</a> <a target="_blank" href="http://www.tvtechnology.com/index">tv technology</a> <a target="_blank" href="http://www.avnetwork.com">avnetwork</a> <a target="_blank" href="http://www.c2meworld.com/">c2meworld.com</a> </nav> </div> </div> <div class="bottom-row clearfix"> <p class="credits"> Copyright © 2014 by NewBay Media, LLC. <span class="break">28 East 28th Street, 12th floor, New York, NY 10016 T <a href="tel:212-378-0400">(212) 378 0400</a> F <a href="tel:212-378-0470">(212) 378 0470</a></span> </p> <a target="_blank" href="http://www.newbaymedia.com/" class="logo newbay"><img src="/images/logo_newbay.png"></a> <a href="/" class="logo other"><img src="/images/footer-logo.png"></a> </div> </div> <!-- /PAD --> </div> <!-- /WRAPPER --> </footer> </div> <input name="ScrollTop" type="hidden" id="ScrollTop" /> <input name="__dnnVariable" type="hidden" id="__dnnVariable" autocomplete="off" /> <script type="text/javascript" src="/Resources/Shared/scripts/initWidgets.js" ></script></form> <!-- HOME SCRIPTS --> <script src="/js/scripts-home.js"></script> <!--//////////////////////////////// GLOBAL SCRIPTS ////////////////////////////////--> <script src="/js/scripts-slideshow.js"></script> <!-- Author --> <script src="/js/scripts.author.js"></script> <!-- JTWEETS --> <script src="/js/jquery.jtweetsanywhere-1.3.1.min.js"></script> <link rel="stylesheet" href="/css/jquery.jtweetsanywhere-1.3.1.css" type="text/css" media="screen"> <!-- GLOBAL --> <script src="/js/jquery.placeholder.js"></script> <script src="/js/site.js"></script> <!-- MEDIA QUERIES --> <script src="/js/css3-mediaqueries.js"></script> <!-- MODERNIZR --> <script src="/js/modernizr.js"></script> <!-- CAROUSEL --> <script src="/js/jquery.carouFredSel-6.2.0-packed.js"></script> <script src="/js/jquery.touchSwipe.min.js"></script> <!-- YETII --> <script src="/js/yetii-min.js"></script> <!-- ADDTHIS --> <script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js"></script> <!-- FITVIDS --> <script src="/js/jquery.fitvids.js"></script> </body> </html>