From 58b187ec82c3e98f003d9b2e82b9112464e50e7c Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Fri, 18 Oct 2013 22:54:59 +0200 Subject: [PATCH] reorder objects, add yaml example, add m3u playlist support --- deefuzzer/core.py | 1 + deefuzzer/{tools => }/player.py | 1 + deefuzzer/{tools => }/recorder.py | 1 + deefuzzer/{tools => }/relay.py | 2 +- deefuzzer/station.py | 39 ++++++++++----- deefuzzer/{tools => }/streamer.py | 0 deefuzzer/tools/__init__.py | 6 +-- deefuzzer/tools/logger.py | 1 + deefuzzer/tools/{tools.py => utils.py} | 0 example/deefuzzer.xml | 1 + example/deefuzzer.yaml | 47 +++++++++++++++++++ example/deefuzzer_doc.xml | 2 + .../osc}/osc_jingles_start.py | 0 .../osc}/osc_jingles_stop.py | 0 .../osc}/osc_player_fast.py | 0 .../osc}/osc_player_next.py | 0 .../osc}/osc_player_slow.py | 0 .../osc}/osc_record_start.py | 0 .../osc}/osc_record_stop.py | 0 .../osc}/osc_relay_start.py | 0 .../scripts => scripts/osc}/osc_relay_stop.py | 0 .../osc}/osc_twitter_start.py | 0 .../osc}/osc_twitter_stop.py | 0 23 files changed, 82 insertions(+), 19 deletions(-) mode change 100755 => 100644 deefuzzer/core.py rename deefuzzer/{tools => }/player.py (99%) rename deefuzzer/{tools => }/recorder.py (99%) rename deefuzzer/{tools => }/relay.py (100%) rename deefuzzer/{tools => }/streamer.py (100%) rename deefuzzer/tools/{tools.py => utils.py} (100%) create mode 100644 example/deefuzzer.yaml rename {deefuzzer/scripts => scripts/osc}/osc_jingles_start.py (100%) rename {deefuzzer/scripts => scripts/osc}/osc_jingles_stop.py (100%) rename {deefuzzer/scripts => scripts/osc}/osc_player_fast.py (100%) rename {deefuzzer/scripts => scripts/osc}/osc_player_next.py (100%) rename {deefuzzer/scripts => scripts/osc}/osc_player_slow.py (100%) rename {deefuzzer/scripts => scripts/osc}/osc_record_start.py (100%) rename {deefuzzer/scripts => scripts/osc}/osc_record_stop.py (100%) rename {deefuzzer/scripts => scripts/osc}/osc_relay_start.py (100%) rename {deefuzzer/scripts => scripts/osc}/osc_relay_stop.py (100%) rename {deefuzzer/scripts => scripts/osc}/osc_twitter_start.py (100%) rename {deefuzzer/scripts => scripts/osc}/osc_twitter_stop.py (100%) diff --git a/deefuzzer/core.py b/deefuzzer/core.py old mode 100755 new mode 100644 index 2eb5583..92251cf --- a/deefuzzer/core.py +++ b/deefuzzer/core.py @@ -44,6 +44,7 @@ from threading import Thread from deefuzzer.station import * from deefuzzer.tools import * + class DeeFuzzer(Thread): """a DeeFuzzer diffuser""" diff --git a/deefuzzer/tools/player.py b/deefuzzer/player.py similarity index 99% rename from deefuzzer/tools/player.py rename to deefuzzer/player.py index 1be33c2..043a80e 100644 --- a/deefuzzer/tools/player.py +++ b/deefuzzer/player.py @@ -38,6 +38,7 @@ from relay import * + class Player: """A file streaming iterator""" diff --git a/deefuzzer/tools/recorder.py b/deefuzzer/recorder.py similarity index 99% rename from deefuzzer/tools/recorder.py rename to deefuzzer/recorder.py index f7f3d79..4ddb312 100644 --- a/deefuzzer/tools/recorder.py +++ b/deefuzzer/recorder.py @@ -38,6 +38,7 @@ import os + class Recorder: """A file streaming iterator""" diff --git a/deefuzzer/tools/relay.py b/deefuzzer/relay.py similarity index 100% rename from deefuzzer/tools/relay.py rename to deefuzzer/relay.py index 7973db0..4adbd63 100644 --- a/deefuzzer/tools/relay.py +++ b/deefuzzer/relay.py @@ -40,6 +40,7 @@ from threading import Thread import Queue import urllib + class Relay(Thread): def __init__(self, sub_buffer_size, queue_size): @@ -72,4 +73,3 @@ class Relay(Thread): self.stream.close() break - diff --git a/deefuzzer/station.py b/deefuzzer/station.py index be6fe81..da9acc4 100644 --- a/deefuzzer/station.py +++ b/deefuzzer/station.py @@ -45,10 +45,14 @@ import random import shout import urllib import mimetypes + from threading import Thread +from player import * +from recorder import * +from relay import * +from streamer import * from tools import * - class Station(Thread): """a DeeFuzzer shouting station thread""" @@ -73,6 +77,8 @@ class Station(Thread): self.ogg_quality = self.station['media']['ogg_quality'] self.samplerate = self.station['media']['samplerate'] self.voices = self.station['media']['voices'] + if 'm3u' in self.station['media'].keys(): + self.m3u_playlist_file = self.station['media']['m3u'] # Server if 'mountpoint' in self.station['server'].keys(): @@ -319,13 +325,19 @@ class Station(Thread): def get_playlist(self): file_list = [] - for root, dirs, files in os.walk(self.media_dir): - for file in files: - s = file.split('.') - ext = s[len(s)-1] - if ext.lower() == self.channel.format and not os.sep+'.' in file: - file_list.append(root + os.sep + file) - file_list.sort() + if not self.m3u_playlist_file: + for root, dirs, files in os.walk(self.media_dir): + for file in files: + s = file.split('.') + ext = s[len(s)-1] + if ext.lower() == self.channel.format and not os.sep+'.' in file: + file_list.append(root + os.sep + file) + file_list.sort() + else: + f = open(self.m3u_playlist_file, 'r') + for path in f.readlines(): + if '#' != path[0]: + file_list.append(path[:-1]) return file_list def get_jingles(self): @@ -341,12 +353,12 @@ class Station(Thread): def get_next_media(self): # Init playlist - if self.lp != 0: + if self.lp: playlist = self.playlist new_playlist = self.get_playlist() lp_new = len(new_playlist) - if lp_new != self.lp or self.counter == 0: + if lp_new != self.lp or not self.counter: self.id = 0 self.lp = lp_new @@ -356,7 +368,7 @@ class Station(Thread): new_tracks = new_playlist_set - playlist_set self.new_tracks = list(new_tracks.copy()) - if len(new_tracks) != 0: + if len(new_tracks): new_tracks_objs = self.media_to_objs(self.new_tracks) for media_obj in new_tracks_objs: title = media_obj.metadata['title'] @@ -376,7 +388,7 @@ class Station(Thread): self.update_twitter(message) # Shake it, Fuzz it ! - if self.shuffle_mode == 1: + if self.shuffle_mode: random.shuffle(playlist) # Play new tracks first @@ -389,7 +401,7 @@ class Station(Thread): self.update_rss(self.media_to_objs(self.playlist), self.rss_playlist_file, '(playlist)') - if self.jingles_mode == 1 and (self.counter % 2) == 0 and not self.jingles_length == 0: + if self.jingles_mode and not (self.counter % 2) and self.jingles_length: media = self.jingles_list[self.jingle_id] self.jingle_id = (self.jingle_id + 1) % self.jingles_length else: @@ -572,6 +584,7 @@ class Station(Thread): self.q.task_done() pass + def run(self): self.q.get(1) self.ping_server() diff --git a/deefuzzer/tools/streamer.py b/deefuzzer/streamer.py similarity index 100% rename from deefuzzer/tools/streamer.py rename to deefuzzer/streamer.py diff --git a/deefuzzer/tools/__init__.py b/deefuzzer/tools/__init__.py index 9327c41..03fd06d 100644 --- a/deefuzzer/tools/__init__.py +++ b/deefuzzer/tools/__init__.py @@ -4,10 +4,6 @@ from PyRSS2Gen import * from mp3 import * from ogg import * from logger import * -from player import * -from recorder import * from osc import * from twitt import * -from relay import * -from tools import * -from streamer import * +from utils import * diff --git a/deefuzzer/tools/logger.py b/deefuzzer/tools/logger.py index 2f68c4d..041f04c 100644 --- a/deefuzzer/tools/logger.py +++ b/deefuzzer/tools/logger.py @@ -3,6 +3,7 @@ import logging + class Logger: """A logging object""" diff --git a/deefuzzer/tools/tools.py b/deefuzzer/tools/utils.py similarity index 100% rename from deefuzzer/tools/tools.py rename to deefuzzer/tools/utils.py diff --git a/example/deefuzzer.xml b/example/deefuzzer.xml index 38bac9e..5bb453a 100644 --- a/example/deefuzzer.xml +++ b/example/deefuzzer.xml @@ -25,6 +25,7 @@ 44100 2 1 + /path/to/m3u_file /path/to/rss/ diff --git a/example/deefuzzer.yaml b/example/deefuzzer.yaml new file mode 100644 index 0000000..b917790 --- /dev/null +++ b/example/deefuzzer.yaml @@ -0,0 +1,47 @@ +deefuzzer: + log: /path/to/log/mystation.log + m3u: /path/to/m3u/mystation.m3u + + station: + control: {mode: 0, + port: 16001} + + server: {host: 127.0.0.1, + mountpoint: monitor, + port: 8000, public: 0, + sourcepassword: source2parisson, + type: icecast} + + infos: {name: my_station, + description: my_station, + genre: music, + url: 'http://parisson.com'} + + media: {dir: /path/to/mp3/, + m3u: /path/to/m3u_file, + format: mp3, + bitrate: 96, + ogg_quality: 4, + samplerate: 48000, + shuffle: 0, + voices: '2'} + + jingles: {dir: /path/to/jingles, + mode: 0, + shuffle: 1} + + record: {dir: /home/telecaster/archives/mp3, + mode: 0} + + relay: {author: Inconnu, + mode: 0, + url: 'http://127.0.0.1:8000/telecaster_live.mp3'} + + rss: {dir: /var/www/rss, + enclosure: 0, + media_url: 'http://localhost/rss/'} + + + twitter: {key: 76728330-OjKgbHtn4II86Ad7pNUGEzfNAkGTW5Wvw38qUmLE, + mode: 0, secret: 4egZs1dSM37XVY8zXa016Yueku2fleXF2bx8k25V4, + tags: bla bla} diff --git a/example/deefuzzer_doc.xml b/example/deefuzzer_doc.xml index e6b6455..71cff54 100644 --- a/example/deefuzzer_doc.xml +++ b/example/deefuzzer_doc.xml @@ -47,6 +47,8 @@ 2 1 + + /path/to/m3u_file