]> git.parisson.com Git - timeside.git/commitdiff
add IProcessor.release()
authorOlivier Guilyardi <olivier@samalyse.com>
Wed, 2 Dec 2009 16:10:40 +0000 (16:10 +0000)
committerOlivier Guilyardi <olivier@samalyse.com>
Wed, 2 Dec 2009 16:10:40 +0000 (16:10 +0000)
api.py
core.py
tests/api/examples.py
tests/api/test_lolevel.py
tests/api/test_pipe.py

diff --git a/api.py b/api.py
index ae9c1b05197c6481633f086227361e962aaa0b68..e7db2bbe7f38208e3e260e7ef2ac382380609b9a 100644 (file)
--- a/api.py
+++ b/api.py
@@ -58,6 +58,10 @@ class IProcessor(Interface):
         
         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."""
diff --git a/core.py b/core.py
index 57f4405efec2906ae822580b340bdcfd56247ac6..e27200ae8f9addb6d27f6b0f3bbe133b786e7a9a 100644 (file)
--- a/core.py
+++ b/core.py
@@ -76,6 +76,10 @@ class Processor(Component):
     def process(self, frames):
         return frames
 
+    @interfacedoc
+    def release(self):
+        pass
+
     def __or__(self, item):
         return ProcessPipe(self, item)
 
index 5502bf62748a237068a2606377a124b1b65b15c2..15afed2db11a3137b075a7f45c7471f7eddb09d4 100644 (file)
@@ -16,15 +16,22 @@ class FileDecoder(Processor):
     @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):
@@ -82,16 +89,10 @@ class FileDecoder(Processor):
         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):
@@ -201,3 +202,4 @@ class WavEncoder(Processor):
             self.file = None
 
         return frames, eod
+
index 9c341e39312787a73f888e09d82cb07d6233ed06..1c87aba20ecbb2ad88823a65a74e8d443f0589da 100644 (file)
@@ -3,10 +3,10 @@ import os
 
 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()
@@ -24,6 +24,8 @@ while True:
 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)
@@ -33,7 +35,7 @@ gain = 1
 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())
@@ -47,3 +49,6 @@ while True:
     if eod:
         break
 
+decoder.release()
+effect.release()
+encoder.release()
index d1398404620af57db07c3c00bcb20b7bded2c3db..cb56802fd5a8dae44fbbff62e866eedb70222731 100644 (file)
@@ -1,5 +1,7 @@
 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"