Warning: it is required to call setup() before this method."""
+ def release(self):
+ """Release resources owned by this processor. The processor cannot
+ be used anymore after calling this method."""
+
class IEncoder(IProcessor):
"""Encoder driver interface. Each encoder is expected to support a specific
format."""
def process(self, frames):
return frames
+ @interfacedoc
+ def release(self):
+ pass
+
def __or__(self, item):
return ProcessPipe(self, item)
@interfacedoc
def __init__(self, filename):
self.filename = filename
- self.file = None
+ # The file has to be opened here so that nframes(), samplerate(),
+ # etc.. work before setup() is called.
+ self.file = audiolab.sndfile(self.filename, 'read')
+ self.position = 0
@interfacedoc
def setup(self, channels=None, samplerate=None):
Processor.setup(self, channels, samplerate)
+ if self.position != 0:
+ self.file.seek(0);
+ self.position = 0
+
+ def release(self):
if self.file:
- self.file.close();
- self.file = audiolab.sndfile(self.filename, 'read')
- self.position = 0
+ self.file.close()
+ self.file = None
@interfacedoc
def channels(self):
if toread > buffersize:
toread = buffersize
- frames = self.file.read_frames(toread)
-
+ frames = self.file.read_frames(toread)
+ eod = (toread < buffersize)
self.position += toread
- eod = False
- if toread < buffersize:
- self.file.close()
- self.file = None
- eod = True
-
return frames, eod
class MaxLevel(Processor):
self.file = None
return frames, eod
+
source=os.path.dirname(__file__) + "../samples/guitar.wav"
-Decoder = examples.AudiolabDecoder
+Decoder = examples.FileDecoder
print "Creating decoder with id=%s for: %s" % (Decoder.id(), source)
decoder = Decoder(source)
-analyzer = examples.MaxLevelAnalyzer()
+analyzer = examples.MaxLevel()
decoder.setup()
nchannels = decoder.channels()
samplerate = decoder.samplerate()
max_level = analyzer.result()
print "Max level: %f" % max_level
+analyzer.release()
+
destination = "normalized.wav"
Encoder = examples.WavEncoder
print "Creating encoder with id=%s for: %s" % (Encoder.id(), destination)
if max_level > 0:
gain = 0.9 / max_level
-effect = examples.GainEffect(gain)
+effect = examples.Gain(gain)
decoder.setup()
effect.setup(decoder.channels(), decoder.samplerate())
if eod:
break
+decoder.release()
+effect.release()
+encoder.release()
from timeside.tests.api import examples
from timeside.core import *
+from timeside.api import *
+from sys import stdout
import os
source=os.path.dirname(__file__) + "../samples/guitar.wav"