Home

Awesome

<div align=center> <p align=center><img src=https://user-images.githubusercontent.com/27947066/267328833-3e81a98e-2acb-4291-89cb-f3f9bed6c299.png width=250px></p> <h1 align=center> RADIOACTIVE </h1> <p> SEARCH - PLAY - RECORD - REPEAT </p>

<a href="https://www.producthunt.com/posts/radio-active?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-radio-active" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=305380&theme=dark" alt="radio-active - Play more than 30K radio stations from your terminal | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>

<p align=center ><img align=center src=https://static.pepy.tech/personalized-badge/radio-active?period=total&units=international_system&left_color=black&right_color=green&left_text=TotalInstalls></p> <p> <img width="500px" alt="UPI" src="https://raw.githubusercontent.com/deep5050/random-shits-happen-here/main/235618869-8c9d9bce-096d-469e-8f61-c29cc01eacc3%20(1).png"> </p> <p align=center> <img align=center src=https://user-images.githubusercontent.com/27947066/271250790-291c02fa-e568-45c8-8097-72167a109b82.png width=550px> <hr> <img alt="GitHub" src="https://img.shields.io/github/license/deep5050/radio-active?style=for-the-badge"> <img alt="PyPI" src="https://img.shields.io/pypi/v/radio-active?style=for-the-badge"> <img alt="PyPI - Downloads" src="https://img.shields.io/pypi/dm/radio-active?style=for-the-badge"> <img alt="CodeFactor Grade" src="https://img.shields.io/codefactor/grade/github/deep5050/radio-active/main?style=for-the-badge"> <a href=https://discord.gg/53rfebFyqK><img alt="Discord" src="https://img.shields.io/discord/847703568949051392?style=for-the-badge"></a> </p> <p align=center> <a href=https://www.youtube.com/watch?v=X-NfK5XbM90><img alt="YouTube Video Likes and Dislikes" src="https://img.shields.io/youtube/likes/X-NfK5XbM90?style=social&withDislikes"></a></p> <p align=center> <a href=https://discord.gg/53rfebFyqK> Join Discord Server </a></p> </div>

Demo

<p align=center> <img src=https://github.com/deep5050/radio-active/assets/27947066/358d5c7f-c501-4335-873b-a9a1dc45cd69 width=600px> </p>

Features

See my progress ➡️ here

Why radioactive?

While there are various CLI-based radio players like PyRadio and TERA, Radioactive stands out for its simplicity. It's designed to work seamlessly right from the start. You don't need to be a hardcore Linux or Vim expert to enjoy radio stations with Radioactive. The goal of Radioactive is to offer a straightforward user interface that's easy to grasp and comes preconfigured, without unnecessary complexities.

In the Spotlight

The praise from YouTube channels and blogs underscores Radioactive's emergence as a top choice for radio enthusiasts. Its simple yet powerful features, make it a must-try application for radio lovers of all expertise levels. Discover the world of radio with ease – experience Radioactive today.

  1. See DistroTube YouTube channel talks about my app: https://www.youtube.com/watch?v=H7sf1RDFXpU&pp=ygUYcmFkaW9hY3RpdmUgcGxheWVyIHJhZGlv
  2. Ubunlog: https://ubunlog.com/en/radio-activate-an-application-to-listen-to-the-radio-from-the-terminal/
  3. LinuxLinks: https://www.linuxlinks.com/radio-active-listen-radio-terminal/3/
  4. Official entry in the RadioBrowser API: https://www.radio-browser.info/users
  5. ThingsAndStuff: https://wiki.thingsandstuff.org/Streaming#:~:text=com/billniakas/bash_radio_gr-,radio%2Dactive,-https%3A//github.com
  6. Awesome-stars: https://arbal.github.io/awesome-stars/#:~:text=deep5050/radio%2Dactive%20%2D%20Play%20any%20radios%20around%20the%20globe%20right%20from%20the%20terminal%20%3Azap%3A
  7. OpenSourceAgenda: https://www.opensourceagenda.com/projects/my-awesome-stars#:~:text=deep5050/radio%2Dactive%20%2D%20Play%20any%20radios%20around%20the%20globe%20right%20from%20the%20terminal%20%3Azap%3A

Install

Simply run: pip3 install --upgrade radio-active

I recommend installing it using pipx install radio-active

TODO:

External Dependency

It needs FFmpeg to be installed on your system in order to record the audio

on Ubuntu-based system >= 20.04 Run

sudo apt update
sudo apt install ffmpeg

For other systems including Windows see the above link

Installing FFmpeg

FFmpeg is required for this program to work correctly. Install FFmpeg by following these steps:-

Run

Search a station with radio --search [STATION_NAME] or simply radio :zap: to select from the favorite menu.

Tips

  1. Use a modern terminal emulator, otherwise the UI might break! (gets too ugly sometimes)
  2. On Windows, instead of the default Command Prompt, use the new Windows Terminal or web-based emulators like Hyper, Cmdr, Terminus, etc. for better UI
  3. Let the app run for at least 5 seconds (not a serious issue though, for better performance)

Demo

<!-- <a align=center href="https://www.youtube.com/watch?v=X-NfK5XbM90" target="_blank"> <img align=center src=https://user-images.githubusercontent.com/27947066/267328820-f7264e02-edc1-46f3-9548-5dfb50a6627d.jpg /> </a> <hr> -->

<a align=center href="https://asciinema.org/a/611668" target="_blank"><img src="https://asciinema.org/a/617580.svg" /></a>

Options

OptionsNoteDescriptionDefaultValues
(No Option)OptionalSelect a station from menu to playFalse
--search, -SOptionalStation nameNone
--play, -POptionalA station from fav list or url for direct playNone
--country, -COptionalDiscover stations by country codeFalse
--stateOptionalDiscover stations by country stateFalse
--languageoptionalDiscover stations byFalse
--tagOptionalDiscover stations by tags/genreFalse
--uuid, -UOptionalID of the stationNone
--record , -ROptionalRecord a station and save to fileFalse
--filename, -NOptionalFilename to used to save the recorded audioNone
--filepathOptionalPath to save the recordings<DEFAULT_DIR>
--filetype, -TOptionalFormat of the recordingmp3mp3,auto
--lastOptionalPlay last played stationFalse
--randomOptionalPlay a random station from favorite listFalse
--sortOptionalSort the result pagevotes
--filterOptionalFilter search resultsNone
--limitOptionalLimit the # of results in the Discover table100
--volume , -VOptionalChange the volume passed into ffplay80[0-100]
--favorite, -FOptionalAdd current station to fav listFalse
--add , -AOptionalAdd an entry to fav listFalse
--list, -WOptionalShow fav listFalse
--removeOptionalRemove entries from favorite listFalse
--flushOptionalRemove all the entries from fav listFalse
--kill , -KOptionalKill background radios.False
--loglevelOptionalLog level of the programInfoinfo, warning, error, debug
--playerOptionalMedia player to useffplayvlc, mpv, ffplay
<hr>

[!NOTE] Once you save/play at least one station, invoking radio without any options will show a selection menu

--search, -S: Search for a station online.

--play, -P: You can pass an exact name from your favorite stations or alternatively pass any direct stream URL. This would bypass any user selection menu (useful when running from another script)

--uuid,-U: When station names are too long or confusing (or multiple results for the same name) use the station's uuid to play. --uuid gets the greater priority than --search. Example: 96444e20-0601-11e8-ae97-52543be04c81. type u on the runtime command to get the UUID of a station.

--loglevel,: Don't need to specify unless you are developing it. info, warning, error, debug

-F: Add the current station to your favorite list. Example: -F my_fav_1

-A: Add any stations to your list. You can add stations that are not currently available on our API. When adding a new station enter a name and direct URL to the audio stream.

--limit: Specify how many search results should be displayed.

--filetype: Specify the extension of the final recording file. default is mp3. you can provide -T auto to autodetect the codec and set file extension accordingly (in original form).

DEFAULT_DIR: is /home/user/Music/radioactive

Runtime Commands

Input a command during the radio playback to perform an action. Available commands are:

Enter a command to perform an action: ?

t/T/track: Current song name (track info)
r/R/record: Record a station
f/F/fav: Add station to favorite list
rf/RF/recordfile: Specify a filename for the recording.
h/H/help/?: Show this help message
q/Q/quit: Quit radioactive

Sort Parameters

you can sort the result page with these parameters:

Filter Parameters

Filter search results with --filter. Some possible expressions are

Allowed operators are:

Allowed keys are: name, country (countrycode as value), language, bitrate, votes, codec, tags

Provide multiple filters at one go, use &

A complex filter example: --filter "country!=CA&tags!=islamic,classical&votes>500"

[!NOTE] set --limit to a higher value while filtering results

Default Configs

Default configuration file is added into your home directory as .radio-active-configs.ini

[AppConfig]
loglevel = info
limit = 100
sort = votes
filter = none
volume = 80
filepath = /home/{user}/recordings/radioactive/
filetype = mp3
player = ffplay

[!WARNING] Do NOT modify the keys, only change the values. you can give any absolute or relative path as filepath.

Bonus Tips

  1. when using rf: you can force the recording to be in mp3 format by adding an extension to the file name. Example "talk-show.mp3". If you don't specify any extension it should auto-detect. Example "new_show"

  2. You don't have to pass the exact option name, a portion of it will also work. for example --sea for --search, --coun for --country, --lim for --limit

  3. It's better to leave the --filetype as mp3 when you need to record something quickly. The autocodec takes a few milliseconds extra to determine the codec.

Changes

see CHANGELOG

Community

Share you favorite list with our community 🌐 ➡️ Here

Your favorite list .radio-active-alias is under your home directory as a hidden file :)

Support

<p> <a href=https://deep5050.github.io/payme>Visit my contribution page for more payment options. </p> <p align=center><a href="https://www.buymeacoffee.com/deep5050" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 40px !important;width: 117px !important;" ></a></p>

Acknowledgements

<div>Icons made by <a href="https://www.freepik.com" title="Freepik">Freepik</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a></div> <div align=center> <img src=https://github.com/deep5050/random-shits-happen-here/assets/27947066/83d08065-c209-4012-abb7-9c0aa64d761b width=400px > <p align=center> Happy Listening </p> </div>

Contributors ✨

Thanks goes to these wonderful people (emoji key):

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --> <!-- prettier-ignore-start --> <!-- markdownlint-disable --> <table> <tbody> <tr> <td align="center" valign="top" width="14.28%"><a href="http://www.bjoli.com"><img src="https://avatars.githubusercontent.com/u/48383?v=4?s=100" width="100px;" alt="Joe Smith"/><br /><sub><b>Joe Smith</b></sub></a><br /><a href="https://github.com/deep5050/radio-active/commits?author=Yasumoto" title="Tests">⚠️</a> <a href="https://github.com/deep5050/radio-active/commits?author=Yasumoto" title="Code">💻</a> <a href="#ideas-Yasumoto" title="Ideas, Planning, & Feedback">🤔</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/salehjafarli"><img src="https://avatars.githubusercontent.com/u/81613563?v=4?s=100" width="100px;" alt="salehjafarli"/><br /><sub><b>salehjafarli</b></sub></a><br /><a href="https://github.com/deep5050/radio-active/commits?author=salehjafarli" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/marvoh"><img src="https://avatars.githubusercontent.com/u/5451142?v=4?s=100" width="100px;" alt="marvoh"/><br /><sub><b>marvoh</b></sub></a><br /><a href="https://github.com/deep5050/radio-active/commits?author=marvoh" title="Code">💻</a> <a href="https://github.com/deep5050/radio-active/issues?q=author%3Amarvoh" title="Bug reports">🐛</a></td> </tr> </tbody> </table> <!-- markdownlint-restore --> <!-- prettier-ignore-end --> <!-- ALL-CONTRIBUTORS-LIST:END -->

This project follows the all-contributors specification. Contributions of any kind welcome!

Alt

<div align=center> <p> <img src=https://stars.medv.io/deep5050/radio-active.svg align=center> </p> </div>