7m (SevenMinutes) is an open source Audio Media Server for Mac.
It enables you to play audio contents of iTunes on...
- web browsers (Chrome/Firefox/Safari on PC/Mac)
- ios devices
- mp3 player apps (supporting m3u playlist) including ServeStream on Android
- Dropbox ios app
Start here -> GettingStarted
Three types of playlists
Basically, 7m is a 'playlist player' which plays three types of playlists.
- iTunes playlists
- remixed playlists
- request playlist
iTunes playlists / smart playlists
- It can play any playlists of audio contents of iTunes
- It syncs bookmark and played date real-time to iTunes after playing (good for smart playlists)
- It can reduce traffic by converting audio tracks to specified bit rate for slow 3G connection
It can remix a new playlist on demand from podcasts and your favorite musics.
A "remixed playlist" in 7m ...
- uses iTunes playlists / smart playlists as source of audio tracks
- picks up audio tracks from sources in specified duration or number of tracks
- mixes them and create a new combined playlist in real time
- refresh tracks on demand anytime, so you can listen new distributed podcasts
- cuts a long track to specified duration, limits track duration from one source
So you can listen to your "Radio Program"s consists of talk (podcasts) and music anytime, anywhere on virtually every device you have.
- you can search all songs in iTunes from client
- you can request a track in search result
- "Playing Queue" is a special playlist of requested tracks
- tracks are removed from queue after played
Why "SevenMinutes" ?
I subscribe many podcasts for learning English and gathering news in tech domain. But most of them are too long for me to listen all because listening English contents requires much concentration for a non-native speaker.
I can listen for only "Seven Minutes" at most with enough concentration.
I need to refresh myself listening my favorite songs some duration after listening podcasts.
So I tried a prototype version of this project and found it was real "Radio Station".
I don't agree to call so called "Net Radio" stations a radio. Because they are only playlists of musics without any talk. I loved AM-radio programs with both talk and music.
Favorite talks between favorite songs, or favorite songs between favorite talks are very interesting contents if automatically refreshed.
I am a heavy user of iTunes smart playlist. But it was not smart enough realizing my real 'Radio Program'.
Now I am enjoying my personal "Radio" consists of "Seven Minutes" talks and favorite music with SevenMinutes.
SevenMinutes is consists of
- a web app with iTunes interface that distributes audio contents by http streaming
- simple GUI front end for OS/X
- a real-time converter from iTunes playlists to m3u playlist for many mp3 players
- a dedicated iOS App
It can be invoked in GUI mode or CUI mode.
SevenMinutes is distributed for end users as a Mac App with every module except iOS app. Get it from
In this mode, you can invoke it as a Mac desktop app just by clicking icon.
Only requirement in this mode is sox.
SevenMinutes is distributed for power users and developers as a github repository at https://github.com/essa/7m .
You can checkout it and invoke it with MacRuby in a terminal window.
Mac OS/X Mountain Lion or higher.
The web app of SevenMinutes is written in MacRuby, so it will not run in other os.
sox and ffmpeg
SevenMinutes requires sox (http://sox.sourceforge.net/).
I think easiest way to install it is using Homebrew (http://mxcl.github.io/homebrew/).
$ brew install sox
And it uses ffmpeg to convert audio files to mp3.
If you have many contents in other than mp3 format, you should install ffmpeg.
$ brew install ffmpeg
If you use SevenMinutes in GUI mode, sox is only requirement to run it.
If you use SevenMinutes in CUI mode, you have to install products below.
MacRuby 0.12 and later (CUI mode only)
Install it from http://macruby.org/ or
$ rvm install macruby-0.12
And you should install required gems by
$ rake install_gems
node.js, npm and grunt (CUI mode only)
The web app is written in coffeescript. You have to compile it by Grunt.
After install node.js and npm,
$ cd cui.bundle $ npm install $ grunt
This will generate app.js to cui.bundle/public (for web app) and to ios/www/js (for iOS app).
phantomjs (for test mode only)
running js specs in CUI mode requires phantomjs
$ rake jasmine
running SevenMinutes in CUI mode
Edit cui.bundle/7m.yml and
$ cd cui.bundle $ macruby cui_main.rb 7m.yml
running iOS app
Caution: some spec will create a playlist named '7mtest' and add some tracks to iTunes!
$ rake spec # unit tests for web server $ rake jasmine # unit tests for web app $ rake integration_test # integration test
The integration_test is written using capybara.
I can't find a way to run capybara in macruby. So I wrote it for Matz ruby2.0.0.
You need Ruby 2.0.0 installed if you run integration tests.
- jQuery mobile
- backbone.js and underscore.js
- jPlayer (http://jplayer.org/)
for testing JS
Web App as Mac OS/X desktop App and cui app written in MacRuby
phonegap for web app and native app
Players are written in Coffeescript with backbone.js, jQuery mobile, phonegap.
Most of sources are common in web app and native app for iOS (and coming Android app).
The player in iOS uses a phonegap plug-in for streaming audio (AVPlayer).
Music players tested with SevenMinutes
Unfortunately, many mp3 player / radio player apps don't support m3u playlist including urls even if it supports m3u format with only file path.
I have found found only these two apps play good with 7m.
7m is a web server so you can connect to it across 3G using vpn servers like SoftEther.
You can connect to SevenMinutes across 3G using
UPnP PortMapper http://upnp-portmapper.sourceforge.net/
Caution: Currently, no consideration for security!!! Do it at your own risk!!!
Alpha. But I myself am enjoying my personal "Radio" using this everyday.
Server runs whole day without trouble, but iOS app need restarting between "Program"s sometime.
It modifies 'bookmark', 'playedDate', 'playedCount', 'bookmarkable' attributes of iTunes track. So if you uses these attributes for you smart playlists or something, don't run this in your Mac now.
- more specs
- improve visual design
- enable rating
- cross fade
- notification about interaction with server in players
- better audio session handling in iOS app
- Android App
- Simple authentication with Basic Auth
- UPnP Integration
- editing 7m.yml in GUI
- plug-in System for remixing "Radio Program"
Source imported in this repository
- VolumeSlider phonegap plug-in (https://github.com/phonegap/phonegap-plugins/tree/master/iPhone/VolumeSlider) -- ios/SevenMinutes/VolumeSlider.*
- jQuery -- cui.bundle/public/jslib/jquery-*
- jQueryMobile -- cui.bundle/public/jslib/jquery-mobile
- jPlayer -- cui.bundle/public/jslib/jplayer*
- backbone.js -- cui.bundle/public/jslib/backbone.js
- underscore.js -- cui.bundle/public/jslib/underscore.js
- rateit -- http://rateit.codeplex.com/ cui/public/jslib/jquery.rateit.min.js
- jquery.marquee -- http://remysharp.com/2008/09/10/the-silky-smooth-marquee/ cui/public/jslib/jquery.marquee.js
Sources modified from other projects.
StreamAudio plugin was modified from phonegap Media plugin
WebServer was modified from control_tower (https://github.com/MacRuby/ControlTower)
Sample mp3 files for tests are public domain music and downloaded from
Classical Music mp3 Free Download Historical Recordings Public Domain http://classicalmusicmp3freedownload.com/index.php?title=Main_Page
Pretty Office Icon Set Part 8 | Custom Icon Design http://www.customicondesign.com/free-icons/pretty-office-icon-set/pretty-office-icon-set-part-8/ http://www.iconarchive.com/show/pretty-office-8-icons-by-custom-icon-design.html
icons and splashes for ios
Designed by Mr. Holder.
Author and License
Released under Ruby's License.