From cdde562f332ee3b074da1a176b02365cefa1c8ec Mon Sep 17 00:00:00 2001 From: Paul Harrison Date: Sat, 16 Jun 2012 13:48:45 +0100 Subject: [PATCH] MythMusic: Add ice/shoutcast radio stream playback (cherry picked from commit 92681341499885f162db33acf0479e3ec1fa02bd) Conflicts: mythplugins/mythmusic/mythmusic/metadata.cpp mythplugins/mythmusic/mythmusic/metadata.h mythplugins/mythmusic/mythmusic/musicplayer.h Signed-off-by: Stuart Morgan --- mythplugins/mythmusic/mythmusic/dbcheck.cpp | 25 +- .../mythmusic/mythmusic/decoderhandler.cpp | 156 +- .../mythmusic/mythmusic/decoderhandler.h | 24 +- .../mythmusic/mythmusic/importmusic.cpp | 1 - mythplugins/mythmusic/mythmusic/main.cpp | 35 +- mythplugins/mythmusic/mythmusic/metadata.cpp | 238 +- mythplugins/mythmusic/mythmusic/metadata.h | 63 +- .../mythmusic/mythmusic/musiccommon.cpp | 266 +- mythplugins/mythmusic/mythmusic/musiccommon.h | 5 +- .../mythmusic/mythmusic/musicplayer.cpp | 158 +- mythplugins/mythmusic/mythmusic/musicplayer.h | 26 +- mythplugins/mythmusic/mythmusic/mythmusic.pro | 4 +- mythplugins/mythmusic/mythmusic/playlist.cpp | 49 +- .../mythmusic/mythmusic/playlistcontainer.cpp | 3 + mythplugins/mythmusic/mythmusic/shoutcast.cpp | 91 +- mythplugins/mythmusic/mythmusic/shoutcast.h | 6 + mythplugins/mythmusic/mythmusic/streams.xml | 6283 +++++++++++++++++ .../mythmusic/mythmusic/streamview.cpp | 900 +++ mythplugins/mythmusic/mythmusic/streamview.h | 116 + .../mythmusic/mythmusic/visualizerview.cpp | 3 +- .../theme/default-wide/stream-ui.xml | 440 ++ .../mythmusic/theme/menus/musicmenu.xml | 6 +- mythplugins/mythmusic/theme/theme.pro | 5 +- 23 files changed, 8610 insertions(+), 293 deletions(-) create mode 100644 mythplugins/mythmusic/mythmusic/streams.xml create mode 100644 mythplugins/mythmusic/mythmusic/streamview.cpp create mode 100644 mythplugins/mythmusic/mythmusic/streamview.h create mode 100644 mythplugins/mythmusic/theme/default-wide/stream-ui.xml diff --git a/mythplugins/mythmusic/mythmusic/dbcheck.cpp b/mythplugins/mythmusic/mythmusic/dbcheck.cpp index 15e0cdf9cd4..98ebc79d636 100644 --- a/mythplugins/mythmusic/mythmusic/dbcheck.cpp +++ b/mythplugins/mythmusic/mythmusic/dbcheck.cpp @@ -11,7 +11,7 @@ using namespace std; #include "mythtv/mythdb.h" #include "mythtv/schemawizard.h" -const QString currentDatabaseVersion = "1019"; +const QString currentDatabaseVersion = "1020"; static bool doUpgradeMusicDatabaseSchema(QString &dbver); @@ -854,5 +854,28 @@ QString("ALTER DATABASE %1 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;") return false; } + if (dbver == "1019") + { + const QString updates[] = { +"DROP TABLE IF EXISTS music_radios;", +"CREATE TABLE music_radios (" +" intid INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY," +" station VARCHAR(128) NOT NULL," +" channel VARCHAR(128) NOT NULL," +" url VARCHAR(128) NOT NULL," +" logourl VARCHAR(128) NOT NULL," +" genre VARCHAR(128) NOT NULL," +" metaformat VARCHAR(128) NOT NULL," +" format VARCHAR(10) NOT NULL," +" INDEX (station)," +" INDEX (channel)" +");", +"" +}; + + if (!performActualUpdate(updates, "1020", dbver)) + return false; + } + return true; } diff --git a/mythplugins/mythmusic/mythmusic/decoderhandler.cpp b/mythplugins/mythmusic/mythmusic/decoderhandler.cpp index d5c083433ac..7fccac600eb 100644 --- a/mythplugins/mythmusic/mythmusic/decoderhandler.cpp +++ b/mythplugins/mythmusic/mythmusic/decoderhandler.cpp @@ -27,13 +27,13 @@ QEvent::Type DecoderHandlerEvent::Ready = (QEvent::Type) QEvent::registerEventType(); QEvent::Type DecoderHandlerEvent::Meta = (QEvent::Type) QEvent::registerEventType(); -QEvent::Type DecoderHandlerEvent::Info = (QEvent::Type) QEvent::registerEventType(); +QEvent::Type DecoderHandlerEvent::BufferStatus = (QEvent::Type) QEvent::registerEventType(); QEvent::Type DecoderHandlerEvent::OperationStart = (QEvent::Type) QEvent::registerEventType(); QEvent::Type DecoderHandlerEvent::OperationStop = (QEvent::Type) QEvent::registerEventType(); QEvent::Type DecoderHandlerEvent::Error = (QEvent::Type) QEvent::registerEventType(); DecoderHandlerEvent::DecoderHandlerEvent(Type t, const Metadata &meta) - : MythEvent(t), m_msg(NULL), m_meta(NULL) + : MythEvent(t), m_msg(NULL), m_meta(NULL), m_available(0), m_maxSize(0) { m_meta = new Metadata(meta); } @@ -57,9 +57,18 @@ MythEvent* DecoderHandlerEvent::clone(void) const if (m_meta) result->m_meta = new Metadata(*m_meta); + result->m_available = m_available; + result->m_maxSize = m_maxSize; + return result; } +void DecoderHandlerEvent::getBufferStatus(int *available, int *maxSize) const +{ + *available = m_available; + *maxSize = m_maxSize; +} + /**********************************************************************/ DecoderIOFactory::DecoderIOFactory(DecoderHandler *parent) @@ -88,11 +97,6 @@ void DecoderIOFactory::doFailed(const QString &message) m_handler->doFailed(getUrl(), message); } -void DecoderIOFactory::doInfo(const QString &message) -{ - m_handler->doInfo(message); -} - void DecoderIOFactory::doOperationStart(const QString &name) { m_handler->doOperationStart(name); @@ -201,7 +205,7 @@ void DecoderIOFactoryUrl::start(void) m_started = false; - doOperationStart("Fetching remote file"); + doOperationStart(tr("Fetching remote file")); m_reply = m_accessManager->get(QNetworkRequest(getUrl())); @@ -266,12 +270,6 @@ void DecoderIOFactoryUrl::readyRead(void) m_reply->setReadBufferSize(DecoderIOFactory::DefaultPrebufferSize); doStart(); } - -#if 0 - LOG(VB_GENERAL, LOG_DEBUG, - QString("DecoderIOFactoryUrl::readyRead file size: %1") - .arg(m_bytesWritten)); -#endif } void DecoderIOFactoryUrl::doStart(void) @@ -319,7 +317,19 @@ void DecoderHandler::start(Metadata *mdata) else url.setUrl(mdata->Filename()); - bool result = createPlaylist(url); + createPlaylist(url); +} + +void DecoderHandler::doStart(bool result) +{ + doOperationStop(); + + QUrl url; + if (QFileInfo(m_meta->Filename()).isAbsolute()) + url = QUrl::fromLocalFile(m_meta->Filename()); + else + url.setUrl(m_meta->Filename()); + if (m_state == LOADING && result) { for (int ii = 0; ii < m_playlist.size(); ii++) @@ -329,7 +339,7 @@ void DecoderHandler::start(Metadata *mdata) } else { - if (m_state != STOPPED) + if (m_state == STOPPED) { doFailed(url, "Could not get playlist"); } @@ -428,16 +438,55 @@ void DecoderHandler::stop(void) m_state = STOPPED; } -void DecoderHandler::customEvent(QEvent *e) +void DecoderHandler::customEvent(QEvent *event) { - if (class DecoderHandlerEvent *event = dynamic_cast(e)) + if (DecoderHandlerEvent *dhe = dynamic_cast(event)) { // Proxy all DecoderHandlerEvents - return dispatch(*event); + return dispatch(*dhe); + } + else if (event->type() == MythEvent::MythEventMessage) + { + MythEvent *me = (MythEvent *)event; + QStringList tokens = me->Message().split(" ", QString::SkipEmptyParts); + + if (tokens.isEmpty()) + return; + + if (tokens[0] == "DOWNLOAD_FILE") + { + QStringList args = me->ExtraDataList(); + + if (tokens[1] == "UPDATE") + { + } + else if (tokens[1] == "FINISHED") + { + QString downloadUrl = args[0]; + int fileSize = args[2].toInt(); + int errorCode = args[4].toInt(); + QString filename = args[1]; + + if ((errorCode != 0) || (fileSize == 0)) + { + LOG(VB_GENERAL, LOG_ERR, QString("DecoderHandler: failed to download playlist from '%1'") + .arg(downloadUrl)); + QUrl url(downloadUrl); + m_state = STOPPED; + doOperationStop(); + doFailed(url, "Could not get playlist"); + } + else + { + QUrl fileUrl(filename); + createPlaylistFromFile(fileUrl); + } + } + } } } -bool DecoderHandler::createPlaylist(const QUrl &url) +void DecoderHandler::createPlaylist(const QUrl &url) { QString extension = QFileInfo(url.path()).suffix(); LOG(VB_NETWORK, LOG_INFO, @@ -447,15 +496,17 @@ bool DecoderHandler::createPlaylist(const QUrl &url) if (extension == "pls" || extension == "m3u") { if (url.scheme() == "file" || QFileInfo(url.toString()).isAbsolute()) - return createPlaylistFromFile(url); + createPlaylistFromFile(url); else - return createPlaylistFromRemoteUrl(url); + createPlaylistFromRemoteUrl(url); + + return; } - return createPlaylistForSingleFile(url); + createPlaylistForSingleFile(url); } -bool DecoderHandler::createPlaylistForSingleFile(const QUrl &url) +void DecoderHandler::createPlaylistForSingleFile(const QUrl &url) { PlayListFileEntry *entry = new PlayListFileEntry; @@ -466,49 +517,51 @@ bool DecoderHandler::createPlaylistForSingleFile(const QUrl &url) m_playlist.add(entry); - return m_playlist.size() > 0; + doStart((m_playlist.size() > 0)); } -bool DecoderHandler::createPlaylistFromFile(const QUrl &url) +void DecoderHandler::createPlaylistFromFile(const QUrl &url) { QFile f(QFileInfo(url.path()).absolutePath() + "/" + QFileInfo(url.path()).fileName()); if (!f.open(QIODevice::ReadOnly)) - return false; + return; QTextStream stream(&f); QString extension = QFileInfo(url.path()).suffix().toLower(); - if (PlayListFile::parse(&m_playlist, &stream, extension) <= 0) - return false; + PlayListFile::parse(&m_playlist, &stream, extension); - return m_playlist.size() > 0; + doStart((m_playlist.size() > 0)); } -bool DecoderHandler::createPlaylistFromRemoteUrl(const QUrl &url) +void DecoderHandler::createPlaylistFromRemoteUrl(const QUrl &url) { LOG(VB_NETWORK, LOG_INFO, QString("Retrieving playlist from '%1'").arg(url.toString())); - doOperationStart("Retrieving playlist"); - - QByteArray data; - - if (!GetMythDownloadManager()->download(url.toString(), &data)) - { - LOG(VB_GENERAL, LOG_ERR, QString("DecoderHandler:: Failed to download playlist from: %1").arg(url.toString())); - doOperationStop(); - return false; - } - - doOperationStop(); - - QTextStream stream(&data, QIODevice::ReadOnly); + doOperationStart(tr("Retrieving playlist")); QString extension = QFileInfo(url.path()).suffix().toLower(); + QString saveFilename = GetConfDir() + "/MythMusic/playlist." + extension; + GetMythDownloadManager()->queueDownload(url.toString(), saveFilename, this); - bool result = PlayListFile::parse(&m_playlist, &stream, extension) > 0; + //TODO should find a better way to do this + QTime time; + time.start(); + while (m_state == LOADING) + { + if (time.elapsed() > 30000) + { + doOperationStop(); + GetMythDownloadManager()->cancelDownload(url.toString()); + LOG(VB_GENERAL, LOG_ERR, QString("DecoderHandler:: Timed out trying to download playlist from: %1") + .arg(url.toString())); + m_state = STOPPED; + } - return result; + qApp->processEvents(); + usleep(500); + } } void DecoderHandler::doConnectDecoder(const QUrl &url, const QString &format) @@ -538,18 +591,11 @@ void DecoderHandler::doConnectDecoder(const QUrl &url, const QString &format) void DecoderHandler::doFailed(const QUrl &url, const QString &message) { LOG(VB_NETWORK, LOG_ERR, - QString("DecoderHandler: Unsupported file format: '%1' - %2") - .arg(url.toString()).arg(message)); + QString("DecoderHandler error: '%1' - %2").arg(message).arg(url.toString())); DecoderHandlerEvent ev(DecoderHandlerEvent::Error, new QString(message)); dispatch(ev); } -void DecoderHandler::doInfo(const QString &message) -{ - DecoderHandlerEvent ev(DecoderHandlerEvent::Info, new QString(message)); - dispatch(ev); -} - void DecoderHandler::doOperationStart(const QString &name) { m_op = true; diff --git a/mythplugins/mythmusic/mythmusic/decoderhandler.h b/mythplugins/mythmusic/mythmusic/decoderhandler.h index 4bb4768fd83..ebd5093831d 100644 --- a/mythplugins/mythmusic/mythmusic/decoderhandler.h +++ b/mythplugins/mythmusic/mythmusic/decoderhandler.h @@ -38,22 +38,27 @@ class DecoderHandlerEvent : public MythEvent { public: DecoderHandlerEvent(Type t) - : MythEvent(t), m_msg(0), m_meta(0) {} + : MythEvent(t), m_msg(0), m_meta(0), m_available(0), m_maxSize(0) {} DecoderHandlerEvent(Type t, QString *e) - : MythEvent(t), m_msg(e), m_meta(0) {} + : MythEvent(t), m_msg(e), m_meta(0), m_available(0), m_maxSize(0) {} + + DecoderHandlerEvent(Type t, int available, int maxSize) + : MythEvent(t), m_msg(0), m_meta(0), + m_available(available), m_maxSize(maxSize) {} DecoderHandlerEvent(Type t, const Metadata &m); ~DecoderHandlerEvent(); QString *getMessage(void) const { return m_msg; } Metadata *getMetadata(void) const { return m_meta; } + void getBufferStatus(int *available, int *maxSize) const; virtual MythEvent *clone(void) const; static Type Ready; static Type Meta; - static Type Info; + static Type BufferStatus; static Type OperationStart; static Type OperationStop; static Type Error; @@ -61,6 +66,8 @@ class DecoderHandlerEvent : public MythEvent private: QString *m_msg; Metadata *m_meta; + int m_available; + int m_maxSize; }; /** \brief Class for starting stream decoding. @@ -105,13 +112,13 @@ class DecoderHandler : public QObject, public MythObservable void doOperationStop(void); void doConnectDecoder(const QUrl &url, const QString &format); void doFailed(const QUrl &url, const QString &message); - void doInfo(const QString &message); + void doStart(bool result); private: - bool createPlaylist(const QUrl &url); - bool createPlaylistForSingleFile(const QUrl &url); - bool createPlaylistFromFile(const QUrl &url); - bool createPlaylistFromRemoteUrl(const QUrl &url); + void createPlaylist(const QUrl &url); + void createPlaylistForSingleFile(const QUrl &url); + void createPlaylistFromFile(const QUrl &url); + void createPlaylistFromRemoteUrl(const QUrl &url); bool haveIOFactory(void) { return m_io_factory != NULL; } DecoderIOFactory *getIOFactory(void) { return m_io_factory; } @@ -156,7 +163,6 @@ class DecoderIOFactory : public QObject, public MythObservable void doConnectDecoder(const QString &format); Decoder *getDecoder(void); void doFailed(const QString &message); - void doInfo(const QString &message); void doOperationStart(const QString &name); void doOperationStop(void); Metadata& getMetadata() { return m_meta; } diff --git a/mythplugins/mythmusic/mythmusic/importmusic.cpp b/mythplugins/mythmusic/mythmusic/importmusic.cpp index 2690022b507..8e0ea28a03b 100644 --- a/mythplugins/mythmusic/mythmusic/importmusic.cpp +++ b/mythplugins/mythmusic/mythmusic/importmusic.cpp @@ -129,7 +129,6 @@ ImportMusicDialog::~ImportMusicDialog() delete m_tracks; - // do we need to do a resync if (m_somethingWasImported) emit importFinished(); } diff --git a/mythplugins/mythmusic/mythmusic/main.cpp b/mythplugins/mythmusic/mythmusic/main.cpp index 2cc677f4060..c40fda7daec 100644 --- a/mythplugins/mythmusic/mythmusic/main.cpp +++ b/mythplugins/mythmusic/mythmusic/main.cpp @@ -28,6 +28,7 @@ #include "metadata.h" #include "playlisteditorview.h" #include "playlistview.h" +#include "streamview.h" #include "playlistcontainer.h" #include "dbcheck.h" #include "filescanner.h" @@ -185,8 +186,10 @@ static void loadMusic() PlaylistContainer *all_playlists = new PlaylistContainer( all_music, gCoreContext->GetHostName()); - gMusicData->all_playlists = all_playlists; gMusicData->all_music = all_music; + gMusicData->all_streams = new AllStream(); + gMusicData->all_playlists = all_playlists; + gMusicData->initialized = true; while (!gMusicData->all_playlists->doneLoading() || !gMusicData->all_music->doneLoading()) @@ -196,6 +199,8 @@ static void loadMusic() } gMusicData->all_playlists->postLoad(); + gMusicData->all_streams->createPlaylist(); + gPlayer->loadPlaylist(); if (busy) @@ -217,6 +222,20 @@ static void startPlayback(void) delete view; } +static void startStreamPlayback(void) +{ + loadMusic(); + + MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack(); + + StreamView *view = new StreamView(mainStack); + + if (view->Create()) + mainStack->AddScreen(view); + else + delete view; +} + static void startDatabaseTree(void) { loadMusic(); @@ -335,6 +354,8 @@ static void MusicCallback(void *data, QString &selection) startDatabaseTree(); else if (sel == "music_play") startPlayback(); + else if (sel == "stream_play") + startStreamPlayback(); else if (sel == "music_rip") { startRipper(); @@ -436,6 +457,13 @@ static void runMusicPlayback(void) GetMythUI()->RemoveCurrentLocation(); } +static void runMusicStreamPlayback(void) +{ + GetMythUI()->AddCurrentLocation("streammusic"); + startStreamPlayback(); + GetMythUI()->RemoveCurrentLocation(); +} + static void runMusicSelection(void) { GetMythUI()->AddCurrentLocation("musicplaylists"); @@ -546,6 +574,8 @@ static void setupKeys(void) "", "", runMusicPlayback); REG_JUMP(QT_TRANSLATE_NOOP("MythControls", "Select music playlists"), "", "", runMusicSelection); + REG_JUMP(QT_TRANSLATE_NOOP("MythControls", "Play radio stream"), + "", "", runMusicStreamPlayback); REG_JUMP(QT_TRANSLATE_NOOP("MythControls", "Rip CD"), "", "", runRipCD); REG_JUMP(QT_TRANSLATE_NOOP("MythControls", "Scan music"), @@ -607,7 +637,8 @@ static void setupKeys(void) "Switch to the search view"), ""); REG_KEY("Music", "SWITCHTOVISUALISER", QT_TRANSLATE_NOOP("MythControls", "Switch to the fullscreen visualiser view"), ""); - + REG_KEY("Music", "SWITCHTORADIO", QT_TRANSLATE_NOOP("MythControls", + "Switch to the radio stream view"), ""); #ifdef FIXME // FIXME need to find a way to stop the media monitor jumping to the main menu before diff --git a/mythplugins/mythmusic/mythmusic/metadata.cpp b/mythplugins/mythmusic/mythmusic/metadata.cpp index 4b54a7c5d4b..f271cb4920b 100644 --- a/mythplugins/mythmusic/mythmusic/metadata.cpp +++ b/mythplugins/mythmusic/mythmusic/metadata.cpp @@ -28,8 +28,6 @@ #include "playlistcontainer.h" #include "musicutils.h" - - // this is the global MusicData object shared thoughout MythMusic MusicData *gMusicData = NULL; @@ -49,6 +47,45 @@ bool operator!=(const Metadata& a, const Metadata& b) return false; } +// this ctor is for radio streams +Metadata::Metadata(int lid, QString lstation, QString lchannel, QString lurl, + QString llogourl, QString lgenre, QString lmetaformat, QString lformat) + : m_artist(""), + m_compilation_artist(""), + m_album(""), + m_title(""), + m_formattedartist(""), + m_formattedtitle(""), + m_genre(lgenre), + m_format(lformat), + m_year(0), + m_tracknum(0), + m_trackCount(0), + m_length(0), + m_rating(0), + m_directoryid(-1), + m_artistid(-1), + m_compartistid(-1), + m_albumid(-1), + m_genreid(-1), + m_lastplay(QDateTime()), + m_templastplay(QDateTime()), + m_dateadded(QDateTime()), + m_playcount(0), + m_tempplaycount(0), + m_compilation(0), + m_albumArt(NULL), + m_id(lid), + m_filename(lurl), + m_changed(false), + m_station(lstation), + m_channel(lchannel), + m_logoUrl(llogourl), + m_metaFormat(lmetaformat) +{ + setRepo(RT_Radio); +} + Metadata::~Metadata() { if (m_albumArt) @@ -90,6 +127,10 @@ Metadata& Metadata::operator=(const Metadata &rhs) m_format = rhs.m_format; m_changed = rhs.m_changed; m_fileSize = rhs.m_fileSize; + m_station = rhs.m_station; + m_channel = rhs.m_channel; + m_logoUrl = rhs.m_logoUrl; + m_metaFormat = rhs.m_metaFormat; return *this; } @@ -710,7 +751,12 @@ void Metadata::toMap(MetadataMap &metadataMap, const QString &prefix) metadataMap[prefix + "artist"] = m_artist; metadataMap[prefix + "formatartist"] = FormatArtist(); metadataMap[prefix + "compilationartist"] = m_compilation_artist; - metadataMap[prefix + "album"] = m_album; + + if (m_album.isEmpty() && gPlayer->getPlayMode() == MusicPlayer::PLAYMODE_RADIO) + metadataMap[prefix + "album"] = QString("%1 - %2").arg(m_station).arg(m_channel); + else + metadataMap[prefix + "album"] = m_album; + metadataMap[prefix + "title"] = m_title; metadataMap[prefix + "formattitle"] = FormatTitle(); metadataMap[prefix + "tracknum"] = (m_tracknum > 0 ? QString("%1").arg(m_tracknum) : ""); @@ -737,12 +783,21 @@ void Metadata::toMap(MetadataMap &metadataMap, const QString &prefix) m_dateadded, kDateFull | kSimplify | kAddYear); metadataMap[prefix + "playcount"] = QString::number(m_playcount); - // FIXME we should use Filename() here but that will slow things down because of the hunt for the file - metadataMap[prefix + "filename"] = gMusicData->musicDir + m_filename; + QLocale locale = gCoreContext->GetQLocale(); QString tmpSize = locale.toString(m_fileSize * (1.0 / (1024.0 * 1024.0)), 'f', 2); metadataMap[prefix + "filesize"] = tmpSize; + + metadataMap[prefix + "filename"] = m_filename; + + // radio stream + metadataMap[prefix + "station"] = m_station; + metadataMap[prefix + "channel"] = m_channel; + metadataMap[prefix + "genre"] = m_genre; + metadataMap[prefix + "url"] = m_filename; + metadataMap[prefix + "logourl"] = m_logoUrl; + metadataMap[prefix + "metadataformat"] = m_metaFormat; } void Metadata::decRating() @@ -1244,6 +1299,167 @@ Metadata* AllMusic::getCDMetadata(int the_track) return NULL; } +/**************************************************************************/ + +AllStream::AllStream(void) +{ + loadStreams(); +} + +AllStream::~AllStream(void) +{ + while (!m_streamList.empty()) + { + delete m_streamList.back(); + m_streamList.pop_back(); + } +} + +bool AllStream::isValidID(Metadata::IdType an_id) +{ + for (int x = 0; x < m_streamList.count(); x++) + { + if (m_streamList.at(x)->ID() == an_id) + return true; + } + + return false; +} + +Metadata *AllStream::getMetadata(Metadata::IdType an_id) +{ + for (int x = 0; x < m_streamList.count(); x++) + { + if (m_streamList.at(x)->ID() == an_id) + return m_streamList.at(x); + } + + return NULL; +} + +void AllStream::loadStreams(void) +{ + while (!m_streamList.empty()) + { + delete m_streamList.back(); + m_streamList.pop_back(); + } + + QString aquery = "SELECT intid, station, channel, url, logourl, genre, metaformat, format " + "FROM music_radios " + "ORDER BY station,channel;"; + + MSqlQuery query(MSqlQuery::InitCon()); + if (!query.exec(aquery)) + MythDB::DBError("AllStream::loadStreams", query); + + if (query.isActive() && query.size() > 0) + { + while (query.next()) + { + Metadata *mdata = new Metadata( + query.value(0).toInt(), // intid + query.value(1).toString(), // station + query.value(2).toString(), // channel + query.value(3).toString(), // url + query.value(4).toString(), // logourl + query.value(5).toString(), // genre + query.value(6).toString(), // metadataformat + query.value(7).toString()); // format + + mdata->setRepo(RT_Radio); + + m_streamList.append(mdata); + } + } + else + { + LOG(VB_GENERAL, LOG_WARNING, "MythMusic hasn't found any radio streams!"); + } +} + +void AllStream::addStream(Metadata* mdata) +{ + // add the stream to the db + MSqlQuery query(MSqlQuery::InitCon()); + query.prepare("INSERT INTO music_radios (station, channel, url, logourl, genre, format, metaformat) " + "VALUES (:STATION, :CHANNEL, :URL, :LOGOURL, :GENRE, :FORMAT, :METAFORMAT);"); + query.bindValue(":STATION", mdata->Station()); + query.bindValue(":CHANNEL", mdata->Channel()); + query.bindValue(":URL", mdata->Url()); + query.bindValue(":LOGOURL", mdata->LogoUrl()); + query.bindValue(":GENRE", mdata->Genre()); + query.bindValue(":FORMAT", mdata->Format()); + query.bindValue(":METAFORMAT", mdata->MetadataFormat()); + + if (!query.exec() || !query.isActive() || query.numRowsAffected() <= 0) + { + MythDB::DBError("music insert radio", query); + return; + } + + mdata->setID(query.lastInsertId().toInt()); + mdata->setRepo(RT_Radio); + + loadStreams(); + createPlaylist(); +} + +void AllStream::removeStream(Metadata* mdata) +{ + // remove the stream from the db + int id = ID_TO_ID(mdata->ID()); + MSqlQuery query(MSqlQuery::InitCon()); + query.prepare("DELETE FROM music_radios WHERE intid = :ID"); + query.bindValue(":ID", id); + + if (!query.exec() || query.numRowsAffected() <= 0) + { + MythDB::DBError("AllStream::removeStream", query); + return; + } + + loadStreams(); + createPlaylist(); +} + +void AllStream::updateStream(Metadata* mdata) +{ + // update the stream in the db + int id = ID_TO_ID(mdata->ID()); + MSqlQuery query(MSqlQuery::InitCon()); + query.prepare("UPDATE music_radios set station = :STATION, channel = :CHANNEL, url = :URL, " + "logourl = :LOGOURL, genre = :GENRE, format = :FORMAT, metaformat = :METAFORMAT " + "WHERE intid = :ID"); + query.bindValue(":STATION", mdata->Station()); + query.bindValue(":CHANNEL", mdata->Channel()); + query.bindValue(":URL", mdata->Url()); + query.bindValue(":LOGOURL", mdata->LogoUrl()); + query.bindValue(":GENRE", mdata->Genre()); + query.bindValue(":FORMAT", mdata->Format()); + query.bindValue(":METAFORMAT", mdata->MetadataFormat()); + query.bindValue(":ID", id); + + if (!query.exec() || !query.isActive() || query.numRowsAffected() <= 0) + { + MythDB::DBError("AllStream::updateStream", query); + return; + } + + loadStreams(); + createPlaylist(); +} + +void AllStream::createPlaylist(void) +{ + gMusicData->all_playlists->getStreamPlaylist()->removeAllTracks(); + + for (int x = 0; x < m_streamList.count(); x++) + { + Metadata *mdata = m_streamList.at(x); + gMusicData->all_playlists->getStreamPlaylist()->addTrack(mdata->ID(), false); + } +} /**************************************************************************/ @@ -1279,13 +1495,14 @@ void AlbumArtImages::findImages(void) if (repo == RT_Radio) { MSqlQuery query(MSqlQuery::InitCon()); - query.prepare("SELECT logourl FROM music_radios WHERE intid = :ID;"); - query.bindValue(":ID", trackid); + query.prepare("SELECT logourl FROM music_radios WHERE url = :URL;"); + query.bindValue(":URL", m_parent->Filename()); if (query.exec()) { while (query.next()) { QString logoUrl = query.value(0).toString(); + AlbumArtImage *image = new AlbumArtImage(); image->id = -1; image->filename = logoUrl; @@ -1570,6 +1787,7 @@ MusicData::MusicData(void) { all_playlists = NULL; all_music = NULL; + all_streams = NULL; initialized = false; } @@ -1586,6 +1804,12 @@ MusicData::~MusicData(void) delete all_music; all_music = NULL; } + + if (all_streams) + { + delete all_streams; + all_streams = NULL; + } } /// reload music after a scan, rip or import diff --git a/mythplugins/mythmusic/mythmusic/metadata.h b/mythplugins/mythmusic/mythmusic/metadata.h index 5d67dee745e..6bf3eedad62 100644 --- a/mythplugins/mythmusic/mythmusic/metadata.h +++ b/mythplugins/mythmusic/mythmusic/metadata.h @@ -2,7 +2,6 @@ #define METADATA_H_ // C/C++ -#include #include #include @@ -15,11 +14,12 @@ using namespace std; #include #include - // mythtv #include "mythexp.h" #include + + // mythmusic @@ -113,11 +113,19 @@ class Metadata m_id(lid), m_filename(lfilename), m_fileSize(0), - m_changed(false) + m_changed(false), + m_station(""), + m_channel(""), + m_logoUrl(""), + m_metaFormat("") + { checkEmptyFields(); } + Metadata(int lid, QString lstation, QString lchannel, QString lurl, QString llogourl, + QString lgenre, QString lmetaformat, QString lformat); + ~Metadata(); Metadata(const Metadata &other) @@ -219,6 +227,21 @@ class Metadata } bool determineIfCompilation(bool cd = false); + void setStation(const QString &station) { m_station = station; } + QString Station(void) { return m_station; } + + void setChannel(const QString &channel) { m_channel = channel; } + QString Channel(void) { return m_channel; } + + void setUrl(const QString &url) { m_filename = url; } + QString Url(void) { return m_filename; } + + void setLogoUrl(const QString &logourl) { m_logoUrl = logourl; } + QString LogoUrl(void) { return m_logoUrl; } + + void setMetadataFormat(const QString &metaformat) { m_metaFormat = metaformat; } + QString MetadataFormat(void) { return m_metaFormat; } + void setEmbeddedAlbumArt(AlbumArtList &albumart); bool isInDatabase(void); @@ -283,6 +306,12 @@ class Metadata uint64_t m_fileSize; bool m_changed; + // radio stream stuff + QString m_station; + QString m_channel; + QString m_logoUrl; + QString m_metaFormat; + // Various formatting strings static QString m_formatnormalfileartist; static QString m_formatnormalfiletrack; @@ -374,6 +403,33 @@ class AllMusic double m_lastplayMax; }; +typedef QList StreamList; + +class AllStream +{ + public: + + AllStream(void); + ~AllStream(); + + void loadStreams(void); + + bool isValidID(Metadata::IdType an_id); + + Metadata* getMetadata(Metadata::IdType an_id); + + StreamList *getStreams(void) { return &m_streamList; } + + void addStream(Metadata *mdata); + void removeStream(Metadata *mdata); + void updateStream(Metadata *mdata); + + void createPlaylist(void); + + private: + StreamList m_streamList; +}; + //---------------------------------------------------------------------------- class MusicData : public QObject @@ -392,6 +448,7 @@ class MusicData : public QObject QString musicDir; PlaylistContainer *all_playlists; AllMusic *all_music; + AllStream *all_streams; bool initialized; }; diff --git a/mythplugins/mythmusic/mythmusic/musiccommon.cpp b/mythplugins/mythmusic/mythmusic/musiccommon.cpp index 0a13b82be9b..b5e6637d6ed 100644 --- a/mythplugins/mythmusic/mythmusic/musiccommon.cpp +++ b/mythplugins/mythmusic/mythmusic/musiccommon.cpp @@ -39,6 +39,7 @@ using namespace std; #include "musiccommon.h" #include "playlistview.h" #include "playlisteditorview.h" +#include "streamview.h" #include "visualizerview.h" #include "searchview.h" @@ -78,21 +79,6 @@ MusicCommon::~MusicCommon(void) m_mainvisual = NULL; } -#if 0 - if (cd_reader_thread) - { - cd_watcher->stop(); - cd_reader_thread->wait(); - delete cd_reader_thread; - } - - if (class LCD *lcd = LCD::Get()) - lcd->switchToTime(); - - gMusicData->all_music->save(); - gPlayer->refreshMetadata(); -#endif - if (LCD *lcd = LCD::Get()) { lcd->switchToTime(); @@ -172,7 +158,38 @@ bool MusicCommon::CreateCommon(void) gPlayer->addListener(this); if (!gPlayer->isPlaying()) + { + bool isRadioView = (m_currentView == MV_RADIO); + if (isRadioView) + gPlayer->setPlayMode(MusicPlayer::PLAYMODE_RADIO); + else + gPlayer->setPlayMode(MusicPlayer::PLAYMODE_TRACKS); + gPlayer->restorePosition(); + } + else + { + // if we are playing but we are switching to a view from a different playmode + // we need to restart playback in the new mode + if (m_currentView == MV_VISUALIZER) + { + // this view can be used in both play modes + } + else if (gPlayer->getPlayMode() == MusicPlayer::PLAYMODE_RADIO && m_currentView != MV_RADIO) + { + //gPlayer->savePosition(); + gPlayer->stop(true); + gPlayer->setPlayMode(MusicPlayer::PLAYMODE_TRACKS); + gPlayer->restorePosition(); + } + else if (gPlayer->getPlayMode() == MusicPlayer::PLAYMODE_TRACKS && m_currentView == MV_RADIO) + { + //gPlayer->savePosition(); + gPlayer->stop(true); + gPlayer->setPlayMode(MusicPlayer::PLAYMODE_RADIO); + gPlayer->restorePosition(); + } + } m_currentTrack = gPlayer->getCurrentTrackPos(); @@ -443,6 +460,18 @@ void MusicCommon::switchView(MusicView view) break; } + case MV_RADIO: + { + StreamView *view = new StreamView(mainStack); + + if (view->Create()) + mainStack->AddScreen(view); + else + delete view; + + break; + } + default: return; } @@ -552,23 +581,33 @@ bool MusicCommon::keyPressEvent(QKeyEvent *e) } else if (action == "FFWD") { - if (m_ffButton) - m_ffButton->Push(); - else - seekforward(); + if (gPlayer->getPlayMode() == MusicPlayer::PLAYMODE_TRACKS) + { + if (m_ffButton) + m_ffButton->Push(); + else + seekforward(); + } } else if (action == "RWND") { - if (m_rewButton) - m_rewButton->Push(); - else - seekback(); + if (gPlayer->getPlayMode() == MusicPlayer::PLAYMODE_TRACKS) + { + if (m_rewButton) + m_rewButton->Push(); + else + seekback(); + } } else if (action == "PAUSE") { - // if we are playing or are paused PAUSE will toggle the pause state - if (gPlayer->isPlaying() || (gPlayer->getOutput() && gPlayer->getOutput()->IsPaused())) + if (gPlayer->getPlayMode() == MusicPlayer::PLAYMODE_RADIO && gPlayer->isPlaying()) + { + // ignore if we are already playing a radio stream + } + else if (gPlayer->isPlaying() || (gPlayer->getOutput() && gPlayer->getOutput()->IsPaused())) { + // if we are playing or are paused PAUSE will toggle the pause state if (m_pauseButton) m_pauseButton->Push(); else @@ -700,6 +739,8 @@ bool MusicCommon::keyPressEvent(QKeyEvent *e) switchView(MV_SEARCH); else if (action == "SWITCHTOVISUALISER" && m_currentView != MV_VISUALIZER) switchView(MV_VISUALIZER); + else if (action == "SWITCHTORADIO" && m_currentView != MV_RADIO) + switchView(MV_RADIO); else if (action == "TOGGLESHUFFLE") { gPlayer->toggleShuffleMode(); @@ -731,7 +772,7 @@ void MusicCommon::changeVolume(bool up) void MusicCommon::changeSpeed(bool up) { - if (gPlayer->getOutput()) + if (gPlayer->getOutput() && gPlayer->getPlayMode() == MusicPlayer::PLAYMODE_TRACKS) { if (up) gPlayer->incSpeed(); @@ -758,11 +799,33 @@ void MusicCommon::toggleUpmix() void MusicCommon::updateProgressBar() { - if (m_trackProgress) + if (!m_trackProgress) + return; + + if (gPlayer->getPlayMode() == MusicPlayer::PLAYMODE_RADIO) + { + // radio mode so show the buffer fill level since we don't know the track length + int available, maxSize; + gPlayer->getBufferStatus(&available, &maxSize); + + if (m_infoText) + { + QString status = QString("%1%").arg((int)(100.0 / ((double)maxSize / (double)available))); + m_infoText->SetText(status); + } + + if (m_trackProgress) + { + m_trackProgress->SetTotal(maxSize); + m_trackProgress->SetUsed(available); + } + } + else { + // show the track played time int percentplayed = 1; if (m_maxTime) - percentplayed = (int)(((double)m_currentTime / (double)m_maxTime)*100); + percentplayed = (int)(((double)m_currentTime / (double)m_maxTime) * 100); m_trackProgress->SetTotal(100); m_trackProgress->SetUsed(percentplayed); } @@ -786,40 +849,6 @@ void MusicCommon::showVolume(void) void MusicCommon::showSpeed(bool show) { (void) show; -#if 0 - if (speed_status) - { - if (volume_status && (volume_status->getOrder() != -1)) - { - volume_status->SetOrder(-1); - volume_status->refresh(); - } - - if (show) - { - QString speed_text; - float playSpeed = gPlayer->getSpeed(); - speed_text.sprintf("x%4.2f",playSpeed); - speed_status->SetText(speed_text); - speed_status->SetOrder(0); - speed_status->refresh(); - volume_display_timer->setSingleShot(true); - volume_display_timer->start(2000); - } - } - - if (LCD *lcd = LCD::Get()) - { - QString speed_text; - float playSpeed = gPlayer->getSpeed(); - speed_text.sprintf("x%4.2f", playSpeed); - speed_text = tr("Speed: ") + speed_text; - QList textItems; - textItems.append(LCDTextItem(lcd->getLCDHeight() / 2, ALIGN_CENTERED, - speed_text, "Generic", false)); - lcd->switchToGeneric(textItems); - } -#endif } void MusicCommon::switchVisualizer(const QString &visual) @@ -1016,6 +1045,9 @@ void MusicCommon::seek(int pos) void MusicCommon::changeRating(bool increase) { + if (gPlayer->getPlayMode() == MusicPlayer::PLAYMODE_RADIO) + return; + // Rationale here is that if you can't get visual feedback on ratings // adjustments, you probably should not be changing them // TODO: should check if the rating is visible in the playlist buttontlist @@ -1108,13 +1140,22 @@ void MusicCommon::customEvent(QEvent *event) return; int rs; - m_currentTime = rs = oe->elapsedSeconds(); + Metadata *curMeta = gPlayer->getCurrentMetadata(); + + if (gPlayer->getPlayMode() == MusicPlayer::PLAYMODE_RADIO) + { + if (curMeta) + m_currentTime = rs = curMeta->Length() / 1000; + else + m_currentTime = 0; + } + else + m_currentTime = rs = oe->elapsedSeconds(); QString time_string = getTimeString(rs, m_maxTime); updateProgressBar(); - Metadata *curMeta = gPlayer->getCurrentMetadata(); if (curMeta) { if (LCD *lcd = LCD::Get()) @@ -1148,7 +1189,7 @@ void MusicCommon::customEvent(QEvent *event) oe->channels() > 1 ? "2" : "1"); } - if (curMeta ) + if (curMeta) { if (m_timeText) m_timeText->SetText(time_string); @@ -1215,6 +1256,22 @@ void MusicCommon::customEvent(QEvent *event) ShowOkPopup(QString(tr("MythMusic has encountered the following error:\n%1")) .arg(*dxe->errorMessage())); } + else if (event->type() == DecoderHandlerEvent::Error) + { + stopAll(); + + statusString = tr("Decoder Handler error."); + + DecoderHandlerEvent *dhe = dynamic_cast(event); + if (!dhe) + return; + + LOG(VB_GENERAL, LOG_ERR, QString("Decoder Handler Error - %1") + .arg(*dhe->getMessage())); + + ShowOkPopup(QString("MythMusic has encountered the following error:\n%1") + .arg(*dhe->getMessage())); + } else if (event->type() == DialogCompletionEvent::kEventType) { DialogCompletionEvent *dce = static_cast(event); @@ -1583,6 +1640,7 @@ void MusicCommon::customEvent(QEvent *event) { MythUIButtonListItem *item = m_currentPlaylist->GetItemAt(x); Metadata *mdata = qVariantValue (item->GetData()); + if (mdata && mdata->ID() == trackID) { MetadataMap metadataMap; @@ -1594,6 +1652,22 @@ void MusicCommon::customEvent(QEvent *event) } } + if (m_playedTracksList) + { + for (int x = 0; x < m_playedTracksList->GetCount(); x++) + { + MythUIButtonListItem *item = m_playedTracksList->GetItemAt(x); + Metadata *mdata = qVariantValue (item->GetData()); + + if (mdata && mdata->ID() == trackID) + { + MetadataMap metadataMap; + mdata->toMap(metadataMap); + item->SetTextFromMap(metadataMap); + } + } + } + if (gPlayer->getCurrentMetadata() && trackID == gPlayer->getCurrentMetadata()->ID()) updateTrackInfo(gPlayer->getCurrentMetadata()); @@ -1714,7 +1788,10 @@ void MusicCommon::updateTrackInfo(Metadata *mdata) return; } - m_maxTime = mdata->Length() / 1000; + if (gPlayer->getPlayMode() == MusicPlayer::PLAYMODE_RADIO) + m_maxTime = 0; + else + m_maxTime = mdata->Length() / 1000; // get map for current track MetadataMap metadataMap; @@ -1863,10 +1940,9 @@ void MusicCommon::updateUIPlaylist(void) item->SetFontState("normal"); item->DisplayState("stopped", "playstate"); } - } - if (gPlayer->getCurrentMetadata() && mdata->ID() == gPlayer->getCurrentMetadata()->ID()) m_currentPlaylist->SetItemCurrent(item); + } } } } @@ -1878,28 +1954,22 @@ void MusicCommon::updateUIPlayedList(void) m_playedTracksList->Reset(); - QList playedList = gPlayer->getPlayedTracksList(); + QList playedList = gPlayer->getPlayedTracksList(); for (int x = playedList.count(); x > 0; x--) { - Metadata *mdata = &playedList[x-1]; + Metadata *mdata = playedList[x-1]; MythUIButtonListItem *item = - new MythUIButtonListItem(m_playedTracksList, ""); + new MythUIButtonListItem(m_playedTracksList, "", qVariantFromValue(mdata)); MetadataMap metadataMap; mdata->toMap(metadataMap); item->SetTextFromMap(metadataMap); - if (x == playedList.count() && gPlayer->isPlaying()) - { - item->SetFontState("playing"); - item->DisplayState("playing", "playstate"); - } - else - { - item->SetFontState("normal"); - item->DisplayState("default", "playstate"); - } + item->SetFontState("normal"); + item->DisplayState("default", "playstate"); + + item->SetImage(mdata->getAlbumArtFile()); } } @@ -1971,8 +2041,6 @@ QString MusicCommon::getTimeString(int exTime, int maxTime) return time_string; } - - void MusicCommon::searchButtonList(void) { MythUIButtonList *buttonList = dynamic_cast(GetFocusWidget()); @@ -2009,11 +2077,18 @@ MythMenu* MusicCommon::createMainMenu(void) menu->AddItem(tr("Search List...")); menu->AddItem(tr("Switch View"), NULL, createViewMenu()); - menu->AddItem(tr("Playlist Options"), NULL, createPlaylistMenu()); - menu->AddItem(tr("Set Shuffle Mode"), NULL, createShuffleMenu()); - menu->AddItem(tr("Set Repeat Mode"), NULL, createRepeatMenu()); + + if (gPlayer->getPlayMode() == MusicPlayer::PLAYMODE_TRACKS) + { + menu->AddItem(tr("Playlist Options"), NULL, createPlaylistMenu()); + menu->AddItem(tr("Set Shuffle Mode"), NULL, createShuffleMenu()); + menu->AddItem(tr("Set Repeat Mode"), NULL, createRepeatMenu()); + } + menu->AddItem(tr("Player Options"), NULL, createPlayerMenu()); - menu->AddItem(tr("Quick Playlists"), NULL, createQuickPlaylistsMenu()); + + if (gPlayer->getPlayMode() == MusicPlayer::PLAYMODE_TRACKS) + menu->AddItem(tr("Quick Playlists"), NULL, createQuickPlaylistsMenu()); if (m_visualizerVideo) menu->AddItem(tr("Change Visualizer"), NULL, createVisualizerMenu()); @@ -2033,8 +2108,12 @@ MythMenu* MusicCommon::createViewMenu(void) menu->AddItem(tr("Playlist Editor - Tree"), qVariantFromValue((int)MV_PLAYLISTEDITORTREE)); if (m_currentView != MV_PLAYLISTEDITORGALLERY) menu->AddItem(tr("Playlist Editor - Gallery"), qVariantFromValue((int)MV_PLAYLISTEDITORGALLERY)); + if (m_currentView != MV_VISUALIZER) + menu->AddItem(tr("Fullscreen Visualizer"), qVariantFromValue((int)MV_VISUALIZER)); if (m_currentView != MV_SEARCH) menu->AddItem(tr("Search for Music"), qVariantFromValue((int)MV_SEARCH)); + if (m_currentView != MV_RADIO) + menu->AddItem(tr("Play Radio Stream"), qVariantFromValue((int)MV_RADIO)); if (m_currentView != MV_VISUALIZER) menu->AddItem(tr("Fullscreen Visualizer"), qVariantFromValue((int)MV_VISUALIZER)); @@ -2103,11 +2182,18 @@ MythMenu* MusicCommon::createPlayerMenu(void) menu->AddItem(tr("Mute")); menu->AddItem(tr("Previous Track")); menu->AddItem(tr("Next Track")); - menu->AddItem(tr("Jump Back")); - menu->AddItem(tr("Jump Forward")); + + if (gPlayer->getPlayMode() == MusicPlayer::PLAYMODE_TRACKS) + { + menu->AddItem(tr("Jump Back")); + menu->AddItem(tr("Jump Forward")); + } + menu->AddItem(tr("Play")); menu->AddItem(tr("Stop")); - menu->AddItem(tr("Pause")); + + if (gPlayer->getPlayMode() == MusicPlayer::PLAYMODE_TRACKS) + menu->AddItem(tr("Pause")); return menu; } diff --git a/mythplugins/mythmusic/mythmusic/musiccommon.h b/mythplugins/mythmusic/mythmusic/musiccommon.h index 014110a3686..332c33530a7 100644 --- a/mythplugins/mythmusic/mythmusic/musiccommon.h +++ b/mythplugins/mythmusic/mythmusic/musiccommon.h @@ -61,8 +61,6 @@ class MPUBLIC MusicCommon : public MythScreenType virtual void ShowMenu(void); - //bool onMediaEvent(MythMediaDevice *pDev); - protected slots: void play(void); @@ -75,8 +73,6 @@ class MPUBLIC MusicCommon : public MythScreenType void seek(int); void stopAll(void); void changeRating(bool increase); -// void editPlaylist(void); -// void nextAuto(void); void searchButtonList(void); MythMenu* createMainMenu(void); @@ -105,6 +101,7 @@ class MPUBLIC MusicCommon : public MythScreenType void showExitMenu(void); void showPlaylistOptionsMenu(bool addMainMenu = false); + protected: QString getTimeString(int exTime, int maxTime); void updateProgressBar(void); void setTrackOnLCD(Metadata *mdata); diff --git a/mythplugins/mythmusic/mythmusic/musicplayer.cpp b/mythplugins/mythmusic/mythmusic/musicplayer.cpp index b0cccf5540f..33967c36b38 100644 --- a/mythplugins/mythmusic/mythmusic/musicplayer.cpp +++ b/mythplugins/mythmusic/mythmusic/musicplayer.cpp @@ -44,6 +44,7 @@ QEvent::Type MusicPlayerEvent::TrackStatsChangedEvent = (QEvent::Type) QEvent::r QEvent::Type MusicPlayerEvent::AlbumArtChangedEvent = (QEvent::Type) QEvent::registerEventType(); QEvent::Type MusicPlayerEvent::CDChangedEvent = (QEvent::Type) QEvent::registerEventType(); QEvent::Type MusicPlayerEvent::PlaylistChangedEvent = (QEvent::Type) QEvent::registerEventType(); +QEvent::Type MusicPlayerEvent::PlayedTracksChangedEvent = (QEvent::Type) QEvent::registerEventType(); MusicPlayer::MusicPlayer(QObject *parent, const QString &dev) :QObject(parent) @@ -60,12 +61,15 @@ MusicPlayer::MusicPlayer(QObject *parent, const QString &dev) m_currentTime = 0; m_lastTrackStart = 0; + m_bufferAvailable = 0; + m_bufferSize = 0; + m_currentMetadata = NULL; m_oneshotMetadata = NULL; m_isAutoplay = false; m_isPlaying = false; - m_isStreaming = false; + m_playMode = PLAYMODE_TRACKS; m_canShowPlayer = true; m_wasPlaying = true; m_updatedLastplay = false; @@ -127,6 +131,12 @@ MusicPlayer::~MusicPlayer() m_oneshotMetadata = NULL; } + while (!m_playedList.empty()) + { + delete m_playedList.back(); + m_playedList.pop_back(); + } + if (m_shuffleMode == SHUFFLE_INTELLIGENT) gCoreContext->SaveSetting("PlayMode", "intelligent"); else if (m_shuffleMode == SHUFFLE_RANDOM) @@ -146,7 +156,7 @@ MusicPlayer::~MusicPlayer() gCoreContext->SaveSetting("RepeatMode", "none"); gCoreContext->SaveSetting("MusicAutoShowPlayer", - (m_autoShowPlayer ? "1" : "0")); + (m_autoShowPlayer ? "1" : "1")); } void MusicPlayer::addListener(QObject *listener) @@ -329,8 +339,6 @@ void MusicPlayer::play(void) getDecoderHandler()->start(meta); - m_isStreaming = (meta->Format() == "cast"); - GetMythMainWindow()->PauseIdleTimer(true); } @@ -515,42 +523,22 @@ void MusicPlayer::customEvent(QEvent *event) { decoderHandlerReady(); } - else if (event->type() == DecoderHandlerEvent::OperationStart) - { - } - else if (event->type() == DecoderHandlerEvent::OperationStop) - { - } - else if (event->type() == DecoderHandlerEvent::Info) - { - DecoderHandlerEvent *dxe = dynamic_cast(event); - if (!dxe) - return; - - if (getCurrentMetadata()) - m_displayMetadata = *getCurrentMetadata(); - m_displayMetadata.setArtist(""); - m_displayMetadata.setTitle(*dxe->getMessage()); - } - else if (event->type() == DecoderHandlerEvent::Error) - { - } else if (event->type() == DecoderHandlerEvent::Meta) { DecoderHandlerEvent *dhe = dynamic_cast(event); if (!dhe) return; - Metadata mdata(*dhe->getMetadata()); + Metadata *mdata = new Metadata(*dhe->getMetadata()); - if (!m_playedList.isEmpty()) - m_playedList.last().setLength((m_currentTime - m_lastTrackStart) * 1000); - m_lastTrackStart = m_currentTime; + m_lastTrackStart += m_currentTime; - mdata.setTrack(m_playedList.count() + 1); + mdata->setID(m_currentMetadata->ID()); + mdata->setTrack(m_playedList.count() + 1); m_playedList.append(mdata); - m_currentMetadata = &m_playedList.last(); + + m_currentMetadata = m_playedList.last(); if (m_isAutoplay && m_canShowPlayer && m_autoShowPlayer) { @@ -564,18 +552,10 @@ void MusicPlayer::customEvent(QEvent *event) delete miniplayer; } - // tell any listeners we've started playing a new track - MusicPlayerEvent me(MusicPlayerEvent::TrackChangeEvent, -1); + // tell any listeners we've added a new track to the played list + MusicPlayerEvent me(MusicPlayerEvent::PlayedTracksChangedEvent, mdata->ID()); dispatch(me); } - - // handle decoder events - else if (event->type() == DecoderEvent::Decoding) - { - if (getCurrentMetadata()) - m_displayMetadata = *getCurrentMetadata(); - } - // handle MythEvent events else if (event->type() == MythEvent::MythEventMessage) { @@ -751,6 +731,19 @@ void MusicPlayer::customEvent(QEvent *event) ShowOkPopup(QString("MythMusic has encountered the following error:\n%1") .arg(*dxe->errorMessage())); } + else if (event->type() == DecoderHandlerEvent::Error) + { + DecoderHandlerEvent *dhe = dynamic_cast(event); + if (!dhe) + return; + + LOG(VB_GENERAL, LOG_ERR, QString("Output Error - %1") + .arg(*dhe->getMessage())); + + ShowOkPopup(QString("MythMusic has encountered the following error:\n%1") + .arg(*dhe->getMessage())); + stop(true); + } } if (event->type() == OutputEvent::Info) @@ -760,9 +753,12 @@ void MusicPlayer::customEvent(QEvent *event) if (!oe) return; - m_currentTime = oe->elapsedSeconds(); + if (m_playMode == PLAYMODE_TRACKS) + m_currentTime = oe->elapsedSeconds(); + else + m_currentTime = oe->elapsedSeconds() - m_lastTrackStart; - if (!m_updatedLastplay) + if (m_playMode == PLAYMODE_TRACKS && !m_updatedLastplay) { // we update the lastplay and playcount after playing // for m_lastplayDelay seconds or half the total track time @@ -773,10 +769,22 @@ void MusicPlayer::customEvent(QEvent *event) updateLastplay(); } } + + // update the current tracks time in the last played list + if (m_playMode == PLAYMODE_RADIO) + { + if (!m_playedList.isEmpty()) + { + m_playedList.last()->setLength(m_currentTime * 1000); + // this will update any track lengths displayed on screen + gPlayer->sendMetadataChangedEvent(m_playedList.last()->ID()); + } + } } else if (event->type() == DecoderEvent::Finished) { - if (m_currentMetadata && m_currentTime != m_currentMetadata->Length() / 1000) + if (m_playMode == PLAYMODE_TRACKS && m_currentMetadata && + m_currentTime != m_currentMetadata->Length() / 1000) { LOG(VB_GENERAL, LOG_NOTICE, QString("MusicPlayer: Updating track length was %1s, should be %2s") .arg(m_currentMetadata->Length() / 1000).arg(m_currentTime)); @@ -791,33 +799,51 @@ void MusicPlayer::customEvent(QEvent *event) MusicPlayerEvent me(MusicPlayerEvent::TrackChangeEvent, m_currentTrack); dispatch(me); } + nextAuto(); } else if (event->type() == DecoderEvent::Stopped) { } + else if (event->type() == DecoderHandlerEvent::BufferStatus) + { + DecoderHandlerEvent *dhe = dynamic_cast(event); + if (!dhe) + return; + + dhe->getBufferStatus(&m_bufferAvailable, &m_bufferSize); + } QObject::customEvent(event); } -void MusicPlayer::switchPlayMode(bool playStreams) +void MusicPlayer::getBufferStatus(int *bufferAvailable, int *bufferSize) +{ + *bufferAvailable = m_bufferAvailable; + *bufferSize = m_bufferSize; +} + +void MusicPlayer::setPlayMode(PlayMode mode) { + if (m_playMode == mode) + return; + savePosition(); - m_isStreaming = playStreams; + m_playMode = mode; loadPlaylist(); } void MusicPlayer::loadPlaylist(void) { - if (m_isStreaming) + if (m_playMode == PLAYMODE_RADIO) { m_currentPlaylist = gMusicData->all_playlists->getStreamPlaylist(); if (getResumeMode() > MusicPlayer::RESUME_OFF) { - int bookmark = gCoreContext->GetNumSetting("MusicStreamBookmark", 0); + int bookmark = gCoreContext->GetNumSetting("MusicRadioBookmark", 0); if (bookmark < 0 || bookmark >= m_currentPlaylist->getSongs().size()) bookmark = 0; @@ -883,11 +909,13 @@ bool MusicPlayer::setCurrentTrackPos(int pos) void MusicPlayer::savePosition(void) { - if (m_isStreaming || !m_currentMetadata) + // can't save a bookmark if we don't know what we are playing + if (!m_currentMetadata) + return; + + if (m_playMode == PLAYMODE_RADIO) { - // FIXME - gCoreContext->SaveSetting("MusicBookmark", -1); - gCoreContext->SaveSetting("MusicBookmarkPosition", 0); + gCoreContext->SaveSetting("MusicRadioBookmark", m_currentMetadata->ID()); } else { @@ -903,19 +931,22 @@ void MusicPlayer::restorePosition(void) return; m_currentTrack = 0; - uint trackID = 0; + uint id = -1; if (gPlayer->getResumeMode() > MusicPlayer::RESUME_OFF) { - trackID = gCoreContext->GetNumSetting("MusicBookmark", 0); + if (m_playMode == PLAYMODE_RADIO) + id = gCoreContext->GetNumSetting("MusicRadioBookmark", 0); + else + id = gCoreContext->GetNumSetting("MusicBookmark", 0); + } - for (int x = 0; x < m_currentPlaylist->getSongs().size(); x++) + for (int x = 0; x < m_currentPlaylist->getSongs().size(); x++) + { + if (m_currentPlaylist->getSongs().at(x)->ID() == id) { - if (m_currentPlaylist->getSongs().at(x)->ID() == trackID) - { - m_currentTrack = x; - break; - } + m_currentTrack = x; + break; } } @@ -925,7 +956,7 @@ void MusicPlayer::restorePosition(void) { play(); - if (gPlayer->getResumeMode() == MusicPlayer::RESUME_EXACT) + if (gPlayer->getResumeMode() == MusicPlayer::RESUME_EXACT && m_playMode == PLAYMODE_TRACKS) seek(gCoreContext->GetNumSetting("MusicBookmarkPosition", 0)); } } @@ -1002,7 +1033,7 @@ Metadata *MusicPlayer::getCurrentMetadata(void) /// get the metadata for the next track in the playlist Metadata *MusicPlayer::getNextMetadata(void) { - if (m_isStreaming) + if (m_playMode == PLAYMODE_RADIO) return NULL; if (m_oneshotMetadata) @@ -1107,7 +1138,7 @@ void MusicPlayer::setShuffleMode(ShuffleMode mode) void MusicPlayer::updateLastplay() { - if (!m_isStreaming && m_currentMetadata) + if (m_playMode == PLAYMODE_TRACKS && m_currentMetadata) { m_currentMetadata->incPlayCount(); m_currentMetadata->setLastPlay(); @@ -1118,7 +1149,7 @@ void MusicPlayer::updateLastplay() void MusicPlayer::updateVolatileMetadata(void) { - if (!m_isStreaming && m_currentMetadata && getDecoder()) + if (m_playMode == PLAYMODE_TRACKS && m_currentMetadata && getDecoder()) { if (m_currentMetadata->hasChanged()) { @@ -1323,6 +1354,7 @@ void MusicPlayer::decoderHandlerReady(void) } m_currentTime = 0; + m_lastTrackStart = 0; QSet::const_iterator it = m_visualisers.begin(); for (; it != m_visualisers.end() ; ++it) diff --git a/mythplugins/mythmusic/mythmusic/musicplayer.h b/mythplugins/mythmusic/mythmusic/musicplayer.h index b40585b7052..674ce782714 100644 --- a/mythplugins/mythmusic/mythmusic/musicplayer.h +++ b/mythplugins/mythmusic/mythmusic/musicplayer.h @@ -43,6 +43,7 @@ class MusicPlayerEvent : public MythEvent static Type AlbumArtChangedEvent; static Type CDChangedEvent; static Type PlaylistChangedEvent; + static Type PlayedTracksChangedEvent; }; class MusicPlayer : public QObject, public MythObservable @@ -53,7 +54,14 @@ class MusicPlayer : public QObject, public MythObservable MusicPlayer(QObject *parent, const QString &dev); ~MusicPlayer(void); - void switchPlayMode(bool playStreams); + enum PlayMode + { + PLAYMODE_TRACKS = 0, + PLAYMODE_RADIO, + }; + + void setPlayMode(PlayMode mode); + PlayMode getPlayMode(void) { return m_playMode; } void playFile(const Metadata &meta); @@ -106,6 +114,7 @@ class MusicPlayer : public QObject, public MythObservable void loadPlaylist(void); Playlist *getPlaylist(void) { return m_currentPlaylist; } + StreamList *getStreamList(void) { return gMusicData->all_streams->getStreams(); } // these add and remove tracks from the active playlist void removeTrack(int trackID); @@ -113,7 +122,7 @@ class MusicPlayer : public QObject, public MythObservable void moveTrackUpDown(bool moveUp, int whichTrack); - QList getPlayedTracksList(void) { return m_playedList; } + QList &getPlayedTracksList(void) { return m_playedList; } int getCurrentTrackPos(void) { return m_currentTrack; } bool setCurrentTrackPos(int pos); @@ -171,6 +180,8 @@ class MusicPlayer : public QObject, public MythObservable ResumeMode getResumeMode(void) { return m_resumeMode; } + void getBufferStatus(int *bufferAvailable, int *bufferSize); + protected: void customEvent(QEvent *event); @@ -191,7 +202,6 @@ class MusicPlayer : public QObject, public MythObservable Metadata *m_currentMetadata; Metadata *m_oneshotMetadata; - Metadata m_displayMetadata; AudioOutput *m_output; DecoderHandler *m_decoderHandler; @@ -200,6 +210,7 @@ class MusicPlayer : public QObject, public MythObservable QString m_CDdevice; + PlayMode m_playMode; bool m_isPlaying; bool m_isAutoplay; bool m_canShowPlayer; @@ -219,10 +230,11 @@ class MusicPlayer : public QObject, public MythObservable // cd stuff CDWatcherThread *m_cdWatcher; - // streaming stuff - bool m_isStreaming; - QList m_playedList; - int m_lastTrackStart; + // radio stuff + QList m_playedList; + int m_lastTrackStart; + int m_bufferAvailable; + int m_bufferSize; }; Q_DECLARE_METATYPE(MusicPlayer::RepeatMode); diff --git a/mythplugins/mythmusic/mythmusic/mythmusic.pro b/mythplugins/mythmusic/mythmusic/mythmusic.pro index 585d991d6d6..8e1e6a27f5c 100644 --- a/mythplugins/mythmusic/mythmusic/mythmusic.pro +++ b/mythplugins/mythmusic/mythmusic/mythmusic.pro @@ -39,7 +39,7 @@ HEADERS += filescanner.h musicplayer.h miniplayer.h HEADERS += playlistcontainer.h HEADERS += musiccommon.h decoderhandler.h pls.h shoutcast.h HEADERS += playlistview.h playlisteditorview.h -HEADERS += visualizerview.h searchview.h musicutils.h +HEADERS += visualizerview.h searchview.h streamview.h musicutils.h HEADERS += generalsettings.h visualizationsettings.h HEADERS += importsettings.h playersettings.h ratingsettings.h @@ -61,7 +61,7 @@ SOURCES += filescanner.cpp musicplayer.cpp miniplayer.cpp SOURCES += playlistcontainer.cpp SOURCES += musiccommon.cpp decoderhandler.cpp pls.cpp shoutcast.cpp SOURCES += playlistview.cpp playlisteditorview.cpp -SOURCES += visualizerview.cpp searchview.cpp musicutils.cpp +SOURCES += visualizerview.cpp searchview.cpp streamview.cpp musicutils.cpp SOURCES += generalsettings.cpp visualizationsettings.cpp SOURCES += importsettings.cpp playersettings.cpp ratingsettings.cpp diff --git a/mythplugins/mythmusic/mythmusic/playlist.cpp b/mythplugins/mythmusic/mythmusic/playlist.cpp index b014b968b36..311172b7918 100644 --- a/mythplugins/mythmusic/mythmusic/playlist.cpp +++ b/mythplugins/mythmusic/mythmusic/playlist.cpp @@ -52,11 +52,17 @@ void Playlist::copyTracks(Playlist *to_ptr, bool update_display) const } } - /// Given a tracks ID, add that track to this playlist void Playlist::addTrack(int trackID, bool update_display) { - Metadata *mdata = gMusicData->all_music->getMetadata(trackID); + int repo = ID_TO_REPO(trackID); + Metadata *mdata = NULL; + + if (repo == RT_Radio) + mdata = gMusicData->all_streams->getMetadata(trackID); + else + mdata = gMusicData->all_music->getMetadata(trackID); + if (mdata) addTrack(mdata, update_display); else @@ -529,8 +535,9 @@ void Playlist::loadPlaylist(QString a_name, QString a_host) MSqlQuery query(MSqlQuery::InitCon()); - if (m_name == "default_playlist_storage" || m_name == "backup_playlist_storage" - || m_name == "stream_playlist") + if (m_name == "default_playlist_storage" || + m_name == "backup_playlist_storage" || + m_name == "stream_playlist") { query.prepare("SELECT playlist_id, playlist_name, playlist_songs " "FROM music_playlists " @@ -615,18 +622,38 @@ void Playlist::fillSongsFromSonglist(QString songList) for (; it != list.end(); ++it) { id = (*it).toUInt(); - // check this is a valid track ID - if (gMusicData->all_music->isValidID(id)) + int repo = ID_TO_REPO(id); + if (repo == RT_Radio) { - Metadata *mdata = gMusicData->all_music->getMetadata(id); - m_songs.push_back(mdata); - m_songMap.insert(id, mdata); + // check this is a valid stream ID + if (gMusicData->all_streams->isValidID(id)) + { + Metadata *mdata = gMusicData->all_streams->getMetadata(id); + m_songs.push_back(mdata); + m_songMap.insert(id, mdata); + } + else + { + m_changed = true; + + LOG(VB_GENERAL, LOG_ERR, LOC + QString("Got a bad track %1").arg(id)); + } } else { - m_changed = true; + // check this is a valid track ID + if (gMusicData->all_music->isValidID(id)) + { + Metadata *mdata = gMusicData->all_music->getMetadata(id); + m_songs.push_back(mdata); + m_songMap.insert(id, mdata); + } + else + { + m_changed = true; - LOG(VB_GENERAL, LOG_ERR, LOC + QString("Got a bad track %1").arg(id)); + LOG(VB_GENERAL, LOG_ERR, LOC + QString("Got a bad track %1").arg(id)); + } } } diff --git a/mythplugins/mythmusic/mythmusic/playlistcontainer.cpp b/mythplugins/mythmusic/mythmusic/playlistcontainer.cpp index 4bad7a75faa..715811c3dac 100644 --- a/mythplugins/mythmusic/mythmusic/playlistcontainer.cpp +++ b/mythplugins/mythmusic/mythmusic/playlistcontainer.cpp @@ -122,10 +122,12 @@ void PlaylistContainer::load() query.prepare("SELECT playlist_id FROM music_playlists " "WHERE playlist_name != :DEFAULT" " AND playlist_name != :BACKUP " + " AND playlist_name != :STREAM " " AND (hostname = '' OR hostname = :HOST) " "ORDER BY playlist_name;"); query.bindValue(":DEFAULT", "default_playlist_storage"); query.bindValue(":BACKUP", "backup_playlist_storage"); + query.bindValue(":STREAM", "stream_playlist"); query.bindValue(":HOST", my_host); if (!query.exec()) @@ -211,6 +213,7 @@ void PlaylistContainer::save(void) active_playlist->savePlaylist("default_playlist_storage", my_host); backup_playlist->savePlaylist("backup_playlist_storage", my_host); + stream_playlist->savePlaylist("stream_playlist", my_host); } void PlaylistContainer::createNewPlaylist(QString name) diff --git a/mythplugins/mythmusic/mythmusic/shoutcast.cpp b/mythplugins/mythmusic/mythmusic/shoutcast.cpp index ccb818353ba..45211e0f310 100644 --- a/mythplugins/mythmusic/mythmusic/shoutcast.cpp +++ b/mythplugins/mythmusic/mythmusic/shoutcast.cpp @@ -29,7 +29,7 @@ #define MAX_ALLOWED_HEADER_SIZE 1024 * 4 #define MAX_ALLOWED_META_SIZE 1024 * 100 #define MAX_REDIRECTS 3 -#define PREBUFFER_SECS 5 +#define PREBUFFER_SECS 10 #define ICE_UDP_PORT 6000 /****************************************************************************/ @@ -71,11 +71,14 @@ class ShoutCastRequest void setUrl(const QUrl &url) { QString hdr; - hdr = QString("GET %1 HTTP/1.1\r\n" - "Host: %2\r\n" - "User-Agent: MythMusic/%3\r\n" - "Accept: */*\r\n") - .arg(url.path()).arg(url.host().arg(MYTH_BINARY_VERSION)); + hdr = QString("GET %PATH% HTTP/1.1\r\n" + "Host: %HOST%\r\n" + "User-Agent: MythMusic/%VERSION%\r\n" + "Accept: */*\r\n"); + hdr.replace("%PATH%", url.path()); + hdr.replace("%HOST%", url.host()); + hdr.replace("%VERSION%", MYTH_BINARY_VERSION); + if (!url.userName().isEmpty() && !url.password().isEmpty()) { QString authstring = url.userName() + ":" + url.password(); @@ -88,6 +91,8 @@ class ShoutCastRequest "Icy-Metadata: 1\r\n" "\r\n"); + LOG(VB_NETWORK, LOG_INFO, QString("ShoutCastRequest: '%1'").arg(hdr)); + m_data = hdr.toAscii(); } @@ -107,11 +112,15 @@ class IceCastRequest void setUrl(const QUrl &url) { QString hdr; - hdr = QString("GET %1 HTTP/1.1\r\n" - "Host: %2\r\n" - "User-Agent: MythMusic/%3\r\n" - "Accept: */*\r\n") - .arg(url.path()).arg(url.host()).arg(MYTH_BINARY_VERSION); + hdr = QString("GET %PATH% HTTP/1.1\r\n" + "Host: %HOST%\r\n" + "User-Agent: MythMusic/%VERSION%\r\n" + "Accept: */*\r\n"); + + hdr.replace("%PATH%", url.path()); + hdr.replace("%HOST%", url.host()); + hdr.replace("%VERSION%", MYTH_BINARY_VERSION); + if (!url.userName().isEmpty() && !url.password().isEmpty()) { QString authstring = url.userName() + ":" + url.password(); @@ -124,6 +133,8 @@ class IceCastRequest "x-audiocast-udpport: %1\r\n" "\r\n").arg(ICE_UDP_PORT); + LOG(VB_NETWORK, LOG_INFO, QString("IceCastRequest: '%1'").arg(hdr)); + m_data = hdr.toAscii(); } @@ -504,6 +515,9 @@ void ShoutCastIODevice::socketReadyRead(void) m_bytesDownloaded += data.size(); m_buffer->write(data); + // send buffer status event + emit bufferStatus(m_buffer->readBufAvail(), DecoderIOFactory::DefaultBufferSize); + if (!m_started && m_bytesDownloaded > DecoderIOFactory::DefaultPrebufferSize) { m_socket->setReadBufferSize(DecoderIOFactory::DefaultPrebufferSize); @@ -511,7 +525,7 @@ void ShoutCastIODevice::socketReadyRead(void) } // if we are waiting for the HEADER and we have enough data process that - if (m_state == READING_HEADER && m_buffer->readBufAvail() >= MAX_ALLOWED_HEADER_SIZE) + if (m_state == READING_HEADER) { if (parseHeader()) { @@ -536,7 +550,8 @@ void ShoutCastIODevice::socketReadyRead(void) { LOG(VB_NETWORK, LOG_INFO, QString("Redirect to %1").arg(m_response->getLocation())); m_socket->close(); - connectToUrl(m_url); + QUrl redirectURL(m_response->getLocation()); + connectToUrl(redirectURL); return; } } @@ -702,7 +717,7 @@ bool ShoutCastIODevice::parseMeta(void) return false; } - QString metadata_string(data); + QString metadata_string = QString::fromUtf8(data.constData()); // avoid sending signals if the data hasn't changed if (m_last_metadata == metadata_string) @@ -745,6 +760,8 @@ void DecoderIOFactoryShoutCast::makeIODevice(void) this, SLOT(shoutcastMeta(const QString&))); connect(m_input, SIGNAL(changedState(ShoutCastIODevice::State)), this, SLOT(shoutcastChangedState(ShoutCastIODevice::State))); + connect(m_input, SIGNAL(bufferStatus(int, int)), + this, SLOT(shoutcastBufferStatus(int,int))); } void DecoderIOFactoryShoutCast::closeIODevice(void) @@ -765,7 +782,7 @@ void DecoderIOFactoryShoutCast::start(void) { LOG(VB_PLAYBACK, LOG_INFO, QString("DecoderIOFactoryShoutCast %1").arg(getUrl().toString())); - doOperationStart("Connecting"); + doOperationStart(tr("Connecting")); makeIODevice(); m_input->connectToUrl(getUrl()); @@ -777,13 +794,6 @@ void DecoderIOFactoryShoutCast::stop(void) m_timer->disconnect(); doOperationStop(); - - Metadata mdata(getMetadata()); - mdata.setTitle("Stopped"); - mdata.setArtist(""); - mdata.setLength(-1); - DecoderHandlerEvent ev(DecoderHandlerEvent::Meta, mdata); - dispatch(ev); } void DecoderIOFactoryShoutCast::periodicallyCheckResponse(void) @@ -840,6 +850,8 @@ void DecoderIOFactoryShoutCast::periodicallyCheckBuffered(void) m_timer->disconnect(); m_timer->stop(); + + m_lastStatusTime.start(); } void DecoderIOFactoryShoutCast::shoutcastMeta(const QString &metadata) @@ -849,7 +861,7 @@ void DecoderIOFactoryShoutCast::shoutcastMeta(const QString &metadata) .arg(metadata)); ShoutCastMetaParser parser; // FIXME: - //parser.setMetaFormat(getMetadata().CompilationArtist()); + //parser.setMetaFormat(getMetadata().MetadataFormat()); parser.setMetaFormat("%a - %t"); ShoutCastMetaMap meta_map = parser.parseMeta(metadata); @@ -857,33 +869,49 @@ void DecoderIOFactoryShoutCast::shoutcastMeta(const QString &metadata) Metadata mdata = getMetadata(); mdata.setTitle(meta_map["title"]); mdata.setArtist(meta_map["artist"]); - mdata.setAlbum(getMetadata().Album()); // meta_map["album"] + mdata.setAlbum(meta_map["album"]); mdata.setLength(-1); DecoderHandlerEvent ev(DecoderHandlerEvent::Meta, mdata); dispatch(ev); } +void DecoderIOFactoryShoutCast::shoutcastBufferStatus(int available, int maxSize) +{ + if (m_lastStatusTime.elapsed() < 1000) + return; + + if (m_input->getState() == ShoutCastIODevice::PLAYING || + m_input->getState() == ShoutCastIODevice::STREAMING || + m_input->getState() == ShoutCastIODevice::STREAMING_META) + { + DecoderHandlerEvent ev(DecoderHandlerEvent::BufferStatus, available, maxSize); + dispatch(ev); + } + + m_lastStatusTime.restart(); +} + void DecoderIOFactoryShoutCast::shoutcastChangedState(ShoutCastIODevice::State state) { LOG(VB_PLAYBACK, LOG_INFO, QString("ShoutCast changed state to %1") .arg(ShoutCastIODevice::stateString(state))); if (state == ShoutCastIODevice::RESOLVING) - doOperationStart("Finding radio"); + doOperationStart(tr("Finding radio stream")); if (state == ShoutCastIODevice::CANT_RESOLVE) - doFailed(QObject::tr("Cannot find radio.\nCheck the URL is correct.")); + doFailed(tr("Cannot find radio.\nCheck the URL is correct.")); if (state == ShoutCastIODevice::CONNECTING) - doOperationStart("Connecting to radio"); + doOperationStart(tr("Connecting to radio stream")); if (state == ShoutCastIODevice::CANT_CONNECT) - doFailed(QObject::tr("Cannot connect to radio.\nCheck the URL is correct.")); + doFailed(tr("Cannot connect to radio.\nCheck the URL is correct.")); if (state == ShoutCastIODevice::CONNECTED) { - doOperationStart("Connected to radio"); + doOperationStart(tr("Connected to radio stream")); m_timer->stop(); m_timer->disconnect(); connect(m_timer, SIGNAL(timeout()), @@ -893,7 +921,7 @@ void DecoderIOFactoryShoutCast::shoutcastChangedState(ShoutCastIODevice::State s if (state == ShoutCastIODevice::PLAYING) { - doOperationStart("Buffering"); + doOperationStart(tr("Buffering")); } if (state == ShoutCastIODevice::STOPPED) @@ -918,9 +946,6 @@ int DecoderIOFactoryShoutCast::checkResponseOK() if (response.getStatus() != 200) return -1; - -// if (!response.isICY() || response.getStatus() != 200) -// return -1; return 0; } diff --git a/mythplugins/mythmusic/mythmusic/shoutcast.h b/mythplugins/mythmusic/mythmusic/shoutcast.h index af57662ea23..1a0f481a1f0 100644 --- a/mythplugins/mythmusic/mythmusic/shoutcast.h +++ b/mythplugins/mythmusic/mythmusic/shoutcast.h @@ -55,6 +55,8 @@ class ShoutCastIODevice : public MusicIODevice ShoutCastIODevice(void); ~ShoutCastIODevice(void); + State getState(void) { return m_state; } + void connectToUrl(const QUrl &url); void close(void); bool flush(void); @@ -72,6 +74,7 @@ class ShoutCastIODevice : public MusicIODevice signals: void meta(const QString &metadata); void changedState(ShoutCastIODevice::State newstate); + void bufferStatus(int available, int max); private slots: void socketHostFound(void); @@ -122,6 +125,7 @@ class DecoderIOFactoryShoutCast : public DecoderIOFactory void periodicallyCheckBuffered(void); void shoutcastMeta(const QString &metadata); void shoutcastChangedState(ShoutCastIODevice::State newstate); + void shoutcastBufferStatus(int available, int maxSize); private: int checkResponseOK(void); @@ -133,6 +137,8 @@ class DecoderIOFactoryShoutCast : public DecoderIOFactory ShoutCastIODevice *m_input; uint m_prebuffer; + + QTime m_lastStatusTime; }; #endif /* SHOUTCAST_H_ */ diff --git a/mythplugins/mythmusic/mythmusic/streams.xml b/mythplugins/mythmusic/mythmusic/streams.xml new file mode 100644 index 00000000000..231f90b5f21 --- /dev/null +++ b/mythplugins/mythmusic/mythmusic/streams.xml @@ -0,0 +1,6283 @@ + + + + SKY.fm + Relaxing Excursions + http://listen.sky.fm/public3/relaxingexcursions.pls + http://static.audioaddict.com/9f0f2fa09ba90c3947e945b62c8c6e99.png + Relaxing Excursions + %a - %t + + + SKY.fm + Pop Rock + http://listen.sky.fm/public3/poprock.pls + http://static.audioaddict.com/c2bf1bfc843db7bc6ccf7563bd5ade7f.png + Pop Rock + %a - %t + + + SKY.fm + 80's Rock Hits + http://listen.sky.fm/public3/80srock.pls + http://static.audioaddict.com/3318d27fbfcf6c699fe235e6f1ceb467.png + 80's Rock Hits + %a - %t + + + SKY.fm + Club Bollywood + http://listen.sky.fm/public3/clubbollywood.pls + http://static.audioaddict.com/ac488cfbc1ddcf62947b71bc51a7b808.png + Club Bollywood + %a - %t + + + SKY.fm + Soft Rock + http://listen.sky.fm/public3/softrock.pls + http://static.audioaddict.com/3d79cb01a53e1795728d112c1bb00e0b.jpg + Soft Rock + %a - %t + + + SKY.fm + Modern Rock + http://listen.sky.fm/public3/modernrock.pls + http://static.audioaddict.com/cdcf2c3754d96c41b8bcd81414451770.jpg + Modern Rock + %a - %t + + + SKY.fm + Hard Rock + http://listen.sky.fm/public3/hardrock.pls + http://static.audioaddict.com/7d3e6634592359e2a0c1d6e5f3f5ddaf.jpg + Hard Rock + %a - %t + + + SKY.fm + Metal + http://listen.sky.fm/public3/metal.pls + http://static.audioaddict.com/9be3c5b65f9274df72b78b6ecddf5bb2.png + Metal + %a - %t + + + SKY.fm + Modern Blues + http://listen.sky.fm/public3/modernblues.pls + http://static.audioaddict.com/61457ec9c9b71e483c67b8482c010403.png + Modern Blues + %a - %t + + + SKY.fm + Ska + http://listen.sky.fm/public3/ska.pls + http://static.audioaddict.com/24ca2ef63079535f489606143b81ef0c.png + Ska + %a - %t + + + SKY.fm + Smooth Jazz 24'7 + http://listen.sky.fm/public3/smoothjazz247.pls + http://static.audioaddict.com/4cb303531bcbff5ef8b61dbfe995568c.png + Smooth Jazz 24'7 + %a - %t + + + SKY.fm + Relaxation + http://listen.sky.fm/public3/relaxation.pls + http://static.audioaddict.com/df99e575070665e78685364ce35a26b8.png + Relaxation + %a - %t + + + SKY.fm + Vocal New Age + http://listen.sky.fm/public3/vocalnewage.pls + http://static.audioaddict.com/09885117eb43050f5a64e790a684426d.png + Vocal New Age + %a - %t + + + SKY.fm + Nature + http://listen.sky.fm/public3/nature.pls + http://static.audioaddict.com/7501be44c9536cbd48968b2d7a2f4d81.png + Nature + %a - %t + + + SKY.fm + Movie Soundtracks + http://listen.sky.fm/public3/soundtracks.pls + http://static.audioaddict.com/7b648b3c6789173a12666a63d421aa96.png + Movie Soundtracks + %a - %t + + + SKY.fm + Smooth Jazz + http://listen.sky.fm/public3/smoothjazz.pls + http://static.audioaddict.com/ea944543ab6247d58e1703d84e451e4f.png + Smooth Jazz + %a - %t + + + SKY.fm + Solo Piano + http://listen.sky.fm/public3/solopiano.pls + http://static.audioaddict.com/657f189ce01b74b7734063154775ca31.png + Solo Piano + %a - %t + + + SKY.fm + New Age + http://listen.sky.fm/public3/newage.pls + http://static.audioaddict.com/ee90d885488f0d224c9cabe5d2ea770b.png + New Age + %a - %t + + + SKY.fm + Love Music + http://listen.sky.fm/public3/lovemusic.pls + http://static.audioaddict.com/9feee3db11b67dee318c8f36a99adb9b.png + Love Music + %a - %t + + + SKY.fm + Top Hits + http://listen.sky.fm/public3/tophits.pls + http://static.audioaddict.com/a9778d4dec931485c25f5ac182ac71e2.png + Top Hits + %a - %t + + + SKY.fm + Best of the 80's + http://listen.sky.fm/public3/the80s.pls + http://static.audioaddict.com/1421021696b692c52f8d753925d1668a.png + Best of the 80's + %a - %t + + + SKY.fm + Hit 70's + http://listen.sky.fm/public3/hit70s.pls + http://static.audioaddict.com/6fe772afcb2ea44eab2048f1f60af18d.png + Hit 70's + %a - %t + + + SKY.fm + Oldies + http://listen.sky.fm/public3/oldies.pls + http://static.audioaddict.com/b2f77e0f416e1396721b44f9f4b73374.png + Oldies + %a - %t + + + SKY.fm + Mostly Classical + http://listen.sky.fm/public3/classical.pls + http://static.audioaddict.com/e3302f3ef1f85c53f3a13d0209102b26.png + Mostly Classical + %a - %t + + + SKY.fm + Dreamscapes + http://listen.sky.fm/public3/dreamscapes.pls + http://static.audioaddict.com/8ca99e36c4854358d1ce76c30ccae16a.png + Dreamscapes + %a - %t + + + SKY.fm + Classical Piano Trios + http://listen.sky.fm/public3/classicalpianotrios.pls + http://static.audioaddict.com/ae73ffca4235946a6bc958609b3632da.png + Classical Piano Trios + %a - %t + + + SKY.fm + Classical Guitar + http://listen.sky.fm/public3/guitar.pls + http://static.audioaddict.com/47e1f6acc1b1fd8947eb63053389c228.png + Classical Guitar + %a - %t + + + SKY.fm + Country + http://listen.sky.fm/public3/country.pls + http://static.audioaddict.com/25bc8f07c1cfd7d90eea968724105082.png + Country + %a - %t + + + SKY.fm + Roots Reggae + http://listen.sky.fm/public3/rootsreggae.pls + http://static.audioaddict.com/cbf2c683fa84e16f6a03a178070d32cb.png + Roots Reggae + %a - %t + + + SKY.fm + Bossa Nova + http://listen.sky.fm/public3/bossanova.pls + http://static.audioaddict.com/42b7913c019bbe47ee258d13a7dbf5bb.png + Bossa Nova + %a - %t + + + SKY.fm + Vocal Smooth Jazz + http://listen.sky.fm/public3/vocalsmoothjazz.pls + http://static.audioaddict.com/beb3e04b65b282052419bd15c81e1be4.png + Vocal Smooth Jazz + %a - %t + + + SKY.fm + Uptempo Smooth Jazz + http://listen.sky.fm/public3/uptemposmoothjazz.pls + http://static.audioaddict.com/16f9c144baa98176ab4f98dc3538adf4.png + Uptempo Smooth Jazz + %a - %t + + + SKY.fm + DaTempo Lounge + http://listen.sky.fm/public3/datempolounge.pls + http://static.audioaddict.com/9145b6ea36ca63b0911dc6c537de89cb.png + DaTempo Lounge + %a - %t + + + SKY.fm + Piano Jazz + http://listen.sky.fm/public3/pianojazz.pls + http://static.audioaddict.com/3a78648bbc729bd4dc9ca944ce89d0df.png + Piano Jazz + %a - %t + + + SKY.fm + Salsa + http://listen.sky.fm/public3/salsa.pls + http://static.audioaddict.com/01e8dabaa5c29e58b7f6515d309481f5.png + Salsa + %a - %t + + + SKY.fm + World + http://listen.sky.fm/public3/world.pls + http://static.audioaddict.com/a2ffcb17080207ca578d00f5c7eff1f0.png + World + %a - %t + + + SKY.fm + Romantica + http://listen.sky.fm/public3/romantica.pls + http://static.audioaddict.com/7e66489ebd3e3229d3fdfd10e950d262.png + Romantica + %a - %t + + + SKY.fm + Classic Rock + http://listen.sky.fm/public3/classicrock.pls + http://static.audioaddict.com/243efc74a39092c1b2c1f5eb3b6ee0e2.png + Classic Rock + %a - %t + + + SKY.fm + Alternative Rock + http://listen.sky.fm/public3/altrock.pls + http://static.audioaddict.com/4c1e38925a1d195686c180d7fdd355bb.png + Alternative Rock + %a - %t + + + SKY.fm + Indie Rock + http://listen.sky.fm/public3/indierock.pls + http://static.audioaddict.com/3c1d60925ae8dac00ef4da3beaa7d371.png + Indie Rock + %a - %t + + + SKY.fm + Dance Hits + http://listen.sky.fm/public3/dancehits.pls + http://static.audioaddict.com/cdb89061045f4207b909558ca01b8637.png + Dance Hits + %a - %t + + + SKY.fm + Urban Jamz + http://listen.sky.fm/public3/urbanjamz.pls + http://static.audioaddict.com/05f8add3c89ba75d1b1dfca9cc8e5df9.png + Urban Jamz + %a - %t + + + SKY.fm + Pop Punk + http://listen.sky.fm/public3/poppunk.pls + http://static.audioaddict.com/14dbce26651d1c8f7703794c8e730227.png + Pop Punk + %a - %t + + + SKY.fm + Classic Rap + http://listen.sky.fm/public3/classicrap.pls + http://static.audioaddict.com/c54b89c96b6917acf4ec3ddd9d8e5f7c.png + Classic Rap + %a - %t + + + SKY.fm + Bebop Jazz + http://listen.sky.fm/public3/bebop.pls + http://static.audioaddict.com/3df6292d6a6cbc2b04d007703ab2f7b2.png + Bebop Jazz + %a - %t + + + SKY.fm + Jazz Classics + http://listen.sky.fm/public3/jazzclassics.pls + http://static.audioaddict.com/30b34af272931d0e032f148a013439dd.png + Jazz Classics + %a - %t + + + SKY.fm + American Songbook + http://listen.sky.fm/public3/americansongbook.pls + http://static.audioaddict.com/3fbd5add268ebd2aff68bf963ea59660.png + American Songbook + %a - %t + + + SKY.fm + A Beatles Tribute + http://listen.sky.fm/public3/beatles.pls + http://static.audioaddict.com/b8a4f059a9a05a7c99a646d4af7d1d28.png + A Beatles Tribute + %a - %t + + + SKY.fm + Jpop + http://listen.sky.fm/public3/jpop.pls + http://static.audioaddict.com/61251c16fe02215ab58207577efd71d0.png + Jpop + %a - %t + + + SKY.fm + Contemporary Christian + http://listen.sky.fm/public3/christian.pls + http://static.audioaddict.com/9ed827ddee44c35e34b9de2bdf425048.png + Contemporary Christian + %a - %t + + + di.fm + Vocal Chillout + http://listen.di.fm/public3/vocalchillout.pls + http://static.audioaddict.com/a5b0bd27de43d04e1da9acf5b8883e85.png + Vocal Chillout + %a - %t + + + di.fm + Cosmic Downtempo + http://listen.di.fm/public3/cosmicdowntempo.pls + http://static.audioaddict.com/e98aea320629ce07814e0546f7c39ba1.png + Cosmic Downtempo + %a - %t + + + di.fm + Deep Nu-Disco + http://listen.di.fm/public3/deepnudisco.pls + http://static.audioaddict.com/3896ecff86795302304c64386ff2c5db.png + Deep Nu-Disco + %a - %t + + + di.fm + Trance + http://listen.di.fm/public3/trance.pls + http://static.audioaddict.com/befc1043f0a216128f8570d3664856f7.png + Trance + %a - %t + + + di.fm + Vocal Trance + http://listen.di.fm/public3/vocaltrance.pls + http://static.audioaddict.com/009b4fcdb032cceee6f3da5efd4a86e9.png + Vocal Trance + %a - %t + + + di.fm + Chillout + http://listen.di.fm/public3/chillout.pls + http://static.audioaddict.com/8f7ce44aa749a97563c98dc5b69053aa.png + Chillout + %a - %t + + + di.fm + House + http://listen.di.fm/public3/house.pls + http://static.audioaddict.com/6f8a0b3279c24b1c5fa1c6c1397b9b56.png + House + %a - %t + + + di.fm + Hard Dance + http://listen.di.fm/public3/harddance.pls + http://static.audioaddict.com/a67b19cab6cdb97ec77f8264f9c4c562.png + Hard Dance + %a - %t + + + di.fm + EuroDance + http://listen.di.fm/public3/eurodance.pls + http://static.audioaddict.com/a42ae2b9810acb81c6003915113c7d9d.png + EuroDance + %a - %t + + + di.fm + Progressive + http://listen.di.fm/public3/progressive.pls + http://static.audioaddict.com/fcea7c9d9a16314103a41f66bd6dfd15.png + Progressive + %a - %t + + + di.fm + Goa-Psy Trance + http://listen.di.fm/public3/goapsy.pls + http://static.audioaddict.com/b5b22bf5232f246bf63b25914bd369e3.png + Goa-Psy Trance + %a - %t + + + di.fm + Hardcore + http://listen.di.fm/public3/hardcore.pls + http://static.audioaddict.com/14f1a4484dc88e0df006e9cd71407bcb.png + Hardcore + %a - %t + + + di.fm + DJ Mixes + http://listen.di.fm/public3/djmixes.pls + http://static.audioaddict.com/5a0a6603d9a3f151b9eced1629e77d66.png + DJ Mixes + %a - %t + + + di.fm + Lounge + http://listen.di.fm/public3/lounge.pls + http://static.audioaddict.com/58f7afca5a6883c063f8642bfd2cef80.png + Lounge + %a - %t + + + di.fm + Ambient + http://listen.di.fm/public3/ambient.pls + http://static.audioaddict.com/9760862fcf5601c05c3581d6c0984128.png + Ambient + %a - %t + + + di.fm + Drum 'n Bass + http://listen.di.fm/public3/drumandbass.pls + http://static.audioaddict.com/f2ed26a932bdb5cd0a0eac576aebfa3f.png + Drum 'n Bass + %a - %t + + + di.fm + Classic Electronica + http://listen.di.fm/public3/classictechno.pls + http://static.audioaddict.com/ad112b71e9682c79343a4df45d419297.png + Classic Electronica + %a - %t + + + di.fm + UK Garage + http://listen.di.fm/public3/ukgarage.pls + http://static.audioaddict.com/c0ce1fbfe33a144e298d1bbec53406a3.png + UK Garage + %a - %t + + + di.fm + Breaks + http://listen.di.fm/public3/breaks.pls + http://static.audioaddict.com/5fe8da68c08afeba771f1c0a5ba6bc2f.png + Breaks + %a - %t + + + di.fm + Techno + http://listen.di.fm/public3/techno.pls + http://static.audioaddict.com/cedaa3b495a451bdd6ee4b21311e155c.png + Techno + %a - %t + + + di.fm + Soulful House + http://listen.di.fm/public3/soulfulhouse.pls + http://static.audioaddict.com/950ff823b9989f18f19ba65fb149fcad.png + Soulful House + %a - %t + + + di.fm + Future Synthpop + http://listen.di.fm/public3/futuresynthpop.pls + http://static.audioaddict.com/f4b0f3c30b34cf76de0955652ae5664a.png + Future Synthpop + %a - %t + + + di.fm + Electro House + http://listen.di.fm/public3/electro.pls + http://static.audioaddict.com/387bfe3c7d50b4edd1408135596a03df.png + Electro House + %a - %t + + + di.fm + Tribal House + http://listen.di.fm/public3/tribalhouse.pls + http://static.audioaddict.com/4af36061eb3e97a0aa21b746b51317dd.png + Tribal House + %a - %t + + + di.fm + Funky House + http://listen.di.fm/public3/funkyhouse.pls + http://static.audioaddict.com/45d5aa9e246fd59fe03e601171059581.png + Funky House + %a - %t + + + di.fm + Minimal + http://listen.di.fm/public3/minimal.pls + http://static.audioaddict.com/5c29e3063f748d156260fb874634b602.png + Minimal + %a - %t + + + di.fm + Space Dreams + http://listen.di.fm/public3/spacemusic.pls + http://static.audioaddict.com/4531d1656bc302d4f1898f779a988c17.png + Space Dreams + %a - %t + + + di.fm + Hardstyle + http://listen.di.fm/public3/hardstyle.pls + http://static.audioaddict.com/b27a7b020806ce4428307b30b44734ec.png + Hardstyle + %a - %t + + + di.fm + Tech House + http://listen.di.fm/public3/techhouse.pls + http://static.audioaddict.com/a1cb226c2170a74ed0fdb4839dafe869.png + Tech House + %a - %t + + + di.fm + PsyChill + http://listen.di.fm/public3/psychill.pls + http://static.audioaddict.com/f301e3e597472b3edbf50a770a52c087.png + PsyChill + %a - %t + + + di.fm + Chillout Dreams + http://listen.di.fm/public3/chilloutdreams.pls + http://static.audioaddict.com/7a0a070cca01976ea62c9e1c5a19e9b1.png + Chillout Dreams + %a - %t + + + di.fm + Liquid DnB + http://listen.di.fm/public3/liquiddnb.pls + http://static.audioaddict.com/75b2b5e697e7948f5fcd64a1c54f3f72.png + Liquid DnB + %a - %t + + + di.fm + Classic EuroDance + http://listen.di.fm/public3/classiceurodance.pls + http://static.audioaddict.com/a272766a55dc1d3c5b63e688d7a3d0de.png + Classic EuroDance + %a - %t + + + di.fm + Club Sounds + http://listen.di.fm/public3/club.pls + http://static.audioaddict.com/6620a82bb6a6d0bc281260645b996b0a.png + Club Sounds + %a - %t + + + di.fm + Classic Trance + http://listen.di.fm/public3/classictrance.pls + http://static.audioaddict.com/53906dc786e7f3d55536defca56a4b5f.png + Classic Trance + %a - %t + + + di.fm + Classic Vocal Trance + http://listen.di.fm/public3/classicvocaltrance.pls + http://static.audioaddict.com/6c59bb5709a2e2ecae99765d64ce57e6.png + Classic Vocal Trance + %a - %t + + + di.fm + Dubstep + http://listen.di.fm/public3/dubstep.pls + http://static.audioaddict.com/e0614d304c8fd5879a1278dd626d8769.png + Dubstep + %a - %t + + + di.fm + Disco House + http://listen.di.fm/public3/discohouse.pls + http://static.audioaddict.com/0ea9396414430256ffb76cd6148bf88a.png + Disco House + %a - %t + + + di.fm + Latin House + http://listen.di.fm/public3/latinhouse.pls + http://static.audioaddict.com/fb8908953ab95d2f01402660e2cc0883.png + Latin House + %a - %t + + + di.fm + Oldschool Acid + http://listen.di.fm/public3/oldschoolacid.pls + http://static.audioaddict.com/7edf76e784f740c1a20904309bbc7080.png + Oldschool Acid + %a - %t + + + di.fm + Chiptunes + http://listen.di.fm/public3/chiptunes.pls + http://static.audioaddict.com/ab17e2f15ebe382d78d744726408b668.png + Chiptunes + %a - %t + + + Radionomy + BestRadio + http://listen.radionomy.com/bestradio.m3u + http://i.radionomy.com/Documents/Radio/201203261627345631.s60.jpg + Hits, Hits USA, Dance-Clubbing, Top Charts, Oldies + %a - %t + + + Radionomy + Enjoystation + http://listen.radionomy.com/enjoystation.m3u + http://i.radionomy.com/Documents/Radio/20120103175827-iconeapplication4.s60.jpg + Hits, Pop + %a - %t + + + Radionomy + Recuerdos Radio + http://listen.radionomy.com/recuerdos-radio.m3u + http://i.radionomy.com/Documents/Radio/20101217093221-RECUERDOSRADIOLOGONUEVO.s60.jpg + Hits, Pop, Latin Pop, Latin Rock, Latin + %a - %t + + + Radionomy + 1000Schlager + http://listen.radionomy.com/1000schlager.m3u + http://i.radionomy.com/Documents/Radio/20110824143347-1000s100x100.s60.jpg + Hits, Oldies, Top Charts, Easy Listening, Romantic + %a - %t + + + Radionomy + 80 EXITS + http://listen.radionomy.com/80-exits.m3u + http://i.radionomy.com/Documents/Radio/20100720150728-80%c2%b4S1235.s60.jpg + Hits, Hits 70's, Hits 80's, Hits 90's, Disco + %a - %t + + + Radionomy + always 80s + http://listen.radionomy.com/always-80s.m3u + http://i.radionomy.com/Documents/Radio/20100809201821-Always_80's_n%c2%b02.s60.jpg + Hits 80's, Pop Rock, New Wave, Hits, Funk + %a - %t + + + Radionomy + AMERICANTOP40 + http://listen.radionomy.com/americantop40.m3u + http://i.radionomy.com/Documents/Radio/20110708223353-TOP40.s60.s60.jpg + Hits, Top Charts, Pop, Hits USA, Dance-Clubbing + %a - %t + + + Radionomy + ColourFMnl + http://listen.radionomy.com/colourfmnl.m3u + http://i.radionomy.com/Documents/Radio/201204102230251502.s60.jpg + Hits, Top Charts, House + %a - %t + + + Radionomy + NiteRadio + http://listen.radionomy.com/niteradio.m3u + http://i.radionomy.com/Documents/Radio/201203031000225169.s60.jpg + Hits, Hits FR, Hits USA, Rap, R'n'B + %a - %t + + + Radionomy + 100 HIT radio + http://listen.radionomy.com/100-hit-radio.m3u + http://i.radionomy.com/Documents/Radio/20110307013002-logo3.s60.jpg + Hits, Top Charts, Pop, R'n'B, Dance-Clubbing + %a - %t + + + Radionomy + A-ROCK-FM-WEB + http://listen.radionomy.com/a-rock-fm-web.m3u + http://i.radionomy.com/Documents/Radio/20111121172636-ROCK_FM_WEB_LOGO2_.s60.jpg + Rock, Pop Rock, Hard Rock, Rock'n'Roll, Classic Rock + %a - %t + + + Radionomy + A-ROCKRADIO + http://listen.radionomy.com/a-rockradio.m3u + http://i.radionomy.com/Documents/Radio/201202072241594648.s60.jpg + Classic Rock, Pop Rock, Rock + %a - %t + + + Radionomy + The Buffalo + http://listen.radionomy.com/the-buffalo.m3u + http://i.radionomy.com/Documents/Radio/20091019152820-logo.s60.jpg + Country, Southern Rock, Country Rock, Hard Rock, Classic Rock + %a - %t + + + Radionomy + ARMAGEDDON + http://listen.radionomy.com/armageddon.m3u + http://i.radionomy.com/Documents/Radio/20111111154345-JF_in_smoke.s60.jpg + Classic Rock, Hard Rock + %a - %t + + + Radionomy + BEATLESDAY + http://listen.radionomy.com/beatlesday.m3u + http://i.radionomy.com/Documents/Radio/20110116182029-logobd_0.s60.jpg + Classic Rock, Pop Rock, Britpop, Oldies, Rock'n'Roll + %a - %t + + + Radionomy + best80poprock + http://listen.radionomy.com/best80poprock.m3u + http://i.radionomy.com/Documents/Radio/20100930193217-logopop-radionomy.s60.jpg + Hits 80's, Britpop, Hard Rock, New Wave, Classic Rock + %a - %t + + + Radionomy + britishsixtiesradio + http://listen.radionomy.com/britishsixtiesradio.m3u + http://i.radionomy.com/Documents/Radio/20101009145819-radionomy.s60.jpg + Hits UK, Hits 60's, Britpop, Classic Rock, Oldies + %a - %t + + + Radionomy + Classic Radio JAR101 + http://listen.radionomy.com/classic-radio-jar101.m3u + http://i.radionomy.com/Documents/Radio/201204061701401229.s60.jpg + Classic, Hits USA, Easy Listening, Classic Rock, Chill-out + %a - %t + + + Radionomy + DMode Radio + http://listen.radionomy.com/dmode-radio.m3u + http://i.radionomy.com/Documents/Radio/20100713114134-5931_124969201750_124969071750_2919144_5791947_n.s60.jpg + Pop Rock, Pop, Classic Rock, Hits 90's, Electro + %a - %t + + + Radionomy + Guitar Spirit + http://listen.radionomy.com/guitar-spirit.m3u + http://i.radionomy.com/Documents/Radio/20100806202155-radionomy.s60.jpg + Rock, Classic Rock, Punk, Hard Rock, Metal + %a - %t + + + Radionomy + Siempre Cristo + http://listen.radionomy.com/siempre-cristo.m3u + http://i.radionomy.com/Documents/Radio/201204302221079802.s60.jpg + Gospel, Spiritual, Christian Rock, Christian, Religious + %a - %t + + + Radionomy + CLASSIC HIT STATION + http://listen.radionomy.com/classic-hit-station.m3u + http://i.radionomy.com/Documents/Radio/20100616205028-jessica_biel_with_bright_red_lips-4239.s60.jpg + Emo, Dance Rock, Christian Rock, Hits USA, Power Pop + %a - %t + + + Radionomy + CEADradio + http://listen.radionomy.com/ceadradio.m3u + http://i.radionomy.com/Documents/Radio/201201181520254894.s60.jpg + Hits, Christian, Christian Rock, Gospel + %a - %t + + + Radionomy + Conexion Top 40 + http://listen.radionomy.com/conexion-top-40.m3u + http://i.radionomy.com/Documents/Radio/20111122053508-top40.s60.jpg + Christian Rock + %a - %t + + + Radionomy + funlivee + http://listen.radionomy.com/funlivee.m3u + http://i.radionomy.com/Documents/Radio/201204232115507696.s60.jpg + Britpop, Christian Rock + %a - %t + + + Radionomy + LaRadioCristianaMexico + http://listen.radionomy.com/laradiocristianamexico.m3u + http://i.radionomy.com/Documents/Radio/201201290725320362.s60.jpg + Christian Rock, Classic Rock, Electronica, Latin, Romantic + %a - %t + + + Radionomy + 101.5 KWOST FM + http://listen.radionomy.com/1015-kwost-fm.m3u + http://i.radionomy.com/Documents/Radio/201204080553478655.s60.jpg + Country Pop, Christian Rock, Hits USA, Gospel, Soul + %a - %t + + + Radionomy + Alfa y Omega Stereo + http://listen.radionomy.com/alfa-y-omega-stereo.m3u + http://i.radionomy.com/Documents/Radio/201201221926128206.s60.jpg + Gospel, Christian, Religious, Christian Rock, Spiritual + %a - %t + + + Radionomy + AltarStereo + http://listen.radionomy.com/altarstereo.m3u + http://i.radionomy.com/Documents/Radio/201204071832374565.s60.jpg + Christian, Christian Rock, Pop, Grunge, Pop Rock + %a - %t + + + Radionomy + BobbaStreet-Radio Officiel + http://listen.radionomy.com/bobbastreet-radio-officiel.m3u + http://i.radionomy.com/Documents/Radio/201203232036357085.s60.jpg + Britpop, Celtic Rock, Christian Rock, Classic Rock, Coldwave + %a - %t + + + Radionomy + wiccaradio + http://listen.radionomy.com/wiccaradio.m3u + http://i.radionomy.com/Documents/Radio/20110524152151-wiccaradio.net.s60.jpg + Chill-out, New Age, Ambient, Celtic, Celtic Rock + %a - %t + + + Radionomy + ONLY ROCK + http://listen.radionomy.com/only-rock.m3u + http://i.radionomy.com/Documents/Radio/20111013115158-ONLYROCK.s60.jpg + Classic Rock, Coldwave, Dance Rock, Industrial Rock, Celtic Rock + %a - %t + + + Radionomy + Radio Gasconha + http://listen.radionomy.com/radio-gasconha.m3u + http://i.radionomy.com/Documents/Radio/201202272253556297.s60.jpg + Celtic, Polka, Folk, World, Celtic Rock + %a - %t + + + Radionomy + Radio Whisky + http://listen.radionomy.com/radio-whisky.m3u + http://i.radionomy.com/Documents/Radio/20111026115621-radio_whisky_4.s60.jpg + Celtic Rock, Pop Rock, Dance Rock, Celtic, Folk + %a - %t + + + Radionomy + Sonata hellvetica + http://listen.radionomy.com/sonata-hellvetica.m3u + http://i.radionomy.com/Documents/Radio/20101208162439-logo-sonata.s60.jpg + Classic Rock, Hard Rock, Celtic Rock, Heavy Metal, Southern Rock + %a - %t + + + Radionomy + ar'production + http://listen.radionomy.com/ar-production.m3u + http://i.radionomy.com/Documents/Radio/201204191900292333.s60.jpg + Celtic, Celtic Rock, Acoustic Blues, Classic Jazz, Ambient + %a - %t + + + Radionomy + Dimanche Folk + http://listen.radionomy.com/dimanche-folk.m3u + http://i.radionomy.com/Documents/Radio/201205122223103962.s60.jpg + Celtic Rock, Folk, Celtic, Rock + %a - %t + + + Radionomy + harmonia + http://listen.radionomy.com/harmonia.m3u + http://i.radionomy.com/Documents/Radio/20111105220851-fondo_radio_harmonia.s60.jpg + Latin, Celtic Rock, Disco, Flamenco, Latin Pop + %a - %t + + + Radionomy + Heol BzH Radio + http://listen.radionomy.com/heol-bzh-radio.m3u + http://i.radionomy.com/Documents/Radio/201205280853031583.s60.jpg + Celtic Rock, Pop Rock, Hits FR, Celtic, Hits 90's + %a - %t + + + Radionomy + A1Indie Radio + http://listen.radionomy.com/a1indie-radio.m3u + http://i.radionomy.com/Documents/Radio/20111203225347-DSCN0199.s60.jpg + Indie, Britpop, Pop Rock, Electronica, Folktronica + %a - %t + + + Radionomy + 80sOnly + http://listen.radionomy.com/80sonly.m3u + http://i.radionomy.com/Documents/Radio/20110418211506-80sOnly_Background_v3.s60.jpg + Hits 80's, New Wave, Britpop, Pop Rock, Oldies + %a - %t + + + Radionomy + Atmospheric fm + http://listen.radionomy.com/atmospheric-fm.m3u + http://i.radionomy.com/Documents/Radio/20110719171355-ATMOSPHERIC-FM.s60.jpg + Indie, Pop, Britpop, Ambient, Rock + %a - %t + + + Radionomy + Central Pop + http://listen.radionomy.com/central-pop.m3u + http://i.radionomy.com/Documents/Radio/20120101125046-logo_central_pop_fond_blanc.s60.jpg + Pop, Power Pop, Britpop, Electro, Pop Rock + %a - %t + + + Radionomy + CETA + http://listen.radionomy.com/ceta.m3u + http://i.radionomy.com/Documents/Radio/201204021444454822.s60.jpg + Pop Rock, Rock, Britpop, Classic Rock, Pop + %a - %t + + + Radionomy + chillectro rock + http://listen.radionomy.com/chillectro-rock.m3u + http://i.radionomy.com/Documents/Radio/20110821131753-20110330102300-fb5555555555555.s90.s60.jpg + Indie, Rock, Britpop, Nu Metal, Pop Rock + %a - %t + + + Radionomy + Dive Bar Jukebox + http://listen.radionomy.com/dive-bar-jukebox.m3u + http://i.radionomy.com/Documents/Radio/20100124204209-logo3-animated.s60.jpg + Disco, Britpop, Hits 80's, New Wave, Ska + %a - %t + + + Radionomy + AMERICAN GRAFFITI + http://listen.radionomy.com/american-graffiti.m3u + http://i.radionomy.com/Documents/Radio/20111205165343-AG.s60.jpg + Hits 60's, Rock'n'Roll, Top Charts, Hits USA, Oldies + %a - %t + + + Radionomy + Radio Stonata + http://listen.radionomy.com/radio-stonata.m3u + http://i.radionomy.com/Documents/Radio/201205061243590949.s60.jpg + Hits UK, Top Charts, Oldies, Hits 80's, Hits 90's + %a - %t + + + Radionomy + A .RADIO TOP 40 + http://listen.radionomy.com/a-radio-top-40.m3u + http://i.radionomy.com/Documents/Radio/201204241607322205.s60.jpg + Top Charts, Hits, Dance-Clubbing, Pop, Electronic + %a - %t + + + Radionomy + A'11 Amplitude Radio + http://listen.radionomy.com/a-11-amplitude-radio.m3u + http://i.radionomy.com/Documents/Radio/20111001203731-amplitudemic_510x525.s60.jpg + Electro, Hits, Pop, Hits FR, Top Charts + %a - %t + + + Radionomy + AbaClub + http://listen.radionomy.com/abaclub.m3u + http://i.radionomy.com/Documents/Radio/20110903102939-aba.s60.jpg + Electro, Hits, Techno, Top Charts, Trance + %a - %t + + + Radionomy + Alpenradio|Volksmusik + http://listen.radionomy.com/alpenradio-volksmusik.m3u + http://i.radionomy.com/Documents/Radio/20110829220548-logo.s60.jpg + Folkloric, World, Polka, Oldies, Children's-Family + %a - %t + + + Radionomy + Radio Nostalgia + http://listen.radionomy.com/radio-nostalgia.m3u + http://i.radionomy.com/Documents/Radio/201203281128312410.s60.jpg + Hits 60's, Hits 70's, Oldies + %a - %t + + + Radionomy + ABC Love + http://listen.radionomy.com/abc-love.m3u + http://i.radionomy.com/Documents/Radio/20110401011655-abcloveN.2.s60.jpg + Lounge, Chill-out, Oldies, Pop, Jazz + %a - %t + + + Radionomy + A'11 Ambiance 80 + http://listen.radionomy.com/a-11-ambiance-80.m3u + http://i.radionomy.com/Documents/Radio/20111011111001-logo_ambiance80.s60.jpg + Hits 80's, Pop, Hits, Oldies, Funk + %a - %t + + + Radionomy + Gold Star Radio + http://listen.radionomy.com/gold-star-radio.m3u + http://i.radionomy.com/Documents/Radio/20100529152627-Gold_Star_Radio_2.s60.jpg + Hits 80's, Hits 70's, Hits 60's, Oldies, Rock'n'Roll + %a - %t + + + Radionomy + Love Radio + http://listen.radionomy.com/love-radio.m3u + http://i.radionomy.com/Documents/Radio/20110706175046-Love_radio.s60.jpg + Hits, Hits 80's, Hits 90's, Oldies, Hits 70's + %a - %t + + + Radionomy + A-BIG-HitZ-Radio + http://listen.radionomy.com/a-big-hitz-radio.m3u + http://i.radionomy.com/Documents/Radio/201203251418199544.s60.jpg + Top Charts, Hits USA, Hip-Hop, Urban, R'n'B + %a - %t + + + Radionomy + ABSOLUTE HITS + http://listen.radionomy.com/absolute-hits.m3u + http://i.radionomy.com/Documents/Radio/20110324171358-Logo-absolute-hits-new.s60.jpg + Top Charts, Hits USA, Hits FR, Pop Rock, Rap + %a - %t + + + Radionomy + A-POP40-FM-WEB + http://listen.radionomy.com/a-pop40-fm-web.m3u + http://i.radionomy.com/Documents/Radio/20111028153548-A_POP_40_FM_WEB.s60.jpg + Hits USA, Pop, Funk, Disco, R'n'B + %a - %t + + + Radionomy + FearFM__Hardest + http://listen.radionomy.com/fearfm--hardest.m3u + http://i.radionomy.com/Documents/Radio/20110708235812-FearFM-222x180.s60.jpg + Top Charts, Hits, Hits FR, Hits UK, Hits USA + %a - %t + + + Radionomy + FuturStation + http://listen.radionomy.com/futurstation.m3u + http://i.radionomy.com/Documents/Radio/20111218230252-photo-4193.s60.jpg + Hits USA, R'n'B, Rap, Pop Rock, Hits + %a - %t + + + Radionomy + Hit's My Music Power + http://listen.radionomy.com/hit-s-my-music-power.m3u + http://i.radionomy.com/Documents/Radio/20100519005942-Power_web.s60.jpg + Top Charts, R'n'B, Hits, Dance-Clubbing, Hits USA + %a - %t + + + Radionomy + 1 Radio Dance + http://listen.radionomy.com/1-radio-dance.m3u + http://i.radionomy.com/Documents/Radio/20111101162618-logosin.s60.jpg + Dance-Clubbing, Electronic, Electronica, House, Hits UK + %a - %t + + + Radionomy + AAA World + http://listen.radionomy.com/aaa-world.m3u + http://i.radionomy.com/Documents/Radio/20111031233341-pop-music-news.s60.jpg + Top Charts, World, Hits FR, Hits UK, Hits USA + %a - %t + + + Radionomy + Addictive-50s + http://listen.radionomy.com/addictive-50s.m3u + http://i.radionomy.com/Documents/Radio/201205111124353483.s60.jpg + Oldies, Hits, Hits USA, Hits UK + %a - %t + + + Radionomy + Addictive-70s + http://listen.radionomy.com/addictive-70s.m3u + http://i.radionomy.com/Documents/Radio/20120107204804-stuck_70s_logo.s60.jpg + Hits 70's, Hits UK, Hits USA, Oldies + %a - %t + + + Radionomy + 35x80 + http://listen.radionomy.com/35x80.m3u + http://i.radionomy.com/Documents/Radio/201202012233391832.s60.jpg + Hits 80's, Hits USA, Hits UK, Hits, Pop + %a - %t + + + Radionomy + Addictive-80s + http://listen.radionomy.com/addictive-80s.m3u + http://i.radionomy.com/Documents/Radio/20111126185034-addictive_80s.s60.jpg + Hits 80's, Hits, Top Charts, Hits UK, Hits USA + %a - %t + + + Radionomy + AFDS + http://listen.radionomy.com/afds.m3u + http://i.radionomy.com/Documents/Radio/201203041547271223.s60.jpg + Hits, Hits USA, Hits UK, Pop, Pop Rock + %a - %t + + + Radionomy + RTFM + http://listen.radionomy.com/rtfm.m3u + http://i.radionomy.com/Documents/Radio/20101114203643-rtfm.s60.jpg + Pop Rock, Pop, Rock, Hits FR, Power Pop + %a - %t + + + Radionomy + ABC France + http://listen.radionomy.com/abc-france.m3u + http://i.radionomy.com/Documents/Radio/20110401011738-Abcfrance.s60.jpg + Hits, Pop, Pop Rock, Hits FR + %a - %t + + + Radionomy + Best80France + http://listen.radionomy.com/best80france.m3u + http://i.radionomy.com/Documents/Radio/20100616194134-logobestfr80100x100.s60.jpg + Hits 80's, Hits FR, Top Charts, Pop Rock, Disco + %a - %t + + + Radionomy + Paris Chanson + http://listen.radionomy.com/paris-chanson.m3u + http://i.radionomy.com/Documents/Radio/20090629164932-logo4.s60.jpg + World, Easy Listening, Oldies, Hits FR + %a - %t + + + Radionomy + -RadioHaide- + http://listen.radionomy.com/-radiohaide-.m3u + http://i.radionomy.com/Documents/Radio/20111014181928-logo_rh_v7_tshirt_relief_Radionomy.s60.jpg + Dance-Clubbing, Hits FR, Hits USA, Electro, Techno + %a - %t + + + Radionomy + A1RADIO 90 + http://listen.radionomy.com/a1radio-90.m3u + http://i.radionomy.com/Documents/Radio/201202051649309558.s60.jpg + Hits 90's, Pop + %a - %t + + + Radionomy + 90's PARTY + http://listen.radionomy.com/90-s-party.m3u + http://i.radionomy.com/Documents/Radio/201204282329228399.s60.jpg + Hits 90's, Pop Rock + %a - %t + + + Radionomy + A'11 Eurodance 90s + http://listen.radionomy.com/a-11-eurodance-90s.m3u + http://i.radionomy.com/Documents/Radio/201202061002001541.s60.jpg + Electro, Dance-Clubbing, Hits 90's, Hits, Electronic + %a - %t + + + Radionomy + bleudream-80 + http://listen.radionomy.com/bleudream-80.m3u + http://i.radionomy.com/Documents/Radio/20111014165319-Logo_radio_jingle_coup_de_coeur.s60.jpg + Hits 80's, Hits 90's, Pop Rock, Disco, Funk + %a - %t + + + Radionomy + City Dance Radio + http://listen.radionomy.com/city-dance-radio.m3u + http://i.radionomy.com/Documents/Radio/20100104201748-City_Dance_Radio_Web.s60.jpg + Dance-Clubbing, Techno, Disco, Hits 80's, Hits 90's + %a - %t + + + Radionomy + CITY POP RADIO + http://listen.radionomy.com/city-pop-radio.m3u + http://i.radionomy.com/Documents/Radio/20090722202526-CityPop_Radio_Web.s60.jpg + Pop, Hits, Hits 80's, Hits 90's, Latin Pop + %a - %t + + + Radionomy + RADIO MAGDALENA + http://listen.radionomy.com/radio-magdalena.m3u + http://i.radionomy.com/Documents/Radio/20111004103712-RADIO_MAGDALENA_10W_200x200.s60.jpg + Pop Rock, Hits 70's, Hits 80's, Hits 90's + %a - %t + + + Radionomy + ABC DISCO FUNK + http://listen.radionomy.com/abc-disco-funk.m3u + http://i.radionomy.com/Documents/Radio/201203131612266621.s60.jpg + Disco, Funk, Urban, Hits 80's, Dance-Clubbing + %a - %t + + + Radionomy + ABSOLOM 80 + http://listen.radionomy.com/absolom-80.m3u + http://i.radionomy.com/Documents/Radio/20110220111654-mic-and-dj-gear-wallpapers_9530_1024x768.s60.jpg + Hits 80's, New Wave, Rock, Disco, Funk + %a - %t + + + Radionomy + Best80 + http://listen.radionomy.com/best80.m3u + http://i.radionomy.com/Documents/Radio/20100616194144-logobest80100x100.s60.jpg + Hits 80's, New Wave, Pop Rock, Disco, Funk + %a - %t + + + Radionomy + FeelingFloyd + http://listen.radionomy.com/feelingfloyd.m3u + http://i.radionomy.com/Documents/Radio/20090927203137-loloff03.s60.jpg + Pop, Hits 80's, Hits 70's, Rock, Pop Rock + %a - %t + + + Radionomy + SOFT ROCK + http://listen.radionomy.com/soft-rock.m3u + http://i.radionomy.com/Documents/Radio/20101213012037-SOFT_ROCK.s60.jpg + Hits USA, Hits 70's, Hits 80's, Hits 90's, Easy Listening + %a - %t + + + Radionomy + 2bfm Classix + http://listen.radionomy.com/2bfm-classix.m3u + http://i.radionomy.com/Documents/Radio/20100513130927-2bfmlogo.s60.jpg + Hits 70's, Hits 80's, Hits 90's, Pop Rock, Hits + %a - %t + + + Radionomy + 4U Funky Classics + http://listen.radionomy.com/4u-funky-classics.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio4.s60.jpg + Hits, Hits 70's, Hits 80's + %a - %t + + + Radionomy + aa-radio.com + http://listen.radionomy.com/aa-radiocom.m3u + http://i.radionomy.com/Documents/Radio/20111221095420-aa-radio.s60.jpg + Romantic, Hits 70's, Hits 80's, Hits 90's, World + %a - %t + + + Radionomy + acidbarrett + http://listen.radionomy.com/acidbarrett.m3u + http://i.radionomy.com/Documents/Radio/20111107124243-logoweb.s60.jpg + Hits 60's, Hits 70's, Progressive Rock, Psychedelic, Folk + %a - %t + + + Radionomy + Alaska Hit Radio + http://listen.radionomy.com/alaska-hit-radio.m3u + http://i.radionomy.com/Documents/Radio/20100618212136-Alaska_logo_6.s60.jpg + Hits 60's, Hits 70's, Hits 80's, Hits 90's, Oldies + %a - %t + + + Radionomy + Alpenradio RockinĀ“ + http://listen.radionomy.com/alpenradio-rockin-.m3u + http://i.radionomy.com/Documents/Radio/20111122102859-logo_3.s60.jpg + Rock'n'Roll, Hits 60's, Rock, Oldies, Hits + %a - %t + + + Radionomy + MY GENERATION FM + http://listen.radionomy.com/my-generation-fm.m3u + http://i.radionomy.com/Documents/Radio/20100410025247-beatle.s60.jpg + Hits 60's, Hits 70's + %a - %t + + + Radionomy + Rey de Corazones + http://listen.radionomy.com/rey-de-corazones.m3u + http://i.radionomy.com/Documents/Radio/20110808060523-Rey_de_corazones_med.s60.jpg + Hits 60's, Hits 70's, Hits 80's + %a - %t + + + Radionomy + rolradio + http://listen.radionomy.com/rolradio.m3u + http://i.radionomy.com/Documents/Radio/20110718234436-listen_live.s60.jpg + Hits 60's, Hits 70's, Hits 80's, Hits USA, Oldies + %a - %t + + + Radionomy + dakarmusique + http://listen.radionomy.com/dakarmusique.m3u + http://i.radionomy.com/Documents/Radio/20101010180728-logodm.s60.jpg + African, World, Reggae, R'n'B, Zouk + %a - %t + + + Radionomy + Fm Tropical Shad 972 + http://listen.radionomy.com/fm-tropical-shad-972.m3u + http://i.radionomy.com/Documents/Radio/20110722160610-photo(3).s60.jpg + Zouk, Dancehall, World, Salsa, Creole + %a - %t + + + Radionomy + Africa Fm + http://listen.radionomy.com/africa-fm.m3u + http://i.radionomy.com/Documents/Radio/201201191124277462.s60.jpg + Hits, Pop, R'n'B, Zouk, Rap + %a - %t + + + Radionomy + antilles-dom-station + http://listen.radionomy.com/antilles-dom-station.m3u + http://i.radionomy.com/Documents/Radio/20100708194212-RADIONOMY.s60.jpg + Zouk, Dancehall, Ragga + %a - %t + + + Radionomy + biguine + http://listen.radionomy.com/biguine.m3u + http://i.radionomy.com/Documents/Radio/20110303211756-biguine_logo.s60.jpg + Salsa, Zouk, Reggaeton, African, Hits + %a - %t + + + Radionomy + BobbaG + http://listen.radionomy.com/bobbag.m3u + http://i.radionomy.com/Documents/Radio/201205292125148096.s60.jpg + R'n'B, Funk, Zouk, Hits, Rap + %a - %t + + + Radionomy + EvaRadio + http://listen.radionomy.com/evaradio.m3u + http://i.radionomy.com/Documents/Radio/20100716222637-LOGO_EVARADIO_URBAN_500x500.s60.jpg + Rap, Hip-Hop, R'n'B, Dancehall, Zouk + %a - %t + + + Radionomy + JOBS ET MUSIQUE + http://listen.radionomy.com/jobs-et-musique.m3u + http://i.radionomy.com/Documents/Radio/20111129153318-logo-01.s60.jpg + Hits, Zouk, Hits 80's + %a - %t + + + Radionomy + Made in Zouk + http://listen.radionomy.com/made-in-zouk.m3u + http://i.radionomy.com/Documents/Radio/201204121243504073.s60.jpg + Zouk, Merenge, Creole, Dancehall, R'n'B + %a - %t + + + Radionomy + OPENZOUKRADIO + http://listen.radionomy.com/openzoukradio.m3u + http://i.radionomy.com/Documents/Radio/201202251936581453.s60.jpg + Zouk, World, Salsa, Latin, Creole + %a - %t + + + Radionomy + one summer + http://listen.radionomy.com/one-summer.m3u + http://i.radionomy.com/Documents/Radio/20110324164257-174868_120942839769_5103107_n.s60.jpg + Electronic, Trip-hop, Lounge, Worldbeat, Soul + %a - %t + + + Radionomy + RadioCinema + http://listen.radionomy.com/radiocinema.m3u + http://i.radionomy.com/Documents/Radio/20080812003925-petit_logo_radionomy2.s60.jpg + Soundtracks, Worldbeat, Comedy, Easy Listening, Children's-Family + %a - %t + + + Radionomy + Tongolo + http://listen.radionomy.com/tongolo.m3u + http://i.radionomy.com/Documents/Radio/20111222102942-radiotongolo.s60.jpg + African, Zouk, R'n'B, Dancehall, Worldbeat + %a - %t + + + Radionomy + 1forall + http://listen.radionomy.com/1forall.m3u + http://i.radionomy.com/Documents/Radio/20110707115339-es-0211-222365-back.s60.jpg + Ambient, Chill-out, Worldbeat, Lounge, Nu Jazz + %a - %t + + + Radionomy + 1forchill + http://listen.radionomy.com/1forchill.m3u + http://i.radionomy.com/Documents/Radio/20101029090656-58921_wallpaper280.s60.jpg + Worldbeat, Chill-out, Downtempo, Lounge, Nu Jazz + %a - %t + + + Radionomy + gorkum-cityradio + http://listen.radionomy.com/gorkum-cityradio.m3u + http://i.radionomy.com/Documents/Radio/201204251048346789.s60.jpg + Hits 70's, Hits 80's, Hits 90's, Worldbeat, Hits 60's + %a - %t + + + Radionomy + http://www.radionomy.com/radiojumper + http://listen.radionomy.com/http--wwwradionomycom-radiojumper.m3u + http://i.radionomy.com/Documents/Radio/201205311502231909.s60.jpg + Urban, Chill-out, Electronic, House, Worldbeat + %a - %t + + + Radionomy + music-now-123 + http://listen.radionomy.com/music-now-123.m3u + http://i.radionomy.com/Documents/Radio/201205232020214198.s60.jpg + Pop Rock, Oldies, Worldbeat, Reggae, Soul + %a - %t + + + Radionomy + Musique d'afrique + http://listen.radionomy.com/musique-d-afrique.m3u + http://i.radionomy.com/Documents/Radio/201201301008259262.s60.jpg + African, Roots Reggae, Rap, Zouk, Worldbeat + %a - %t + + + Radionomy + RĆ”dio Cordial + http://listen.radionomy.com/radio-cordial.m3u + http://i.radionomy.com/Documents/Radio/201205201223591500.s60.jpg + Pop Rock, Hits 80's, Classic, Pop, Worldbeat + %a - %t + + + Radionomy + Abalone + http://listen.radionomy.com/abalone.m3u + http://i.radionomy.com/Documents/Radio/201201271818287702.s60.jpg + Chill-out, Jazz, Ambient, Easy Listening, World + %a - %t + + + Radionomy + A-WORLDTUNES-FM-WEB + http://listen.radionomy.com/a-worldtunes-fm-web.m3u + http://i.radionomy.com/Documents/Radio/20111028152812-A_WORLDTUNES_FM_WEB.s60.jpg + World, R'n'B, Hits, Rock, Electronica + %a - %t + + + Radionomy + Belote en ligne + http://listen.radionomy.com/belote-en-ligne.m3u + http://i.radionomy.com/Documents/Radio/20080320230330-icone-belote.s60.jpg + Jazz, Pop Rock, Rap, Latin, World + %a - %t + + + Radionomy + Chill-Out Radio Gaia + http://listen.radionomy.com/chill-out-radio-gaia.m3u + http://i.radionomy.com/Documents/Radio/20100516230836-back-of-a-nude-beautiful-woman-meditating-thumb10211793.s60.jpg + Chill-out, Ambient, New Age, World + %a - %t + + + Radionomy + Misterium + http://listen.radionomy.com/misterium.m3u + http://i.radionomy.com/Documents/Radio/20090830192653-Misterium_100.s60.jpg + World, Classic, New Age, Ambient, Spiritual + %a - %t + + + Radionomy + 999 + http://listen.radionomy.com/999.m3u + http://i.radionomy.com/Documents/Radio/20101027150619-999fm.s60.jpg + Chill-out, Swing, World, Ambient, Lounge + %a - %t + + + Radionomy + BONORAS 97.1 FM + http://listen.radionomy.com/bonoras-971-fm.m3u + http://i.radionomy.com/Documents/Radio/201204231838498193.s60.jpg + Latin Pop, Hip-Hop, Tribal, Christian, Hits + %a - %t + + + Radionomy + chile-jamboree + http://listen.radionomy.com/chile-jamboree.m3u + http://i.radionomy.com/Documents/Radio/201203230535278345.s60.jpg + Ambient, Spiritual, Ethnic Fusion, Celtic, Tribal + %a - %t + + + Radionomy + cinemaducameroun laradio + http://listen.radionomy.com/cinemaducameroun-laradio.m3u + http://i.radionomy.com/Documents/Radio/201204161451132006.s60.jpg + Tribal, African, Celtic, Reggae, Classic + %a - %t + + + Radionomy + corsekabylie + http://listen.radionomy.com/corsekabylie.m3u + http://i.radionomy.com/Documents/Radio/20111118191348-UNION_DES_DIFERENCES_(mini_photo_).s60.jpg + World, Tribal, Folkloric, Spiritual, Ambient + %a - %t + + + Radionomy + radial good bless + http://listen.radionomy.com/radial-good-bless.m3u + http://i.radionomy.com/Documents/Radio/201204140029523146.s60.jpg + Dancehall, Goa Trance, House, Latin Dance, Tribal + %a - %t + + + Radionomy + alles!hits + http://listen.radionomy.com/alleshits.m3u + http://i.radionomy.com/Documents/Radio/20110221110630-ah_lau3.s60.jpg + Hits, Pop, Polka, World, Oldies + %a - %t + + + Radionomy + Egerland + http://listen.radionomy.com/egerland.m3u + http://i.radionomy.com/Documents/Radio/201203081125245245.s60.jpg + Polka, Children's-Family, Folkloric, Miscellaneous + %a - %t + + + Radionomy + hitradio Liberty + http://listen.radionomy.com/hitradio-liberty.m3u + http://i.radionomy.com/Documents/Radio/20111003222240-5517-LIBERTY-300-300.s60.jpg + Hits, Hits 80's, Hits 90's, Folk, Polka + %a - %t + + + Radionomy + J-Last + http://listen.radionomy.com/j-last.m3u + http://i.radionomy.com/Documents/Radio/201202072318160081.s60.jpg + Symphony, Oldies, Polka, World, Easy Listening + %a - %t + + + Radionomy + limburgia + http://listen.radionomy.com/limburgia.m3u + http://i.radionomy.com/Documents/Radio/20100807115511-limburgia.s60.jpg + Polka, Folk, Ambient + %a - %t + + + Radionomy + NL-Best + http://listen.radionomy.com/nl-best.m3u + http://i.radionomy.com/Documents/Radio/20110302125004-Banner_125.s60.jpg + Hits, Polka, World, Oldies, Folk + %a - %t + + + Radionomy + Prestige Musette + http://listen.radionomy.com/prestige-musette.m3u + http://i.radionomy.com/Documents/Radio/20110511202723-prestigefm.s60.jpg + Salsa, Oldies, Tango, Samba, Polka + %a - %t + + + Radionomy + RADIO SCHWANY DIE ECHTE VOLKSMUSIK + http://listen.radionomy.com/radio-schwany-die-echte-volksmusik.m3u + http://i.radionomy.com/Documents/Radio/201202031355138919.s60.jpg + Polka, Folkloric, Children's-Family + %a - %t + + + Radionomy + les anciens de dakar + http://listen.radionomy.com/les-anciens-de-dakar.m3u + http://i.radionomy.com/Documents/Radio/201203072248312038.s60.jpg + African, Salsa, Morna, Zouk, World + %a - %t + + + Radionomy + Aindefla + http://listen.radionomy.com/aindefla.m3u + http://i.radionomy.com/Documents/Radio/20110708215459-Radio.s60.jpg + Arabic, R'n'B, Rap, Middle Eastern, World + %a - %t + + + Radionomy + dilvillradio + http://listen.radionomy.com/dilvillradio.m3u + http://i.radionomy.com/Documents/Radio/201206022207316927.s60.jpg + Middle Eastern, Soundtracks + %a - %t + + + Radionomy + djashraf + http://listen.radionomy.com/djashraf.m3u + http://i.radionomy.com/Documents/Radio/201204050351261795.s60.jpg + Arabic, Middle Eastern, Top Charts + %a - %t + + + Radionomy + Orizon Music Arabiya + http://listen.radionomy.com/orizon-music-arabiya.m3u + http://i.radionomy.com/Documents/Radio/201205180147548728.s60.jpg + Arabic, Middle Eastern, African + %a - %t + + + Radionomy + Orizon Turkiye + http://listen.radionomy.com/orizon-turkiye.m3u + http://i.radionomy.com/Documents/Radio/201204290303049646.s60.jpg + World, Oldies, Asian, Middle Eastern + %a - %t + + + Radionomy + YOUNG-A FM + http://listen.radionomy.com/young-a-fm.m3u + http://i.radionomy.com/Documents/Radio/201204021112137274.s60.jpg + Arabic, Middle Eastern + %a - %t + + + Radionomy + RadioLaSaeta + http://listen.radionomy.com/radiolasaeta.m3u + http://i.radionomy.com/Documents/Radio/201205061952029629.s60.jpg + Baroque, Classic, Symphony, Country, Jewish + %a - %t + + + Radionomy + Tierra de Avivamiento para las Naciones + http://listen.radionomy.com/tierra-de-avivamiento-para-las-naciones.m3u + http://i.radionomy.com/Documents/Radio/201203281954445405.s60.jpg + Jewish, Christian, Religious, Spiritual, Christmas + %a - %t + + + Radionomy + KawaiiRadio + http://listen.radionomy.com/kawaiiradio.m3u + http://i.radionomy.com/Documents/Radio/201203031410241800.s60.jpg + Japanese, Pop, Ambient + %a - %t + + + Radionomy + Japan Station + http://listen.radionomy.com/japan-station.m3u + http://i.radionomy.com/Documents/Radio/20110914064522-crbst_JS_20copy.s60.jpg + Pop, Top Charts, Asian, Hits, Japanese + %a - %t + + + Radionomy + J-Music =3 + http://listen.radionomy.com/j-music--3.m3u + http://i.radionomy.com/Documents/Radio/20111030110744-logo2.s60.jpg + Japanese, Pop, Asian + %a - %t + + + Radionomy + Subarashii + http://listen.radionomy.com/subarashii.m3u + http://i.radionomy.com/Documents/Radio/20110405211223-Logo_rouge.s60.jpg + Soundtracks, Japanese, Miscellaneous, Pop Rock, Asian + %a - %t + + + Radionomy + A0-1 WORLD + http://listen.radionomy.com/a0-1-world.m3u + http://i.radionomy.com/Documents/Radio/20110116004243-12.s60.jpg + Japanese, Rock, Electro, Indie, Pop + %a - %t + + + Radionomy + Animusique + http://listen.radionomy.com/animusique.m3u + http://i.radionomy.com/Documents/Radio/20110911121635-radionomy_copie.s60.jpg + Japanese, Hits 80's, Soundtracks, Pop Rock, Children's-Family + %a - %t + + + Radionomy + dd-animes + http://listen.radionomy.com/dd-animes.m3u + http://i.radionomy.com/Documents/Radio/201205202341352393.s60.jpg + Japanese, Japanese + %a - %t + + + Radionomy + GeneriKids + http://listen.radionomy.com/generikids.m3u + http://i.radionomy.com/Documents/Radio/201204050556547810.s60.jpg + Hits, Soundtracks, Japanese, Children's-Family, Hits 80's + %a - %t + + + Radionomy + GGRadio Too + http://listen.radionomy.com/ggradio-too.m3u + http://i.radionomy.com/Documents/Radio/20110906011036-GGradio_ALBUM_COVER.s60.jpg + Japanese, Soundtracks, Electronic, Indie + %a - %t + + + Radionomy + HelloProjectAnime + http://listen.radionomy.com/helloprojectanime.m3u + http://i.radionomy.com/Documents/Radio/20110901110449-8d8xol.s60.jpg + Japanese, Soundtracks + %a - %t + + + Radionomy + Fretworks - Guitars, Jazz & Easy Listening + http://listen.radionomy.com/fretworks---guitars--jazz--easy-listening.m3u + http://i.radionomy.com/Documents/Radio/20101107011509-Gretsch_Duane_Eddy.s60.jpg + Jazz, Instrumental Rock, Oldies, Hawaiian-Pacific, Miscellaneous + %a - %t + + + Radionomy + Tropiques FM + http://listen.radionomy.com/tropiquesfm.m3u + http://i.radionomy.com/Documents/Radio/7E9FE0D6-E2F5-55E1-D7BE-A90B40C0695E.s60.jpg + Zouk, World, Hawaiian-Pacific, African, Creole + %a - %t + + + Radionomy + Radio Portugal + http://listen.radionomy.com/radio-portugal.m3u + http://i.radionomy.com/Documents/Radio/20100502181914-logo_radio_portugal_3.s60.jpg + Hits 80's, Brazilian, Fado, Hits 90's, Hits FR + %a - %t + + + Radionomy + BONZA + http://listen.radionomy.com/bonza.m3u + http://i.radionomy.com/Documents/Radio/20111220035418-bonza2012.s60.jpg + Fado, Latin, African, Brazilian, World + %a - %t + + + Radionomy + Enjoy-Life + http://listen.radionomy.com/enjoy-life.m3u + http://i.radionomy.com/Documents/Radio/201204032254054929.s60.jpg + Dancehall, Disco, Hits USA, Dance Rock, Fado + %a - %t + + + Radionomy + PrismaPrisma + http://listen.radionomy.com/prismaprisma.m3u + http://i.radionomy.com/Documents/Radio/20110905050247-prismaprisma.s60.jpg + World, Soundtracks, Fado, Latin, Tango + %a - %t + + + Radionomy + PrismaPrisma GR + http://listen.radionomy.com/prismaprisma-gr.m3u + http://i.radionomy.com/Documents/Radio/201206031237162999.s60.jpg + World, Brazilian, Fado, African, Easy Listening + %a - %t + + + Radionomy + PrismaPrisma Plus + http://listen.radionomy.com/prismaprisma-plus.m3u + http://i.radionomy.com/Documents/Radio/201202292213102281.s60.jpg + World, Fado, Tango, Hits 80's, Classic Jazz + %a - %t + + + Radionomy + Radio Kapadosia + http://listen.radionomy.com/radio--kapadosia.m3u + http://i.radionomy.com/Documents/Radio/20111029070244-RadioKapadosia.s60.jpg + New Age, Soundtracks, World, Classic, Fado + %a - %t + + + Radionomy + Radio luso.be + http://listen.radionomy.com/radio-lusobe.m3u + http://i.radionomy.com/Documents/Radio/20110913103011-174607_133930830006719_404703_n.s60.jpg + Fado, Samba, Tango, Zouk, Hits USA + %a - %t + + + Radionomy + Zona de Insomnio + http://listen.radionomy.com/zona-de-insomnio.m3u + http://i.radionomy.com/Documents/Radio/20111217223721-zona.s60.jpg + Pop Rock, Baroque, Fado, Brazilian, Miscellaneous + %a - %t + + + Radionomy + Afriki Djigui Theatri + http://listen.radionomy.com/afriki-djigui-theatri.m3u + http://i.radionomy.com/Documents/Radio/20100713223747-90_x_90_logo_djigui.s60.jpg + African, Arabic, Reggae, Ethnic Fusion, Creole + %a - %t + + + Radionomy + AlternativeRadio + http://listen.radionomy.com/alternativeradio.m3u + http://i.radionomy.com/Documents/Radio/20090820192154-Alternative_Radio_logo.s60.jpg + Classic Rock, Hip-Hop, African, Ethnic Fusion, Funk + %a - %t + + + Radionomy + ArabMusicRadio + http://listen.radionomy.com/arabmusicradio.m3u + http://i.radionomy.com/Documents/Radio/20120101200838-ArabMusicRadio.s60.jpg + Arabic, Oldies, Top Charts, Romantic, Ethnic Fusion + %a - %t + + + Radionomy + MarocMusic + http://listen.radionomy.com/marocmusic.m3u + http://i.radionomy.com/Documents/Radio/20110422015743-Rmma.s60.jpg + World, Classic, Reggae, Rap, Ethnic Fusion + %a - %t + + + Radionomy + Pumpkin + http://listen.radionomy.com/pumpkin.m3u + http://i.radionomy.com/Documents/Radio/20111125023747-Music-Pumpkin.s60.jpg + Chill-out, Ambient, Lounge, Easy Listening, Ethnic Fusion + %a - %t + + + Radionomy + alerios + http://listen.radionomy.com/alerios.m3u + http://i.radionomy.com/Documents/Radio/201204032051327847.s60.jpg + Ethnic Fusion, Classic + %a - %t + + + Radionomy + Avant-Garde Project + http://listen.radionomy.com/avant-garde-project.m3u + http://i.radionomy.com/Documents/Radio/20101016224348-m_e6f40df32bb021c28ae8a0590c9a8746.s60.jpg + Experimental, Chamber, Ethnic Fusion, Classic, New Age + %a - %t + + + Radionomy + CELDIAPHENIXGUINEE + http://listen.radionomy.com/celdiaphenixguinee.m3u + http://i.radionomy.com/Documents/Radio/201205261723458978.s60.jpg + Reggae, Ethnic Fusion, Hip-Hop, Ragga, Rap + %a - %t + + + Radionomy + CELESTIAL SONG Radio + http://listen.radionomy.com/celestial-song-radio.m3u + http://i.radionomy.com/Documents/Radio/201205290122521088.s60.jpg + New Age, Chill-out, Ambient, Celtic, Ethnic Fusion + %a - %t + + + Radionomy + Alpha tune 974 + http://listen.radionomy.com/alpha-tune-974.m3u + http://i.radionomy.com/Documents/Radio/201204071907286876.s60.jpg + Rap, Dancehall, Ragga, Creole, R'n'B + %a - %t + + + Radionomy + ArdiSounD + http://listen.radionomy.com/ardisound.m3u + http://i.radionomy.com/Documents/Radio/20101118131632-logo-ardisound-ecouteur-gif.s60.jpg + Dancehall, Gangsta Rap, Hip-Hop, Hits, Creole + %a - %t + + + Radionomy + SanouSAV radio + http://listen.radionomy.com/sanousav-radio.m3u + http://i.radionomy.com/Documents/Radio/201203291859075662.s60.jpg + Top Charts, Zouk, Creole, World, Hits + %a - %t + + + Radionomy + 4you'fm + http://listen.radionomy.com/4you-fm.m3u + http://i.radionomy.com/Documents/Radio/201205122040290046.s60.jpg + Techno, Pop, Creole, Pop Rock, Hits + %a - %t + + + Radionomy + 9-7-4 La Radio + http://listen.radionomy.com/9-7-4-la-radio.m3u + http://i.radionomy.com/Documents/Radio/201204171220051595.s60.jpg + Dancehall, Ragga, Reggae, Zouk, Creole + %a - %t + + + Radionomy + 974 Mascareignes OnLine + http://listen.radionomy.com/974-mascareignes-online.m3u + http://i.radionomy.com/Documents/Radio/201204301144281936.s60.jpg + Electronic, Hits, Creole, Miscellaneous, World + %a - %t + + + Radionomy + arcadie + http://listen.radionomy.com/arcadie.m3u + http://i.radionomy.com/Documents/Radio/20100927113401-Radio_Arcadie.s60.jpg + Chill-out, Celtic, Ambient, New Age, Spiritual + %a - %t + + + Radionomy + Airmeith Radio + http://listen.radionomy.com/airmeith-radio.m3u + http://i.radionomy.com/Documents/Radio/201202271014379796.s60.jpg + Ambient, New Age, Celtic, Lounge, Chill-out + %a - %t + + + Radionomy + TradCan + http://listen.radionomy.com/tradcan.m3u + http://i.radionomy.com/Documents/Radio/20080905213811-TradCan2.s60.jpg + Folk, Celtic + %a - %t + + + Radionomy + bestof radio + http://listen.radionomy.com/bestof-radio.m3u + http://i.radionomy.com/Documents/Radio/201204271451103583.s60.jpg + Arabic, Celtic, Hits, House, Hard Rock + %a - %t + + + Radionomy + Blogas Radijas FM + http://listen.radionomy.com/blogas-radijas-fm.m3u + http://i.radionomy.com/Documents/Radio/201206080003594410.s60.jpg + Medieval, Latin Dance, Celtic, Pop Rock, Classic Rock + %a - %t + + + Radionomy + teddyboys17 + http://listen.radionomy.com/teddyboys17.m3u + http://i.radionomy.com/Documents/Radio/20110925205827-teddy_boys.s60.jpg + Rockabilly, Boogie-Woogie, Rock'n'Roll, Country, Cajun + %a - %t + + + Radionomy + brasilfm + http://listen.radionomy.com/brasilfm.m3u + http://i.radionomy.com/Documents/Radio/20101115172034-brasilfm.s60.jpg + Brazilian, Bossa Nova, Ambient, Latin, Reggae + %a - %t + + + Radionomy + Batavia + http://listen.radionomy.com/batavia.m3u + http://i.radionomy.com/Documents/Radio/20111125194315-logomat_Batavia.s60.jpg + Rock'n'Roll, Reggae, Brazilian, African, Electronica + %a - %t + + + Radionomy + Francophonie Express + http://listen.radionomy.com/francophonie-express.m3u + http://i.radionomy.com/Documents/Radio/20100819221348-logo6.s60.jpg + Brazilian, Bossa Nova, Hits FR, New Soul, Pop Rock + %a - %t + + + Radionomy + shy-radio + http://listen.radionomy.com/shy-radio.m3u + http://i.radionomy.com/Documents/Radio/20111221085853-shyradio.s60.jpg + Latin, Latin Pop, Brazilian, Romantic, Hits + %a - %t + + + Radionomy + Smoothbestmusicradio + http://listen.radionomy.com/smoothbestmusicradio.m3u + http://i.radionomy.com/Documents/Radio/201202181450351478.s60.jpg + Easy Listening, Brazilian, Jazz, Ambient, Jazz Rock + %a - %t + + + Radionomy + bomba mix + http://listen.radionomy.com/bomba-mix.m3u + http://i.radionomy.com/Documents/Radio/201202141440287268.s60.jpg + Techno, Zouk, Rock'n'Roll, Brazilian, Disco + %a - %t + + + Radionomy + Bossabrina + http://listen.radionomy.com/bossabrina.m3u + http://i.radionomy.com/Documents/Radio/201205121339146817.s60.jpg + Chill-out, Bebop, Jazz Rock, Brazilian, Bossa Nova + %a - %t + + + Radionomy + Brasil Sertanejo + http://listen.radionomy.com/brasil-sertanejo.m3u + http://i.radionomy.com/Documents/Radio/201201150241202346.s60.jpg + Brazilian, Country, Latin + %a - %t + + + Radionomy + air-lounge + http://listen.radionomy.com/air-lounge.m3u + http://i.radionomy.com/Documents/Radio/20100505171911-air-lounge_134.s60.jpg + Ambient, Electronic, Bossa Nova, Jazz, R'n'B + %a - %t + + + Radionomy + RadioSky Music + http://listen.radionomy.com/radiosky-music.m3u + http://i.radionomy.com/Documents/Radio/20100114150209-Vignette_3_RED-Blanc_Louis_Armstrong_Full.s60.jpg + Jazz, Blues, Bebop, Latin Jazz, Bossa Nova + %a - %t + + + Radionomy + ƁBACO LIBROS Y CAFƉ RADIO + http://listen.radionomy.com/abaco-libros-y-cafe-radio.m3u + http://i.radionomy.com/Documents/Radio/201202181835453732.s60.jpg + Classic Jazz, Jazz, Latin Jazz, Bossa Nova, Oldies + %a - %t + + + Radionomy + Jazz in Bolz + http://listen.radionomy.com/jazz-in-bolz.m3u + http://i.radionomy.com/Documents/Radio/20090624002029-Jazz_in_Bolz.s60.jpg + Acid Jazz, Jazz, Bossa Nova, Nu Jazz, Lounge + %a - %t + + + Radionomy + Eighth Note + http://listen.radionomy.com/eighth-note.m3u + http://i.radionomy.com/Documents/Radio/20110513232052-imagesCARFE2YB.s60.jpg + Jazz, Classic, Bossa Nova + %a - %t + + + Radionomy + jangaradio + http://listen.radionomy.com/jangaradio.m3u + http://i.radionomy.com/Documents/Radio/201202031124492723.s60.jpg + Lounge, House, Chill-out, Easy Listening, Bossa Nova + %a - %t + + + Radionomy + Mistura Fina Instrumental + http://listen.radionomy.com/mistura-fina-instrumental.m3u + http://i.radionomy.com/Documents/Radio/20111203001352-Log_-MF_2012.s60.jpg + Easy Listening, Pop, Jazz, Blues, Bossa Nova + %a - %t + + + Radionomy + bluemusic + http://listen.radionomy.com/bluemusic.m3u + http://i.radionomy.com/Documents/Radio/201205290152096379.s60.jpg + Tango, Folkloric, Latin Jazz, Latin Pop, Bossa Nova + %a - %t + + + Radionomy + DJSiran Tamil FM + http://listen.radionomy.com/djsiran-tamil-fm.m3u + http://i.radionomy.com/Documents/Radio/20110203221104-DJSTFM-Logo-57x57-1_copy.s60.jpg + Asian, World, Arabic, Chill-out, Folk + %a - %t + + + Radionomy + Korea Station + http://listen.radionomy.com/korea-station.m3u + http://i.radionomy.com/Documents/Radio/20110914064549-crbst_KS0.s60.jpg + Asian, Hits, Top Charts, Pop, Hip-Hop + %a - %t + + + Radionomy + Sweet KPOP + http://listen.radionomy.com/sweet-kpop.m3u + http://i.radionomy.com/Documents/Radio/20111219162155-sweetkpoplogo.s60.jpg + Asian, Hip-Hop, Rap + %a - %t + + + Radionomy + afghan radio station + http://listen.radionomy.com/afghan-radio--station.m3u + http://i.radionomy.com/Documents/Radio/20110123132821-20100209200401-radio.jpg.s65.s60.jpg + Asian + %a - %t + + + Radionomy + Asian Station + http://listen.radionomy.com/asian-station.m3u + http://i.radionomy.com/Documents/Radio/20110914064905-crbst_AS0.s60.jpg + Asian, Dance-Clubbing, Hits, Top Charts, Pop + %a - %t + + + Radionomy + Can U Smiile + http://listen.radionomy.com/can-u-smiile.m3u + http://i.radionomy.com/Documents/Radio/20111221223455-smiilebanner.s60.jpg + Asian + %a - %t + + + Radionomy + DJSiran Gold FM + http://listen.radionomy.com/djsiran-gold-fm.m3u + http://i.radionomy.com/Documents/Radio/20110203221043-GoldFm-Logo-57x57-1.s60.jpg + Asian, Folk, Classic Blues, Latin Pop, Soul + %a - %t + + + Radionomy + Andalousse + http://listen.radionomy.com/andalousse.m3u + http://i.radionomy.com/Documents/Radio/20100926110654-logo_andalousse_2010.s60.jpg + Classic, Arabic, World, Chamber, Spiritual + %a - %t + + + Radionomy + izlan + http://listen.radionomy.com/izlan.m3u + http://i.radionomy.com/Documents/Radio/201203160034431338.s60.jpg + African, Arabic, Blues + %a - %t + + + Radionomy + Tunisie 24 + http://listen.radionomy.com/tunisie-24.m3u + http://i.radionomy.com/Documents/Radio/20100617090331-radio-tunisie24.s60.jpg + Hits, Arabic, Hits FR, World, Oldies + %a - %t + + + Radionomy + Watani + http://listen.radionomy.com/watani.m3u + http://i.radionomy.com/Documents/Radio/20110616215008-ggg.s60.jpg + Arabic, Rap, World, African, Electronic + %a - %t + + + Radionomy + AL HADHRA + http://listen.radionomy.com/al-hadhra.m3u + http://i.radionomy.com/Documents/Radio/20111118221133-viewlogoCAM4UOYU2.s60.jpg + Arabic, Religious, Spiritual + %a - %t + + + Radionomy + Andalusi Radio 1 + http://listen.radionomy.com/andalusi-radio-1.m3u + http://i.radionomy.com/Documents/Radio/201205271443030969.s60.jpg + Arabic, Dance Rock, Hits 80's, Disco, Pop-Reggae + %a - %t + + + Radionomy + Africa Time For Peace + http://listen.radionomy.com/africa-time-for-peace.m3u + http://i.radionomy.com/Documents/Radio/20101119093348-9920086dfdd34434b66d3edd5a1d32b4_190053.s90.s60.jpg + African, World, Gospel, Roots Reggae, Soul + %a - %t + + + Radionomy + Impala2 + http://listen.radionomy.com/impala2.m3u + http://i.radionomy.com/Documents/Radio/20110712182357-Impala.s60.jpg + Oldies, African, Country, Pop, Hits + %a - %t + + + Radionomy + Paradisagasy + http://listen.radionomy.com/paradisagasy.m3u + http://i.radionomy.com/Documents/Radio/201203041531052436.s60.jpg + African, World, Zouk, Folkloric, Hits + %a - %t + + + Radionomy + Radio Koudjouni + http://listen.radionomy.com/radio-koudjouni.m3u + http://i.radionomy.com/Documents/Radio/20110819195938-rdk1.s60.jpg + Ragga, Zouk, African, Reggae, Religious + %a - %t + + + Radionomy + Air Classique + http://listen.radionomy.com/air-classique.m3u + http://i.radionomy.com/Documents/Radio/201206051718595918.s60.jpg + Classic, Opera, Symphony, Spiritual, Baroque + %a - %t + + + Radionomy + B4 Station Relax + http://listen.radionomy.com/b4-station-relax.m3u + http://i.radionomy.com/Documents/Radio/20111114000326-B4.s60.jpg + Easy Listening, Ambient, Downtempo, Spiritual, Easy Listening + %a - %t + + + Radionomy + killabass sound radio + http://listen.radionomy.com/killabass-sound-radio.m3u + http://i.radionomy.com/Documents/Radio/201203191838585920.s60.jpg + Roots Reggae, Dub, Reggae, Roots Reggae, Spiritual + %a - %t + + + Radionomy + LA ROCA + http://listen.radionomy.com/la-roca.m3u + http://i.radionomy.com/Documents/Radio/20101206194419-anigif_22.s60.jpg + Christian, Spiritual, Gospel, Christian + %a - %t + + + Radionomy + Radio Magico + http://listen.radionomy.com/radio-magico.m3u + http://i.radionomy.com/Documents/Radio/20110419165852-webradiozen-new.s60.jpg + Spiritual, Chill-out, Easy Listening, New Age, World + %a - %t + + + Radionomy + caminandoensantidad + http://listen.radionomy.com/caminandoensantidad.m3u + http://i.radionomy.com/Documents/Radio/201203200519331709.s60.jpg + Christian, Religious, Spiritual, Gospel + %a - %t + + + Radionomy + AirCD Hits Radio + http://listen.radionomy.com/aircd-hits-radio.m3u + http://i.radionomy.com/Documents/Radio/20110519190228-LOGO_AIRCDHITSRADIO.s60.jpg + Pop, Dance-Clubbing, World, Hits, Soundtracks + %a - %t + + + Radionomy + Blue Zone Bolz + http://listen.radionomy.com/blue-zone-bolz.m3u + http://i.radionomy.com/Documents/Radio/20090623234831-Blue_Zone_Bolz.s60.jpg + Chill-out, Ambient, Lounge, Soundtracks, Trip-hop + %a - %t + + + Radionomy + Carousel + http://listen.radionomy.com/carousel.m3u + http://i.radionomy.com/Documents/Radio/201204141954072221.s60.jpg + Easy Listening, Swing, Oldies, Soundtracks, Romantic + %a - %t + + + Radionomy + Cinescore + http://listen.radionomy.com/cinescore.m3u + http://i.radionomy.com/Documents/Radio/201203090918430282.s60.jpg + Pop Rock, Soundtracks, Miscellaneous, Easy Listening, Symphony + %a - %t + + + Radionomy + Disneyfevermusicradio + http://listen.radionomy.com/disneyfevermusicradio.m3u + http://i.radionomy.com/Documents/Radio/201203110219042044.s60.jpg + Children's-Family, Comedy, Soundtracks, Miscellaneous + %a - %t + + + Radionomy + ellipse radio + http://listen.radionomy.com/ellipse-radio.m3u + http://i.radionomy.com/Documents/Radio/201203161132305815.s60.jpg + Rock, Pop Rock, Soundtracks, Oldies, Hits 90's + %a - %t + + + Radionomy + best of slow + http://listen.radionomy.com/best-of-slow.m3u + http://i.radionomy.com/Documents/Radio/20111205170659-coeur.s60.jpg + Romantic + %a - %t + + + Radionomy + K-EASY + http://listen.radionomy.com/k-easy.m3u + http://i.radionomy.com/Documents/Radio/20110721235234-0K-EASY-150x150.s60.jpg + Romantic, Easy Listening, Downtempo, Pop, Miscellaneous + %a - %t + + + Radionomy + LoveHitsRadio + http://listen.radionomy.com/lovehitsradio.m3u + http://i.radionomy.com/Documents/Radio/201202041416248392.s60.jpg + Romantic, Easy Listening, Lounge, Downtempo, Pop + %a - %t + + + Radionomy + Passion.Love.Radio + http://listen.radionomy.com/passionloveradio.m3u + http://i.radionomy.com/Documents/Radio/20110720221359-radio_Logo-200-01.s60.jpg + Hits 80's, Hits 90's, Hits USA, Romantic, Hits + %a - %t + + + Radionomy + Radio del Amor Online + http://listen.radionomy.com/radio-del-amor-online.m3u + http://i.radionomy.com/Documents/Radio/20111101091441-LOGO_amor_RADIONOMY.s60.jpg + Hits, Latin Pop, Romantic + %a - %t + + + Radionomy + Radio Michele One + http://listen.radionomy.com/radio-michele-one.m3u + http://i.radionomy.com/Documents/Radio/20110714150028-Radio_Michele_One.s60.jpg + Romantic, Rock, Hits, Pop Rock, Pop + %a - %t + + + Radionomy + STUDIO 50 STEREO BALADAS + http://listen.radionomy.com/studio-50-stereo-baladas.m3u + http://i.radionomy.com/Documents/Radio/201205111805180098.s60.jpg + Hits 70's, Romantic + %a - %t + + + Radionomy + Esperanza 7 + http://listen.radionomy.com/esperanza-7.m3u + http://i.radionomy.com/Documents/Radio/201204010403369259.s60.jpg + Christian, Religious, Spiritual, Children's-Family, Educational + %a - %t + + + Radionomy + Evangeliza radio LeĆ³n + http://listen.radionomy.com/evangeliza-radio-leon.m3u + http://i.radionomy.com/Documents/Radio/201203120600244154.s60.jpg + Religious, Spiritual, Educational + %a - %t + + + Radionomy + FM La Voz de la RestauraciĆ³n + http://listen.radionomy.com/fm-la-voz-de-la-restauracion.m3u + http://i.radionomy.com/Documents/Radio/20110817051931-Restaurando_la_fe_Yahwista_2.s60.jpg + Experimental, Spiritual, Religious, Children's-Family, Educational + %a - %t + + + Radionomy + GLORIOUS ONE + http://listen.radionomy.com/glorious-one.m3u + http://i.radionomy.com/Documents/Radio/201202280250578971.s60.jpg + Christian, Religious, Spiritual, Christian, Christian + %a - %t + + + Radionomy + hnaglendalive + http://listen.radionomy.com/hnaglendalive.m3u + http://i.radionomy.com/Documents/Radio/201204040802171157.s60.jpg + Christian, Religious, Spiritual, World, Miscellaneous + %a - %t + + + Radionomy + RADIOMUSICA CRISTIANA + http://listen.radionomy.com/radiomusica-cristiana.m3u + http://i.radionomy.com/Documents/Radio/20111126151549-0416264498448filebaner.s60.jpg + Christian, Religious, Spiritual + %a - %t + + + Radionomy + RJM Love + http://listen.radionomy.com/rjm-love.m3u + http://i.radionomy.com/Documents/Radio/20111006182811-RJM-LOVE-ecriture-90x90.s60.jpg + Romantic, Religious, Blues, Soul, Oldies + %a - %t + + + Radionomy + SMOOTH RIVIERA + http://listen.radionomy.com/smooth-riviera.m3u + http://i.radionomy.com/Documents/Radio/20100406190156-smooth-riviera.s60.jpg + Ambient, Classic, Easy Listening, Chill-out, Miscellaneous + %a - %t + + + Radionomy + AstraHits + http://listen.radionomy.com/astrahits.m3u + http://i.radionomy.com/Documents/Radio/20101203110808-AstraHits.s60.jpg + Dance-Clubbing, Miscellaneous, Pop Rock, Rap + %a - %t + + + Radionomy + ChillHits4U + http://listen.radionomy.com/chillhits4u.m3u + http://i.radionomy.com/Documents/Radio/20111203173628-Chits4u7.s60.jpg + Pop, Hits, Oldies, Pop, Miscellaneous + %a - %t + + + Radionomy + Eurovisio radio + http://listen.radionomy.com/eurovisio-radio.m3u + http://i.radionomy.com/Documents/Radio/20091229144026-euro.s60.jpg + Miscellaneous, Pop + %a - %t + + + Radionomy + radiolemba + http://listen.radionomy.com/radiolemba.m3u + http://i.radionomy.com/Documents/Radio/201204222242558986.s60.jpg + Kumbia, Medieval, Soundtracks, Bebop, Dub + %a - %t + + + Radionomy + RADI-OST + http://listen.radionomy.com/radi-ost.m3u + http://i.radionomy.com/Documents/Radio/20111016142541-mass-effect-2-50-wp.s60.jpg + Soundtracks, Medieval, Ambient, Symphony, Comedy + %a - %t + + + Radionomy + sancta-puer-voices + http://listen.radionomy.com/sancta-puer-voices.m3u + http://i.radionomy.com/Documents/Radio/20120108144146-demon.s60.jpg + Classic, Celtic, Spiritual, Medieval, Religious + %a - %t + + + Radionomy + solocoro + http://listen.radionomy.com/solocoro.m3u + http://i.radionomy.com/Documents/Radio/201204151500387527.s60.jpg + Tango, Habanera, Religious, Medieval, Gospel + %a - %t + + + Radionomy + Woodkid Radio + http://listen.radionomy.com/woodkid-radio.m3u + http://i.radionomy.com/Documents/Radio/201205201701225502.s60.jpg + Medieval, Urban + %a - %t + + + Radionomy + lavozconciente + http://listen.radionomy.com/lavozconciente.m3u + http://i.radionomy.com/Documents/Radio/20110620174306-LogoRadioT220144_2.s60.jpg + Hits, Latin, Romantic, Pop Rock, Folkloric + %a - %t + + + Radionomy + Radio Muro Flamenco + http://listen.radionomy.com/radio-muro-flamenco.m3u + http://i.radionomy.com/Documents/Radio/20110629170533-LOGO_MURO_FLAMENCO_HD_RADIO_4.s60.jpg + Flamenco, Oldies, Folkloric, World, Chill-out + %a - %t + + + Radionomy + Radio Quelite + http://listen.radionomy.com/radio-quelite.m3u + http://i.radionomy.com/Documents/Radio/20100125033001-RadioTamalLogo1a.s60.jpg + Mariachi, Latin, World, Folkloric, Country + %a - %t + + + Radionomy + radiobrassens + http://listen.radionomy.com/radiobrassens.m3u + http://i.radionomy.com/Documents/Radio/20110930140325-logo11_1.s60.jpg + Folkloric + %a - %t + + + Radionomy + RincĆ³n Gaucho FM + http://listen.radionomy.com/rincon-gaucho-fm.m3u + http://i.radionomy.com/Documents/Radio/20090624210433-logo_rincon.s60.jpg + Folkloric + %a - %t + + + Radionomy + Son_por_la_tradiciĆ³n + http://listen.radionomy.com/son-por-la-tradicion.m3u + http://i.radionomy.com/Documents/Radio/20111124151602-LogoSonGris.s60.jpg + Folkloric, Mariachi, World + %a - %t + + + Radionomy + psybc + http://listen.radionomy.com/psybc.m3u + http://i.radionomy.com/Documents/Radio/20110121180007-l_f7c5e2d8a54a4d9892d372b77e60a868.s60.jpg + Ambient, Downtempo, Chill-out, Experimental, Goa Trance + %a - %t + + + Radionomy + Cheche Reggaeton Radio + http://listen.radionomy.com/cheche-reggaeton-radio.m3u + http://i.radionomy.com/Documents/Radio/201204171930387990.s60.jpg + Reggaeton, Urban, Latin, Hits, Experimental + %a - %t + + + Radionomy + Heartbeat + http://listen.radionomy.com/heartbeat.m3u + http://i.radionomy.com/Documents/Radio/201201181912072663.s60.jpg + Rap, Soul, Hip-Hop, Urban, Experimental + %a - %t + + + Radionomy + LIVERPOOL REVOLUTION LIVE + http://listen.radionomy.com/liverpool-revolution-live.m3u + http://i.radionomy.com/Documents/Radio/20100402131159-LOGO_LRL_-_100x100_px_-_pour_Radionomy.s60.jpg + Hits 60's, Rock'n'Roll, Hits 70's, Pop, Experimental + %a - %t + + + Radionomy + 1Up + http://listen.radionomy.com/1up.m3u + http://i.radionomy.com/Documents/Radio/201204080042375427.s60.jpg + Hits, Folk, World, Electro, Experimental + %a - %t + + + Radionomy + 360 AIRFLOW + http://listen.radionomy.com/360-airflow.m3u + http://i.radionomy.com/Documents/Radio/201203221820116370.s60.jpg + Hip-Hop, Lounge, Jazz, Experimental, Soul + %a - %t + + + Radionomy + b-radiohits + http://listen.radionomy.com/b-radiohits.m3u + http://i.radionomy.com/Documents/Radio/201204171149596472.s60.jpg + Urban, Miscellaneous, Experimental + %a - %t + + + Radionomy + COULEUR K-WA + http://listen.radionomy.com/couleur-k-wa.m3u + http://i.radionomy.com/Documents/Radio/20110715163059-01771208-photo-cafe.s60.jpg + Pop, Hits 60's, Soundtracks, Experimental, Funk + %a - %t + + + Radionomy + e-franska + http://listen.radionomy.com/e-franska.m3u + http://i.radionomy.com/Documents/Radio/20100708144807-R-e-lingua2.s60.jpg + Hits FR, Educational, Baroque, Jazz, Latin + %a - %t + + + Radionomy + Kripalu Bhakti Radio + http://listen.radionomy.com/kripalu-bhakti-radio.m3u + http://i.radionomy.com/Documents/Radio/20110221223751-RMS_LOGO-Transparent.s60.jpg + Spiritual, Educational, Asian, Classic + %a - %t + + + Radionomy + La Dulce Presencia de Dios + http://listen.radionomy.com/la-dulce-presencia-de-dios.m3u + http://i.radionomy.com/Documents/Radio/201201280519206566.s60.jpg + Christian, Spiritual, Educational, Romantic, Children's-Family + %a - %t + + + Radionomy + MasFlamencoRadio + http://listen.radionomy.com/masflamencoradio.m3u + http://i.radionomy.com/Documents/Radio/20110407214237-Logotst3_copy.s60.jpg + Flamenco, Latin, World, Chill-out, Educational + %a - %t + + + Radionomy + Radio Barbouillots + http://listen.radionomy.com/radio-barbouillots.m3u + http://i.radionomy.com/Documents/Radio/201206041825329553.s60.jpg + Children's-Family, Hits FR, Educational, Soundtracks, Top Charts + %a - %t + + + Radionomy + Radiofonio + http://listen.radionomy.com/radiofonio.m3u + http://i.radionomy.com/Documents/Radio/201203262358431270.s60.jpg + Romantic, Easy Listening, Electronic, Pop, Educational + %a - %t + + + Radionomy + -RSN- + http://listen.radionomy.com/-rsn-.m3u + http://i.radionomy.com/Documents/Radio/20110926224942-AVATAR.s60.jpg + Educational, Rock, Hits, Rap, Top Charts + %a - %t + + + Radionomy + FRANCE80 + http://listen.radionomy.com/france80.m3u + http://i.radionomy.com/Documents/Radio/20080620180756-FRANCE80LOGO-OK.s60.jpg + Hits 80's, Pop Rock, Comedy + %a - %t + + + Radionomy + Fresh web + http://listen.radionomy.com/fresh-web.m3u + http://i.radionomy.com/Documents/Radio/20100416111832-FRESH_WEB_LOGO2_.s60.jpg + Hits 80's, Hits 90's, Comedy, Hits, Top Charts + %a - %t + + + Radionomy + ilovecinema + http://listen.radionomy.com/ilovecinema.m3u + http://i.radionomy.com/Documents/Radio/20110922111202-ilovecinematvlogo.s60.jpg + Soundtracks, Easy Listening, Symphony, Classic, Comedy + %a - %t + + + Radionomy + Burne FM + http://listen.radionomy.com/burne-fm.m3u + http://i.radionomy.com/Documents/Radio/201203101336316040.s60.jpg + Pop Rock, Top Charts, Hits FR, Oldies, Comedy + %a - %t + + + Radionomy + EscenologĆ­aRadio + http://listen.radionomy.com/escenologiaradio.m3u + http://i.radionomy.com/Documents/Radio/201206072034470884.s60.jpg + Ethnic Fusion, Opera, New Age, Soundtracks, Comedy + %a - %t + + + Radionomy + gboradio + http://listen.radionomy.com/gboradio.m3u + http://i.radionomy.com/Documents/Radio/201206102206481596.s60.jpg + Christian Rock, Christian, Comedy, Classic Rock, Hard Rock + %a - %t + + + Radionomy + Guayeber + http://listen.radionomy.com/guayeber.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio13.s60.jpg + Classic Rock, Pop Rock, Pop, Hits, Comedy + %a - %t + + + Radionomy + HabboFoot-Live + http://listen.radionomy.com/habbofoot-live.m3u + http://i.radionomy.com/Documents/Radio/201204200806291910.s60.jpg + Reggae, Hits, Comedy + %a - %t + + + Radionomy + HappyChristmasradio + http://listen.radionomy.com/happychristmasradio.m3u + http://i.radionomy.com/Documents/Radio/20101104160434-avantar_happychristmasradio.s60.jpg + Christmas, Classic Rock + %a - %t + + + Radionomy + Cosmic Christmas 2011 + http://listen.radionomy.com/cosmic-christmas-2011.m3u + http://i.radionomy.com/Documents/Radio/20110220154608-newcosmic.s60.jpg + Christmas, Spiritual, Christian, Pop Rock, Pop + %a - %t + + + Radionomy + DLRPRadio + http://listen.radionomy.com/dlrpradio.m3u + http://i.radionomy.com/Documents/Radio/201206111751026311.s60.jpg + Children's-Family, Christmas + %a - %t + + + Radionomy + FD RADIO NOEL CHRISTMAS RADIO + http://listen.radionomy.com/fd-radio-noel-christmas-radio.m3u + http://i.radionomy.com/Documents/Radio/20111026233315-logoFDnoel.s60.jpg + Christmas, Pop Rock, Oldies, Gospel, Classic + %a - %t + + + Radionomy + JPG REUNION + http://listen.radionomy.com/jpg-reunion.m3u + http://i.radionomy.com/Documents/Radio/201206041741322010.s60.jpg + Christian, Religious, Spiritual, Christmas, Lounge + %a - %t + + + Radionomy + Love Songs + http://listen.radionomy.com/love-songs.m3u + http://i.radionomy.com/Documents/Radio/20111026185517-Sans-titre-1.s60.jpg + Top Charts, Romantic, Christmas, Hits + %a - %t + + + Radionomy + Ministerio Jesucristo Dios + http://listen.radionomy.com/ministerio-jesucristo-dios.m3u + http://i.radionomy.com/Documents/Radio/201205020321136731.s60.jpg + Children's-Family, Christian, Christmas, Educational, Experimental + %a - %t + + + Radionomy + Nuevo Tiempo + http://listen.radionomy.com/nuevo-tiempo.m3u + http://i.radionomy.com/Documents/Radio/201204201403144707.s60.jpg + Christian, Romantic, Spiritual, Christmas, Religious + %a - %t + + + Radionomy + Radio Filazantsara - Bonne Nouvelle + http://listen.radionomy.com/radio-filazantsara---bonne-nouvelle.m3u + http://i.radionomy.com/Documents/Radio/20110922192412-RadioF1.s60.jpg + Christian, Religious, Spiritual, Gospel, Christmas + %a - %t + + + Radionomy + ShoutRound + http://listen.radionomy.com/shoutround.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio5.s60.jpg + Electro, Christmas, R'n'B, Rap, Hip-Hop + %a - %t + + + Radionomy + Chronicles Christian Radio + http://listen.radionomy.com/chronicles-christian-radio.m3u + http://i.radionomy.com/Documents/Radio/20110330234236-Logo_Template_-_Logo_72.s60.jpg + Christian, Gospel, Spiritual, Children's-Family, World + %a - %t + + + Radionomy + PMD Radio + http://listen.radionomy.com/pmd-radio.m3u + http://i.radionomy.com/Documents/Radio/20110405200308-Logo.s60.jpg + Hits 80's, Hits 90's, Soundtracks, Children's-Family + %a - %t + + + Radionomy + Radio Tango-Velours + http://listen.radionomy.com/radio-tango-velours.m3u + http://i.radionomy.com/Documents/Radio/20111230225615-PiedsCarres.s60.jpg + Tango + %a - %t + + + Radionomy + Strict Tempo Dance Music + http://listen.radionomy.com/strict-tempo-dance-music.m3u + http://i.radionomy.com/Documents/Radio/20091231164057-strict-tempo.s60.jpg + Oldies, Swing, Tango, Latin Dance, Bebop + %a - %t + + + Radionomy + la cheverisima + http://listen.radionomy.com/la-cheverisima.m3u + http://i.radionomy.com/Documents/Radio/20110605000306-500000001.s60.jpg + Mariachi, Kumbia, Reggaeton, Salsa, Tango + %a - %t + + + Radionomy + La radio del gato + http://listen.radionomy.com/la-radio-del-gato.m3u + http://i.radionomy.com/Documents/Radio/20101226105712-logo_gato_solo.s60.jpg + Tango, Folk, Pop Rock, World, Flamenco + %a - %t + + + Radionomy + 2x4gotan + http://listen.radionomy.com/2x4gotan.m3u + http://i.radionomy.com/Documents/Radio/20111216054130-9.s60.jpg + Tango, Tango, Tango, Classic Jazz, Romantic + %a - %t + + + Radionomy + Benno StereoMix + http://listen.radionomy.com/benno-stereomix.m3u + http://i.radionomy.com/Documents/Radio/20111004042656-ZZLOGO_BENNO.s60.jpg + Latin Pop, Oldies, Hits 80's, Tango, Romantic + %a - %t + + + Radionomy + CELESTE Y BLANCA + http://listen.radionomy.com/celeste-y-blanca.m3u + http://i.radionomy.com/Documents/Radio/201204141325137598.s60.jpg + Kumbia, Tango, Salsa, Folkloric, Pop Rock + %a - %t + + + Radionomy + fmstereo + http://listen.radionomy.com/fmstereo.m3u + http://i.radionomy.com/Documents/Radio/201205170614119244.s60.jpg + Classic, Tango, Folk, World, Oldies + %a - %t + + + Radionomy + RADIO FIESTA TROPICAL + http://listen.radionomy.com/radio-fiesta-tropical.m3u + http://i.radionomy.com/Documents/Radio/20111113164952-radiofiesta109.s60.jpg + Salsa, Kumbia, Merenge, Samba, Habanera + %a - %t + + + Radionomy + Radio Kah Liente + http://listen.radionomy.com/radio-kah-liente.m3u + http://i.radionomy.com/Documents/Radio/20110920214338-logo-kl(2).s60.jpg + Merenge, Reggaeton, Latin, Salsa, Samba + %a - %t + + + Radionomy + Trova Radio - El sentimiento hecho mĆŗsica + http://listen.radionomy.com/trova-radio---el-sentimiento-hecho-musica.m3u + http://i.radionomy.com/Documents/Radio/20111029081243-trova_radio.s60.jpg + Latin, Folkloric, Romantic, Latin Jazz, Samba + %a - %t + + + Radionomy + CC&D Brazil + http://listen.radionomy.com/ccd-brazil.m3u + http://i.radionomy.com/Documents/Radio/20110716114332-BRAZIL-P.s60.jpg + Brazilian, Samba, Latin Jazz, Latin Pop, Ambient + %a - %t + + + Radionomy + Kingdom Hits + http://listen.radionomy.com/kingdom-hits.m3u + http://i.radionomy.com/Documents/Radio/201202211821200062.s60.jpg + Salsa, Kumbia, Samba, Mariachi, Latin + %a - %t + + + Radionomy + NenedjMartinez + http://listen.radionomy.com/nenedjmartinez.m3u + http://i.radionomy.com/Documents/Radio/201203200037429190.s60.jpg + Reggae, Kumbia, House, Salsa, Samba + %a - %t + + + Radionomy + Planetcom radio + http://listen.radionomy.com/planetcom-radio.m3u + http://i.radionomy.com/Documents/Radio/201205291820223106.s60.jpg + Salsa, Reggaeton, Hip-Hop, Rap, Samba + %a - %t + + + Radionomy + quipus1 + http://listen.radionomy.com/quipus1.m3u + http://i.radionomy.com/Documents/Radio/201203012103328561.s60.jpg + Tango, Samba, Folk, Flamenco + %a - %t + + + Radionomy + bachata dominicana + http://listen.radionomy.com/bachata-dominicana.m3u + http://i.radionomy.com/Documents/Radio/20101008180425-LOGO.s60.jpg + Latin, Reggaeton, Merenge, Salsa + %a - %t + + + Radionomy + Diviernet + http://listen.radionomy.com/diviernet.m3u + http://i.radionomy.com/Documents/Radio/20110724183723-Diviernet_Radio.s60.jpg + Latin, Latin Pop, Latin Rock, Reggaeton, Salsa + %a - %t + + + Radionomy + El Portico + http://listen.radionomy.com/el-portico.m3u + http://i.radionomy.com/Documents/Radio/20110307172756-elportico.s60.jpg + Salsa, Merenge, Latin + %a - %t + + + Radionomy + GRooViN' SALSA con CLASS + http://listen.radionomy.com/groovin--salsa-con-class.m3u + http://i.radionomy.com/Documents/Radio/20100430040227-AAA_logo_radio.s60.jpg + Salsa, Habanera, Latin Jazz, Merenge, Top Charts + %a - %t + + + Radionomy + Latina 104.web + http://listen.radionomy.com/latina-104web.m3u + http://i.radionomy.com/Documents/Radio/20110814074309-LOGO__LATINA.s60.jpg + Latin Pop, Latin, Merenge, Reggaeton, Salsa + %a - %t + + + Radionomy + Radio Cubana + http://listen.radionomy.com/radio-cubana.m3u + http://i.radionomy.com/Documents/Radio/20110209021001-Radio-Cubana-Logotipo-web2.s60.jpg + Latin Rock, Latin Pop, Salsa, Latin Jazz, Habanera + %a - %t + + + Radionomy + Timba Para Siempre + http://listen.radionomy.com/timba-para-siempre.m3u + http://i.radionomy.com/Documents/Radio/20111007103755-TIMBA_PS_logo_1000.s60.jpg + Salsa, Reggaeton, Latin Jazz, Latin + %a - %t + + + Radionomy + colombia la nuestra + http://listen.radionomy.com/colombia-la-nuestra.m3u + http://i.radionomy.com/Documents/Radio/20100705170615-colombia.jpg8y.s60.jpg + Latin, Latin Pop, Latin Rock, Pop Rock, Salsa + %a - %t + + + Radionomy + RadioFuria.ucoz.com + http://listen.radionomy.com/radiofuriaucozcom.m3u + http://i.radionomy.com/Documents/Radio/201204101521244239.s60.jpg + House, Reggaeton, Top Charts, Electro, Techno + %a - %t + + + Radionomy + PAISA Mix + http://listen.radionomy.com/paisa-mix.m3u + http://i.radionomy.com/Documents/Radio/20110310182638-paisamixxxxxxxxxx.s60.jpg + Dancehall, Reggaeton, Electronica + %a - %t + + + Radionomy + Virtual-Musik Radio + http://listen.radionomy.com/virtual-musik-radio.m3u + http://i.radionomy.com/Documents/Radio/20110912213135-logo.s60.jpg + Reggaeton, Hip-Hop, Latin, R'n'B, Urban + %a - %t + + + Radionomy + chechefm + http://listen.radionomy.com/chechefm.m3u + http://i.radionomy.com/Documents/Radio/20110615183118-logoradio.s60.jpg + Hits, Reggaeton, Hip-Hop, R'n'B, Rap + %a - %t + + + Radionomy + LA MERENGUERA DIGITAL + http://listen.radionomy.com/la-merenguera-digital.m3u + http://i.radionomy.com/Documents/Radio/20110329194220-transp.s60.jpg + Merenge + %a - %t + + + Radionomy + colombiacrossover + http://listen.radionomy.com/colombiacrossover.m3u + http://i.radionomy.com/Documents/Radio/201203200245014231.s60.jpg + Salsa, Latin, Merenge, Kumbia + %a - %t + + + Radionomy + FLow Cartagena Radio + http://listen.radionomy.com/flow-cartagena-radio.m3u + http://i.radionomy.com/Documents/Radio/201203211501558204.s60.jpg + Dancehall, Reggae, Reggaeton, Merenge, Hip-Hop + %a - %t + + + Radionomy + Haze.FMLatin + http://listen.radionomy.com/hazefmlatin.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio15.s60.jpg + Reggaeton, Salsa, Merenge + %a - %t + + + Radionomy + La roka estaciĆ³n + http://listen.radionomy.com/la-roka-estacion.m3u + http://i.radionomy.com/Documents/Radio/20120104060123-Estacion3.s60.jpg + Salsa, Merenge, Latin Pop, Latin Dance, Reggaeton + %a - %t + + + Radionomy + La-Guagua-Musical + http://listen.radionomy.com/la-guagua-musical.m3u + http://i.radionomy.com/Documents/Radio/201205050736419958.s60.jpg + Merenge, Reggaeton, Salsa, Latin Rock + %a - %t + + + Radionomy + La Grupera Radio + http://listen.radionomy.com/la-grupera-radio.m3u + http://i.radionomy.com/Documents/Radio/20101116163317-GRUPERA.ai.s60.jpg + Mariachi, Latin, World + %a - %t + + + Radionomy + A Toda Voz Web + http://listen.radionomy.com/a-toda-voz-web.m3u + http://i.radionomy.com/Documents/Radio/201203292325160743.s60.jpg + Dance-Clubbing, Latin, Mariachi, Reggaeton, Latin Pop + %a - %t + + + Radionomy + ABC ESPAƑOL + http://listen.radionomy.com/abc-espanol.m3u + http://i.radionomy.com/Documents/Radio/20111018181344-2171656-micr-fono-profesional[1].s60.jpg + Mariachi, Latin Pop, Salsa, Hits 60's, Merenge + %a - %t + + + Radionomy + ACRI Adoradores de Cristo Radio Internacional + http://listen.radionomy.com/acri-adoradores-de-cristo-radio-internacional.m3u + http://i.radionomy.com/Documents/Radio/201203141632108441.s60.jpg + Blues, Mariachi, Merenge, Salsa, Kumbia + %a - %t + + + Radionomy + amigos california tuxpanjoven + http://listen.radionomy.com/amigos-california-tuxpanjoven.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio7.s60.jpg + Classic, Latin Pop, Mariachi, Latin Rock, Latin + %a - %t + + + Radionomy + Casa Suchil + http://listen.radionomy.com/casa-suchil.m3u + http://i.radionomy.com/Documents/Radio/20111120191123-TemploRadio.s60.jpg + Latin, Latin Pop, Latin Rock, Mariachi, Kumbia + %a - %t + + + Radionomy + cristomicina + http://listen.radionomy.com/cristomicina.m3u + http://i.radionomy.com/Documents/Radio/201205102015244283.s60.jpg + Mariachi, Kumbia, Latin, Reggaeton, Merenge + %a - %t + + + Radionomy + Oldies Mexico + http://listen.radionomy.com/oldies-mexico.m3u + http://i.radionomy.com/Documents/Radio/20110706225926-images.s60.jpg + Oldies, Latin Pop, Pop, Rock, Latin Rock + %a - %t + + + Radionomy + pop espaƱol + http://listen.radionomy.com/pop-espanol.m3u + http://i.radionomy.com/Documents/Radio/20091215090817-icon.s60.jpg + Latin, Latin Rock, Latin Pop, Latin Dance, Latin + %a - %t + + + Radionomy + Aurora de Siempre + http://listen.radionomy.com/aurora-de-siempre.m3u + http://i.radionomy.com/Documents/Radio/201205170338224037.s60.jpg + Latin Pop, Classic, Habanera, Latin, Latin Rock + %a - %t + + + Radionomy + Esencia EƱe + http://listen.radionomy.com/esencia-ene.m3u + http://i.radionomy.com/Documents/Radio/20110920162017-Erede%c3%b1e.s60.jpg + Latin, Pop Rock, Latin Rock, Latin Dance, Salsa + %a - %t + + + Radionomy + InolvidableDigital + http://listen.radionomy.com/inolvidabledigital.m3u + http://i.radionomy.com/Documents/Radio/20120108053308-InolvidableDigitalLogo_B.s60.jpg + Latin Pop, Latin Rock, Salsa, Hits 80's, Latin + %a - %t + + + Radionomy + Alpenradio Sunny + http://listen.radionomy.com/alpenradio-sunny.m3u + http://i.radionomy.com/Documents/Radio/201204031354570205.s60.jpg + Pop, Latin Pop, Latin Dance, Latin, Hits + %a - %t + + + Radionomy + SmoothMusicRadio + http://listen.radionomy.com/smoothmusicradio.m3u + http://i.radionomy.com/Documents/Radio/20110416151858-Logo_V2_100x100.s60.jpg + Chill-out, Easy Listening, Lounge, Jazz, Latin Jazz + %a - %t + + + Radionomy + BeeJazz + http://listen.radionomy.com/beejazz.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio10.s60.jpg + Blues, Jazz, Soul, Latin Jazz, Lounge + %a - %t + + + Radionomy + K-JAZZY + http://listen.radionomy.com/k-jazzy.m3u + http://i.radionomy.com/Documents/Radio/20100808024238-K-JAZZY150x150.s60.jpg + Jazz, Classic Jazz, Swing, Latin Jazz, Downtempo + %a - %t + + + Radionomy + Gaspo + http://listen.radionomy.com/gaspo.m3u + http://i.radionomy.com/Documents/Radio/20100821214907-radio_logo_sito.s60.jpg + Latin Jazz, Latin Jazz, Salsa, Salsa, Reggaeton + %a - %t + + + Radionomy + La Salsa Vive + http://listen.radionomy.com/la-salsa-vive.m3u + http://i.radionomy.com/Documents/Radio/20110721163428-lasalsavive_webradio_logo.s60.jpg + Salsa, Latin, Latin Jazz + %a - %t + + + Radionomy + Colombia rumbera + http://listen.radionomy.com/colombia-rumbera.m3u + http://i.radionomy.com/Documents/Radio/20120107181824-Tropical-Sunset-02.s60.jpg + Salsa, Kumbia, Latin, Latin Dance + %a - %t + + + Radionomy + Dance90 + http://listen.radionomy.com/dance90.m3u + http://i.radionomy.com/Documents/Radio/20110804024940-dance90.s60.jpg + Electronica, Hits 90's, Techno, Latin Dance + %a - %t + + + Radionomy + el mero mero radio + http://listen.radionomy.com/el-mero-mero-radio.m3u + http://i.radionomy.com/Documents/Radio/20110501054000-el_mero_mero_radio_TradeMark1.s60.jpg + Latin, Hip-Hop, Reggaeton, Latin Dance, R'n'B + %a - %t + + + Radionomy + estudio stereo + http://listen.radionomy.com/estudio-stereo.m3u + http://i.radionomy.com/Documents/Radio/201205191606302919.s60.jpg + Latin, Hits 60's, Latin Dance + %a - %t + + + Radionomy + FrĆ©quence Clubing + http://listen.radionomy.com/frequence-clubing.m3u + http://i.radionomy.com/Documents/Radio/201202291131420672.s60.jpg + Electro, Dance-Clubbing, House, Hits, Latin Dance + %a - %t + + + Radionomy + MUSICVIP + http://listen.radionomy.com/musicvip.m3u + http://i.radionomy.com/Documents/Radio/20110627225303-musicvipgif.s60.jpg + Electronica, Kumbia, Reggaeton, Pop, Latin Dance + %a - %t + + + Radionomy + nachoteca + http://listen.radionomy.com/nachoteca.m3u + http://i.radionomy.com/Documents/Radio/20110707173236-nachoteca_.s60.jpg + Kumbia, Merenge, Latin, Salsa, Latin Dance + %a - %t + + + Radionomy + pedazodeacordeon.com + http://listen.radionomy.com/pedazodeacordeoncom.m3u + http://i.radionomy.com/Documents/Radio/201205140456400641.s60.jpg + Latin, Kumbia, Salsa, Merenge + %a - %t + + + Radionomy + Son Vallenato + http://listen.radionomy.com/son-vallenato.m3u + http://i.radionomy.com/Documents/Radio/201203080156482589.s60.jpg + Romantic, Latin, Hits, Kumbia, Classic + %a - %t + + + Radionomy + 350radio_larevanchadeldiablo + http://listen.radionomy.com/350radio-larevanchadeldiablo.m3u + http://i.radionomy.com/Documents/Radio/201205190415113490.s60.jpg + Kumbia, Kumbia, Kumbia, Kumbia, Kumbia + %a - %t + + + Radionomy + Salsa Vexin Radio + http://listen.radionomy.com/salsa-vexin-radio.m3u + http://i.radionomy.com/Documents/Radio/20110719224458-salsavexin_rvblogo_200x200.s60.jpg + Salsa, Merenge, Reggaeton, Latin Jazz, Habanera + %a - %t + + + Radionomy + Bucarason + http://listen.radionomy.com/bucarason.m3u + http://i.radionomy.com/Documents/Radio/201203020128301916.s60.jpg + Salsa, Latin, Kumbia, Merenge, Habanera + %a - %t + + + Radionomy + CALI ES LO MAXIMO + http://listen.radionomy.com/cali-es-lo-maximo.m3u + http://i.radionomy.com/Documents/Radio/201206060940587852.s60.jpg + Salsa, Latin Jazz, Habanera, Merenge, Latin Dance + %a - %t + + + Radionomy + El Bonche Latino + http://listen.radionomy.com/el-bonche-latino.m3u + http://i.radionomy.com/Documents/Radio/20111022033953-header_container2.s60.jpg + Salsa, Merenge, Habanera, Reggaeton, Latin + %a - %t + + + Radionomy + HabanaDanzĆ³n + http://listen.radionomy.com/habanadanzon.m3u + http://i.radionomy.com/Documents/Radio/20110711192504-Habana.s60.jpg + Habanera, World, Symphony, Latin Jazz, Folkloric + %a - %t + + + Radionomy + I Love Napoli + http://listen.radionomy.com/i-love-napoli.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio13.s60.jpg + Hits, Death Metal, Habanera, Black Metal, Gothic Metal + %a - %t + + + Radionomy + Acoustic Guitar + http://listen.radionomy.com/acoustic-guitar.m3u + http://i.radionomy.com/Documents/Radio/20111231091428-logo_radio_avatar_wmr_avec_guitare.s60.jpg + Country, Classic Jazz, Flamenco, Country Blues, Acoustic Blues + %a - %t + + + Radionomy + boleroradio + http://listen.radionomy.com/boleroradio.m3u + http://i.radionomy.com/Documents/Radio/20110331113050-radio_2.s60.jpg + Romantic, Latin, Opera, Flamenco, Oldies + %a - %t + + + Radionomy + RADIO LA TRIBU + http://listen.radionomy.com/radio-la-tribu.m3u + http://i.radionomy.com/Documents/Radio/201205101856296589.s60.jpg + Electronica, Pop, Techno, Flamenco, Latin Dance + %a - %t + + + Radionomy + RADIOEDEMMM + http://listen.radionomy.com/radioedemmm.m3u + http://i.radionomy.com/Documents/Radio/20111011210448-RADIOEDEMLOGO.s60.jpg + Pop Rock, Top Charts, Flamenco, Latin Pop, Salsa + %a - %t + + + Radionomy + 2Hermanas + http://listen.radionomy.com/2hermanas.m3u + http://i.radionomy.com/Documents/Radio/201204270949012745.s60.jpg + Flamenco, Latin Pop, Latin Rock, Latin Dance, Salsa + %a - %t + + + Radionomy + Canal Flamenco Radio + http://listen.radionomy.com/canalflamencoradio.m3u + http://i.radionomy.com/Documents/Radio/397010BF-073B-B391-991C-9E933C9B4601.s60.jpg + Folkloric, World, Flamenco + %a - %t + + + Radionomy + DELACRUZNOIA RADIO + http://listen.radionomy.com/delacruznoia-radio.m3u + http://i.radionomy.com/Documents/Radio/20110715120836-Delacruznoia_Radio.s60.jpg + Hits, Latin, Flamenco, Merenge, Electronica + %a - %t + + + Radionomy + SLOW JAM + http://listen.radionomy.com/slow-jam.m3u + http://i.radionomy.com/Documents/Radio/20100711092726-SLOW_JAM.s60.jpg + Urban, New Soul, Soul, R'n'B, Funk + %a - %t + + + Radionomy + A-RnB-FM-WEB1 + http://listen.radionomy.com/a-rnb-fm-web1.m3u + http://i.radionomy.com/Documents/Radio/20111019081726-A-RnB_FM_WEB_LOGO_NEW_2.s60.jpg + R'n'B, Rap, Funk, Disco, Urban + %a - %t + + + Radionomy + One love Hip Hop Radio + http://listen.radionomy.com/one-love-hip-hop-radio.m3u + http://i.radionomy.com/Documents/Radio/20120107001021-One_Love_Hip_Hop.s60.jpg + Hip-Hop, Dancehall, Rap, R'n'B, Urban + %a - %t + + + Radionomy + A2R Rap US + http://listen.radionomy.com/a2r-rap-us.m3u + http://i.radionomy.com/Documents/Radio/201203141653035724.s60.jpg + Rap, Freestyle, Gangsta Rap, Urban, R'n'B + %a - %t + + + Radionomy + A2R Reggae + http://listen.radionomy.com/a2r-reggae.m3u + http://i.radionomy.com/Documents/Radio/20111219104728-reggae_wallpaper_splatter_by_vodk.s60.jpg + Reggae, Dub, Urban, Pop-Reggae, Ragga + %a - %t + + + Radionomy + A2R Rock + http://listen.radionomy.com/a2r-rock.m3u + http://i.radionomy.com/Documents/Radio/20111212215208-blue-rock-roll-design.s60.jpg + Industrial Rock, Garage Rock, New Wave, Rock, Urban + %a - %t + + + Radionomy + Laid Back Radio + http://listen.radionomy.com/laid-back-radio.m3u + http://i.radionomy.com/Documents/Radio/20080430111729-laid_back_400.s60.jpg + Urban, Hip-Hop, Jazz, Soul, Funk + %a - %t + + + Radionomy + 2000s RnB + http://listen.radionomy.com/2000s-rnb.m3u + http://i.radionomy.com/Documents/Radio/20091026213941-shut_up_and_drive.s60.jpg + R'n'B, New Soul, Rap, Hip-Hop, Urban + %a - %t + + + Radionomy + AAA SOUL + http://listen.radionomy.com/aaa-soul.m3u + http://i.radionomy.com/Documents/Radio/20111031232728-Soul-logo-610AECCC48-seeklogo.com.s60.jpg + Lounge, Soul, New Soul, Gospel, Rythm'n'Blues + %a - %t + + + Radionomy + Hit's My Music Zen + http://listen.radionomy.com/hit-s-my-music-zen.m3u + http://i.radionomy.com/Documents/Radio/20100502092845-Zenn_grand.s60.jpg + Lounge, Ambient, Downtempo, Easy Listening, Soul + %a - %t + + + Radionomy + AA Funk + http://listen.radionomy.com/aa-funk.m3u + http://i.radionomy.com/Documents/Radio/20111205104814-LOGO_AA_FUNK.s60.jpg + Disco, Funk, Hip-Hop, Motown, Soul + %a - %t + + + Radionomy + AFRODIZIACRADIO + http://listen.radionomy.com/afrodiziacradio.m3u + http://i.radionomy.com/Documents/Radio/20101012001856-AFRO_RADIO_LOGO_Carr%c3%a9_2.s60.jpg + R'n'B, New Soul, Hip-Hop, Soul, Urban + %a - %t + + + Radionomy + BlakMusicFirst + http://listen.radionomy.com/blakmusicfirst.m3u + http://i.radionomy.com/Documents/Radio/20101030234353-bmf_radio.s60.jpg + R'n'B, Hip-Hop, Soul, Hits USA, Pop + %a - %t + + + Radionomy + BMC + http://listen.radionomy.com/bmc.m3u + http://i.radionomy.com/Documents/Radio/20111003183045-logo-bmc-radio-high-resolution.s60.jpg + Soul, Funk, Motown, Disco, Rap + %a - %t + + + Radionomy + boozik jazzy + http://listen.radionomy.com/boozik-jazzy.m3u + http://i.radionomy.com/Documents/Radio/20110215194408-logo1finity.s60.jpg + Jazz, Classic Jazz, Blues, Urban, Soul + %a - %t + + + Radionomy + Haze.FMRNB + http://listen.radionomy.com/hazefmrnb.m3u + http://i.radionomy.com/Documents/Radio/201202221758216087.s60.jpg + R'n'B, Rythm'n'Blues, Soul, Urban + %a - %t + + + Radionomy + Inner Soul + http://listen.radionomy.com/inner-soul.m3u + http://i.radionomy.com/Documents/Radio/20100927232850-450_Inner_4.s60.jpg + Soul, New Soul, Motown, R'n'B, Rythm'n'Blues + %a - %t + + + Radionomy + rnb-music-station + http://listen.radionomy.com/rnb-music-station.m3u + http://i.radionomy.com/Documents/Radio/20110414232350-Logo_Twitter.s60.jpg + Rythm'n'Blues, Motown, Blues, Oldies, Soul + %a - %t + + + Radionomy + Cocktelera Blues + http://listen.radionomy.com/cocktelera-blues.m3u + http://i.radionomy.com/Documents/Radio/20111212222136-ROCKBLUES_376x497_495x495.s60.jpg + Blues, Rythm'n'Blues, Electric Blues, Rock, Southern Rock + %a - %t + + + Radionomy + Jukebox.66 + http://listen.radionomy.com/jukebox66.m3u + http://i.radionomy.com/Documents/Radio/20111123171337-20110116200937-les_blues_brothers_1.s60.jpg + Rock'n'Roll, Rythm'n'Blues, Rockabilly, Oldies, Country Blues + %a - %t + + + Radionomy + lux + http://listen.radionomy.com/lux.m3u + http://i.radionomy.com/Documents/Radio/20111126150924-brown_t_shirt.s60.jpg + Rock'n'Roll, Blues, Spiritual, Rythm'n'Blues + %a - %t + + + Radionomy + rockSatelite(((MadridONE))) + http://listen.radionomy.com/rocksatelitemadridone.m3u + http://i.radionomy.com/Documents/Radio/20110315120541-logo_RS_gralok.s60.jpg + Pop Rock, Oldies, Rythm'n'Blues, Hits 80's, Hits 90's + %a - %t + + + Radionomy + 2SOUND + http://listen.radionomy.com/2sound.m3u + http://i.radionomy.com/Documents/Radio/201205262326235642.s60.jpg + Hip-Hop, World, Soul, Rythm'n'Blues, Reggae + %a - %t + + + Radionomy + BCom Radio + http://listen.radionomy.com/bcom-radio.m3u + http://i.radionomy.com/Documents/Radio/201204221524115736.s60.jpg + Hits, Metal, Rythm'n'Blues, Hip-Hop, Dance-Clubbing + %a - %t + + + Radionomy + Classic Rap + http://listen.radionomy.com/classic-rap.m3u + http://i.radionomy.com/Documents/Radio/20110108165201-Logo_Classic_Rap_Black_And_White.s60.jpg + Hip-Hop, Rap, Gangsta Rap + %a - %t + + + Radionomy + A'1 Fanazik Urban + http://listen.radionomy.com/a-1-fanazik-urban.m3u + http://i.radionomy.com/Documents/Radio/20111222204934-logo_fanazik_urban.s60.jpg + Rap, R'n'B, Hip-Hop, Ragga, Urban + %a - %t + + + Radionomy + ABCD BeyoncĆ© + http://listen.radionomy.com/abcd-beyonce.m3u + http://i.radionomy.com/Documents/Radio/20110906120216-ABCD_Beyonc%c3%a9_Logo.s60.jpg + R'n'B, Hits, Top Charts, Pop + %a - %t + + + Radionomy + ABCD Hits + http://listen.radionomy.com/abcd-hits.m3u + http://i.radionomy.com/Documents/Radio/20111017094944-ABCD_Hits_Logo.s60.jpg + Hits, Top Charts, Pop, R'n'B, Dance-Clubbing + %a - %t + + + Radionomy + ABCD Rihanna + http://listen.radionomy.com/abcd-rihanna.m3u + http://i.radionomy.com/Documents/Radio/20110829134117-ABCD_Rihanna_Logo.s60.jpg + Hits, Top Charts, Pop, R'n'B, Dance-Clubbing + %a - %t + + + Radionomy + Air France + http://listen.radionomy.com/air-france.m3u + http://i.radionomy.com/Documents/Radio/201206051717413928.s60.jpg + Hits FR, Oldies, Pop, Top Charts, New Soul + %a - %t + + + Radionomy + AmysFM SpiritOfSoul + http://listen.radionomy.com/amysfm-spiritofsoul.m3u + http://i.radionomy.com/Documents/Radio/201205251812580585.s60.jpg + Soul, Motown, R'n'B, Funk, New Soul + %a - %t + + + Radionomy + FunkyBand Radio + http://listen.radionomy.com/funkyband-radio.m3u + http://i.radionomy.com/Documents/Radio/201204151440180185.s60.jpg + Funk, Disco, Soul, Motown, New Soul + %a - %t + + + Radionomy + Homegrown Radio + http://listen.radionomy.com/homegrown-radio.m3u + http://i.radionomy.com/Documents/Radio/20100511182002-logo.s60.jpg + Pop Rock, Hits, New Soul, Britpop, Easy Listening + %a - %t + + + Radionomy + MjTunes + http://listen.radionomy.com/mjtunes.m3u + http://i.radionomy.com/Documents/Radio/20111123012820-mjtunesradio-widget.s60.jpg + Pop Rock, Top Charts, Funk, Disco, Motown + %a - %t + + + Radionomy + ABCD Michael Jackson + http://listen.radionomy.com/abcd-michael-jackson.m3u + http://i.radionomy.com/Documents/Radio/20110711130034-ABCD_Michael_Jackson_Logo.s60.jpg + Hits, Pop, Motown, Top Charts, Pop Rock + %a - %t + + + Radionomy + A-DISCO-FM-WEB + http://listen.radionomy.com/a-disco-fm-web.m3u + http://i.radionomy.com/Documents/Radio/20111121173611-DISCO_FM_WEB2.s60.jpg + Disco, Funk, Motown, R'n'B, Urban + %a - %t + + + Radionomy + GOLDEN SIXTIES SEVENTIES EIGHTIES RADIO + http://listen.radionomy.com/golden-sixties-seventies-eighties-radio.m3u + http://i.radionomy.com/Documents/Radio/20100108170159-snoopy.s60.jpg + Reggae, Disco, Motown, Hits, Top Charts + %a - %t + + + Radionomy + INTERNATIONAL RARE GROOVE + http://listen.radionomy.com/international-rare-groove.m3u + http://i.radionomy.com/Documents/Radio/20080813130654-logo_irg.s60.jpg + Funk, Soul, Motown, World, Roots Reggae + %a - %t + + + Radionomy + Absolute VIBEZ Radio + http://listen.radionomy.com/absolute-vibez-radio.m3u + http://i.radionomy.com/Documents/Radio/201203251418475280.s60.jpg + Hip-Hop, R'n'B, Urban, Hits USA, Top Charts + %a - %t + + + Radionomy + A-RAP-FM-WEB + http://listen.radionomy.com/a-rap-fm-web.m3u + http://i.radionomy.com/Documents/Radio/20111028154101-A_RAP_FM_WEB_.s60.jpg + Rap, Gangsta Rap, R'n'B, Urban, Hip-Hop + %a - %t + + + Radionomy + Haze.FMGospel + http://listen.radionomy.com/hazefmgospel.m3u + http://i.radionomy.com/Documents/Radio/201202221758509316.s60.jpg + Gospel + %a - %t + + + Radionomy + Adventista Max Trummer + http://listen.radionomy.com/adventista-max-trummer.m3u + http://i.radionomy.com/Documents/Radio/201204101726385900.s60.jpg + Christian, Gospel, Educational, Children's-Family, Religious + %a - %t + + + Radionomy + OldSchool + http://listen.radionomy.com/oldschool.m3u + http://i.radionomy.com/Documents/Radio/20100611173338-old-school.s60.jpg + R'n'B, Funk, Hits 90's, Gangsta Rap, Hip-Hop + %a - %t + + + Radionomy + academy + http://listen.radionomy.com/academy.m3u + http://i.radionomy.com/Documents/Radio/20110704134401-ACAphotocollage2.s60.jpg + Rap, Hip-Hop, Gangsta Rap + %a - %t + + + Radionomy + Espryradio + http://listen.radionomy.com/espryradio.m3u + http://i.radionomy.com/Documents/Radio/20101110131537-espryradio.s60.jpg + Rap, Hip-Hop, Freestyle, Urban, Gangsta Rap + %a - %t + + + Radionomy + HollandSmalls + http://listen.radionomy.com/hollandsmalls.m3u + http://i.radionomy.com/Documents/Radio/201204111143315613.s60.jpg + Hip-Hop, Gangsta Rap, R'n'B, Rap, Soul + %a - %t + + + Radionomy + POW RADIO + http://listen.radionomy.com/pow-radio.m3u + http://i.radionomy.com/Documents/Radio/201204072047079534.s60.jpg + Hip-Hop, Reggae, Gangsta Rap, Dancehall, Dirty South + %a - %t + + + Radionomy + Siempre Hip Hop + http://listen.radionomy.com/siempre-hip-hop.m3u + http://i.radionomy.com/Documents/Radio/20110919022622-Sin_t%c3%adtulo-1.s60.jpg + Hip-Hop, R'n'B, Gangsta Rap, Rap + %a - %t + + + Radionomy + HOT 97 CLASSIC + http://listen.radionomy.com/hot-97-classic.m3u + http://i.radionomy.com/Documents/Radio/20100902003843-HOT_97_FM.s60.jpg + Freestyle, Dance-Clubbing, Hits USA, Hits 90's, Hits 80's + %a - %t + + + Radionomy + TFC Radio + http://listen.radionomy.com/tfc-radio.m3u + http://i.radionomy.com/Documents/Radio/20100220143733-logo_tfc_radioGIF.s60.jpg + Hip-Hop, Rap, Freestyle, Rap, Hip-Hop + %a - %t + + + Radionomy + 4puntozcrew + http://listen.radionomy.com/4puntozcrew.m3u + http://i.radionomy.com/Documents/Radio/201201181854233723.s60.jpg + Hip-Hop, Rap, Reggae, Freestyle, R'n'B + %a - %t + + + Radionomy + 5TimesS + http://listen.radionomy.com/5timess.m3u + http://i.radionomy.com/Documents/Radio/201205051145562314.s60.jpg + Hip-Hop, Freestyle + %a - %t + + + Radionomy + ajtremix + http://listen.radionomy.com/ajtremix.m3u + http://i.radionomy.com/Documents/Radio/201205170111040488.s60.jpg + Dub, Freestyle, Jungle-Drum'n'bass, Dubstep, Electro + %a - %t + + + Radionomy + an0h4ck3ur_Radio_Officielle + http://listen.radionomy.com/an0h4ck3ur-radio-officielle.m3u + http://i.radionomy.com/Documents/Radio/201205051626554712.s60.jpg + Freestyle, Rap, Hip-Hop, Dub + %a - %t + + + Radionomy + BbBeatz + http://listen.radionomy.com/bbbeatz.m3u + http://i.radionomy.com/Documents/Radio/20101219200841-Afb006.s60.jpg + Hip-Hop, Rap, Funk, Freestyle + %a - %t + + + Radionomy + BestSongsRadio + http://listen.radionomy.com/bestsongsradio.m3u + http://i.radionomy.com/Documents/Radio/201204211901514474.s60.jpg + Hip-Hop, Pop, Freestyle, R'n'B, Rap + %a - %t + + + Radionomy + Dubsideradio + http://listen.radionomy.com/dubsideradio.m3u + http://i.radionomy.com/Documents/Radio/20110923232446-final2.s60.jpg + Reggae, Roots Reggae, Dubstep, Electro, Dub + %a - %t + + + Radionomy + dubstepsideradio + http://listen.radionomy.com/dubstepsideradio.m3u + http://i.radionomy.com/Documents/Radio/20110923232537-final3.s60.jpg + Dubstep, Jungle-Drum'n'bass, Dub, Electronic, Dub + %a - %t + + + Radionomy + SUD in DUB + http://listen.radionomy.com/sud-in-dub.m3u + http://i.radionomy.com/Documents/Radio/201201231143530498.s60.jpg + Dub, Reggae, Roots Reggae + %a - %t + + + Radionomy + CloudBing Radio + http://listen.radionomy.com/cloudbing-radio.m3u + http://i.radionomy.com/Documents/Radio/201204130410371910.s60.jpg + Urban, Pop, Top Charts, Dub + %a - %t + + + Radionomy + DMO Radio + http://listen.radionomy.com/dmo-radio.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio10.s60.jpg + Freestyle, Dub + %a - %t + + + Radionomy + FeelfmBE + http://listen.radionomy.com/feelfmbe.m3u + http://i.radionomy.com/Documents/Radio/20111106111322-Frontkopie.s60.jpg + Pop, Hits, Disco, Dance Rock, Dub + %a - %t + + + Radionomy + FLaTRadio + http://listen.radionomy.com/flatradio.m3u + http://i.radionomy.com/Documents/Radio/20110623194007-Le-FLaT_by_Cha.s60.jpg + House, Electro, Dub, Hip-Hop, Lounge + %a - %t + + + Radionomy + FM3Rap + http://listen.radionomy.com/fm3rap.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio2.s60.jpg + Hip-Hop, Rap, R'n'B, Dub, Freestyle + %a - %t + + + Radionomy + A.I.R. Radio Freestyle + http://listen.radionomy.com/air-radio-freestyle.m3u + http://i.radionomy.com/Documents/Radio/20111126011048-televes-t1065-iso.s60.jpg + Hits 80's, Hits 90's, Disco, Dance-Clubbing, Pop + %a - %t + + + Radionomy + RJM RnB + http://listen.radionomy.com/rjm-rnb.m3u + http://i.radionomy.com/Documents/Radio/20111229142324-RnB-ecriture-200x200.s60.jpg + R'n'B, Hip-Hop, Urban, Hits 90's, Dirty South + %a - %t + + + Radionomy + chillectro beats + http://listen.radionomy.com/chillectro-beats.m3u + http://i.radionomy.com/Documents/Radio/201201271250255286.s60.jpg + R'n'B, Hip-Hop, Rap, Dirty South, Soul + %a - %t + + + Radionomy + Haze.FMBeats + http://listen.radionomy.com/hazefmbeats.m3u + http://i.radionomy.com/Documents/Radio/201202221758356994.s60.jpg + Hip-Hop, Urban, Rap, Dirty South, R'n'B + %a - %t + + + Radionomy + Haze.FMExplicit + http://listen.radionomy.com/hazefmexplicit.m3u + http://i.radionomy.com/Documents/Radio/201205101740025448.s60.jpg + Hip-Hop, R'n'B, Urban, Dirty South + %a - %t + + + Radionomy + HazeFMclean + http://listen.radionomy.com/hazefmclean.m3u + http://i.radionomy.com/Documents/Radio/201202221759117950.s60.jpg + Hip-Hop, R'n'B, Dirty South, Soul, Reggae + %a - %t + + + Radionomy + ilovehaze + http://listen.radionomy.com/ilovehaze.m3u + http://i.radionomy.com/Documents/Radio/201202221759243025.s60.jpg + Urban, Hip-Hop, Rap, Urban, Dirty South + %a - %t + + + Radionomy + Beatz FM Online + http://listen.radionomy.com/beatz-fm-online.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio9.s60.jpg + Hip-Hop, Rap, Gangsta Rap, Dirty South, Urban + %a - %t + + + Radionomy + FunnnRadio + http://listen.radionomy.com/funnnradio.m3u + http://i.radionomy.com/Documents/Radio/201201122239356195.s60.jpg + Freestyle, Dirty South, Electro, Electronic, Hits + %a - %t + + + Radionomy + Gantonradio + http://listen.radionomy.com/gantonradio.m3u + http://i.radionomy.com/Documents/Radio/201205032155429253.s60.jpg + Dirty South, Disco, Freestyle + %a - %t + + + Radionomy + deepGroove Radio 2 + http://listen.radionomy.com/deepgroove-radio-2.m3u + http://i.radionomy.com/Documents/Radio/20110220120535-flashplayerbg.s60.jpg + House, Electronica, UK Garage(UKG), Dance-Clubbing, Electronic + %a - %t + + + Radionomy + B4 Station CLUBBING 100% DEEP HOUSE + http://listen.radionomy.com/b4-station-clubbing-100-deep-house.m3u + http://i.radionomy.com/Documents/Radio/20110617095443-200.s60.jpg + UK Garage(UKG), House, Electro, Dance-Clubbing, 2-step + %a - %t + + + Radionomy + B4 Station CLUBBING 100% Hits + http://listen.radionomy.com/b4-station-clubbing-100-hits.m3u + http://i.radionomy.com/Documents/Radio/20110617095237-200.s60.jpg + Dance-Clubbing, UK Garage(UKG), Hits 90's, Electro, Goa Trance + %a - %t + + + Radionomy + ClubCardRadio + http://listen.radionomy.com/clubcardradio.m3u + http://i.radionomy.com/Documents/Radio/20100818232735-clubcardbutton.s60.jpg + Dance-Clubbing, House, Hardcore-Hard Dance, Electronica, UK Garage(UKG) + %a - %t + + + Radionomy + Garagemania + http://listen.radionomy.com/garagemania.m3u + http://i.radionomy.com/Documents/Radio/201202182318429878.s60.jpg + House, Electro, UK Garage(UKG), Electronica + %a - %t + + + Radionomy + Ibiza Frenchy People Radio + http://listen.radionomy.com/ibiza-frenchy-people-radio.m3u + http://i.radionomy.com/Documents/Radio/20100626141238-333.s60.jpg + Electro, House, Techno, UK Garage(UKG), Minimal + %a - %t + + + Radionomy + RJM Dance + http://listen.radionomy.com/rjm-dance.m3u + http://i.radionomy.com/Documents/Radio/201201161541219392.s60.jpg + House, Dance-Clubbing, Disco, Electronica, UK Garage(UKG) + %a - %t + + + Radionomy + deepGrooveRadio.com + http://listen.radionomy.com/deepgrooveradiocom.m3u + http://i.radionomy.com/Documents/Radio/201204261245291289.s60.jpg + Dance-Clubbing, Electro, House, UK Garage(UKG), Lounge + %a - %t + + + Radionomy + MejorElectro + http://listen.radionomy.com/mejorelectro.m3u + http://i.radionomy.com/Documents/Radio/201205200512215628.s60.jpg + Dubstep, Breakbeat, Minimal, UK Garage(UKG), Electronic + %a - %t + + + Radionomy + MX Groove + http://listen.radionomy.com/mx-groove.m3u + http://i.radionomy.com/Documents/Radio/20110314172205-groove.s60.jpg + Funk, House, Pop, Disco, UK Garage(UKG) + %a - %t + + + Radionomy + A33PLAYDANCE + http://listen.radionomy.com/a33playdance.m3u + http://i.radionomy.com/Documents/Radio/201202051657250129.s60.jpg + Dance-Clubbing, House, Dubstep, Electronica, Trance + %a - %t + + + Radionomy + RADIO_NEONCLUB_-_FM + http://listen.radionomy.com/radio-neonclub---fm.m3u + http://i.radionomy.com/Documents/Radio/201201271210039329.s60.jpg + Dance-Clubbing, House, Trance, Electro, Top Charts + %a - %t + + + Radionomy + ABC AGORA + http://listen.radionomy.com/abc-agora.m3u + http://i.radionomy.com/Documents/Radio/201205030949190036.s60.jpg + Techno, House, Minimal, Trance, Electronic + %a - %t + + + Radionomy + A-DANCEFLOOR-FM-WEB + http://listen.radionomy.com/a-dancefloor-fm-web.m3u + http://i.radionomy.com/Documents/Radio/20111017154730-A_DANCEFLOOR_FM_WEB_1.s60.jpg + Electronica, Dance-Clubbing, Techno, Trance, Urban + %a - %t + + + Radionomy + Radio Progressive + http://listen.radionomy.com/radio-progressive.m3u + http://i.radionomy.com/Documents/Radio/20091120173918-Radio_Progressive_Logo_100x100.s60.jpg + Goa Trance, Trance, Minimal, Chill-out, Dance-Clubbing + %a - %t + + + Radionomy + Techno Paradise + http://listen.radionomy.com/techno-paradise.m3u + http://i.radionomy.com/Documents/Radio/20110517193026-dj_pirate-300x296.s60.jpg + Dance-Clubbing, House, Techno, Trance, Hits + %a - %t + + + Radionomy + TO DANCE STATION + http://listen.radionomy.com/to-dance-station.m3u + http://i.radionomy.com/Documents/Radio/20111025200529-dance3.s60.jpg + Hits 90's, Dance-Clubbing, Trance, Oldies, Hits + %a - %t + + + Radionomy + 1000 fm + http://listen.radionomy.com/1000-fm.m3u + http://i.radionomy.com/Documents/Radio/20111029153659-7.s60.jpg + Dance-Clubbing, Electronic, Trance, Techno, Hardcore-Hard Dance + %a - %t + + + Radionomy + 2Dance + http://listen.radionomy.com/2dance.m3u + http://i.radionomy.com/Documents/Radio/20100810213052-2Dancebis.s60.jpg + Dance-Clubbing, House, Techno, Trance + %a - %t + + + Radionomy + Club & Dance + http://listen.radionomy.com/club-dance.m3u + http://i.radionomy.com/Documents/Radio/201204302246089722.s60.jpg + Dance-Clubbing, Electro, House, Techno, Electronica + %a - %t + + + Radionomy + ABC DANCE + http://listen.radionomy.com/abc-dance.m3u + http://i.radionomy.com/Documents/Radio/201203131613218601.s60.jpg + Dance-Clubbing, Electro, House, Techno, Electronic + %a - %t + + + Radionomy + ABCD Eurodance + http://listen.radionomy.com/abcd-eurodance.m3u + http://i.radionomy.com/Documents/Radio/20110613204827-ABCD_Eurodance.s60.jpg + Electro, House, Techno, Dance-Clubbing, Electronic + %a - %t + + + Radionomy + Dance1Max + http://listen.radionomy.com/dance1max.m3u + http://i.radionomy.com/Documents/Radio/20110601113157-Logo_Dance1Max.s60.jpg + Dance-Clubbing, Electro, Techno, Disco, Electronic + %a - %t + + + Radionomy + Kosmik Station + http://listen.radionomy.com/kosmik-station.m3u + http://i.radionomy.com/Documents/Radio/20111114202723-kosmik_logo.s60.jpg + Techno, Trance, Electronic, House, Nu Rave + %a - %t + + + Radionomy + The Hardest Hard + http://listen.radionomy.com/the-hardest-hard.m3u + http://i.radionomy.com/Documents/Radio/20111012174036-fb-thr-logo.s60.jpg + Nu Rave, Hardcore-Hard Dance, Techno, Industrial, Electronic + %a - %t + + + Radionomy + hardcoreradio.org + http://listen.radionomy.com/hardcoreradioorg.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio15.s60.jpg + Hardcore-Hard Dance, Electronica, Industrial, Nu Rave + %a - %t + + + Radionomy + mr chillin + http://listen.radionomy.com/mr-chillin.m3u + http://i.radionomy.com/Documents/Radio/201201180329383896.s60.jpg + Nu Rave, Reggae, Chill-out, Dance Rock, Electronica + %a - %t + + + Radionomy + RADIO BEST MELGAƇO + http://listen.radionomy.com/radio-best-melgaco.m3u + http://i.radionomy.com/Documents/Radio/201205071609359925.s60.jpg + Electronica, Trance, Techno, House, Nu Rave + %a - %t + + + Radionomy + radiostomy_dancefloor + http://listen.radionomy.com/radiostomy-dancefloor.m3u + http://i.radionomy.com/Documents/Radio/20110712223805-logo-radiostomy2_m.s60.jpg + Dance-Clubbing, Techno, Trance, Nu Rave + %a - %t + + + Radionomy + Reverse Bass Nation + http://listen.radionomy.com/reverse-bass-nation.m3u + http://i.radionomy.com/Documents/Radio/201202260359437850.s60.jpg + Hardcore-Hard Dance, Industrial, Techno, Nu Rave, Dance-Clubbing + %a - %t + + + Radionomy + starflash + http://listen.radionomy.com/starflash.m3u + http://i.radionomy.com/Documents/Radio/201205090939117492.s60.jpg + Dance-Clubbing, Disco, Hits 80's, Nu Rave, Pop-Reggae + %a - %t + + + Radionomy + theproninvasion + http://listen.radionomy.com/theproninvasion.m3u + http://i.radionomy.com/Documents/Radio/20110327202515-logo.s60.jpg + Techno, Electronica, Nu Rave, Jungle-Drum'n'bass, Dubstep + %a - %t + + + Radionomy + SexyRadio + http://listen.radionomy.com/sexyradio.m3u + http://i.radionomy.com/Documents/Radio/20110405172838-logo_1.s60.jpg + Electro, Dance-Clubbing, House, Minimal, Electronic + %a - %t + + + Radionomy + A-PrOn-Invasion-Radio + http://listen.radionomy.com/a-pron-invasion-radio.m3u + http://i.radionomy.com/Documents/Radio/201201160908448487.s60.jpg + Minimal, Dubstep, House, Jungle-Drum'n'bass, Techno + %a - %t + + + Radionomy + Autobahn Radio + http://listen.radionomy.com/autobahn-radio.m3u + http://i.radionomy.com/Documents/Radio/20110226150807-autobahn-radio.s60.jpg + Electro, Electronic, Techno, Minimal, House + %a - %t + + + Radionomy + B4 Station CLUBBING 100% Trance + http://listen.radionomy.com/b4-station-clubbing-100-trance.m3u + http://i.radionomy.com/Documents/Radio/20110617095528-200.s60.jpg + Goa Trance, Minimal, Trance, House, Dance-Clubbing + %a - %t + + + Radionomy + chillectro dance + http://listen.radionomy.com/chillectro-dance.m3u + http://i.radionomy.com/Documents/Radio/20110330102245-fb5555555555555.s60.jpg + Electro, House, Minimal, Dance-Clubbing, Electronic + %a - %t + + + Radionomy + Dyna'MIX + http://listen.radionomy.com/dyna-mix.m3u + http://i.radionomy.com/Documents/Radio/201203101305419449.s60.jpg + Dance-Clubbing, Electro, Electronic, House, Minimal + %a - %t + + + Radionomy + FREAKY.FM - Renaissance + http://listen.radionomy.com/freakyfm---renaissance.m3u + http://i.radionomy.com/Documents/Radio/201203071202308406.s60.jpg + Minimal, Swing, Funk, Hip-Hop, Trip-hop + %a - %t + + + Radionomy + radio fly foot selecta + http://listen.radionomy.com/radio-fly-foot-selecta.m3u + http://i.radionomy.com/Documents/Radio/20110205122523-rffs_blaze.s60.jpg + Reggae, Hip-Hop, Funk, Jungle-Drum'n'bass, Ragga + %a - %t + + + Radionomy + 100 DJAY + http://listen.radionomy.com/100-djay.m3u + http://i.radionomy.com/Documents/Radio/20110924145100-logo_500.s60.jpg + Electro, Hits, Dubstep, Dance-Clubbing, Jungle-Drum'n'bass + %a - %t + + + Radionomy + Allectro Radio + http://listen.radionomy.com/allectro-radio.m3u + http://i.radionomy.com/Documents/Radio/20110813223703-allectroradio_logocentered.s60.jpg + Electro, Dubstep, House, Jungle-Drum'n'bass, Dance-Clubbing + %a - %t + + + Radionomy + Audiotop 2 + http://listen.radionomy.com/audiotop-2.m3u + http://i.radionomy.com/Documents/Radio/201205021323216941.s60.jpg + Hits, 2-step, Techno, Minimal, Jungle-Drum'n'bass + %a - %t + + + Radionomy + Bass culture radio + http://listen.radionomy.com/bass-culture-radio.m3u + http://i.radionomy.com/Documents/Radio/20111212191858-cdj1000mk3.s60.jpg + Dubstep, Electro, Jungle-Drum'n'bass + %a - %t + + + Radionomy + Bass Eargasm + http://listen.radionomy.com/bass-eargasm.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio5.s60.jpg + Dubstep, Chill-out, Jungle-Drum'n'bass, Minimal, Trance + %a - %t + + + Radionomy + BREAKĀ“S STATION NATION + http://listen.radionomy.com/break-s-station-nation.m3u + http://i.radionomy.com/Documents/Radio/201205141844465647.s60.jpg + Breakbeat, Breakcore, Dubstep, Jungle-Drum'n'bass, Funk + %a - %t + + + Radionomy + cathedral13 + http://listen.radionomy.com/cathedral13.m3u + http://i.radionomy.com/Documents/Radio/20090918053019-skullcirclelogoblacklighted.s60.jpg + Gothic Rock, New Wave, Industrial, Post-rock + %a - %t + + + Radionomy + Gabber.fm + http://listen.radionomy.com/gabberfm.m3u + http://i.radionomy.com/Documents/Radio/20110909111624-gabber_fm_180x180.s60.jpg + Hardcore-Hard Dance, Industrial, Breakcore + %a - %t + + + Radionomy + Station Son Particulier + http://listen.radionomy.com/station-son-particulier.m3u + http://i.radionomy.com/Documents/Radio/20100526201053-Station_Son_Particulier_Logo.s60.jpg + Hits, Techno, Lounge, Trance, Industrial + %a - %t + + + Radionomy + Synth-Hero + http://listen.radionomy.com/synth-hero.m3u + http://i.radionomy.com/Documents/Radio/20111107160812-logito.s60.jpg + New Wave, Industrial, Techno, Hits 80's, Electronic + %a - %t + + + Radionomy + [AD FM]AreaDanceFM + http://listen.radionomy.com/-ad-fm-areadancefm.m3u + http://i.radionomy.com/Documents/Radio/201203251427154009.s60.jpg + House, Electro, Latin Dance, Techno, Industrial + %a - %t + + + Radionomy + IceQueen27station + http://listen.radionomy.com/icequeen27station.m3u + http://i.radionomy.com/Documents/Radio/201204182057597350.s60.jpg + Rock, Ambient, Metal, Industrial, Electro + %a - %t + + + Radionomy + MAGIC SOUND + http://listen.radionomy.com/magic-sound.m3u + http://i.radionomy.com/Documents/Radio/201203192016530846.s60.jpg + Techno, House, Electro, Industrial, Techno + %a - %t + + + Radionomy + Non Amoris Radio + http://listen.radionomy.com/non-amoris-radio.m3u + http://i.radionomy.com/Documents/Radio/201203282052442572.s60.jpg + Gothic Metal, Trash Metal, Industrial, Urban, Industrial Metal + %a - %t + + + Radionomy + AMBIENT AND LOUNGE + http://listen.radionomy.com/ambient-and-lounge.m3u + http://i.radionomy.com/Documents/Radio/201203131611431401.s60.jpg + Ambient, Lounge, Downtempo, Easy Listening, House + %a - %t + + + Radionomy + This is House + http://listen.radionomy.com/this-is-house.m3u + http://i.radionomy.com/Documents/Radio/20091008104640-logotemp.s60.jpg + House, Electro, Dance-Clubbing, Electronic, Electronica + %a - %t + + + Radionomy + FearFM_Harder + http://listen.radionomy.com/fearfm-harder.m3u + http://i.radionomy.com/Documents/Radio/20110708235748-FearFM-222x180.s60.jpg + Hardcore-Hard Dance + %a - %t + + + Radionomy + FearFM__Hard + http://listen.radionomy.com/fearfm--hard.m3u + http://i.radionomy.com/Documents/Radio/20110708235827-FearFM-222x180.s60.jpg + Hardcore-Hard Dance + %a - %t + + + Radionomy + Absolute Hardstyle Radio + http://listen.radionomy.com/absolute-hardstyle-radio.m3u + http://i.radionomy.com/Documents/Radio/201202011358182102.s60.jpg + Hardcore-Hard Dance, Electronica, Top Charts, Hits USA, Top Charts + %a - %t + + + Radionomy + BPM140 + http://listen.radionomy.com/bpm140.m3u + http://i.radionomy.com/Documents/Radio/20100723231149-bpm_140.s60.jpg + Techno, Dance-Clubbing, Trance, Hardcore-Hard Dance, Electro + %a - %t + + + Radionomy + FRAGSOUND + http://listen.radionomy.com/fragsound.m3u + http://i.radionomy.com/Documents/Radio/20111104162548-FRAGSOUND_MW2_MINI.s60.jpg + Electro, Hardcore-Hard Dance, Techno, Trance, Breakcore + %a - %t + + + Radionomy + funodio + http://listen.radionomy.com/funodio.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio13.s60.jpg + Techno, Hardcore-Hard Dance, Electro, Electronic + %a - %t + + + Radionomy + Invaders Station Radio + http://listen.radionomy.com/invaders-station-radio.m3u + http://i.radionomy.com/Documents/Radio/201201102311208377.s60.jpg + Hardcore-Hard Dance, Electronic, Techno + %a - %t + + + Radionomy + HabboStreamNL2 + http://listen.radionomy.com/habbostreamnl2.m3u + http://i.radionomy.com/Documents/Radio/201201152312273940.s60.jpg + Hits, Electronic, Techno, Trance, Goa Trance + %a - %t + + + Radionomy + PsyTrance Power radio + http://listen.radionomy.com/psytrance-power-radio.m3u + http://i.radionomy.com/Documents/Radio/20110804005548-newlogo_400.s60.jpg + Goa Trance, Trance, Electronic + %a - %t + + + Radionomy + C'Hard + http://listen.radionomy.com/c-hard.m3u + http://i.radionomy.com/Documents/Radio/201204201635522930.s60.jpg + Trance, Techno, Dubstep, Goa Trance, House + %a - %t + + + Radionomy + CMLV-WENDY-DUFF + http://listen.radionomy.com/cmlv-wendy-duff.m3u + http://i.radionomy.com/Documents/Radio/201205151719424651.s60.jpg + Dance-Clubbing, Dubstep, Hardcore-Hard Dance, Goa Trance, Techno + %a - %t + + + Radionomy + Dance 40 Radio + http://listen.radionomy.com/dance-40-radio.m3u + http://i.radionomy.com/Documents/Radio/201204121236000713.s60.jpg + Electronic, Hardcore-Hard Dance, Dance-Clubbing, House, Goa Trance + %a - %t + + + Radionomy + Dj Heistechs Radio Online + http://listen.radionomy.com/dj-heistechs-radio-online.m3u + http://i.radionomy.com/Documents/Radio/201204182308151037.s60.jpg + Electronica, Pop Rock, Latin Rock, Trance, Goa Trance + %a - %t + + + Radionomy + A .RADIO TOP 40 DANCE + http://listen.radionomy.com/a-radio-top-40-dance.m3u + http://i.radionomy.com/Documents/Radio/201204241601470437.s60.jpg + Top Charts, Dance-Clubbing, Hits, Electronic, Electronica + %a - %t + + + Radionomy + A-CAMPUS-FM-WEB + http://listen.radionomy.com/a-campus-fm-web.m3u + http://i.radionomy.com/Documents/Radio/20111028112200-A_CAMPUS_FM_WEB_.s60.jpg + R'n'B, Electronica, Rap, Hits USA, Pop Rock + %a - %t + + + Radionomy + All Dance radio + http://listen.radionomy.com/all-dance-radio.m3u + http://i.radionomy.com/Documents/Radio/20100419013612-danceradio.s60.jpg + House, Dance-Clubbing, Electronic, Electronica + %a - %t + + + Radionomy + Addict80s + http://listen.radionomy.com/addict80s.m3u + http://i.radionomy.com/Documents/Radio/201201171225208342.s60.jpg + Hits 80's, New Wave, Pop, Electro, Rock + %a - %t + + + Radionomy + Bleh + http://listen.radionomy.com/bleh.m3u + http://i.radionomy.com/Documents/Radio/20101125234344-Lelacdefeu-vingt-et-un1.s60.jpg + Indie, Coldwave, Post-rock, Folk, Dubstep + %a - %t + + + Radionomy + Radio Stijn + http://listen.radionomy.com/radio-stijn.m3u + http://i.radionomy.com/Documents/Radio/20100724141858-Radio_Stijn.s60.jpg + Dubstep, Pop, Electronica, Rock, Top Charts + %a - %t + + + Radionomy + Silvera + http://listen.radionomy.com/silvera.m3u + http://i.radionomy.com/Documents/Radio/201205080118295065.s60.jpg + Dubstep, House, Electronic + %a - %t + + + Radionomy + switchR'adio76 + http://listen.radionomy.com/switchr-adio76.m3u + http://i.radionomy.com/Documents/Radio/201204281343093700.s60.jpg + Electro, House, Hip-Hop, Dubstep, Latin Dance + %a - %t + + + Radionomy + Ambiant'Radio + http://listen.radionomy.com/ambiant-radio.m3u + http://i.radionomy.com/Documents/Radio/20110902155335-logo_PYR_3D.s60.jpg + Electro, Techno, Top Charts, Disco, Drone Music + %a - %t + + + Radionomy + Cadena nova solo hit + http://listen.radionomy.com/cadena-nova-solo-hit.m3u + http://i.radionomy.com/Documents/Radio/201203290934188561.s60.jpg + Hits USA, Hits UK, Electro, Drone Music, House + %a - %t + + + Radionomy + DifoolRadio + http://listen.radionomy.com/difoolradio.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio13.s60.jpg + Drone Music, Hits, Electronic + %a - %t + + + Radionomy + facetwitt music + http://listen.radionomy.com/facetwitt-music.m3u + http://i.radionomy.com/Documents/Radio/201203310401576830.s60.jpg + Rap, Electronic, Pop, Pop Rock, Drone Music + %a - %t + + + Radionomy + Funs N' Dance + http://listen.radionomy.com/funs-n--dance.m3u + http://i.radionomy.com/Documents/Radio/201206112348290408.s60.jpg + Dance-Clubbing, Drone Music + %a - %t + + + Radionomy + ibogota + http://listen.radionomy.com/ibogota.m3u + http://i.radionomy.com/Documents/Radio/201205140642471778.s60.jpg + Acid Jazz, World, Pop Rock, Drone Music + %a - %t + + + Radionomy + LEVANTATE SEƑOR + http://listen.radionomy.com/levantate-senor.m3u + http://i.radionomy.com/Documents/Radio/201204152240528125.s60.jpg + Latin, Christian, Christian Rock, Disco, Drone Music + %a - %t + + + Radionomy + listen to de beat + http://listen.radionomy.com/listen-to-de-beat.m3u + http://i.radionomy.com/Documents/Radio/201203161954289776.s60.jpg + Chill-out, Top Charts, Drone Music, Hits, Ambient + %a - %t + + + Radionomy + Music bogota Online + http://listen.radionomy.com/music-bogota-online.m3u + http://i.radionomy.com/Documents/Radio/201204160656567581.s60.jpg + Dancehall, Pop-Reggae, Electronica, Kumbia, Drone Music + %a - %t + + + Radionomy + QuentinRadioDj + http://listen.radionomy.com/quentinradiodj.m3u + http://i.radionomy.com/Documents/Radio/201204261436235701.s60.jpg + Hits, Electronic, Disco, House, Drone Music + %a - %t + + + Radionomy + KadiHits + http://listen.radionomy.com/kadihits.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio5.s60.jpg + Chip Tune, Dub, Hits 60's, Symphony, African + %a - %t + + + Radionomy + BOGMA Radio Show + http://listen.radionomy.com/bogma-radio-show.m3u + http://i.radionomy.com/Documents/Radio/201203251851288692.s60.jpg + Chill-out, Acid Jazz, House, Breakcore, Bossa Nova + %a - %t + + + Radionomy + Hard Generation + http://listen.radionomy.com/hard-generation.m3u + http://i.radionomy.com/Documents/Radio/20101127180009-hard.s60.jpg + Hardcore-Hard Dance, Electronica, Jungle-Drum'n'bass, Goa Trance, Breakcore + %a - %t + + + Radionomy + JustaRadio + http://listen.radionomy.com/justaradio.m3u + http://i.radionomy.com/Documents/Radio/20120101164028-1011.s60.jpg + Pop, Dance-Clubbing, Hits, Zouk, Breakcore + %a - %t + + + Radionomy + KURVA-REKORDZ + http://listen.radionomy.com/kurva-rekordz.m3u + http://i.radionomy.com/Documents/Radio/201204180925186177.s60.jpg + Electro, Techno, Breakcore, Country, Dubstep + %a - %t + + + Radionomy + radio robot + http://listen.radionomy.com/radio-robot.m3u + http://i.radionomy.com/Documents/Radio/201205111951001540.s60.jpg + Breakbeat, Breakcore, Hardcore-Hard Dance + %a - %t + + + Radionomy + zonabreakbeat + http://listen.radionomy.com/zonabreakbeat.m3u + http://i.radionomy.com/Documents/Radio/20111219181203-ZB.s60.jpg + Breakbeat, Dubstep, Trance, Breakcore, Electronica + %a - %t + + + Radionomy + 77 RADIO TEST + http://listen.radionomy.com/77-radio-test.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio10.s60.jpg + Breakbeat, Christian + %a - %t + + + Radionomy + Alterya + http://listen.radionomy.com/alterya.m3u + http://i.radionomy.com/Documents/Radio/201202291413496870.s60.jpg + 2-step, Breakbeat + %a - %t + + + Radionomy + BAKANORADIO LA MEJOR MUSICA!! + http://listen.radionomy.com/bakanoradio-la-mejor-musica.m3u + http://i.radionomy.com/Documents/Radio/201205240316444782.s60.jpg + Breakbeat, Disco, Kumbia, Latin, Reggaeton + %a - %t + + + Radionomy + Break Live + http://listen.radionomy.com/break-live.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio16.s60.jpg + 2-step, Breakbeat, Dubstep, Electro, Dance-Clubbing + %a - %t + + + Radionomy + ChimboRadio + http://listen.radionomy.com/chimboradio.m3u + http://i.radionomy.com/Documents/Radio/201206031713176500.s60.jpg + Gangsta Rap, Rap, R'n'B, Dancehall, Breakbeat + %a - %t + + + Radionomy + Darrel + http://listen.radionomy.com/darrel.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio14.s60.jpg + Dancehall, Black Metal, Breakbeat, Hits 60's, Classic Jazz + %a - %t + + + Radionomy + Drop The Beat + http://listen.radionomy.com/drop-the-beat.m3u + http://i.radionomy.com/Documents/Radio/201204221457573594.s60.jpg + Top Charts, House, Dance-Clubbing, Hits, Breakbeat + %a - %t + + + Radionomy + Feel The Beat Radio + http://listen.radionomy.com/feel-the-beat-radio.m3u + http://i.radionomy.com/Documents/Radio/201204021906123156.s60.jpg + Breakbeat, Electro, House, Latin, Top Charts + %a - %t + + + Radionomy + Globalelectro + http://listen.radionomy.com/globalelectro.m3u + http://i.radionomy.com/Documents/Radio/201204041609007422.s60.jpg + House, Minimal, Breakbeat, Trance, Electro + %a - %t + + + Radionomy + *Maxi*Makina* + http://listen.radionomy.com/maximakina.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio5.s60.jpg + Trance, Electronic, 2-step, Hardcore-Hard Dance, Techno + %a - %t + + + Radionomy + A'manov Radio + http://listen.radionomy.com/a-manov-radio.m3u + http://i.radionomy.com/Documents/Radio/201205061716159563.s60.jpg + Rock, 2-step, R'n'B, Rap, Electronica + %a - %t + + + Radionomy + GobbaRadio + http://listen.radionomy.com/gobbaradio.m3u + http://i.radionomy.com/Documents/Radio/201205010313359966.s60.jpg + Hits USA, 2-step + %a - %t + + + Radionomy + habbobeats-nl + http://listen.radionomy.com/habbobeats-nl.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio17.s60.jpg + Disco, Chill-out, 2-step, Hits + %a - %t + + + Radionomy + MartinhoCalabrese + http://listen.radionomy.com/martinhocalabrese.m3u + http://i.radionomy.com/Documents/Radio/201204262322147874.s60.jpg + 2-step, Creole + %a - %t + + + Radionomy + MĆ©tĆ©o Lor' + http://listen.radionomy.com/meteo-lor-.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio5.s60.jpg + Britpop, 2-step + %a - %t + + + Radionomy + CanTouaVallee'MiousiK + http://listen.radionomy.com/cantouavallee-miousik.m3u + http://i.radionomy.com/Documents/Radio/20091213001446-AA_BB.s60.jpg + Blues, Rock, Heavy Metal, Southern Rock, Country + %a - %t + + + Radionomy + HighwayFM + http://listen.radionomy.com/highwayfm.m3u + http://i.radionomy.com/Documents/Radio/20111010121631-HighwayFM_logo_-_Radionomy.s60.jpg + Country, Country Rock, Country Pop, Classic Rock, Southern Rock + %a - %t + + + Radionomy + LRC + http://listen.radionomy.com/lrc.m3u + http://i.radionomy.com/Documents/Radio/20111118232936-Logo_LRC.s60.jpg + Classic Rock, Rock, Southern Rock, Hard Rock, Blues + %a - %t + + + Radionomy + West Coast + http://listen.radionomy.com/west-coast.m3u + http://i.radionomy.com/Documents/Radio/201205051017589739.s60.jpg + Classic Rock, Pop Rock, Southern Rock, Country Pop, Country Rock + %a - %t + + + Radionomy + ACADEMY ROCK + http://listen.radionomy.com/academy-rock.m3u + http://i.radionomy.com/Documents/Radio/201206031217535164.s60.jpg + Classic Rock, Progressive Rock, Southern Rock, Hard Rock, Rock'n'Roll + %a - %t + + + Radionomy + Estacion Rocanrol + http://listen.radionomy.com/estacion-rocanrol.m3u + http://i.radionomy.com/Documents/Radio/201201171220478541.s60.jpg + Rock, Hard Rock, Blues, Southern Rock, Classic Rock + %a - %t + + + Radionomy + HARD & HEAVY RADIO + http://listen.radionomy.com/hard--heavy-radio.m3u + http://i.radionomy.com/Documents/Radio/20111117121139-hard_rock_3.s60.jpg + Classic Rock, Southern Rock, Hard Rock, Metal, Trash Metal + %a - %t + + + Radionomy + Bob Marley + http://listen.radionomy.com/bob-marley.m3u + http://i.radionomy.com/Documents/Radio/20110312221433-logo_bob.s60.jpg + Reggae, Roots Reggae, Dub, Ska, Pop-Reggae + %a - %t + + + Radionomy + BuzzNCo + http://listen.radionomy.com/buzznco.m3u + http://i.radionomy.com/Documents/Radio/20100824181743-Logo_D%c3%a9finif_(Basse_Qualit%c3%a9)..s60.jpg + Pop Rock, Reggae, Ska, Rock, Folk + %a - %t + + + Radionomy + Zeromix Radio + http://listen.radionomy.com/zeromix-radio.m3u + http://i.radionomy.com/Documents/Radio/20111118183824-Logo_Large_Red_Square_i.s60.jpg + Indie, Rock, Reggae, Ska, Britpop + %a - %t + + + Radionomy + 1 BaƱo de Rock + http://listen.radionomy.com/1-bano-de-rock.m3u + http://i.radionomy.com/Documents/Radio/20111230152104-borraaaaaaaaar.s60.jpg + Rock, Punk, Ska, Classic Rock, Rock'n'Roll + %a - %t + + + Radionomy + always music + http://listen.radionomy.com/always-music.m3u + http://i.radionomy.com/Documents/Radio/20110927135053-alwaysradiologo.s60.jpg + Pop Rock, Progressive Rock, Ska, Punk, Instrumental Rock + %a - %t + + + Radionomy + Animexi Radio + http://listen.radionomy.com/animexi-radio.m3u + http://i.radionomy.com/Documents/Radio/201205140051574681.s60.jpg + Japanese, Pop Rock, Rock, Ska, Asian + %a - %t + + + Radionomy + Dust radio + http://listen.radionomy.com/dust-radio.m3u + http://i.radionomy.com/Documents/Radio/201206041836154758.s60.jpg + Rock'n'Roll, Electro, Ska, Oldies, Reggae + %a - %t + + + Radionomy + Endcraft-Radio + http://listen.radionomy.com/endcraft-radio.m3u + http://i.radionomy.com/Documents/Radio/201206031842037156.s60.jpg + Reggae, Rap, Ska, Hits, R'n'B + %a - %t + + + Radionomy + filadelfiarecords + http://listen.radionomy.com/filadelfiarecords.m3u + http://i.radionomy.com/Documents/Radio/201204181957568506.s60.jpg + Reggae, Classic, Hip-Hop, Rap, Ska + %a - %t + + + Radionomy + indie rock radio + http://listen.radionomy.com/indie-rock-radio.m3u + http://i.radionomy.com/Documents/Radio/20110923152553-t-radio-.s60.jpg + Britpop, New Wave, Garage Rock, Pop Rock, Shoegazing + %a - %t + + + Radionomy + LA GRIETA + http://listen.radionomy.com/la-grieta.m3u + http://i.radionomy.com/Documents/Radio/20110722011327-Capture9.s60.jpg + Indie, New Wave, Power Pop, Shoegazing, Rock + %a - %t + + + Radionomy + dataheaven + http://listen.radionomy.com/dataheaven.m3u + http://i.radionomy.com/Documents/Radio/201206070137596660.s60.jpg + Indie, Shoegazing, New Wave, Britpop, Rock + %a - %t + + + Radionomy + INDNEWSIC + http://listen.radionomy.com/indnewsic.m3u + http://i.radionomy.com/Documents/Radio/201203080739355950.s60.jpg + Indie, Rock, Pop, Chill-out, Shoegazing + %a - %t + + + Radionomy + Pirates of the Lycosian Radio + http://listen.radionomy.com/pirates-of-the-lycosian-radio.m3u + http://i.radionomy.com/Documents/Radio/20111031215142-jolly-roger-symbol-2.s60.jpg + Electronic, Industrial Rock, Pop Rock, New Wave, Shoegazing + %a - %t + + + Radionomy + planet-of-sound-radio + http://listen.radionomy.com/planet-of-sound-radio.m3u + http://i.radionomy.com/Documents/Radio/201204052252322687.s60.jpg + Indie, Pop Rock, Country, Folk, Shoegazing + %a - %t + + + Radionomy + happydaysradio + http://listen.radionomy.com/happydaysradio.m3u + http://i.radionomy.com/Documents/Radio/20101011041626-hdr_300x300.s60.jpg + Rock'n'Roll, Country, Rock, Country Rock, Rockabilly + %a - %t + + + Radionomy + Radio Retro Rock & Pop + http://listen.radionomy.com/radio-retro-rock--pop.m3u + http://i.radionomy.com/Documents/Radio/20110721061748-Logo_Radio_Retro.s60.jpg + Classic Rock, Pop Rock, Rock, Rock'n'Roll, Dance Rock + %a - %t + + + Radionomy + Central Classic Rock + http://listen.radionomy.com/central-classic-rock.m3u + http://i.radionomy.com/Documents/Radio/20120101125245-logo_central_classic_rock_fond_blanc.s60.jpg + Classic Rock, Rock'n'Roll, Pop Rock, Oldies + %a - %t + + + Radionomy + Classic Rock Music + http://listen.radionomy.com/classic-rock-music.m3u + http://i.radionomy.com/Documents/Radio/20110731224337-classicrock.s60.jpg + Classic Rock, Hard Rock, Metal, Rock'n'Roll, Progressive Rock + %a - %t + + + Radionomy + Alternate USA + http://listen.radionomy.com/alternate-usa.m3u + http://i.radionomy.com/Documents/Radio/201203120118577242.s60.jpg + Indie, Rock, Progressive Rock, Power Pop, Garage Rock + %a - %t + + + Radionomy + radio-hot100 + http://listen.radionomy.com/radio-hot100.m3u + http://i.radionomy.com/Documents/Radio/20110507190903-RadioHot100-logo(300x300).s60.jpg + Pop, Rock, R'n'B, Hits, Top Charts + %a - %t + + + Radionomy + 4 FRIENDS RADIO + http://listen.radionomy.com/4-friends-radio.m3u + http://i.radionomy.com/Documents/Radio/20110328141835-Logo_Template_-_Logo_RADIO_PALLA_GIALLA_4_i.s60.jpg + Metal, Rock, Punk, World, Blues + %a - %t + + + Radionomy + Avril Lavigne: The best damn webradio + http://listen.radionomy.com/avril-lavigne-the-best-damn-webradio.m3u + http://i.radionomy.com/Documents/Radio/201203081731075155.s60.jpg + Rock, Classic Rock, Hard Rock, Punk, Pop Rock + %a - %t + + + Radionomy + AvrilSpirit webradio + http://listen.radionomy.com/avrilspirit-webradio.m3u + http://i.radionomy.com/Documents/Radio/201202090055539949.s60.jpg + Rock, Hard Rock, Punk, Pop Rock, Classic Rock + %a - %t + + + Radionomy + BrooklynFM + http://listen.radionomy.com/brooklynfm.m3u + http://i.radionomy.com/Documents/Radio/20110216102609-BFM_New_Logo.s60.jpg + Classic Rock, Indie, Punk, Rock, Progressive Rock + %a - %t + + + Radionomy + GABBA RADIO + http://listen.radionomy.com/gabba-radio.m3u + http://i.radionomy.com/Documents/Radio/201201230313302306.s60.jpg + Garage Rock, Rock'n'Roll, Hits 60's, Punk, Latin + %a - %t + + + Radionomy + LaserStar Rock/Metal + http://listen.radionomy.com/laserstar-rock-metal.m3u + http://i.radionomy.com/Documents/Radio/20111127090000-99_Rock_Club.s60.jpg + Metal, Heavy Metal, Hard Rock, Punk, Rock + %a - %t + + + Radionomy + punk + http://listen.radionomy.com/punk.m3u + http://i.radionomy.com/Documents/Radio/20110720220822-punk-logo-90.s60.jpg + Punk, New Wave, Experimental Rock, Industrial Rock, Minimal + %a - %t + + + Radionomy + Radio Rock VIntage + http://listen.radionomy.com/radio-rock-vintage.m3u + http://i.radionomy.com/Documents/Radio/20110226170704-LOGORRVGRAS_radionomy90-90.s60.jpg + Hard Rock, Blues, Hits 70's, Psychedelic, Punk + %a - %t + + + Radionomy + Rock as u like it + http://listen.radionomy.com/rock-as-u-like-it.m3u + http://i.radionomy.com/Documents/Radio/201205051017392484.s60.jpg + Rock, Progressive Rock, Punk, Hard Rock, Grunge + %a - %t + + + Radionomy + Radio Rockabilly Country Front + http://listen.radionomy.com/radio-rockabilly-country-front.m3u + http://i.radionomy.com/Documents/Radio/20100831140839-logo-johnny-cash.s60.jpg + Rockabilly, Country, Rock'n'Roll, Psychobilly, Honky Tonk + %a - %t + + + Radionomy + moodswing theatre + http://listen.radionomy.com/moodswing-theatre.m3u + http://i.radionomy.com/Documents/Radio/201202022002419017.s60.jpg + Rock'n'Roll, Metal, Indie, Psychobilly, Miscellaneous + %a - %t + + + Radionomy + radio dark punk + http://listen.radionomy.com/radio-dark-punk.m3u + http://i.radionomy.com/Documents/Radio/201206041336515278.s60.jpg + Punk, Black Metal, Rock, Psychobilly + %a - %t + + + Radionomy + Raging Dog's Tiny Radio + http://listen.radionomy.com/raging-dog-s-tiny-radio.m3u + http://i.radionomy.com/Documents/Radio/201201181310093417.s60.jpg + Rockabilly, Metal, Psychobilly, Rock, Country + %a - %t + + + Radionomy + Rockin' Therapy Radio + http://listen.radionomy.com/rockin--therapy-radio.m3u + http://i.radionomy.com/Documents/Radio/20110813094222-Logo_radio.s60.jpg + Psychobilly, Rockabilly, Rock'n'Roll, Honky Tonk, Outlaw Country + %a - %t + + + Radionomy + LIBERTY ROCK + http://listen.radionomy.com/liberty-rock.m3u + http://i.radionomy.com/Documents/Radio/20110811231400-LIBERTY_ROCK.s60.jpg + Pop Rock, Metal, Psychedelic, Hard Rock, New Wave + %a - %t + + + Radionomy + Peace Radio + http://listen.radionomy.com/peace-radio.m3u + http://i.radionomy.com/Documents/Radio/20081125181406-2680599209_small.s60.jpg + Classic Rock, Hits 60's, Hits 70's, Progressive Rock, Psychedelic + %a - %t + + + Radionomy + pinkfloydteguz + http://listen.radionomy.com/pinkfloydteguz.m3u + http://i.radionomy.com/Documents/Radio/201201112104466372.s60.jpg + Progressive Rock, Psychedelic, Classic Rock + %a - %t + + + Radionomy + Radio Chaos + http://listen.radionomy.com/radio-chaos.m3u + http://i.radionomy.com/Documents/Radio/201201250500140130.s60.jpg + Gothic Rock, Coldwave, Psychedelic, Electronica, Industrial Rock + %a - %t + + + Radionomy + Radio Mezcalito + http://listen.radionomy.com/radio-mezcalito.m3u + http://i.radionomy.com/Documents/Radio/20100617040133-GuitarMezcalito1c.s60.jpg + Classic Rock, Pop Rock, Rock'n'Roll, Psychedelic, Power Pop + %a - %t + + + Radionomy + The Freak + http://listen.radionomy.com/the-freak.m3u + http://i.radionomy.com/Documents/Radio/20110906221246-Freak_square_photo.s60.jpg + Rock, Folk, Hard Rock, Indie, Psychedelic + %a - %t + + + Radionomy + Vinyle Rock + http://listen.radionomy.com/vinyle-rock.m3u + http://i.radionomy.com/Documents/Radio/20111012021609-Vinyle_Rock-new.s60.jpg + Classic Rock, Psychedelic, Garage Rock, Rock'n'Roll, Electric Blues + %a - %t + + + Radionomy + Yesternow Radio 1 + http://listen.radionomy.com/yesternow-radio-1.m3u + http://i.radionomy.com/Documents/Radio/201204122004210246.s60.jpg + Classic Rock, Hard Rock, Progressive Rock, Psychedelic, Oldies + %a - %t + + + Radionomy + TheBOX + http://listen.radionomy.com/thebox.m3u + http://i.radionomy.com/Documents/Radio/20110730105409-Logo_Template_-_TBFM2_i.s60.jpg + Classic Rock, Rock, Metal, Progressive Rock, Hard Rock + %a - %t + + + Radionomy + "Heep made in France" radio + http://listen.radionomy.com/heep-made-in-france-radio.m3u + http://i.radionomy.com/Documents/Radio/20110204181224-radio.s60.jpg + Classic Rock, Heavy Metal, Pop Rock, Progressive Rock + %a - %t + + + Radionomy + AOR Then & Now + http://listen.radionomy.com/aor-then--now.m3u + http://i.radionomy.com/Documents/Radio/20111024210539-New_logo_241011.s60.jpg + Classic Rock, Hard Rock, Progressive Rock, Country Rock, Hits 80's + %a - %t + + + Radionomy + Between Cyborg and Jester Radio + http://listen.radionomy.com/between-cyborg-and-jester-radio.m3u + http://i.radionomy.com/Documents/Radio/201203141905576893.s60.jpg + Heavy Metal, Progressive Rock, Classic Rock, Gothic Metal, Pop Rock + %a - %t + + + Radionomy + BigBangRadio + http://listen.radionomy.com/bigbangradio.m3u + http://i.radionomy.com/Documents/Radio/20111023224946-logo.s60.jpg + Indie, Progressive Rock, Pop Rock, Hits, Rock + %a - %t + + + Radionomy + CAMOROCK 102.5 THE BULLET + http://listen.radionomy.com/camorock-1025-the-bullet.m3u + http://i.radionomy.com/Documents/Radio/20111024181853-33830_170927492947476_170927312947494_342773_1408632_n.s60.jpg + Hard Rock, Progressive Rock, Heavy Metal, Metal, Glam Rock + %a - %t + + + Radionomy + Dance.RO + http://listen.radionomy.com/dancero.m3u + http://i.radionomy.com/Documents/Radio/201202140022509967.s60.jpg + Dance-Clubbing, House, Electro, Power Pop + %a - %t + + + Radionomy + Air Force Radio + http://listen.radionomy.com/air-force-radio.m3u + http://i.radionomy.com/Documents/Radio/201206051717136556.s60.jpg + Hits, Pop, Power Pop, Oldies, Hits USA + %a - %t + + + Radionomy + avia fm + http://listen.radionomy.com/avia-fm.m3u + http://i.radionomy.com/Documents/Radio/20110723192107-Screen_shot_2011-07-21_at_12.06.45_AM.s60.jpg + Dance-Clubbing, Pop, Power Pop, Electro, Electronica + %a - %t + + + Radionomy + HardRock80 + http://listen.radionomy.com/hardrock80.m3u + http://i.radionomy.com/Documents/Radio/20101221142652-LOGO_HR80.s60.jpg + Glam Rock, Hard Rock, Classic Rock, Heavy Metal, Power Pop + %a - %t + + + Radionomy + POP FOR YOU + http://listen.radionomy.com/pop-for-you.m3u + http://i.radionomy.com/Documents/Radio/20100517222038-POPFORYOU5.s60.jpg + Britpop, Hits USA, Glam Rock, Indie, Power Pop + %a - %t + + + Radionomy + Eclectic Traxxx + http://listen.radionomy.com/eclectic-traxxx.m3u + http://i.radionomy.com/Documents/Radio/20111020163319-ETR.s60.jpg + Folk, Indie, Ambient, Pop Rock, Post-rock + %a - %t + + + Radionomy + ActiveHitmania80s90 + http://listen.radionomy.com/activehitmania80s90.m3u + http://i.radionomy.com/Documents/Radio/201204180242343931.s60.jpg + Post-rock, Pop + %a - %t + + + Radionomy + Blacoradio + http://listen.radionomy.com/blacoradio.m3u + http://i.radionomy.com/Documents/Radio/20111016002052-100212041055896962.s60.jpg + Experimental Rock, Punk, Post-rock, Indie, Progressive Rock + %a - %t + + + Radionomy + BubblejuiceNL + http://listen.radionomy.com/bubblejuicenl.m3u + http://i.radionomy.com/Documents/Radio/201205291732235655.s60.jpg + Pop, Post-rock + %a - %t + + + Radionomy + Explosive Diarrhea + http://listen.radionomy.com/explosive-diarrhea.m3u + http://i.radionomy.com/Documents/Radio/20110829183624-Clou-Cerveau.s60.jpg + Folk, Indie, Post-rock, Classic, Experimental Rock + %a - %t + + + Radionomy + Latin Core + http://listen.radionomy.com/latin-core.m3u + http://i.radionomy.com/Documents/Radio/201204250559138246.s60.jpg + Metalcore, Post-rock + %a - %t + + + Radionomy + Many-Play + http://listen.radionomy.com/many-play.m3u + http://i.radionomy.com/Documents/Radio/201205171817047748.s60.jpg + Post-rock, Dubstep, Hits, Rap + %a - %t + + + Radionomy + Radio Campus Avignon + http://listen.radionomy.com/radio-campus-avignon.m3u + http://i.radionomy.com/Documents/Radio/20110123235328-logo-RCA-72dpi-prfondclair-2.s60.jpg + Post-rock, Urban, Electronic + %a - %t + + + Radionomy + ROCKAMAX + http://listen.radionomy.com/rockamax.m3u + http://i.radionomy.com/Documents/Radio/20101104180008-Logo_Rockamax-Girafe.s60.jpg + Indie, Rock, Noisy, Grunge, Garage Rock + %a - %t + + + Radionomy + alukard999 + http://listen.radionomy.com/alukard999.m3u + http://i.radionomy.com/Documents/Radio/201202080103160679.s60.jpg + Dance Rock, Pop, Pop Rock, Noisy, Electro + %a - %t + + + Radionomy + Evidencia Radio + http://listen.radionomy.com/evidencia-radio.m3u + http://i.radionomy.com/Documents/Radio/201202080049299570.s60.jpg + Experimental, Rock, Noisy, Metal, Freestyle + %a - %t + + + Radionomy + 180 + http://listen.radionomy.com/180.m3u + http://i.radionomy.com/Documents/Radio/20101105095921-NEwlogo2010_2.s60.jpg + Hits 80's, Pop Rock, New Wave, Oldies, Funk + %a - %t + + + Radionomy + 80s New Wave + http://listen.radionomy.com/80s-new-wave.m3u + http://i.radionomy.com/Documents/Radio/20091031032206-kids_in_America.s60.jpg + New Wave, Dance-Clubbing, Pop, Hits + %a - %t + + + Radionomy + all80s + http://listen.radionomy.com/all80s.m3u + http://i.radionomy.com/Documents/Radio/20101002164517-all80s-radionomy.s60.jpg + Hits 80's, Pop, Disco, Hits FR, New Wave + %a - %t + + + Radionomy + stephans plattenkeller + http://listen.radionomy.com/stephans-plattenkeller.m3u + http://i.radionomy.com/Documents/Radio/201203041727096359.s60.jpg + Classic Rock, Experimental Rock, Hard Rock, Kraut-Rock, Blues + %a - %t + + + Radionomy + ISKC Rock Radio + http://listen.radionomy.com/iskc-rock-radio.m3u + http://i.radionomy.com/Documents/Radio/20110930001101-ISKC_Rock_Radio.s60.jpg + Rock, Progressive Rock, Hard Rock, Instrumental Rock + %a - %t + + + Radionomy + K.S.E RADIO.FR + http://listen.radionomy.com/kse-radiofr.m3u + http://i.radionomy.com/Documents/Radio/20111115143638-400_F_6983864_oq8pbDMt9SLh5JgpcECm03eEHEdb0F5f_02.s60.jpg + Oldies, Hits FR, Disco, Hits USA, Instrumental Rock + %a - %t + + + Radionomy + siempreconvosotros + http://listen.radionomy.com/siempreconvosotros.m3u + http://i.radionomy.com/Documents/Radio/201206051336416105.s60.jpg + Romantic, Ambient, Instrumental Rock, Disco, Pop + %a - %t + + + Radionomy + The Dance Of Internity - DREAM THEATER WEB RADIO + http://listen.radionomy.com/the-dance-of-internity---dream-theater-web-radio.m3u + http://i.radionomy.com/Documents/Radio/20111025174102-FBP8376.s60.jpg + Instrumental Rock, Progressive Rock, Progressive Metal, Metal, Classic Rock + %a - %t + + + Radionomy + Brabbo_Radio + http://listen.radionomy.com/brabbo-radio.m3u + http://i.radionomy.com/Documents/Radio/201203311855018950.s60.jpg + Instrumental Rock, Rock + %a - %t + + + Radionomy + Cald + http://listen.radionomy.com/cald.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio6.s60.jpg + Hard Rock, Metal, Instrumental Rock, Rock, Pop Rock + %a - %t + + + Radionomy + freerock + http://listen.radionomy.com/freerock.m3u + http://i.radionomy.com/Documents/Radio/20110101024648-electric-guitar-solo.s60.jpg + Rock, Classic Rock, Instrumental Rock, Metal, Gothic Metal + %a - %t + + + Radionomy + FreshCraft Radio + http://listen.radionomy.com/freshcraft-radio.m3u + http://i.radionomy.com/Documents/Radio/201205051123378891.s60.jpg + Classic Rock, Instrumental Rock + %a - %t + + + Radionomy + GHOST AVENUE + http://listen.radionomy.com/ghost-avenue.m3u + http://i.radionomy.com/Documents/Radio/20101129162551-logo.s60.jpg + Indie, New Wave, Gothic Rock, Industrial Rock + %a - %t + + + Radionomy + radiolakuabizkarra-ibaiondo + http://listen.radionomy.com/radiolakuabizkarra-ibaiondo.m3u + http://i.radionomy.com/Documents/Radio/201203061239274679.s60.jpg + Pop Rock, Industrial Rock, Electronic, Reggae, Country + %a - %t + + + Radionomy + Dark PrĆ©lude + http://listen.radionomy.com/dark-prelude.m3u + http://i.radionomy.com/Documents/Radio/20110804073346-DP.s60.jpg + Gothic Rock, Coldwave, Industrial Rock, Electro, Ambient + %a - %t + + + Radionomy + e.v.e + http://listen.radionomy.com/eve.m3u + http://i.radionomy.com/Documents/Radio/20110924121417-Eve_logo_-_4.s60.jpg + Pop Rock, Indie, Electro, Gothic Metal, Industrial Rock + %a - %t + + + Radionomy + EL SONAR COLOMBIA + http://listen.radionomy.com/el-sonar-colombia.m3u + http://i.radionomy.com/Documents/Radio/20111221072557-logosonar2.s60.jpg + Grunge, Hard Rock, Industrial Rock, Pop Rock, Pop-Reggae + %a - %t + + + Radionomy + A1 Quiet Radio + http://listen.radionomy.com/a1-quiet-radio.m3u + http://i.radionomy.com/Documents/Radio/20111201173654-DSCN0308.s60.jpg + Ambient, Folk, Folktronica, Indie, Downtempo + %a - %t + + + Radionomy + AUSTRALIA128 + http://listen.radionomy.com/australia128.m3u + http://i.radionomy.com/Documents/Radio/20111001173743-artwork.s60.jpg + Indie, Folk, Pop Rock + %a - %t + + + Radionomy + Radio Enigma + http://listen.radionomy.com/radio--enigma.m3u + http://i.radionomy.com/Documents/Radio/20110807045602-Radio_Enigma3.s60.jpg + Pop, Rock, Grunge, Classic Rock, Indie + %a - %t + + + Radionomy + AmysFM OneShot + http://listen.radionomy.com/amysfm-oneshot.m3u + http://i.radionomy.com/Documents/Radio/201205251808362507.s60.jpg + Pop Rock, Pop Rock, Glam Rock, New Wave, Indie + %a - %t + + + Radionomy + itsrock + http://listen.radionomy.com/itsrock.m3u + http://i.radionomy.com/Documents/Radio/20110928154656-271137_124527294299534_124526307632966_206908_7436939_n.s60.jpg + Classic Rock, Hard Rock, Pop Rock, Rock, Glam Rock + %a - %t + + + Radionomy + Anka'Dio + http://listen.radionomy.com/anka-dio.m3u + http://i.radionomy.com/Documents/Radio/20111219033529-Ankadio_twitter.s60.jpg + Pop Rock, Hard Rock, Pop, Electro, Rap + %a - %t + + + Radionomy + Anwa-rock + http://listen.radionomy.com/anwa-rock.m3u + http://i.radionomy.com/Documents/Radio/20100220112309-radiloogo.s60.jpg + Pop Rock, Metal, Classic Rock, Hard Rock, Country Rock + %a - %t + + + Radionomy + Rock and Bolz + http://listen.radionomy.com/rock-and-bolz.m3u + http://i.radionomy.com/Documents/Radio/20100206212819-Rock_N_Bolz.s60.jpg + Rock, Grunge, Pop Rock, Indie, Hits UK + %a - %t + + + Radionomy + 100% HARD ROCK + http://listen.radionomy.com/100-hard-rock.m3u + http://i.radionomy.com/Documents/Radio/201202111232406165.s60.jpg + Hard Rock, Rock, Grunge, Punk, Metal + %a - %t + + + Radionomy + Bujan-Sounds + http://listen.radionomy.com/bujan-sounds.m3u + http://i.radionomy.com/Documents/Radio/201205120021546574.s60.jpg + Rock'n'Roll, Blues, Punk, Grunge, Hard Rock + %a - %t + + + Radionomy + Crazy Rock + http://listen.radionomy.com/crazy-rock.m3u + http://i.radionomy.com/Documents/Radio/201204171810311067.s60.jpg + Rock, Rock'n'Roll, Hard Rock, Grunge + %a - %t + + + Radionomy + CRC RADIO + http://listen.radionomy.com/crc-radio.m3u + http://i.radionomy.com/Documents/Radio/201205170327039768.s60.jpg + Rock, Metal, Blues, Punk, Grunge + %a - %t + + + Radionomy + Devi's Alternate - Radio + http://listen.radionomy.com/devi-s-alternate---radio.m3u + http://i.radionomy.com/Documents/Radio/201203291902293353.s60.jpg + Grunge, Classic Rock, Hard Rock, Punk, Rock + %a - %t + + + Radionomy + Gothica + http://listen.radionomy.com/gothica.m3u + http://i.radionomy.com/Documents/Radio/20110321085017-Gothic_-_Vampire_Red_Moon2.s60.jpg + Gothic Metal, Metal, Gothic Rock + %a - %t + + + Radionomy + Goth'N'Metal + http://listen.radionomy.com/goth-n-metal.m3u + http://i.radionomy.com/Documents/Radio/201201102218257594.s60.jpg + Gothic Metal, Gothic Rock, Progressive Metal, Progressive Rock, Metal + %a - %t + + + Radionomy + Legion Metal + http://listen.radionomy.com/legion-metal.m3u + http://i.radionomy.com/Documents/Radio/20110531003125-Banshee5.s60.jpg + Metal, Gothic Metal, Gothic Rock, Progressive Metal, Progressive Rock + %a - %t + + + Radionomy + .:SunFabbo:. + http://listen.radionomy.com/sunfabbo.m3u + http://i.radionomy.com/Documents/Radio/201204181743396292.s60.jpg + Dance Rock, Gothic Rock + %a - %t + + + Radionomy + Art & Noise Radio + http://listen.radionomy.com/art--noise-radio.m3u + http://i.radionomy.com/Documents/Radio/201202230715207293.s60.jpg + Electronic, Indie, Gothic Rock, New Wave, Britpop + %a - %t + + + Radionomy + My Symphonic Metal Radio + http://listen.radionomy.com/my-symphonic-metal-radio.m3u + http://i.radionomy.com/Documents/Radio/20111010182258-Electric_Guitar.s60.jpg + Gothic Metal, Heavy Metal, Industrial Metal, Progressive Metal, Gothic Rock + %a - %t + + + Radionomy + MetalHeart + http://listen.radionomy.com/metalheart.m3u + http://i.radionomy.com/Documents/Radio/20110710135516-Metal102.90.s60.jpg + Heavy Metal, Hard Rock, Glam Rock, Metal + %a - %t + + + Radionomy + MetalRock06 + http://listen.radionomy.com/metalrock06.m3u + http://i.radionomy.com/Documents/Radio/20091226112312-MR06-logo2.s60.jpg + Glam Rock, Hard Rock, Heavy Metal, Metal, Trash Metal + %a - %t + + + Radionomy + BarAdentro + http://listen.radionomy.com/baradentro.m3u + http://i.radionomy.com/Documents/Radio/201204191839372906.s60.jpg + Jazz Rock, Latin Rock, Glam Rock, Classic Rock, Pop Rock + %a - %t + + + Radionomy + Classic Rock Records + http://listen.radionomy.com/classic-rock-records.m3u + http://i.radionomy.com/Documents/Radio/201202111555223810.s60.jpg + Classic Rock, Rock'n'Roll, Pop Rock, Progressive Rock, Glam Rock + %a - %t + + + Radionomy + eurock2 web radio + http://listen.radionomy.com/eurock2-web-radio.m3u + http://i.radionomy.com/Documents/Radio/20111220205708-PearlJam-Ten.s60.jpg + Grunge, Glam Rock, Rock, Hard Rock, Pop Rock + %a - %t + + + Radionomy + Riders Space + http://listen.radionomy.com/riders-space.m3u + http://i.radionomy.com/Documents/Radio/20120102190337-logo.s60.jpg + Garage Rock, Urban, Electro, Rap, Reggae + %a - %t + + + Radionomy + AlternativaX + http://listen.radionomy.com/alternativax.m3u + http://i.radionomy.com/Documents/Radio/201204141052117906.s60.jpg + Electric Blues, Pop Rock, Classic Rock, Hard Rock, Garage Rock + %a - %t + + + Radionomy + BatMoney + http://listen.radionomy.com/batmoney.m3u + http://i.radionomy.com/Documents/Radio/201204191843418443.s60.jpg + Garage Rock, Acoustic Blues + %a - %t + + + Radionomy + Central Rock + http://listen.radionomy.com/central-rock.m3u + http://i.radionomy.com/Documents/Radio/20111221212026-logo_central_rock_fond_blanc.s60.jpg + Rock, Garage Rock, Hard Rock, Indie, Pop Rock + %a - %t + + + Radionomy + radio OS + http://listen.radionomy.com/radio-os.m3u + http://i.radionomy.com/Documents/Radio/201206120059087824.s60.jpg + Reggae, Gangsta Rap, Folktronica, Pop-Reggae, Pop + %a - %t + + + Radionomy + Acoustic FM + http://listen.radionomy.com/acoustic-fm.m3u + http://i.radionomy.com/Documents/Radio/20111224133417-Acoustic_FM_-_Logo_Round.s60.jpg + Folk, Pop, Rock, Acoustic Blues, Hits + %a - %t + + + Radionomy + BolzĀ² + http://listen.radionomy.com/bolz%c2%b2.m3u + http://i.radionomy.com/Documents/Radio/20090624005735-bolz2.s60.jpg + Indie, Chill-out, Urban, Electro, Folk + %a - %t + + + Radionomy + 17 Radio Police + http://listen.radionomy.com/17-radio-police.m3u + http://i.radionomy.com/Documents/Radio/201205101937484835.s60.jpg + Electro, Dance Rock, Pop Rock, Progressive Rock, Experimental Rock + %a - %t + + + Radionomy + AOLMRadio + http://listen.radionomy.com/aolmradio.m3u + http://i.radionomy.com/Documents/Radio/201204081855470218.s60.jpg + Pop, Rock, Power Pop, Folk, Experimental Rock + %a - %t + + + Radionomy + Arbol + http://listen.radionomy.com/arbol.m3u + http://i.radionomy.com/Documents/Radio/201203202328358178.s60.jpg + Kumbia, Hip-Hop, Experimental Rock, Latin Rock, Metal + %a - %t + + + Radionomy + hojadelata + http://listen.radionomy.com/hojadelata.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio8.s60.jpg + Rock, Experimental Rock + %a - %t + + + Radionomy + Puff + http://listen.radionomy.com/puff.m3u + http://i.radionomy.com/Documents/Radio/201205180703184442.s60.jpg + Classic Rock, Experimental Rock, Glam Rock, Industrial Rock, Punk + %a - %t + + + Radionomy + RADIO ATLACOMULCO + http://listen.radionomy.com/radio-atlacomulco.m3u + http://i.radionomy.com/Documents/Radio/201201110104584452.s60.jpg + Black Metal, Oldies, Experimental Rock, Ragga, Hip-Hop + %a - %t + + + Radionomy + sin-fin-radio + http://listen.radionomy.com/sin-fin-radio.m3u + http://i.radionomy.com/Documents/Radio/201205141551138170.s60.jpg + Classic Rock, Experimental Rock, Jazz, Power Pop, Rock'n'Roll + %a - %t + + + Radionomy + FlaashHD + http://listen.radionomy.com/flaashhd.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio16.s60.jpg + Heavy Metal, Emo + %a - %t + + + Radionomy + music-mex + http://listen.radionomy.com/music-mex.m3u + http://i.radionomy.com/Documents/Radio/201206082048015694.s60.jpg + House, Emo, Indie, Hard Rock, Metal + %a - %t + + + Radionomy + oelaradio + http://listen.radionomy.com/oelaradio.m3u + http://i.radionomy.com/Documents/Radio/201204092008043750.s60.jpg + Pop, Emo, Gothic Rock, Hits, Metal + %a - %t + + + Radionomy + Original-Radio + http://listen.radionomy.com/original-radio.m3u + http://i.radionomy.com/Documents/Radio/201205241259401991.s60.jpg + Rap, Metal, Hardcore-Hard Dance, Emo, Rock'n'Roll + %a - %t + + + Radionomy + pitococotales + http://listen.radionomy.com/pitococotales.m3u + http://i.radionomy.com/Documents/Radio/201203161227517585.s60.jpg + Acid Jazz, Emo, Disco, Classic, Japanese + %a - %t + + + Radionomy + PREMS Radio + http://listen.radionomy.com/prems-radio.m3u + http://i.radionomy.com/Documents/Radio/201203291541373710.s60.jpg + Punk, Rock, Emo, Metal, Metalcore + %a - %t + + + Radionomy + testee + http://listen.radionomy.com/testee.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio4.s60.jpg + Emo, Pop, Hits USA, Britpop, Power Pop + %a - %t + + + Radionomy + dance4u + http://listen.radionomy.com/dance4u.m3u + http://i.radionomy.com/Documents/Radio/201205111941082944.s60.jpg + Hits, Techno, Hits 90's, Dance Rock, Pop + %a - %t + + + Radionomy + LIMITED EDITION + http://listen.radionomy.com/limited-edition.m3u + http://i.radionomy.com/Documents/Radio/201205312307580962.s60.jpg + Dance Rock, Hits 90's, Hits 80's, Pop Rock + %a - %t + + + Radionomy + radioWLS + http://listen.radionomy.com/radiowls.m3u + http://i.radionomy.com/Documents/Radio/201202081025531486.s60.jpg + Hits, Dance Rock, Hits USA, Hits 80's, Hits 90's + %a - %t + + + Radionomy + TEEZ'FM + http://listen.radionomy.com/teez-fm.m3u + http://i.radionomy.com/Documents/Radio/201203091054050726.s60.jpg + Hits, Electronic, Britpop, Indie, Dance Rock + %a - %t + + + Radionomy + .:CEB:. + http://listen.radionomy.com/ceb.m3u + http://i.radionomy.com/Documents/Radio/201206022000250297.s60.jpg + Techno, Dance Rock + %a - %t + + + Radionomy + http://www.radionomy.com/sanmartinstereo + http://listen.radionomy.com/http--wwwradionomycom-sanmartinstereo.m3u + http://i.radionomy.com/Documents/Radio/DefaultRadio9.s60.jpg + Classic, Dub, Flamenco, Coldwave, Metal + %a - %t + + + Radionomy + multigameradio + http://listen.radionomy.com/multigameradio.m3u + http://i.radionomy.com/Documents/Radio/201204211436361477.s60.jpg + Hits, Coldwave, Disco + %a - %t + + diff --git a/mythplugins/mythmusic/mythmusic/streamview.cpp b/mythplugins/mythmusic/mythmusic/streamview.cpp new file mode 100644 index 00000000000..34d8faf561f --- /dev/null +++ b/mythplugins/mythmusic/mythmusic/streamview.cpp @@ -0,0 +1,900 @@ +#include +#include + +// qt +#include +#include +#include + +// myth +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// mythmusic +#include "musiccommon.h" +#include "streamview.h" +#include "musicplayer.h" +#include "musicutils.h" + +using namespace std; + +StreamView::StreamView(MythScreenStack *parent) + :MusicCommon(parent, "streamview") +{ + m_streamList = NULL; + m_bufferStatus = NULL; + m_bufferProgress = NULL; + m_currentView = MV_RADIO; +} + +StreamView::~StreamView() +{ +} + +bool StreamView::Create(void) +{ + bool err = false; + + // Load the theme for this screen + err = LoadWindowFromXML("stream-ui.xml", "streamview", this); + + if (!err) + return false; + + // find common widgets available on any view + err = CreateCommon(); + + // find widgets specific to this view + UIUtilE::Assign(this, m_streamList, "streamlist", &err); + UIUtilW::Assign(this, m_bufferStatus, "bufferstatus", &err); + UIUtilW::Assign(this, m_bufferProgress, "bufferprogress", &err); + UIUtilW::Assign(this, m_noStreams, "nostreams", &err); + + if (err) + { + LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'streamview'"); + return false; + } + + connect(m_streamList, SIGNAL(itemClicked(MythUIButtonListItem*)), + this, SLOT(streamItemClicked(MythUIButtonListItem*))); + connect(m_streamList, SIGNAL(itemVisible(MythUIButtonListItem*)), + this, SLOT(streamItemVisible(MythUIButtonListItem*))); + + gPlayer->setPlayMode(MusicPlayer::PLAYMODE_RADIO); + + updateStreamList(); + updateUIPlayedList(); + + BuildFocusList(); + + return true; +} + +void StreamView::ShowMenu(void) +{ + MythMenu *menu = NULL; + + menu = new MythMenu(tr("Stream Actions"), this, "streammenu"); + menu->AddItem(tr("Add Stream")); + + if (m_streamList->GetItemCurrent()) + { + menu->AddItem(tr("Edit Stream")); + menu->AddItem(tr("Remove Stream")); + } + + menu->AddItem(tr("More Options"), NULL, createMainMenu()); + + MythScreenStack *popupStack = GetMythMainWindow()->GetStack("popup stack"); + + MythDialogBox *menuPopup = new MythDialogBox(menu, popupStack, "actionmenu"); + + if (menuPopup->Create()) + popupStack->AddScreen(menuPopup); + else + delete menu; +} + +void StreamView::customEvent(QEvent *event) +{ + bool handled = true; + + if (event->type() == MusicPlayerEvent::PlayedTracksChangedEvent) + { + if (gPlayer->getPlayedTracksList().count()) + updateTrackInfo(gPlayer->getCurrentMetadata()); + + // add the new track to the list + if (m_playedTracksList && gPlayer->getPlayedTracksList().count()) + { + Metadata *mdata = gPlayer->getPlayedTracksList().last(); + + MythUIButtonListItem *item = + new MythUIButtonListItem(m_playedTracksList, "", qVariantFromValue(mdata), 0); + + MetadataMap metadataMap; + mdata->toMap(metadataMap); + item->SetTextFromMap(metadataMap); + item->SetFontState("normal"); + item->DisplayState("default", "playstate"); + item->SetImage(mdata->getAlbumArtFile()); + + m_playedTracksList->SetItemCurrent(item); + } + } + else if (event->type() == MusicPlayerEvent::TrackChangeEvent) + { + MusicPlayerEvent *mpe = dynamic_cast(event); + + if (!mpe) + return; + + int trackNo = mpe->TrackID; + + if (m_streamList) + { + if (m_currentTrack >= 0 && m_currentTrack < m_streamList->GetCount()) + { + MythUIButtonListItem *item = m_streamList->GetItemAt(m_currentTrack); + if (item) + { + item->SetFontState("normal"); + item->DisplayState("default", "playstate"); + } + } + + if (trackNo >= 0 && trackNo < m_streamList->GetCount()) + { + if (m_currentTrack == m_streamList->GetCurrentPos()) + m_streamList->SetItemCurrent(trackNo); + + MythUIButtonListItem *item = m_streamList->GetItemAt(trackNo); + if (item) + { + item->SetFontState("running"); + item->DisplayState("playing", "playstate"); + } + } + } + + m_currentTrack = trackNo; + + updateTrackInfo(gPlayer->getCurrentMetadata()); + } + else if (event->type() == OutputEvent::Playing) + { + if (gPlayer->isPlaying()) + { + if (m_streamList) + { + MythUIButtonListItem *item = m_streamList->GetItemAt(m_currentTrack); + if (item) + { + item->SetFontState("running"); + item->DisplayState("playing", "playstate"); + } + } + } + + // pass it on to the default handler in MusicCommon + handled = false; + } + else if (event->type() == OutputEvent::Stopped) + { + if (m_streamList) + { + MythUIButtonListItem *item = m_streamList->GetItemAt(m_currentTrack); + if (item) + { + item->SetFontState("normal"); + item->DisplayState("stopped", "playstate"); + } + } + + // pass it on to the default handler in MusicCommon + handled = false; + } + else if (event->type() == OutputEvent::Buffering) + { + } + else if (event->type() == MythEvent::MythEventMessage) + { + MythEvent *me = (MythEvent *)event; + QStringList tokens = me->Message().split(" ", QString::SkipEmptyParts); + + if (tokens.isEmpty()) + return; + + if (tokens[0] == "DOWNLOAD_FILE") + { + QStringList args = me->ExtraDataList(); + + if (tokens[1] == "UPDATE") + { + } + else if (tokens[1] == "FINISHED") + { + QString url = args[0]; + int fileSize = args[2].toInt(); + int errorCode = args[4].toInt(); + QString filename = args[1]; + + if ((errorCode != 0) || (fileSize == 0)) + LOG(VB_GENERAL, LOG_ERR, QString("StreamView: failed to download radio icon from '%1'").arg(url)); + else + { + for (int x = 0; x < m_streamList->GetCount(); x++) + { + MythUIButtonListItem *item = m_streamList->GetItemAt(x); + Metadata *mdata = qVariantValue (item->GetData()); + if (mdata && mdata->LogoUrl() == url) + item->SetImage(filename); + } + } + } + } + } + else if (event->type() == DecoderHandlerEvent::OperationStart) + { + DecoderHandlerEvent *dhe = dynamic_cast(event); + if (!dhe) + return; + if (dhe->getMessage() && m_bufferStatus) + { + m_bufferStatus->SetText(*dhe->getMessage()); + } + } + else if (event->type() == DecoderHandlerEvent::BufferStatus) + { + DecoderHandlerEvent *dhe = dynamic_cast(event); + if (!dhe) + return; + + int available, maxSize; + dhe->getBufferStatus(&available, &maxSize); + + if (m_bufferStatus) + { + QString status = QString("%1%").arg((int)(100.0 / ((double)maxSize / (double)available))); + m_bufferStatus->SetText(status); + } + + if (m_bufferProgress) + { + m_bufferProgress->SetTotal(maxSize); + m_bufferProgress->SetUsed(available); + } + } + else if (event->type() == DecoderHandlerEvent::OperationStop) + { + if (m_bufferStatus) + m_bufferStatus->SetText(""); + } + else if (event->type() == DialogCompletionEvent::kEventType) + { + DialogCompletionEvent *dce = static_cast(event); + + // make sure the user didn't ESCAPE out of the menu + if (dce->GetResult() < 0) + return; + + QString resultid = dce->GetId(); + QString resulttext = dce->GetResultText(); + + if (resultid == "streammenu") + { + if (resulttext == tr("Add Stream")) + { + MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack(); + MythScreenType *screen = new EditStreamMetadata(mainStack, this, NULL); + + if (screen->Create()) + mainStack->AddScreen(screen); + else + delete screen; + } + else if (resulttext == tr("Remove Stream")) + { + removeStream(); + } + else if (resulttext == tr("Edit Stream")) + { + editStream(); + } + } + else + handled = false; + } + else + handled = false; + + + if (!handled) + MusicCommon::customEvent(event); +} + +bool StreamView::keyPressEvent(QKeyEvent *event) +{ + if (GetFocusWidget() && GetFocusWidget()->keyPressEvent(event)) + return true; + + bool handled = false; + QStringList actions; + handled = GetMythMainWindow()->TranslateKeyPress("Music", event, actions); + + for (int i = 0; i < actions.size() && !handled; i++) + { + QString action = actions[i]; + handled = true; + + if (action == "EDIT" && GetFocusWidget() == m_streamList) + { + editStream(); + } + else if (action == "DELETE" && GetFocusWidget() == m_streamList) + { + removeStream(); + } + else if (action == "INFO") + { + //TODO show stream info popup + } + else + handled = false; + } + + if (!handled && MusicCommon::keyPressEvent(event)) + handled = true; + + if (!handled && MythScreenType::keyPressEvent(event)) + handled = true; + + return handled; +} + +void StreamView::editStream(void) +{ + MythUIButtonListItem *item = m_streamList->GetItemCurrent(); + if (item) + { + Metadata *mdata = qVariantValue (item->GetData()); + MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack(); + MythScreenType *screen = new EditStreamMetadata(mainStack, this, mdata); + + if (screen->Create()) + mainStack->AddScreen(screen); + else + delete screen; + } +} + +void StreamView::removeStream(void) +{ + MythUIButtonListItem *item = m_streamList->GetItemCurrent(); + if (item) + { + Metadata *mdata = qVariantValue (item->GetData()); + + ShowOkPopup(QString("Are you sure you want to delete this Stream?\n" + "Station:%1 - Channel: %2") + .arg(mdata->Station()).arg(mdata->Channel()), + this, SLOT(doRemoveStream(bool)), true); + } +} + +void StreamView::doRemoveStream(bool ok) +{ + if (!ok) + return; + + MythUIButtonListItem *item = m_streamList->GetItemCurrent(); + if (item) + { + Metadata *mdata = qVariantValue (item->GetData()); + deleteStream(mdata); + } +} + +void StreamView::updateStreamList(void) +{ + m_streamList->Reset(); + + bool foundActiveStream = false; + + for (int x = 0; x < gPlayer->getPlaylist()->getSongs().count(); x++) + { + Metadata *mdata = gPlayer->getPlaylist()->getSongs().at(x); + MythUIButtonListItem *item = new MythUIButtonListItem(m_streamList, "", qVariantFromValue(mdata)); + MetadataMap metadataMap; + if (mdata) + mdata->toMap(metadataMap); + item->SetTextFromMap(metadataMap); + item->SetText("", "imageloaded"); + item->SetFontState("normal"); + item->DisplayState("default", "playstate"); + + // if this is the current radio stream update its play state to match the player + if (gPlayer->getCurrentMetadata() && mdata->ID() == gPlayer->getCurrentMetadata()->ID()) + { + if (gPlayer->isPlaying()) + { + item->SetFontState("running"); + item->DisplayState("playing", "playstate"); + } + else if (gPlayer->isPaused()) + { + item->SetFontState("idle"); + item->DisplayState("paused", "playstate"); + } + else + { + item->SetFontState("normal"); + item->DisplayState("stopped", "playstate"); + } + + m_streamList->SetItemCurrent(item); + + foundActiveStream = true; + } + } + + if (m_streamList->GetCount() > 0 && !foundActiveStream) + { + m_streamList->SetItemCurrent(0); + gPlayer->stop(true); + } + + if (m_noStreams) + m_noStreams->SetVisible((m_streamList->GetCount() == 0)); + + if (m_streamList->GetCount() == 0) + LOG(VB_GENERAL, LOG_ERR, "StreamView hasn't found any streams!"); +} + +void StreamView::streamItemClicked(MythUIButtonListItem *item) +{ + if (!item) + return; + + gPlayer->setCurrentTrackPos(m_streamList->GetCurrentPos()); +} + +void StreamView::streamItemVisible(MythUIButtonListItem *item) +{ + if (!item) + return; + + if (!item->GetText("imageloaded").isEmpty()) + return; + + Metadata *mdata = qVariantValue (item->GetData()); + if (mdata) + { + if (!mdata->LogoUrl().isEmpty()) + { + QString artFile = findIcon("stream", QString("%1").arg(mdata->ID())); + if (artFile.isEmpty()) + { + // download image and cache it for later + QUrl url(mdata->LogoUrl()); + QFileInfo fi(url.path()); + QString saveFilename = GetConfDir() + QString("/MythMusic/Icons/%1/%2.%3") + .arg("stream").arg(mdata->ID()).arg(fi.suffix()); + GetMythDownloadManager()->queueDownload(mdata->LogoUrl(), saveFilename, this); + } + else + { + item->SetImage(artFile); + } + } + else + item->SetImage(""); + } + + item->SetText(" ", "imageloaded"); +} + +void StreamView::addStream(Metadata *mdata) +{ + // sanity check this is a radio stream + int repo = ID_TO_REPO(mdata->ID()); + if (repo != RT_Radio) + { + LOG(VB_GENERAL, LOG_ERR, "StreamView asked to add a stream but it isn't a radio stream!"); + return; + } + + gMusicData->all_streams->addStream(mdata); + + updateStreamList(); + + // find the new stream and make it the active item + for (int x = 0; x < m_streamList->GetCount(); x++) + { + MythUIButtonListItem *item = m_streamList->GetItemAt(x); + Metadata *itemsdata = qVariantValue (item->GetData()); + if (itemsdata) + { + if (mdata->ID() == itemsdata->ID()) + { + m_streamList->SetItemCurrent(item); + break; + } + } + } +} + +void StreamView::updateStream(Metadata *mdata) +{ + // sanity check this is a radio stream + int repo = ID_TO_REPO(mdata->ID()); + if (repo != RT_Radio) + { + LOG(VB_GENERAL, LOG_ERR, "StreamView asked to update a stream but it isn't a radio stream!"); + return; + } + + gMusicData->all_streams->updateStream(mdata); + + // force the icon to reload incase it changed + QFile::remove(mdata->getAlbumArtFile()); + mdata->reloadAlbumArtImages(); + + updateStreamList(); + + // find the stream and make it the active item + for (int x = 0; x < m_streamList->GetCount(); x++) + { + MythUIButtonListItem *item = m_streamList->GetItemAt(x); + Metadata *itemsdata = qVariantValue (item->GetData()); + if (itemsdata) + { + if (mdata->ID() == itemsdata->ID()) + { + m_streamList->SetItemCurrent(item); + break; + } + } + } +} + +void StreamView::deleteStream(Metadata *mdata) +{ + // sanity check this is a radio stream + int repo = ID_TO_REPO(mdata->ID()); + if (repo != RT_Radio) + { + LOG(VB_GENERAL, LOG_ERR, "StreamView asked to delete a stream but it isn't a radio stream!"); + return; + } + + gMusicData->all_streams->removeStream(mdata); + + updateStreamList(); +} + +/////////////////////////////////////////////////////////////////////////////// + +EditStreamMetadata::EditStreamMetadata(MythScreenStack *parentStack, + StreamView *parent, + Metadata *mdata) + : MythScreenType(parentStack, "editstreampopup") +{ + m_parent = parent; + m_streamMeta = mdata; +} + +bool EditStreamMetadata::Create() +{ + if (!LoadWindowFromXML("stream-ui.xml", "editstreammetadata", this)) + return false; + + bool err = false; + UIUtilE::Assign(this, m_stationEdit, "stationedit", &err); + UIUtilE::Assign(this, m_channelEdit, "channeledit", &err); + UIUtilE::Assign(this, m_urlEdit, "urledit", &err); + UIUtilE::Assign(this, m_logourlEdit, "logourledit", &err); + UIUtilE::Assign(this, m_genreEdit, "genreedit", &err); + UIUtilE::Assign(this, m_formatEdit, "formatedit", &err); + UIUtilE::Assign(this, m_saveButton, "savebutton", &err); + UIUtilE::Assign(this, m_cancelButton, "cancelbutton", &err); + UIUtilE::Assign(this, m_searchButton, "searchbutton", &err); + + if (err) + { + LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'editstreampopup'"); + return false; + } + + if (m_streamMeta) + { + m_stationEdit->SetText(m_streamMeta->Station()); + m_channelEdit->SetText(m_streamMeta->Channel()); + m_urlEdit->SetText(m_streamMeta->Url()); + m_logourlEdit->SetText(m_streamMeta->LogoUrl()); + m_genreEdit->SetText(m_streamMeta->Genre()); + m_formatEdit->SetText(m_streamMeta->MetadataFormat()); + } + else + m_formatEdit->SetText("%a - %t"); + + connect(m_searchButton, SIGNAL(Clicked()), this, SLOT(searchClicked())); + connect(m_cancelButton, SIGNAL(Clicked()), this, SLOT(Close())); + connect(m_saveButton, SIGNAL(Clicked()), this, SLOT(saveClicked())); + + BuildFocusList(); + + return true; +} + +void EditStreamMetadata::searchClicked(void ) +{ + MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack(); + MythScreenType *screen = new SearchStream(mainStack, this); + + if (screen->Create()) + mainStack->AddScreen(screen); + else + delete screen; + +} + +void EditStreamMetadata::saveClicked(void) +{ + bool doUpdate = true; + + if (!m_streamMeta) + { + m_streamMeta = new Metadata; + m_streamMeta->setRepo(RT_Radio); + doUpdate = false; + } + + m_streamMeta->setStation(m_stationEdit->GetText()); + m_streamMeta->setChannel(m_channelEdit->GetText()); + m_streamMeta->setUrl(m_urlEdit->GetText()); + m_streamMeta->setFormat("cast"); + m_streamMeta->setMetadataFormat(m_formatEdit->GetText()); + m_streamMeta->setLogoUrl(m_logourlEdit->GetText()); + m_streamMeta->setGenre(m_genreEdit->GetText()); + + if (doUpdate) + m_parent->updateStream(m_streamMeta); + else + m_parent->addStream(m_streamMeta); + + Close(); +} + +void EditStreamMetadata::changeStreamMetadata(Metadata* mdata) +{ + if (mdata) + { + m_stationEdit->SetText(mdata->Station()); + m_channelEdit->SetText(mdata->Channel()); + m_urlEdit->SetText(mdata->Url()); + m_logourlEdit->SetText(mdata->LogoUrl()); + m_genreEdit->SetText(mdata->Genre()); + m_formatEdit->SetText(mdata->MetadataFormat()); + } +} + +/////////////////////////////////////////////////////////////////////////////// + +SearchStream::SearchStream(MythScreenStack *parentStack, + EditStreamMetadata *parent) + : MythScreenType(parentStack, "searchstream") +{ + m_parent = parent; +} + +bool SearchStream::Create() +{ + if (!LoadWindowFromXML("stream-ui.xml", "searchstream", this)) + return false; + + bool err = false; + UIUtilE::Assign(this, m_stationList, "stationlist", &err); + UIUtilE::Assign(this, m_genreList, "genrelist", &err); + UIUtilE::Assign(this, m_streamList, "streamlist", &err); + UIUtilE::Assign(this, m_channelEdit, "channeledit", &err); + UIUtilE::Assign(this, m_matchesText, "matchestext", &err); + + if (err) + { + LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'searchstream'"); + return false; + } + + connect(m_streamList, SIGNAL(itemClicked(MythUIButtonListItem*)), + this, SLOT(streamClicked(MythUIButtonListItem*))); + connect(m_streamList, SIGNAL(itemVisible(MythUIButtonListItem*)), + this, SLOT(streamVisible(MythUIButtonListItem*))); + connect(m_stationList, SIGNAL(itemSelected(MythUIButtonListItem*)), + this, SLOT(updateStreams())); + connect(m_genreList, SIGNAL(itemSelected(MythUIButtonListItem*)), + this, SLOT(updateStreams())); + connect(m_channelEdit, SIGNAL(valueChanged()), + this, SLOT(updateStreams())); + + loadStreams(); + updateStations(); + updateGenres(); + updateStreams(); + + BuildFocusList(); + + return true; +} + +void SearchStream::streamClicked(MythUIButtonListItem *item) +{ + if (!item) + return; + + Metadata *mdata = qVariantValue (item->GetData()); + if (mdata) + m_parent->changeStreamMetadata(mdata); + + Close(); +} + +void SearchStream::streamVisible(MythUIButtonListItem *item) +{ + if (!item) + return; + + Metadata *mdata = qVariantValue (item->GetData()); + if (mdata) + { + if (item->GetText("dummy") == " ") + { + item->SetImage(mdata->LogoUrl()); + item->SetText("", "dummy"); + } + } +} + +void SearchStream::loadStreams(void) +{ + m_streams.clear(); + m_stations.clear(); + m_genres.clear(); + + m_stations.append(tr("")); + m_genres.append(tr("")); + + QString filename = QString("%1%2").arg(GetShareDir()).arg("mythmusic/streams.xml"); + + QFile xmlFile(filename); + + if (!xmlFile.exists() || !xmlFile.open(QIODevice::ReadOnly)) + { + LOG(VB_GENERAL, LOG_ERR, "SearchStream: Cannot open streams.xml"); + return; + } + + QString errorMsg; + int errorLine = 0; + int errorColumn = 0; + + QDomDocument domDoc; + + if (!domDoc.setContent(&xmlFile, false, &errorMsg, + &errorLine, &errorColumn)) + { + LOG(VB_GENERAL, LOG_ERR, + "SearchStream: Could not read content of streams.xml" + + QString("\n\t\t\tError parsing %1").arg(filename) + + QString("\n\t\t\tat line: %1 column: %2 msg: %3") + .arg(errorLine).arg(errorColumn).arg(errorMsg)); + return; + } + + QDomNodeList itemList = domDoc.elementsByTagName("item"); + + QDomNode itemNode; + for (int i = 0; i < itemList.count(); i++) + { + itemNode = itemList.item(i); + + Metadata mdata; + mdata.setStation(itemNode.namedItem(QString("station")).toElement().text()); + mdata.setChannel(itemNode.namedItem(QString("channel")).toElement().text()); + mdata.setUrl(itemNode.namedItem(QString("url")).toElement().text()); + mdata.setLogoUrl(itemNode.namedItem(QString("logourl")).toElement().text()); + mdata.setGenre(itemNode.namedItem(QString("genre")).toElement().text()); + mdata.setMetadataFormat(itemNode.namedItem(QString("metadataformat")).toElement().text()); + + m_streams.insert(mdata.Station() + '-' + mdata.Channel(), mdata); + + if (!m_stations.contains(mdata.Station())) + m_stations.append(mdata.Station()); + + QStringList genreList = mdata.Genre().split(','); + + for (int x = 0; x < genreList.count(); x++) + { + if (!m_genres.contains(genreList[x].trimmed())) + m_genres.append(genreList[x].trimmed()); + } + } + + xmlFile.close(); + + m_stations.sort(); + m_genres.sort(); +} + +void SearchStream::updateStations(void ) +{ + m_stationList->Reset(); + + for (int x = 0; x < m_stations.count(); x++) + new MythUIButtonListItem(m_stationList, m_stations.at(x)); + + m_stationList->SetValue(tr("")); +} + +void SearchStream::updateGenres(void ) +{ + m_genreList->Reset(); + + for (int x = 0; x < m_genres.count(); x++) + new MythUIButtonListItem(m_genreList, m_genres.at(x)); + + m_genreList->SetValue(tr("")); +} + +void SearchStream::updateStreams(void) +{ + m_streamList->Reset(); + + QString station = m_stationList->GetValue(); + QString genre = m_genreList->GetValue(); + QString channel = m_channelEdit->GetText(); + + bool searchStation = (station != tr("")); + bool searchGenre = (genre != tr("")); + bool searchChannel = !channel.isEmpty(); + + QMap::iterator it; + + for (it = m_streams.begin(); it != m_streams.end(); ++it) + { + Metadata *mdata = &(*it); + + if (searchStation && station != mdata->Station()) + continue; + + if (searchGenre && !mdata->Genre().contains(genre, Qt::CaseInsensitive)) + continue; + + if (searchChannel && !mdata->Channel().contains(channel, Qt::CaseInsensitive)) + continue; + + // if we got here we must have a match so add it to the list + MythUIButtonListItem *item = new MythUIButtonListItem(m_streamList, + "", qVariantFromValue(mdata)); + + MetadataMap metadataMap; + mdata->toMap(metadataMap); + item->SetTextFromMap(metadataMap); + + item->SetText(" ", "dummy"); + } + + m_matchesText->SetText(QString("%1").arg(m_streamList->GetCount())); +} diff --git a/mythplugins/mythmusic/mythmusic/streamview.h b/mythplugins/mythmusic/mythmusic/streamview.h new file mode 100644 index 00000000000..9cb86a7d77d --- /dev/null +++ b/mythplugins/mythmusic/mythmusic/streamview.h @@ -0,0 +1,116 @@ +#ifndef STREAMVIEW_H_ +#define STREAMVIEW_H_ + +// qt +#include +#include + +// myth +#include + +// mythmusic +#include +//#include "metadata.h" + +class MythUIWebBrowser; +class MythUIText; +class MythUIProgressBar; + +class StreamView : public MusicCommon +{ + Q_OBJECT + + public: + StreamView(MythScreenStack *parent); + ~StreamView(void); + + bool Create(void); + bool keyPressEvent(QKeyEvent *); + + void addStream(Metadata *mdata); + void deleteStream(Metadata *mdata); + void updateStream(Metadata *mdata); + + virtual void ShowMenu(void); + + protected: + void customEvent(QEvent *event); + void updateStreamList(void); + void editStream(void); + void removeStream(void); + + private slots: + void streamItemClicked(MythUIButtonListItem *item); + void streamItemVisible(MythUIButtonListItem *item); + void doRemoveStream(bool ok); + + private: + MythUIButtonList *m_streamList; + MythUIText *m_noStreams; + MythUIText *m_bufferStatus; + MythUIProgressBar *m_bufferProgress; +}; + +class EditStreamMetadata : public MythScreenType +{ + Q_OBJECT + + public: + EditStreamMetadata(MythScreenStack *parentStack, StreamView *parent, + Metadata *mdata = NULL); + + bool Create(); + void changeStreamMetadata(Metadata *mdata); + + private slots: + void searchClicked(void); + void saveClicked(void); + + private: + StreamView *m_parent; + + Metadata *m_streamMeta; + + MythUITextEdit *m_stationEdit; + MythUITextEdit *m_channelEdit; + MythUITextEdit *m_urlEdit; + MythUITextEdit *m_logourlEdit; + MythUITextEdit *m_formatEdit; + MythUITextEdit *m_genreEdit; + + MythUIButton *m_searchButton; + MythUIButton *m_cancelButton; + MythUIButton *m_saveButton; +}; + +class SearchStream : public MythScreenType +{ + Q_OBJECT + + public: + SearchStream(MythScreenStack *parentStack, EditStreamMetadata *parent); + + bool Create(); + + private slots: + void updateStreams(void); + void streamClicked(MythUIButtonListItem *item); + void streamVisible(MythUIButtonListItem *item); + + private: + void loadStreams(void); + void updateStations(void); + void updateGenres(void); + + EditStreamMetadata *m_parent; + QMap m_streams; + QStringList m_stations; + QStringList m_genres; + + MythUIButtonList *m_stationList; + MythUIButtonList *m_genreList; + MythUITextEdit *m_channelEdit; + MythUIButtonList *m_streamList; + MythUIText *m_matchesText; +}; +#endif diff --git a/mythplugins/mythmusic/mythmusic/visualizerview.cpp b/mythplugins/mythmusic/mythmusic/visualizerview.cpp index b506cc73960..3ce9632f0db 100644 --- a/mythplugins/mythmusic/mythmusic/visualizerview.cpp +++ b/mythplugins/mythmusic/mythmusic/visualizerview.cpp @@ -57,7 +57,8 @@ bool VisualizerView::Create(void) void VisualizerView::customEvent(QEvent *event) { - if (event->type() == MusicPlayerEvent::TrackChangeEvent) + if (event->type() == MusicPlayerEvent::TrackChangeEvent || + event->type() == MusicPlayerEvent::PlayedTracksChangedEvent) showTrackInfoPopup(); MusicCommon::customEvent(event); diff --git a/mythplugins/mythmusic/theme/default-wide/stream-ui.xml b/mythplugins/mythmusic/theme/default-wide/stream-ui.xml new file mode 100644 index 00000000000..5e97a242906 --- /dev/null +++ b/mythplugins/mythmusic/theme/default-wide/stream-ui.xml @@ -0,0 +1,440 @@ + + + + + + + + + 15,15,1250,265 + + + + 15,290,1250,170 + + + + 15,470,1250,230 + + + + + + 25,25,1225,250 + 0 + vertical + stack + no + 0,0,1225,230 + + + 0,0,100%,46 + + + 5,5,36,36 + mm_icecast.png + + + + 1190,10 + + + 0,0 + mm_playing_%1.png + 160 + + + + + 5,5 + mm_pauseicon.png + + + + + 5,5 + mm_stopicon.png + + + + + + + + + + + + 5,5,36,36 + mm_icecast.png + + + 0,0,100%,46 + + + + + 0,0,100%,46 + + + + + 1140,230 + + + 1180,230 + + + + + 25,300,1225,150 + 0 + vertical + stack + no + 0,0,1225,150 + + + 0,0,100%,46 + + + 5,5,36,36 + mm_icecast.png + + + + + + + + + + + + + + 5,5,36,36 + mm_icecast.png + + + 0,0,100%,46 + + + + + 0,0,100%,46 + + + + + 1140,135 + + + 1180,135 + + + + + mm_blackhole_border.png + 32,489,162,162 + + + + + + + + + + + + 230,670 + horizontal + + + mm_progress-bg.png + + + mm_progress-fg.png + + + + + + + mm_blackhole_border.png + 1082,489,162,162, + + + + + + + + + + 30,670 + + + + mm_nothumb.png + 35,493,156,155 + + + + + + + + + + + + + + + 424,106 + + + + + + + 424,166 + + + + + 424,226,700,50 + + + + + 424,286 + + + + + 424,346 + + + + + 424,406 + + + + + + + + + + + + + + + 420,56 + + + + + 420,111 + + + + + 420,166 + + + + + + + + 30,225,1220,480 + 0 + vertical + stack + no + -1,50 + 0,0,1220,480 + + + 0,0,100%,46 + + 5,5,36,36 + mm_icecast.png + + + + 1185,10 + + + + playlist_yes.png + + + + + + + + + + + + 5,5,36,36 + mm_icecast.png + + + 0,0,1220,46 + + + + + 0,0,1220,46 + + + + + + 1160,465 + + + + 1190,465 + + + + + + + diff --git a/mythplugins/mythmusic/theme/menus/musicmenu.xml b/mythplugins/mythmusic/theme/menus/musicmenu.xml index ba8054b5304..5097862759e 100644 --- a/mythplugins/mythmusic/theme/menus/musicmenu.xml +++ b/mythplugins/mythmusic/theme/menus/musicmenu.xml @@ -5,13 +5,13 @@ Play Music MUSIC_PLAY - + - +