import os
import random
import config
import defs
class Radio:
radioPath = ""
adsPath = ""
newsPath = ""
radioName = ""
ids = []
monoSolos = []
generals = []
musics = []
ads = []
news = []
playedAds = []
playedNews = []
playedMusics = []
playedMonoSolos = []
def __init__(self, radioName):
self.radioPath = os.getcwd() + "/" + radioName
self.adsPath = os.getcwd() + "/radio-adverts"
self.newsPath = os.getcwd() + "/radio-news"
self.radioName = radioName
print("Playing: " + self.radioName)
self.ids = defs.getFilesByRegex(self.radioPath, config.idPattern)
self.monoSolos = defs.getFilesByRegex(self.radioPath, config.monoSoloPattern)
self.generals = defs.getFilesByRegex(self.radioPath, config.generalPattern)
self.musics = defs.getFilesByRegex(self.radioPath, config.musicPatten)
self.ads = defs.getFilesByRegex(self.adsPath, ".*")
self.news = defs.getFilesByRegex(self.newsPath, ".*")
def startRadio(self):
while True:
# Check if we will play an ad or news
if random.random() < config.adsProbability:
if config.debug:
print("Playing ads and news")
self.playAdAndNews()
if config.debug:
print("Playing music")
self.playMusic()
def playMusic(self):
music = self.chooseRandomUnplayedTrack("music")
musicName = music.split("/")[-1].split(".")[0]
# We choose random pattern
pattern = random.choice(config.musicPatterns).split(", ")
if config.debug:
print("Pattern: " + str(pattern))
# We will now play the pattern
for item in pattern:
if item == "ID":
defs.playSound(random.choice(self.ids))
elif item == "GENERAL":
defs.playSound(random.choice(self.generals))
elif item == "MONO_SOLO":
defs.playSound(random.choice(self.monoSolos))
elif item == "MUSIC":
introFiles = defs.getMusicIntroFiles(self.radioPath, musicName)
if len(introFiles) > 0:
intro = random.choice(introFiles)
defs.playSoundWithDelayedSecondSound(music, intro)
else:
defs.playSound(music)
def playAdAndNews(self):
# We choose random pattern
pattern = random.choice(config.adsAndNewsPatterns).split(", ")
if config.debug:
print("Pattern: " + str(pattern))
# We will now play the pattern
for item in pattern:
if item == "AD":
defs.playSound(self.chooseRandomUnplayedTrack("ad"))
elif item == "NEWS":
defs.playSound(self.chooseRandomUnplayedTrack("news"))
elif item == "MONO_SOLO":
defs.playSound(self.chooseRandomUnplayedTrack("monoSolo"))
def chooseRandomUnplayedTrack(self, trackType):
if trackType == "music":
if (len(self.playedMusics) == len(self.musics)):
self.playedMusics = list()
track = random.choice(self.musics)
while track in self.playedMusics:
track = random.choice(self.musics)
self.playedMusics.append(track)
elif trackType == "ad":
if (len(self.playedAds) == len(self.ads)):
self.playedAds = list()
track = random.choice(self.ads)
while track in self.playedAds:
track = random.choice(self.ads)
self.playedAds.append(track)
elif trackType == "news":
if (len(self.playedNews) == len(self.news)):
self.playedNews = list()
track = random.choice(self.news)
while track in self.playedNews:
track = random.choice(self.news)
self.playedNews.append(track)
elif trackType == "monoSolo":
if (len(self.playedMonoSolos) == len(self.monoSolos)):
self.playedMonoSolos = list()
track = random.choice(self.monoSolos)
while track in self.playedMonoSolos:
track = random.choice(self.monoSolos)
self.playedMonoSolos.append(track)
else:
raise Exception("Invalid track type")
return track
radiosStations = ["non-stop-pop", "silverlake", "funk"]
chosenRadio = random.choice(radiosStations)
try:
radio = Radio(chosenRadio)
radio.startRadio()
except KeyboardInterrupt:
print("Exiting...")
exit(0)