Category Archives: Linux

Amplify your music with MagicPlay and the Raspberry Pi

MagicPlay is an open cross-platform audio streaming standard (think “HTTP for music”) that supports synchronized streaming to multiple speakers (like Sonos). For more details, see this Verge story. In the near future you’ll be able to buy WiFi speakers, TVs and other products that come with MagicPlay support out of the box. If you want to try MagicPlay right now, you can turn an existing device such as the Raspberry Pi into a MagicPlay device and stream music to it using doubleTwist Music Player for Android.

Prerequisites:

If you would like to skip building the source code, you can download a binary package instead.

1. Download the AllJoyn source code (AllJoyn is a P2P framework developed by Qualcomm to power the Internet of Things).
2. Unzip the AllJoyn code: tar -zxvf alljoyn-3.3.0-src.tgz; cd alljoyn-3.3.0-src
3. Clone the following two repositories:

4. Apply this patch: zcat magicplayd.diff.gz | patch -p0
5. Build AllJoyn library: make OS=linux CPU=armhf VARIANT=release
6. Build and install audio service: cd services/audio; make CPU=armhf; sudo make CPU=armhf install

The MagicPlay service (/etc/init.d/magicplayd) has now been installed and will automatically start on boot.

Note that if you want to use a USB sound card with MagicPlay on the Raspberry Pi, you will need to modify services/audio/src/posix/ALSADevice.cc prior to step #7 and replace “plughw:0,0″ with “plughw:1,0″ and “hw:0″ with “hw:1″ (since the USB sound card would be sound card #2).

To get beta builds of doubleTwist Music Player for Android, make sure to join the doubleTwist Google Plus community.

The setup pictured below includes a LP-2020A+ Lepai amplifier ($20) and Micca MB42 speakers ($50).

RaspberryPi-MagicPlay

MagicPlay1MagicPlay2

C# developer needed at DoubleTwist

We have an opening for an experienced C# developer at DoubleTwist:

  • Should have 5+ years experience in software development
  • Should have 3+ years of experience with .NET, C# and web services
  • Should have a degree in Computer Science or related field
  • Experience developing digital media applications is a plus
  • Experience with .NET under Linux (Mono) is a plus
  • You will be tasked with working on both our client software as well as server backend code. Besides coding, you will be responsible for assisting with documentation, building test plans, debugging software, providing design input, and helping in every way to ensure the successful rollout of each phase of the project.

    Location: San Francisco

    If you are interested, send us your résumé. If you know of someone who might be interested, please forward this to them.

    Gadgets for sale

    Nokia 770I am selling the following items. If you live in downtown San Francisco I will personally deliver the item(s) to you.

    • Nokia 770: Used for 6 weeks. This unit is very special as it has been touched by the iCEO! (oh, and me, but I’m not quite at his level of fame). Runs Linux and is very hackable. $300.
    • 3G iPod 40GB: Used for 2.5 years. Own a piece of DRM history! This is the iPod I used when I reverse engineered FairPlay in winter 2003/2004. Battery needs replacing as it doesn’t last very long anymore. $150.
    • Firewire PCMCIA card: Nothing exotic here. Used only for a few days. $10 with purchase of any item above $50.
    • AUDIOTRAK OPTOPlay: Used for a few months. $30 with purchase of any item above $50.

    Update: The Nokia 770 and the iPod have been sold.

    22. Am I old enough?

    I’m 22 years old today and it’s story time: When I was 17 years old I bought my first portable MP3 player. I reverse engineered the Windows driver that came with it and wrote a Linux driver. After some time I was contacted by the Singaporean company that manufactured the player. They were quite happy with my work because they had “lost contact” with the Chinese company they had outsourced driver development to. Not only did they give me their support, they wanted to hire me to write a Linux driver for their next product. I was willing to start the work immediately, but they needed my CV first due to formalities. After I sent them my CV I never heard back from them. I doubt it was due to my lack of work experience, as I had already demonstrated that I had the necessary skills. So if you were wondering ‘Old enough for what?’ after reading the title of this post, the answer is ‘Old enough to write software for a company in Singapore.’

    snd123

    I hacked together a very simple C# command line audio player that uses libvlc.

    It supports the following formats:

    MP2, MP3, AAC, Ogg Vorbis, Speex, FLAC, Apple Lossless, AC3, CDDA, WMA 1 and 2.
    MOD formats: MOD, XM, IT, S3M, 669, MTM, STM.

    Source Code: snd123-1.0.2.tar.bz2 (MD5: a315990e0ab58f30ca80589e251e2932)
    Ubuntu Breezy package: snd123_1.0.2-1_i386.deb (MD5: f81e05b3bd9ed7cd8a0f5b458af78de6)

    Syntax examples:

    snd123 ~/Music/song.mp3
    snd123 cdda:/dev/cdrom
    snd123 http://a1864.phobos.apple.com/Music/y2005/m05/d25/h16/s05.yoplcihv.aac.p.m4p

    Compiling VLC

    Instructions for compiling VLC with VC-1 (WMV9) support under Ubuntu Breezy

    Install dependencies available from the Ubuntu repositories (main and universe)

    $ sudo apt-get install libwxgtk2.6-dev libdvbpsi3-dev libmpeg2-4-dev libmad0-dev libasound2-dev libesd0-dev x11proto-video-dev libdvdnav-dev liba52-0.7.4-dev libflac-dev libfreetype6-dev libid3tag0-dev libogg-dev libpng12-dev libspeex-dev libtheora-dev libvorbis-dev libxml2-dev zlib1g-dev gcc g++ automake1.9 autoconf libtool subversion cvs libx11-dev

    Install libdvdcss (DVD support)

    $ mkdir ~/videolan ; cd ~/videolan
    $ wget http://downloads.videolan.org/pub/videolan/vlc/0.8.2/contrib/libdvdcss-1.2.8.tar.bz2
    $ tar -jxvf libdvdcss-1.2.8.tar.bz2 ; cd libdvdcss-1.2.8
    $ ./configure --prefix=/usr ; make ; sudo make install

    Compile faad2 (AAC support)

    $ cd ~/videolan ; wget http://downloads.videolan.org/pub/videolan/vlc/0.8.2/contrib/faad2-20040923.tar.bz2
    $ tar -jxvf faad2-20040923.tar.bz2 ; cd faad2-20040923
    $ ./configure --prefix=/usr ; cd libfaad ; make

    Compile ffmpeg (support for H264 and many other codecs)

    $ cd ~/videolan ; cvs -z9 -d:pserver:anonymous@mplayerhq.hu:/cvsroot/ffmpeg co ffmpeg
    $ cd ffmpeg ; ./configure --enable-pp --enable-gpl ; make

    Compile libvc1 (WMV9 support)

    $ cd ~/videolan ; wget http://nanocrew.net/sw/libvc1-1.0.tar.gz ; tar -zxvf libvc1-1.0.tar.gz
    $ wget http://USERNAME:PWD@www.smpte-vc1.org/TrialPublication/Decoder/VC1_reference_decoder_release6.zip
    $ unzip VC1_reference_decoder_release6.zip
    $ cp VC1_reference_decoder_release6/decoder/*.[ch] libvc1-1.0/src/.
    $ cp VC1_reference_decoder_release6/shared/*.[ch] libvc1-1.0/src/.
    $ cd libvc1-1.0 ; ./bootstrap ; ./configure --prefix=/usr ; make

    Install VLC

    $ cd ~/videolan ; svn co svn://svn.videolan.org/vlc/trunk vlc-trunk
    $ cd vlc-trunk ; wget -O – http://nanocrew.net/sw/vlc-libvc1.diff | patch -p0
    $ ./bootstrap ; ./configure --with-ffmpeg-tree=../ffmpeg --enable-faad --with-faad-tree=../faad2-20040923 --enable-esd --enable-flac --enable-theora --enable-libvc1 --with-libvc1-tree=../libvc1-1.0 --disable-hal
    $ make ; sudo make install