]> git.parisson.com Git - timeside.git/commitdiff
rm old decoder, add mp3 metadata embedding and test
authoryomguy <yomguy@parisson.com>
Wed, 27 Apr 2011 11:25:31 +0000 (11:25 +0000)
committeryomguy <yomguy@parisson.com>
Wed, 27 Apr 2011 11:25:31 +0000 (11:25 +0000)
timeside/decoder/__init__.py
timeside/decoder/core.py
timeside/decoder/old.py
timeside/encoder/mp3.py
timeside/tests/api/test_mp3.py

index 78457b38c474f99342fb5953a59e133efa8bd2c0..0741aadb6c4e846dde88c06d3c70ef954fa54f49 100644 (file)
@@ -2,3 +2,5 @@
 
 import timeside.core
 from core import *
+from sink import *
+#from old import *
index 0a8b69fb9ee7f13455fa43da5b27a1de0e8cb73f..ef84c7d9b63a0a2325db26913e5c2c14aaf56099 100644 (file)
@@ -25,8 +25,6 @@
 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
index 83e4b6e6a246e481df5cecc647e969f71a6986cd..f2971cb752cf812275f64c6e4ba0e9e03b41a187 100644 (file)
@@ -34,7 +34,7 @@ gobject.threads_init()
 
 class FileDecoderOld(Processor):
     """ gstreamer-based decoder """
-    implements(IDecoder)
+    #implements(IDecoder)
 
     # duration ms, before discovery process times out
     MAX_DISCOVERY_TIME = 3000
index d089f39d2db55013939ae92e742a19bd2584fc7b..599b9872f46a7f618aaa04d974d428b52d92664e 100644 (file)
@@ -27,6 +27,7 @@ from numpy import array, frombuffer, getbuffer, float32
 from timeside.core import FixedSizeInputAdapter
 
 import numpy
+import mutagen
 import pygst
 pygst.require('0.10')
 import gst
@@ -58,7 +59,7 @@ class Mp3Encoder(Processor):
         # 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
@@ -113,9 +114,24 @@ class Mp3Encoder(Processor):
 
     @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
@@ -193,8 +209,7 @@ class Mp3EncoderSubprocess(object):
 
     @interfacedoc
     def set_metadata(self, metadata):
-        #TODO: 
-        pass
+        self.metadata = metadata
   
     def get_file_info(self):
         try:
index c3330678b2c5cd08a5dc502fa800f677c498c7ab..b05acc1abfd7f8926bdb879a4d508f6a0b1756a1 100644 (file)
@@ -5,9 +5,23 @@ from timeside.encoder import *
 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)
+