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