diff --git a/setup.py b/setup.py index 057ed3d..6cf5e00 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ from setuptools import setup, find_packages -__version__ = 1.2 +__version__ = 1.3 with open(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'README.md'), encoding='utf-8') as f: diff --git a/webrtcvad_wrapper/webrtcvad_wrapper.py b/webrtcvad_wrapper/webrtcvad_wrapper.py index aeb9f5d..245476e 100644 --- a/webrtcvad_wrapper/webrtcvad_wrapper.py +++ b/webrtcvad_wrapper/webrtcvad_wrapper.py @@ -80,6 +80,9 @@ def filter(self, audio, frame_duration_ms=10, sample_rate=None, padding_duration Затем сохранённые фреймы переводятся во временные метки в исходной аудиозаписи. В данном режиме аргументы threshold_rms и threshold_zcr игнорируются. + ВНИМАНИЕ! Если длина аудиозаписи не кратна размеру 1 фрейма - она будет дополнена нулями до необходимой длины (справедливо только при + sensitivity_mode=0..3). + Если sensitivity_mode=4:\n Метод агрессивный, часто игнорирует вообще всё, кроме гласных и звонких согласных звуков в речи (или просто громких звуков). Фильтрация работает так: на основе RMS (root-mean-square, отражает мощность звуковой волны) и ZCR (zero-crossing rate, частоты пересечения нуля) по заданным порогам @@ -88,6 +91,8 @@ def filter(self, audio, frame_duration_ms=10, sample_rate=None, padding_duration sensitivity_mode можно задать через метод set_mode(). + ВНИМАНИЕ! Поддерживаются только моно аудиозаписи с шириной семпла 2 байта. + 1. audio - объект pydub.AudioSegment с аудиозаписью или байтовая строка с аудиоданными (без заголовков wav) 2. frame_duration_ms - длина фрейма в миллисекундах (поддерживается только 10, 20 и 30 мс) 3. sample_rate - частота дискретизации (поддерживается только 8, 16, 32 или 48кГц): @@ -312,6 +317,9 @@ def __filter_frames(self, frames, padding_duration_ms=50, threshold_voice_frames def __get_frames(self, audio, frame_duration_ms=10, sample_rate=None): ''' Получить фреймы из аудиозаписи. + + ВНИМАНИЕ! Если длина аудиозаписи не кратна размеру 1 фрейма - она будет дополнена нулями до необходимой длины. + 1. audio - объект pydub.AudioSegment с аудиозаписью или байтовая строка с аудиоданными (без заголовков wav) 2. frame_duration_ms - длина фрейма в миллисекундах (поддерживается только 10, 20 и 30 мс) 3. sample_rate - частота дискретизации (поддерживается только 8, 16, 32 или 48кГц): @@ -346,10 +354,12 @@ def __get_frames(self, audio, frame_duration_ms=10, sample_rate=None): timestamp = 0.0 duration = (float(frame_width) / sample_rate) / 2.0 frames = [] - while offset + frame_width < len(audio_bytes): + while offset + frame_width <= len(audio_bytes): frames.append(Frame(audio_bytes[offset:offset + frame_width], timestamp, duration)) timestamp += duration offset += frame_width + if len(audio_bytes) % frame_width != 0 and offset + frame_width > len(audio_bytes): + frames.append(Frame(audio_bytes[offset:]+b'\x00'*(offset+frame_width-len(audio_bytes)), timestamp, duration)) return frames