Audio fixes - add chunk shift in time

prd
Ivan Maslov 2 years ago
parent 7b7f246dab
commit 9ad4d7a026

@ -178,7 +178,7 @@ class Recorder:
# CHECK AUX.mp3 # CHECK AUX.mp3
self.mFileInfoDict = {} self.mFileInfoDict = {}
self.mFileNameList=[] self.mFileNameList=[]
self.mRecordedFramesList=[] #self.mRecordedFramesList=[]
self.mStatusStr = "1_RECORDING" self.mStatusStr = "1_RECORDING"
if inChunkSecFloat != None: self.mFileAvailableChunkInt = 0 if inChunkSecFloat != None: self.mFileAvailableChunkInt = 0
self.mDurationSecFloat = inDurationSecFloat self.mDurationSecFloat = inDurationSecFloat
@ -250,7 +250,7 @@ class Recorder:
lCallbackThread.start() lCallbackThread.start()
def CaptureChunk(self, inExtra=None, inForceChunkBool=True): def CaptureChunk(self, inExtra=None, inForceChunkBool=True, inShiftSecFloat = 0.0):
"""L-,W+: Зафиксировать захват аудио в виде промежуточного файла вида: <имя файла>_00000.mp3 """L-,W+: Зафиксировать захват аудио в виде промежуточного файла вида: <имя файла>_00000.mp3
.. code-block:: python .. code-block:: python
@ -263,6 +263,8 @@ class Recorder:
:type inExtra: any, опционально :type inExtra: any, опционально
:param inForceChunkBool: True - вне зависимости от текущего режима перейти на режим сохранения по частям, по умолчанию True :param inForceChunkBool: True - вне зависимости от текущего режима перейти на режим сохранения по частям, по умолчанию True
:type inForceChunkBool: bool, опционально :type inForceChunkBool: bool, опционально
:param inShiftSecFloat: Последние секунды, которые не записывать в промежуточный аудиофайл. Они будут началом следующего аудио отрывка, по умолчанию 0.0
:type inShiftSecFloat: float
:return: Наименование сохраненного аудиофайла :return: Наименование сохраненного аудиофайла
:rtype: str :rtype: str
""" """
@ -273,10 +275,21 @@ class Recorder:
self.mFileAvailableChunkInt = self.mFileAvailableChunkInt + 1 self.mFileAvailableChunkInt = self.mFileAvailableChunkInt + 1
lFileNameWExtStr = f"{lFileNameStr}.{self.mFileFormatStr}" lFileNameWExtStr = f"{lFileNameStr}.{self.mFileFormatStr}"
lFilePathStr = os.path.abspath(os.path.join(self.mFolderPathStr,lFileNameWExtStr)) lFilePathStr = os.path.abspath(os.path.join(self.mFolderPathStr,lFileNameWExtStr))
lDataFrameBytes = b''.join(self.mRecordedFramesList)
if inShiftSecFloat != 0.0:
lFrameLenInt = int(self.mSampleSizeInt*inShiftSecFloat*self.mChannelCountInt*self.mSampleRateInt)
lFrameLenInt = int(lFrameLenInt // (self.mChannelCountInt * self.mSampleSizeInt)) * (self.mChannelCountInt * self.mSampleSizeInt)
if lFrameLenInt<len(lDataFrameBytes):
self.mRecordedFramesList=[lDataFrameBytes[-lFrameLenInt:]]
lDataFrameBytes = lDataFrameBytes[:-lFrameLenInt]
else:
lDataFrameBytes=b""
else:
self.mRecordedFramesList = []
# Advanced usage, if you have raw audio data: # Advanced usage, if you have raw audio data:
sound = AudioSegment( sound = AudioSegment(
# raw audio data (bytes) # raw audio data (bytes)
data=b''.join(self.mRecordedFramesList), data=lDataFrameBytes,
# 2 byte (16 bit) samples # 2 byte (16 bit) samples
sample_width=self.mSampleSizeInt, sample_width=self.mSampleSizeInt,
# 44.1 kHz frame rate # 44.1 kHz frame rate
@ -284,8 +297,7 @@ class Recorder:
# stereo # stereo
channels=self.mChannelCountInt channels=self.mChannelCountInt
) )
self.mRecordedFramesList = [] lTimeSecFloat = time.time() - inShiftSecFloat
lTimeSecFloat = time.time()
if not os.path.exists(os.path.abspath(self.mFolderPathStr)): if not os.path.exists(os.path.abspath(self.mFolderPathStr)):
os.mkdir(self.mFolderPathStr) os.mkdir(self.mFolderPathStr)
sound.export(lFilePathStr, format=f"{self.mFileFormatStr}") sound.export(lFilePathStr, format=f"{self.mFileFormatStr}")

Loading…
Cancel
Save