• Geek Speak: How To Build A UPnP / DLNA / OpenHome Renderer For Less Than $100



    Warning: This article is technical in nature, but is far from rocket surgery. The step-by-step how-to instructions below make the process extremely easy. That said, this article isn't for everybody.

    This is the second article in the CA Geek Speak series (Link to first article ). If you have a USB DAC and want to turn it into a network capable device or if you want to setup multiple zones for playback and control via iPad for less than $100 per zone, then this article is for you. The instructions below provide a step-by-step guide for creating a UPnP / DLNA / OpenHome renderer with Ethernet input and USB output for connection to a USB DAC. In a way, this device can be considered the poor man's Auralic Aries (Review Link ) or SOtM sMS-100 Mini Server (Review Link ). In the previous Geek Speak article readers were forced to log in to the device and make configuration changes via command line. This time I've taken care of all the configuration myself. Readers simply need to download the preconfigured image file and flash it to a Beaglebone Black (Rev. C) following the instructions. That's it.

    This device is a tiny 2.4" x 0.82" x 3.54" Beaglebone Black fanless computer running Linux and a couple pieces of preconfigured software. It connects to a home network via wired Ethernet and connects to an audio system via USB. With this device in an audio system the user can stream music from a NAS or any computer running JRiver Media Center and have full control over music selection and volume for a single or multiple zones with an iPad or similar device. I highly recommend using JRiver and JRemote. Whether using a single device connected to a USB DAC in a main audio system or using several of these devices connected to audio systems throughout a home, JRemote makes control of everything extremely simple. Currently this renderer supports both PCM and DSD via DoP playback. I've tested PCM up through 24 bit / 192 kHz and DSD 64 without any issues. Gapless playback at all sample rates is also supported. I am unsure exactly what USB DACs are supported, but I know that USB DACs capable of functioning without drivers on Mac OS X should work just fine with this renderer.









    content/attachments/17349-2.png/content/attachments/17350-3.png/content/attachments/17348-1.png/










    Details for Geeks

    MP version - Music Player Daemon 0.19.9
    upmpdcli version - upmpdcli-0.9.0
    Linux version - BeagleBoard.org Debian Wheezy Image 2015-03-01 (3.8.13-bone70)
    Username = root
    Password = (no password / blank)



    Requirements

    BeagleBone Black (Rev. C required) ($60)
    BeagleBone Black case ($10)
    Power Adapter (5 volts, 2 Amps, 10 Watts) ($9)
    MicroSD Card with Adapter (~$10)
    SD Card Reader (~$13) (Optional)
    Win32 Disk Image ($0) (Windows users)
    Ethernet cable
    NAS Drive or computer for music storage
    Tablet for control such as iOS or Android device
    UPnP Server software such as JRiver Media Center or MinimServer
    UPnP Control Point software such as JRemote (when used with JRMC) or BubbleUPnP




    Step-By-Step Mac OS X


    - Connect the MicroSD card to the computer
    - Open Disk Utility (Applications > Utilities > Disk Utility), select select all volumes under the MicroSD card, then select Unmount. In my example the volume is named 8GB. (Image Link )
    - Download the preconfigured image file (USB Output Version ). (HDMI Output Version )
    - Double-click the downloaded preconfigured image file named CA-NetAudio-1.0.img.zip. This will automatically extract the image file named CA-NetAudio-1.0.img
    - Open the Terminal app (Applications > Utilities > Terminal)
    - Type -> sudo su (without the arrow ->)
    - Enter your password if asked.
    - Type -> diskutil list
    - Take note of the disk number of the MicroSD card connected to your computer. My MicroSD card is listed as /dev/disk1. The MicroSD card should be easily identifiable by its small size. My MicroSD card is listed as 7.9 GB (Image Link )
    - Type -> sudo dd if=
    - Drag the preconfigured image file named CA-NetAudio-1.0.img on to the Terminal window to automatically fill in the path to the file (Image Link ) You can also type this in manually if desired.
    - After dropping the image file on to the Terminal window the command line should read something like this >> sudo dd if=/Users/chris/Desktop/CA-NetAudio-1.0.img (Image Link ).
    - Make sure there is a single space after the path to the preconfigured image file named CA-NetAudio-1.0.img entered in the previous steps.
    - Type -> of=
    - Then enter the disk number of your MicroSD card. In my case this is /dev/disk1
    - The text should look something like this of=/dev/disk1 (Image Link ).
    - Make sure there is a single space after the path to your MicroSD card entered in the previous steps.
    - Type -> bs=1m
    - The entire line should now look something like this >> dd if=/Users/chris/Desktop/CA-NetAudio-1.0.img of=/dev/disk1 bs=1m
    - Here is an image of my Terminal (Image Link )
    - Hit Enter on your keyboard and wait for the image to be written to the MicroSD card. This will take several minutes and appear like your computer is stuck. Please wait for the command to finish.
    - Once the image has been written to the MicroSD card the Terminal window will list something like this.
    3781+1 records in
    3781+1 records out
    3965190144 bytes transferred in 2489.137016 secs (1592998 bytes/sec) (Image Link )
    - If you receive an error message stating "Resource busy" (Image Link ) you likely skipped step 2. Please unmount the volume and try again.
    - Open Disk Utility (Applications > Utilities > Disk Utility), select the MicroSd card, click Eject or Eject Disk via the right-click menu.
    - Place the MicroSD card into the BeagleBone Black's MicroSD card slot.
    - Hold down the small Boot Switch / Button while connecting the power supply to the board.
    - As soon as one of the User LEDs illuminates, release the Boot Switch / Button.
    - The User LEDs should continue flashing while the MicroSD card image is copied to the on-board eMMC flash memory. The process should take about five minutes.
    - When all four User LEDs are illuminated steady, pull the power supply from the board and remove the MicroSD card. Or, the board will power down automatically if you wait long enough after the copy is complete.
    - Connect an Ethernet cable to the board and your USB DAC to the USB port and re-connect the power supply.
    - The BeagleBone Black will boot up and automatically appear as a UPnP / DLNA / OpenHome renderer in your application of choice such as JRiver Media Center. If using JRiver Media Center the device will appear as a new zone named NetAudio. To send music to the device simply select NetAudio, then select the music you want to play.
    - That's it.








    Step-By-Step Windows

    - Connect the MicroSD card to the computer
    - Install Win32 Disk Image Link
    - Download the preconfigured image file (USB Output Version ). (HDMI Output Version )
    - Right-click the downloaded preconfigured image file named CA-NetAudio-1.0.img.zip. Select Extract All (you may have to click Next after this). This will extract the image file named CA-NetAudio-1.0.img into a folder with the same name CA-NetAudio-1.0.img.
    - Open Win32 Disk Imager
    - Make sure the MicroSD card drive letter is selected under Device (Image Link )
    - Select the small folder to the left of the Device drive letter and browse to the file previously extracted named CA-NetAudio-1.0.img. Don't select the .zip compressed file.
    - Click the Write button and Yes to any popup questions.
    - Eject the MicroSd card when Win32 Disk Imager finishes writing the image.
    - Place the MicroSD card into the BeagleBone Black's MicroSD card slot.
    - Hold down the small Boot Switch / Button while connecting the power supply to the board.
    - As soon as one of the User LEDs illuminates, release the Boot Switch / Button.
    - The User LEDs should continue flashing while the MicroSD card image is copied to the on-board eMMC flash memory. The process should take about five minutes.
    - When all four User LEDs are illuminated steady, pull the power supply from the board and remove the MicroSD card. Or, the board will power down automatically if you wait long enough after the copy is complete.
    - Connect an Ethernet cable to the board and your USB DAC to the USB port and re-connect the power supply.
    - The BeagleBone Black will boot up and automatically appear as a UPnP / DLNA / OpenHome renderer in your application of choice such as JRiver Media Center. If using JRiver Media Center the device will appear as a new zone named NetAudio (Image Link ). To send music to the device simply select NetAudio, then select the music you want to play. The device will also appear automatically in JRemote as a zone called NetAudio (Image Link ).
    - That's it.





    Please let me know if you find errors in this guide. I will keep it updated as appropriate and update the preconfigured downloadable image. Tips, tricks, and tweaks are also encouraged!








    Comments 216 Comments
    1. iago's Avatar
      iago -
      The download link for the image seems to contain a typo. I found this link to work:

      Code:
      wget http://files.computeraudiophile.com/CA-NetAudio/CA-NetAudio-1.0.img.zip
    1. wappinghigh's Avatar
      wappinghigh -
      ^ This is a great post CA...! Thanks so much for this..
    1. davide256's Avatar
      davide256 -
      I've been looking for a 2nd renderer solution for a headphone station and the cost/size is right. Appreciate the detailed (and easy) instructions, other like projects required an understanding of Linux to be successful. One question; is there a way with this to limit /transcode to the 96khz limit of the AQ Dragonfly?
    1. Tubefan9's Avatar
      Tubefan9 -
      Any comment on how this device sounds compared to directly connecting to a CAPS server?
    1. The Computer Audiophile's Avatar
      The Computer Audiophile -
      Quote Originally Posted by iago View Post
      The download link for the image seems to contain a typo. I found this link to work:

      Code:
      wget http://files.computeraudiophile.com/CA-NetAudio/CA-NetAudio-1.0.img.zip
      Thanks! Link updated.
    1. Ran's Avatar
      Ran -
      Regarding drivers; Any USB Audio Class 2.0 DAC will work with Linux. DACs that require proprietary drivers will probably won't. Also, +1 for using MPD. One of the most optimized high quality music players out there.
    1. fritzg's Avatar
      fritzg -
      Great post. One of the most informative and helpful pieces I have read on CA and the type of information I expected to find when I discovered this site.

      I wonder how this would work with Audio Station on a Synology NAS? Will that stream in hi-res? How can one verify the streaming resolution to this renderer?
    1. Bryan's Avatar
      Bryan -
      Excellent. This is information that budget audio geeks crave.
    1. SeeHear's Avatar
      SeeHear -
      Nice article, Chris. One question: When deploying multiple devices, how are they distinguishable on the network? I'm thinking of deploying 4 or 5 to various locations in a large home.
    1. The Computer Audiophile's Avatar
      The Computer Audiophile -
      Quote Originally Posted by SeeHear View Post
      Nice article, Chris. One question: When deploying multiple devices, how are they distinguishable on the network? I'm thinking of deploying 4 or 5 to various locations in a large home.
      This can be done a few different ways.

      1. If using an app like JRiver as the media server you can simply right click the renderer and select rename. This would allow unique names such as Kitchen, Den, Living Room, etc... and these names appear in the JRemote interface as well.

      2. If you want each device to appear with a different name no matter what applications are used you can get a little geeky and log into the renderer via SSH and change the name in a configuration file. It's not difficult, but can seem like rocket science for the untechnical.
    1. Jud's Avatar
      Jud -
      I'll add my compliments. Seems like this hardware might be able to be used as an NAA for HQPlayer without a lot of trouble.
    1. The Computer Audiophile's Avatar
      The Computer Audiophile -
      Quote Originally Posted by Jud View Post
      I'll add my compliments. Seems like this hardware might be able to be used as an NAA for HQPlayer without a lot of trouble.
      Very easily.
    1. The Computer Audiophile's Avatar
      The Computer Audiophile -
      Quote Originally Posted by davide256 View Post
      I've been looking for a 2nd renderer solution for a headphone station and the cost/size is right. Appreciate the detailed (and easy) instructions, other like projects required an understanding of Linux to be successful. One question; is there a way with this to limit /transcode to the 96khz limit of the AQ Dragonfly?
      Using a device like the Dragonfly raises another issue as well, that is it's use of software control attenuation. You have to log into the renderer and open alsamixer to set the volume on the dragonfly.

      I think it may be easier to set the media server software like JRiver to downsample to 96 kHz rather than setup the renderer to handle this.
    1. ted_b's Avatar
      ted_b -
      Quote Originally Posted by davide256 View Post
      I've been looking for a 2nd renderer solution for a headphone station and the cost/size is right. Appreciate the detailed (and easy) instructions, other like projects required an understanding of Linux to be successful. One question; is there a way with this to limit /transcode to the 96khz limit of the AQ Dragonfly?
      If using JRIver it is under DLNA settings, server->audio->advanced options

      If using Minimserver it is a Minimstreamer transcode command in properties (see here)

      User guide
      Scroll down to here: For an output type of wav, wav16, wav24, L16 or L24, you can change the output sample rate by adding the suffix
      ;samplerate [NEW]
    1. Vinh's Avatar
      Vinh -
      Quote Originally Posted by Ran View Post
      Regarding drivers; Any USB Audio Class 2.0 DAC will work with Linux. DACs that require proprietary drivers will probably won't. Also, +1 for using MPD. One of the most optimized high quality music players out there.

      Great, great job. Any idea whether Hugo will work with this renderer?
    1. ted_b's Avatar
      ted_b -
      Quote Originally Posted by Vinh View Post
      Great, great job. Any idea whether Hugo will work with this renderer?
      Yes, Hugo works with renderers. I've reported here on it several times (Rendu, JPlaystreamer, Aries).
    1. Richard Dale's Avatar
      Richard Dale -
      Quote Originally Posted by The Computer Audiophile View Post
      Using a device like the Dragonfly raises another issue as well, that is it's use of software control attenuation. You have to log into the renderer and open alsamixer to set the volume on the dragonfly.

      I think it may be easier to set the media server software like JRiver to downsample to 96 kHz rather than setup the renderer to handle this.
      I'm not familiar with using MPD as a DLNA renderer and maybe it is different to the standard MPD mode. But you can set up the alsa mixer settings in /etc/mpd.conf and control the volume from an MPD client app. That's what I did when I was driving my B&W MM-1 speakers with a Raspberry Pi and MPD.
    1. The Computer Audiophile's Avatar
      The Computer Audiophile -
      Quote Originally Posted by Richard Dale View Post
      I'm not familiar with using MPD as a DLNA renderer and maybe it is different to the standard MPD mode. But you can set up the alsa mixer settings in /etc/mpd.conf and control the volume from an MPD client app. That's what I did when I was driving my B&W MM-1 speakers with a Raspberry Pi and MPD.
      Hi Richard - In the image I have the volume control set to "Software" in mpd.conf. This allows JRiver to control the attenuation, but I don't believe it allows JRiver to control the analog volume control on the physical Dragonfly device.

      Maybe I'm missing something here. Please let me know, as your advice is always excellent!
    1. The Computer Audiophile's Avatar
      The Computer Audiophile -
      Quote Originally Posted by Richard Dale View Post
      I'm not familiar with using MPD as a DLNA renderer and maybe it is different to the standard MPD mode. But you can set up the alsa mixer settings in /etc/mpd.conf and control the volume from an MPD client app. That's what I did when I was driving my B&W MM-1 speakers with a Raspberry Pi and MPD.
      I just tested setting it to "hardware" in the mid.conf as well and it didn't change the volume on the Dragonfly. The "software" setting doesn't change it either. With it set to software the volume does get attenuated, but not the actual analog volume control on the Dragonfly.
    1. kumakuma's Avatar
      kumakuma -
      Fantastic work, Chris!

      Do you think it would be possible to create a wireless version of this by adding the wireless USB dongle with antenna (http://www.logicsupply.com/uwn200/)? I imagine in this case, you would need to connect to your DAC using the miniUSB port.