Beispiel #1
0
    def start(self):
        """
        Watch redis store. If the last track of a recorded programme is dumped,
        combine archive the tracks to a single mp3
        @return:
        """
        self.loadConfig()

        print "Archive is running"
        logging.debug("Archive is running")
        audiotools = CombaAudiotools()
        r = redis.Redis("localhost")
        ps_obj=r.pubsub()
        ps_obj.psubscribe('recordPublish')
        for item in ps_obj.listen():
            logging.debug("listener found item")
            logging.debug(item['data'])
            if type(item['data']) == type(""):
                try:
                    data = simplejson.loads(item['data'])
                except:
                    logging.debug("could not load item")
                    continue

                if not data.has_key('value') or not data.has_key('eventname'):
                    logging.debug("no value, no eventname")
                    continue

                if not data['eventname'] == 'dumpend':
                    logging.debug("eventname ist nicht dumpend")
                    continue

                curtrack = BroadcastEventTrack.objects(location='file://' + data["value"]).first()

                if not curtrack:
                    logging.debug("track nicht gefunden")
                    continue
                logging.debug("track " + str(data["value"]) + ' gefunden')
                if curtrack.isLast():
                    logging.debug("track ist der letzte")

                    tracks = BroadcastEventTrack.objects(broadcast_event=curtrack.broadcast_event)
                    event = curtrack.broadcast_event

                    files = []
                    for track in tracks:
                        files.append(track.location.replace('file://', ''))

                    subfolder = event.start.strftime('%Y-%m-%d')
                    filename = event.start.strftime('%Y-%m-%d-%H-%M-%S.mp3')

                    event.modified = datetime.datetime.now()
                    event.location = 'file://' + str(self.archivebase + subfolder + '/' + filename).replace('//','/')
                    event.state = 'archived'
                    event.modified_by = 'archiver'
                    event.save()
                    cur_folder = str(self.archivebase + subfolder + '/').replace('//', '/')
                    audiotools.combine_audiofiles(files, cur_folder, filename, clean=False, params=["-C", "224.01"])
Beispiel #2
0
    def combine_audiofiles(self, watcher, revents):
        """
        Kombiniert Dateien, die in einem best. Zeitintervall entstanden sind
        @type watcher:  object
        @param watcher: der watcher
        @type revents:    object
        @param revents:  revents - nicht verwendet
        """
        self.block_combine = False
        self.messenger.send('Stop watcher', '0501', 'info', 'combine_audiofiles' , None, 'appinternal')
        
        from_time = int(watcher.data['from_time'])
        to_time = int(watcher.data['to_time'])
        
        watcher.stop()
        watcher.loop.stop()
        # Den Ordner  bestimmen, in dem die Dateien liegen
        cur_folder = self.record_dir + '/' + datetime.datetime.fromtimestamp(from_time).strftime("%Y-%m-%d") + "/"
        
        uid = os.stat(cur_folder).st_uid
        gid = os.stat(cur_folder).st_gid
        # Name der Audiodatei, die angelegt werden muss
        out_file = datetime.datetime.fromtimestamp(from_time).strftime("%Y-%m-%d-%H-%M") + ".wav"

        # Alle WAV-Dateien im Ordner
        files = glob.glob(cur_folder + "*.wav")
        
        combine = []
        if len(files) > 0:
            for file in files:            
                t = int(os.path.getmtime(file))            
                # Liegt die Mtime im definierten Intervall?
                if t > from_time and t <= to_time:
                    combine.append(file)

            if len(combine) > 0:

                audiotools = CombaAudiotools()
                audiotools.combine_audiofiles(combine, cur_folder, out_file, nice=19)
                os.chown(out_file, uid, gid);
                self.messenger.send("Combined  to file " + out_file, '0502', 'info', 'combine_audiofiles' , None, 'appinternal')