Skip to main content
 

Traktor streaming to SHOUTcast servers using LiquidSoap

I've been using Traktor for years now as my deejaying solution and broadcasting tool. The one missing feature on the broadcasting side is that it can only stream directly to Icecast servers, lacking the ability to stream to SHOUTcast based servers. Most servers use the SHOUTcast streaming protocol which grew popular through the MP3 movement back around the turn of the century. We will setup a transcoding link to enable streaming to SHOUTcast servers.

This guide will focus on OS X but on a general level is also applicable to Windows users.

This replaces my previous guide at https://sites.google.com/site/traktorshoutcast/

Overview

We will need the do the following things:

  1. Install Homebrew, a package manager to help set things up.(OS X)
  2. Install and setup Icecast, a streaming server that will accept the Traktor stream. (aka local streaming server)
  3. Install and setup LiquidSoap, a transcoder that will connect to the local stream, and broadcast it in SHOUTcast format.
  4. Configure Traktor's broadcasting settings to point to the local streaming server.

Also useful is to keep the SHOUTcast stream (remote stream) details to connect to at hand (host, port, password).

signal flow

1) Install Homebrew

Homebrew is a terminal package manager to add / remove / update OS X software and compile it from source code for us, so we don't have to.

Homebrew installs the stuff you need that Apple didn’t.

To install, follow the directions on http://brew.sh. Currently (as of Feb 16) that says:

  1. Open a terminal window.
  2. Run /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Follow any instructions about the Xcode commandline tools.

After everything is setup you can run brew update to update your formulae, brew upgrade to upgrade to their latest versions, and brew doctor to diagnose any issues with your particular installation. Keep the terminal open for the next step.

2) Install and setup Icecast

Icecast is a streaming media server which [...] can be used to create an Internet radio station or a privately running jukebox and many things in between.

We will setup the local streaming server so that we can connect Traktor and the transcoder to it.

Install

In the terminal window you left open, run brew install icecast.

If I remember correctly, everything should go smoothly and before long you'll get a message saying it's successfully installed.

Configuration

To keep the configuration files we are about to create nicely together, create a broadcast folder somewhere (I used ~/Music/Broadcast).

I have prepared a very simple configuration file for you, download it from https://gist.github.com/svandragt/f7ecb720416a68f096a1 (right click the raw button and select Download Linked File As.. and save it as icecast.xml in the broadcast folder you just created).

You won't have to change the contents of this file, apart from the passwords.
This configuration creates a mount point on http://localhost:8000/traktor.ogg for Traktor and LiquidSoap to connect to.

Starting and Stopping the Local Streaming Server

In the terminal window, in your broadcast folder, run icecast -c icecast.xml. It should show a few warnings but no errors, and your local streaming server is now running. Stop it now by pressing ctrl+c.

3) Install and setup LiquidSoap

Our flagship is liquidsoap, a swiss-army knife for multimedia streaming, notably used for netradios and webtvs. Liquidsoap is a powerful and flexible language for describing your streams. It offers a rich collection of operators that you can combine at will, giving you more power than you need for creating or transforming streams. But liquidsoap is still very light and easy to use, in the Unix tradition of simple strong components working together.

We will install the program and setup a flow (configuration) to connect to the local streaming server, and broadcast it to the remote stream.

It should have been simple to install using brew, but unfortunately it was not. After several days of debugging here is a working set of instructions I produced.

Install

In the terminal window you left open, we will run the following commands:

  1. brew tap drfill/liquidsoap -- This enabled homebrew to install it.
  2. brew install --env=std liquidsoap --with-shout -- this installs LiquidSoap using the standard build environment with shoutcast support

Grab a drink. After a while hopefully all works fine. I noticed that LiquidSoap is now recommending OPAM to install it so you could try that if this doesn't work for you. (http://liquidsoap.fm/download.html) - I have not tried it.

Configuration

As before, I have created a very simple flow. You will need to setup one flow per destination stream so if you play at multiple radio stations / SecondLife clubs then you will need multiple flows.

Download it from https://gist.github.com/svandragt/af43c07d5842c9c429d5 (right click the raw button and select Download Linked File As.. and save it as example.liq in the broadcast folder).

This time you have to edit it, to add the remote stream details. Change the following lines to suit your purposes:

  • output_host = "example.com"
  • output_port = 8124
  • output_pass = "mypassword"

The configuration above is for broadcasting to a SHOUTcast server at http://example.com:8124 (using the password mypassword). Leave the rest of the file alone or make a copy and start experimenting LATER, see http://liquidsoap.fm/documentation.html. LiquidSoap is very powerful.

Starting and Stopping the Transcoder

In the terminal window, in your broadcast folder, run liquidsoap example.liq. It will start showing a lot of messages, and because you are not currently broadcasting also some errors. Stop it now by pressing ctrl+c.

Traktor

Start Traktor and open the Preferences menu item. Open the Broadcasting tab.

Use the following information to point to the local streaming server:

Server settings:

  • Address: localhost
  • Port: 8000
  • Mount path: traktor.ogg
  • Password: hackme (but you changed this, right)
  • Format: Ogg Vorbis, 44100 Hz, 192 kBit/s (highest quality, bottom option)

You can enter whatever you like in the Metadata Settings.

tractor broadcasting settings

In Traktor, click the broadcast button (the little attenna). It will flash because the local streaming server isn't running and therefore Traktor cannot connect to it. Whenever Icecast is running but the button is still flashing, check that the password and other connection details match.

For now, click it again to stop broadcasting.

All together now

Before you start streaming:

  1. Start Icecast and keep it running.
  2. In Traktor, click the broadcast button and confirm its not flashing.
  3. Open another terminal window / tab in the broadcast folder for the next step.

When you start streaming:

  1. Start LiquidSoap with the flow of your remote stream. Keep it running.
  2. Start deejaying!

When you are finished

  1. Stop broadcasting with Traktor.
  2. Stop liquidSoap to let the next DJ on the stream.
  3. Stop Icecast because nothing is connected to it now.

Final thoughts

I hope this helps anyone having trouble deejaying online, I enjoy it very much and if you'd like to listen to deep house / electronica, please listen to my mixes.

 

Gist: Pomodoro MediaPlayer

I was suffering from lack of concentration later in the workday, until I stumbled upon the Pomodoro focusing technique. I've been a lot more productive and in a better mood since I started using this two weeks ago:

The Pomodoro Technique is a time management method developed by Francesco Cirillo in the late 1980s. The technique uses a timer to break down work into intervals traditionally 25 minutes in length, separated by short breaks. These intervals are known as "pomodori", the plural of the Italian word pomodoro for "tomato".

The method is based on the idea that frequent breaks can improve mental agility.

I created an AutoHotkey script that uses timers and a global hot-key I set for WinAmp to automatically stop and start the music after instructing me to work / have a break. It works really well for me.

 

Rob Gruhl - How to Buy a New Car

From 2007, but a great video full of advice, and a fantastic example of pechakucha 20x20 presentation style.

 

Windows 10 Privacy Guide

Steve Gibson pointed me to a guide to setting your desired privacy level in Windows 10. This version of Microsoft's operating system follows the 'always socially connected' footsteps of smartphones and therefore makes privacy assumptions. Using this guide you can check if they match your expectations.

 

Hide Trackbacks works with WordPress 4.2

Hide Trackbacks is a WordPress plugin that hides pingbacks and trackbacks from your website comments.

I've updated the plugin to indicate it works correctly with WordPress 4.2.

 

Ad tech is killing the online experience

Apple blogger John Gruber started off a new debate about these issues recently, when he noted that a 537-word text post on the website iMore.com weighed in at 14 megabytes. (Fourteen megabytes of text should correspond to about 7m words, or about 10 times the combined length of the Old and New Testaments.)

Gruber blamed iMore.com, but really it’s not the website’s fault, since to a very large degree the owner of the website you’re visiting doesn’t actually control what you see, when you see it, how you see it, or even whether you see it. Instead, there are dozens of links in the advertising-technology chain, and every single one of them is optimising for financial value, rather than low-bandwidth user experience. Many pages, if you’re on a slow connection, simply time out; they never load at all.

When you are a website owner, you are responsible for all the content on your site. If you don't have any control over the ads, then that's a process issue that should be addressed.

Why not band together with a few large sites and create a standardised ad submission and review system that advertisers can integrate into their content tools and websites can set criteria about ads on their sites.

Maybe the bigger problem is that those websites cannot afford to reject ads.

 

BugzScoutLogWriter 1.0

I've released another SilverStripe add-on called BugzScoutLogWriter that I have been using for several months on some of the sites at work.It supports SS 3.0 and 3.1.

BugzScoutLogWriter is a LogWriter that integrates logs with FogBugz, an integrated web-based project management system featuring bug/issue tracking made by FogCreek.

A LogWriter is attached to errors, warnings and notices that occur in a website due to programming errors or runtime errors and then sends / saves a log of this event. SilverStripe comes with built-in functionality to e-mail or save the logs to a file, however if you use a third party bug reporting system then it's nice to have all the issues collected there instead.

I've used FogBugz for years now and one of the nice features is that multiple occurrences of the same issue get collected in the same ticket. This keeps the whole process manageable. Say, in the event that a mistake that affects all pages on a website, FogBugz collects the first 50 occurrences of that error and lets you close the ticket with one click. This is an improvement to a flood of email.

Anyways let me know if you find it useful and feel free to raise issues.

 

Security through insecurity

Schneier explained how, initially, NSA Director General Keith Alexander claimed in 2013 that he had disrupted 54 terrorists plots. A few months later, this was revised down to 13, and then to "one or two." Eventually, the only success that the NSA could point to was the prevention of a San Diego man sending $8,500 to support a Somali militant group.

Doesn't sound like a worthy trade-off.

 

Microblogging with WordPress and Twitter

Manton Reece has been having very interesting discussions about microblogging and content ownership recently. He's working on an unannounced project in this area and I've been following his progress.

A few days ago he wrote a post about Microblogging with Wordpress in which he describes most of the process of writing your status updates on your own blog first. As I had to adapt his process for it to work with my configuration of WordPress and as I am using Twitter instead of App.net I thought it would be useful to detail how I went about, based on Manton's write-up.

Requirements

  • A theme that supports post-formats.
  • an IFTTT and Twitter account.
  • A self-hosted WordPress installation, hosted using Apache.
  • (optionally) the DoNote app from IFTTT for your mobile device.

Step 1: Link a status updates feed to Twitter

In order to post only the status updates to twitter, we have to identify them in both WordPress and for IFTTT.

Create a dedicated category

In Wordpress, if you do not have a category for status updates, create a Snippets category (with the slug snippets). Note the category ID. In addition, create a new category called ifttt-status if you plan to post to Wordpresss from your mobile device later, as I did (this is a workaround to allow WordPress to convert from this category to the status post format).

Setup the RSS feed endpoints

With the category ID, we can now create a new feed by editing the .htaccess file in your WordPress installation directory, see my gist comment on manton's configuration. I had redirection issues with Manton's original setup so I amended it. What we do here is create two endpoints, one for posts without status updates (rss.xml); and one for only status updates (snippets.xml). We then point any requests to /feed (the default WordPress endpoint) to the first endpoint.

Update (26 June): I updated the gist comment after identifying issues in initial configuration. Please reread the gist if you had problems using the initial configuration.

Post new status updates to Twitter

Now create a new recipe that is triggered from the snippets RSS feed, with the action to post a tweet with the tweet text EntryContent.

You can now blog from WordPress to twitter (just leave the title empty).

Step 2: Post status updates from your mobile device

I'm using DoNote to post to IFTTT which then posts to WordPress.

Setup WordPress

Login to your WordPress blog and in the users section create a ifttt user with the role of Author (this allows the user to create posts).

Install the "IFTTT Post Formats & Post Types" plugin, it will convert posts with the ifttt-status category to the status post-format. It will also hide the ifttt-status category from showing up in your template for example.

Link DoNote to WordPress using IFTTT

Back in IFTTT, In the My Recipe's DoNote section, create a new recipe for WordPress (you might get asked to provide the WordPress username and password you created for this purpose) with the action to create a post with the following values:

  • Title: (leave empty)
  • Body: NoteText
  • Categories: Snippets,ifttt-status
  • Tags: (leave empty)
  • Post status: Publish immediately

You are not limited to using DoNote if there is a trigger for your service, and you are not limited to usin IFTTT at all if there are WordPress plugins for your status update service and WordPress support for your writing app, but these will require similar configuration as detailed in this post.

Hope this helps!

 

On The God who Peter Molyneux forgot

Wesley Yin-Pool, writing for Eurogamer:

You will become a digital god, Molyneux proclaims in the video, of 22Cans' next game, Godus. And, you will receive a cut of the money made by Godus from the start of your reign to its end.

18 months later, as Bryan Henderson approaches his 21st birthday, he has yet to become God of Gods, he has yet to receive the "riches" Molyneux promised him, and it's looking increasingly likely he never will.

The core issue with promising such a fantastic reward is that it depends on a future that hasn't materialised:

"But we can't have the God of Gods role without the ability for people to challenge the God of Gods role, and the God of Gods role can't be challenged without combat, and we can't implement the combat without sorting out the server issues, which are being sorted out as of last week. It's just a maelstrom."

It looks to me that the whole team is continually rushed into firefighting the next feature development, with never enough revenue coming in to take a breather and plan things out properly.

He confirms the Godus development team has shrunk considerably to just a few people as resources are diverted to a new game, called The Trail.

Trust me, by the time the server issues are sorted; the combat is implemented; the multiplayer is developed and the God of God feature is finished there will be no players left to make any money from. 22Cans would do better to offer some kind of goodwill gesture to restore the morale of its staff and its fans before this PR opportunity turned completely toxic.

 

 

Creating a Wordpress redirection page

This is the simplest way to add a page redirection feature to your WordPress theme.

First, create a new theme file called redirect.php with the following contents:

<?php
/*
Template Name: Redirect
*/
the_post();
header('Location: ' . get_the_content());
die();

To create a new redirection page:

  1. New page, change the template to 'Redirect'
  2. Switch to HTML editing mode and put the url in the content area.

 

Release 1.1 - wordpress-basetheme

The aim for wordpress-basetheme is  a bare bones, well structured, easily customisable WordPress base theme.

You can build on it to speed up your own theme development. It's so minimal that I wouldn't recommend it as your final site theme. Instead it makes it trivial to apply your design to a WordPress blog, or to build out from this starting point. This site is build on top of the project for example.

Version 1.1 is now available
Download | View on GitHub

Changes:

  • updated styling and version
  • previous next buttons on singles
  • ie style targeting (unused), remove admin bar until supported, top nav
  • archives added and accessibility improvement
  • date permalinks
  • consistent titling
  • edit link in footer, no home
  • moved comments into its own template file
  • padding issue

Your feedback is welcome.

 

Wordpress Base Theme

I've released a first look at "Wordpress Base Theme", a bare bones base for your own themes:

  • DRY
  • KISS
  • easily customisable WordPress base theme.

You can build on this to speed up your own theme development.

 

DisplayAnything3

DisplayAnything3 is a file and image gallery module for SilverStripe 3.0 with a big list of features. I'm looking forward to trying the module on a future project.

 

Carbon 0.2.3 Released

I've released another version of Carbon, the framework powering this website. It's really a refinement and bugfix release, with the following changes:

  • config: Admin password now needs to be manually enabled
  • cache: Correctly generate htaccess
  • deployment: only replace hostnames in text files
  • cache: only write cache when caching is enabled.
  • theme: remove older articles link (non functional)
  • deployment: new feature - replace hostname from a to b before deploying cached site

Releases are available via github by clicking on tags.

Screencast

To celebrate the new release, I've also recorded another screencast (list of screencasts). In Screencast #4, we create a new post using the admin interface; use the generate site feature to create a full static cache; and finally run the powershell deployment script to deploy to my host over sftp.

All in under 2 minutes!

 

PHP 5.5 drops support for Windows XP / Server 2003

PHP 5.5 will no longer support Windows XP and 2003. Those systems are around a decade old, so PHP is pulling the plug on them.

It was already mentioned on the PHP 5.4 release changelog. It makes sense, but I’m sure it will cause some issues with organisations who have not been paying attention. I would encourage all developers to sign up for the PHP Announcements mailinglist.

 

Fixing Samba network-share change notifications

Today a problem came up where the files on my Samba fileshare did not indicate to my Windows system that they were changed. Software that relies on this information such as TortoiseHG and SimpleLESS would not know that the file had changed. This was especially obvious with SimpleLESS which should take the .less file and process it, but wouldn’t.

It turns out that the cause of this is that on the linux system the system time was off by a large margin. Using Arbab Nazar’s article on setting up time synchronization fixed the issue and prevents it from reoccurring.

 

Facebook wants to be your email

Gervase Markham’s writes about the changes to your Facebook profile, where now by default a @facebook address is shown instead of your own email address:

The email instead goes to my Facebook inbox, and I don’t get a notification email to say it’s there.

So this is why Facebook introduced it: They want you to go to their site to check for email. They don’t want to send the messages to your email and have you interact there, they don’t want you to use a search engine to find content, and they don’t want you to use forums and instant messages to talk to people. They don’t want you ever to get the idea to leave the site.

 

Link: Stop paying your jQuery tax

Speed up your jQuery powered site by moving scripts to the footer.

Turns out that pushing jQuery to the footer is quite easy for the common case. If all we want is a nice $.ready function that we have accessible everywhere we can explicitly define it without jQuery. Then we can pass the functions we capture to jQuery later on after it loads.

The big lesson learned is that we could avoided this whole problem if we started off with my proposed helper.

via Stop paying your jQuery tax.

 

Modified Files - Windows 7 Productivity Tip

To quickly access the files you've been working on today, create a new Favorites item for these files.

To do this, open Windows Explorer and select your Libraries link on the left. Then in the search box, enter modified:today and click the Save Search toolbar button.

Enter a name, such as Libraries Today, and press enter. You will now see the new item appear in your Favorites menu.

You can select this item whenever you need to access recently worked on files.