import timeside.core
from core import *
+from sink import *
+#from old import *
from timeside.core import Processor, implements, interfacedoc
from timeside.api import IDecoder
from numpy import array, frombuffer, getbuffer, float32, append
-from timeside.decoder.old import *
-
from timeside.decoder.sink import *
import pygst
class FileDecoderOld(Processor):
""" gstreamer-based decoder """
- implements(IDecoder)
+ #implements(IDecoder)
# duration ms, before discovery process times out
MAX_DISCOVERY_TIME = 3000
from timeside.core import FixedSizeInputAdapter
import numpy
+import mutagen
import pygst
pygst.require('0.10')
import gst
# the output data format we want
self.pipe = '''appsrc name=src
! audioconvert
- ! lamemp3enc bitrate=256 ! id3v2mux
+ ! lamemp3enc bitrate=256 ! id3v2mux
'''
if self.filename and self.streaming:
self.pipe += ''' ! tee name=t
@interfacedoc
def set_metadata(self, metadata):
- #TODO:
- pass
-
+ self.metadata = metadata
+
+ def write_metadata(self, file):
+ """Write all ID3v2.4 tags to file from self.metadata"""
+ from mutagen import id3
+ id3 = id3.ID3(file)
+ for tag in self.metadata.keys():
+ value = self.metadata[tag]
+ frame = mutagen.id3.Frames[tag](3,value)
+ try:
+ id3.add(frame)
+ except:
+ raise IOError('EncoderError: cannot tag "'+tag+'"')
+ try:
+ id3.save()
+ except:
+ raise IOError('EncoderError: cannot write tags')
+
@interfacedoc
def process(self, frames, eod=False):
self.eod = eod
@interfacedoc
def set_metadata(self, metadata):
- #TODO:
- pass
+ self.metadata = metadata
def get_file_info(self):
try:
import os.path
source = os.path.join(os.path.dirname(__file__), "../samples/sweep.wav")
-dest = os.path.join(os.path.dirname(__file__), "../results/sweep_wav.mp3")
+dest = os.path.join(os.path.dirname(__file__), "/tmp/sweep_wav.mp3")
decoder = FileDecoder(source)
encoder = Mp3Encoder(dest)
(decoder | encoder).run()
+
+metadata = {'TIT2': 'title', #title2
+ 'TCOM': 'composer', #composer
+ 'TPE1': 'lead creator', #lead
+ 'UFID': 'identifier', #Unique ID...
+ 'TALB': 'album', #album
+ 'TCON': 'genre', #genre
+ 'TXXX': 'comment', #comment
+ #'date': 'TYER', #year
+ }
+
+encoder.set_metadata(metadata)
+encoder.write_metadata(dest)
+