Creates personalized radio stations with your own radio jockey!
Phoenix10.1 is a software to generate personalized pre-recorded internet radios that has a text-to-speech based radio jockey.
This radio jockey is capable of playing your favorite songs, including tracks from your preferred artist, genre, or Billboard chart. It can automatically discover and play fascinating clips from your preferred podcasts, provide weather updates, and deliver daily news.
For a more authentic radio experience, it brightens up your day with fictional company ads, conducts daily QnA with the audience, and shares interesting "On this day..." facts.
It is recommended to use Python 3.10 or newer to run the code.
If you're using a Debian-based distribution, you can install all dependencies using install.sh
:
sh install.sh
This software requires ffmpeg
and espeak
. To install them on MacOS:
brew install ffmpeg espeak
To install them on Linux (Debain-based):
sudo apt-get install ffmpeg espeak
For Windows users, to setup and use ffmpeg
, follow this guide from Stack Exchange. Moreover, to setup espeak
, use this tutorial from Stack Overflow.
To install the Python dependencies, use:
pip3 install -r ./requirements.txt
The software also requires installing punkt
from nltk
.
In a Python shell, use the following code to install punkt
:
import nltk
nltk.download("punkt")
To generate TTS (text-to-speech), Coqui-ai's vits
model is used.
We recommend running a generic TTS
command on your shell as this will prompt TTS
to automatically install the vits
model.
tts --text "I am excited to demo Phoenix ten point one" --model_name tts_models/en/vctk/vits --speaker_idx p267 --out_path temp.wav
The vits
model requires around 150 MB
of storage.
To create your own radio, start by updating the default schema in ./data/schema.json
.
Each action in schema.json
is a list with two indices, one mentions the action and another mentions the characteristic of that action.
Actions available are:
up
music
local-music
[album_path, num_of_songs]
music-artist
[artist_name, num_of_songs]
music-genre
[genre, num_of_songs]
music-billboard
[chart_name, num_of_songs]
podcast
[podcast_rss_link, max_clip_duration_in_mins]
weather
null
to fetch weather using your IP address.news
./data/rss.json
.[category, num_of_news_items]
fun
end
no-ads
up
no-qna
up
Once schema.json
is configured, run the software using:
python3 radio.py
Your entire broadcast would be stored in a radio.mp3
file.
You can modify the voice of the radio jockey, the name of your radio station/host, and the volume of the background music by editing the ./config.json
file. To experiment with different voices, you can use Coqui-ai's vits
model with the following command:
tts-server --model_name tts_models/en/vctk/vits
For advice on selecting the best voices, check out this discussion.
The volume of the background music can be adjusted between 0.1
and 2
. A value of 0.1
will turn off the background music, while a value of 2
doubles its volume.
We always welcome and greatly appreciate contributions! You can contribute in various ways, like by reporting and fixing bugs or suggesting and implementing new features. To start contributing, you can either submit a pull request or open an issue.
If you're submitting a pull request, please make sure to run pylint
before submitting. Although it's not mandatory, performing unit tests on your code is highly encouraged.
To run the unit tests, use this command (from the root directory):
python3 -m coverage run --omit */site-packages/* -m unittest
We also recommend using mutation testing with mutmut
. To execute mutmut
, run this command (once again from the root directory):
mutmut run --paths-to-mutate ./radio.py --tests-dir ./tests/ --runner 'python3 -m unittest'
Bear in mind that mutation testing is a costly means of evaluating your test suite and can take several hours. So, only use this while suggesting a major change.
The code is open-sourced under the MIT License.
Every software stands on the shoulders of giants, and this is no different!
rig
and the names database (fnames.txt
, lnames.txt
, locdata.txt
) is from the US Census database../data/genres.csv
is curated from the The Million Song Dataset.
gpt-3.5-turbo
model. We followed the Sharing & Publication Policy of OpenAI and acknowledge that we have reviewed, edited, and revised the language of the content to our preference. We take ultimate responsibility for the content generated.