From 0e5c0521debd053d95df8653d08a073709165eef Mon Sep 17 00:00:00 2001 From: Ivan Maslov Date: Sun, 9 Oct 2022 21:29:08 +0300 Subject: [PATCH] CaptureWait - add wait options (wait callbacks) --- Sources/pyOpenRPA/Robot/Audio.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/Sources/pyOpenRPA/Robot/Audio.py b/Sources/pyOpenRPA/Robot/Audio.py index 2bf459aa..ec615902 100644 --- a/Sources/pyOpenRPA/Robot/Audio.py +++ b/Sources/pyOpenRPA/Robot/Audio.py @@ -115,7 +115,9 @@ class Recorder: mIsMicrophoneBool=None mCallbackChunkDef = None + mCallbackChunkDefThreadList = [] mCallbackStopDef = None + mCallbackStopDefThreadList = [] def __init__(self, inDeviceInt=None): """L-,W+: Инициализация экземпляра класса записи звука @@ -212,16 +214,27 @@ class Recorder: self.mRecordedFramesList.append(self.mStream.read(self.mFramesInt)) self.__TriggerCheck__() - def CaptureWait(self): - """L-,W+: Ожидать окончания захвата аудио + def CaptureWait(self, inWaitCallbackChunkBool = True, inWaitCallbackStopBool = True): + """L-,W+: Ожидать окончания захвата аудио. Дополнительно настраивается ожидание окончания всех callback функций. .. code-block:: python from pyOpenRPA.Robot import Audio lRec = Audio.Recorder() lRec.CaptureStart(inFileNameStr = "out", inFileFormatStr = "mp3", inDurationSecFloat = 10.0, inChunkSecFloat = 5.0) lRec.CaptureWait() + + :param inWaitCallbackChunkBool: True - ожидать выполнение всех асинхронных callback по сохранению части аудиофайла, по умолчанию True + :type inWaitCallbackChunkBool: bool, опционально + :param inWaitCallbackStopBool: True - ожидать выполнение всех асинхронных callback по завершению записи, по умолчанию True + :type inWaitCallbackStopBool: bool, опционально """ self.mCaptureThread.join() + if inWaitCallbackChunkBool==True: + for lItemThread in self.mCallbackChunkDefThreadList: + if lItemThread.is_alive(): lItemThread.join() + if inWaitCallbackStopBool==True: + for lItemThread in self.mCallbackStopDefThreadList: + if lItemThread.is_alive(): lItemThread.join() def CaptureStop(self, inWaitStream=True, inExtra=None): """L-,W+: Остановить захват аудио @@ -248,6 +261,7 @@ class Recorder: if self.mCallbackStopDef != None: lCallbackThread = threading.Thread(target=self.mCallbackStopDef,args=[self, lFileNameStr], daemon = True) lCallbackThread.start() + self.mCallbackStopDefThreadList.append(lCallbackThread) def CaptureChunk(self, inExtra=None, inForceChunkBool=True, inShiftSecFloat = 0.0): @@ -311,6 +325,7 @@ class Recorder: if self.mCallbackChunkDef != None and self.mFileAvailableChunkInt!=None: lCallbackThread = threading.Thread(target=self.mCallbackChunkDef,args=[self, lFileNameWExtStr], daemon = True) lCallbackThread.start() + self.mCallbackChunkDefThreadList.append(lCallbackThread) self.mStartChunkSecFloat = lTimeSecFloat return lFileNameWExtStr