self.streaming = streaming
if not self.filename and not self.streaming:
raise Exception('Must give an output')
-
+
self.metadata = None
self.eod = False
-
+
@interfacedoc
- def setup(self, channels=None, samplerate=None, nframes=None):
+ def setup(self, channels=None, samplerate=None, blocksize=None, totalframes=None):
self.channels = channels
- super(Mp3Encoder, self).setup(channels, samplerate, nframes)
+ super(Mp3Encoder, self).setup(channels, samplerate, blocksize, totalframes)
#TODO: open file for writing
- # the output data format we want
+ # the output data format we want
self.pipe = '''appsrc name=src
- ! audioconvert
- ! lamemp3enc target=quality quality=2 encoding-engine-quality=standard ! id3v2mux
+ ! audioconvert
+ ! lamemp3enc target=quality quality=2 encoding-engine-quality=standard ! id3v2mux
'''
if self.filename and self.streaming:
self.pipe += ''' ! tee name=t
! queue ! filesink location=%s
t. ! queue ! appsink name=app sync=False
''' % self.filename
-
+
elif self.filename :
self.pipe += '! filesink location=%s async=False sync=False ' % self.filename
else:
self.pipe += '! queue ! appsink name=app sync=False '
-
+
self.pipeline = gst.parse_launch(self.pipe)
# store a pointer to appsrc in our encoder object
self.src = self.pipeline.get_by_name('src')
# store a pointer to appsink in our encoder object
self.app = self.pipeline.get_by_name('app')
-
+
srccaps = gst.Caps("""audio/x-raw-float,
endianness=(int)1234,
channels=(int)%s,
width=(int)32,
rate=(int)%d""" % (int(channels), int(samplerate)))
self.src.set_property("caps", srccaps)
-
+
self.pipeline.set_state(gst.STATE_PLAYING)
-
+
@staticmethod
@interfacedoc
def id():
@interfacedoc
def set_metadata(self, metadata):
self.metadata = metadata
-
+
def write_metadata(self):
"""Write all ID3v2.4 tags to file from self.metadata"""
from mutagen import id3
id3.save()
except:
raise IOError('EncoderError: cannot write tags')
-
+
@interfacedoc
def process(self, frames, eod=False):
self.eod = eod
if self.eod and self.metadata and self.filename:
self.write_metadata()
return frames, eod
-
+
class Mp3EncoderSubprocess(object):
"""MP3 encoder in a subprocess pipe"""
# implements(IEncoder)
-
+
def __init__(self):
import os
import string
'publisher': 'tc', #comment
'date': 'ty', #year
}
-
+
@interfacedoc
def setup(self, channels=None, samplerate=None, nframes=None):
self.channels = channels
super(Mp3EncoderSubprocess, self).setup(channels, samplerate, nframes)
-
+
@staticmethod
@interfacedoc
def id():
@interfacedoc
def set_metadata(self, metadata):
self.metadata = metadata
-
+
def get_file_info(self):
try:
file_out1, file_out2 = os.popen4('mp3info "'+self.dest+'"')