Hi,

I don't know if anyone is interested or not, but here are some patches that fix doug to allow legs to record and play independently.

-Amos

P.S. If anyone is working on doug, get it touch with me. I have lots of ideas. For example, yesterday I hacked together an app that allows you to define a voice menu system with an ini file. I'd love to share.
Index: shtoom/doug/leg.py
===================================================================
--- shtoom/doug/leg.py	(revision 1587)
+++ shtoom/doug/leg.py	(working copy)
@@ -30,9 +30,9 @@
         self._acceptDeferred = None
         self.__converter = DougConverter()
         self.__playoutList = []
-        self.__recordDest = None
         self.__silenceSource = SilenceSource()
         self.__connected = None
+        self.__sink = None
         self.__currentDTMFKey = None
         self.__collectedDTMFKeys = ''
         self.__dtmfSingleMode = True
@@ -150,6 +150,14 @@
             old.leg = None
         return old
 
+    def _connectSink(self, target):
+        if target:
+            target.leg = self
+        old, self.__sink = self.__sink, target
+        if old:
+            old.leg = None
+        return old
+
     def _maybeStartPlaying(self):
         "Check if we're currently playing silence, and switch out if so"
         if self.__connected is self.__silenceSource:
@@ -163,18 +171,18 @@
 
     def mediaRecord(self, dest):
         dest = convertToSource(dest, 'w')
-        self._connectSource(dest)
+        self._connectSink(dest)
 
     def mediaStop(self):
         old = self._connectSource(self.__silenceSource)
         if old.isPlaying():
             old.close()
             self.__playoutList = []
-            if old.isRecording():
-                self.__recordDest = None
-        elif old.isRecording():
+
+    def mediaStopRecording(self):
+        old = self._connectSink(None)
+        if old and old.isRecording():
             old.close()
-            self.__recordDest = None
 
     def leg_startDTMFevent(self, dtmf):
         c = self.__currentDTMFKey
@@ -211,13 +219,14 @@
         data = self.__converter.convertInbound(packet)
         if self.__inbandDTMFdetector is not None:
             self.__inbandDTMFdetector(data)
-        self.__connected.write(data)
+        if self.__sink:
+            self.__sink.write(data)
 
     def isPlaying(self):
         return self.__connected.isPlaying()
 
     def isRecording(self):
-        return self.__connected.isRecording()
+        return self.__sink and self.__sink.isRecording()
 
     def dtmfMode(self, single=False, inband=False, timeout=0):
         self.__dtmfSingleMode = single
Index: shtoom/doug/voiceapp.py
===================================================================
--- shtoom/doug/voiceapp.py	(revision 1587)
+++ shtoom/doug/voiceapp.py	(working copy)
@@ -127,6 +127,12 @@
         if leg is not None:
             leg.mediaStop()
 
+    def mediaStopRecording(self, leg=None):
+        if leg is None:
+            leg = self.getDefaultLeg()
+        if leg is not None:
+            leg.mediaStopRecording()
+
     def setTimer(self, delay):
         return Timer(self, delay)
 
_______________________________________________
Shtoom mailing list
[email protected]
http://mail.python.org/mailman/listinfo/shtoom

Reply via email to