webRTC:在 python 中获取 WAV 音频的 VAD 数据
webRTC: getting VAD data on WAV audio in python
我正在尝试 运行 webRTC VAD
的示例代码找到 here。
但是当我给它一个 单声道 16 位波形文件 时,只有我说话时停顿很长时间,它只是检测到整个文件是 发声,而 voiced 输出 chunk-00.wav
是整个音频文件。
非常感谢任何帮助。下面我给出了我收到的控制台输出。
(base) gulag_dweller@Tumuls-MacBook-Pro python_transformers % python3 VAD-python.py /Users/gulag_dweller/Downloads/try_voice.wav
sample rate is: 48000 Hz
00001111111111+(0.12)11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111011111111111111111111111111111111111111111111111111111111111111111011111111111111111111111111111111111111111111100011111111111111111111111111111111111111110111111111111111111111111111111111111111110001111111111111111111111111111111111111111111111111-(16.22999999999986)
Writing chunk-00.wav
我想我找到了另一种获取 VAD 数据的方法。我没有尝试从上面 link 中显示的 pre-defined 方法获取 VAD,而是创建了自己的函数。
该函数主要测量波的振幅,在基本噪声水平 (1.6x the base value
) 之上观察到的任何尖峰都被认为是浊音 activity。此函数假设只有 1 个人在说话,并且噪音水平保持相对恒定。
y_list=list(audio_data1) # create an immutable list of amplitude values
y_vad=[] # initialise an array
max_noise = -1.0 # put the lowest value that one can
for i in range(len(time_s)):
t = time_s[i]
# Variable to store the current absolute amplitude value for the given index i
current_audio_amplitude = np.abs(audio_data1[i])
# since at the start, some issues arise, first few seconds are padded out
# and for any sudden change in |amplitude| i.e. > 60% results in stopping the program
if t>0.2 and max_noise > 0 and current_audio_amplitude > 1.6*max_noise:
print(t, current_audio_amplitude, max_noise)
break
# take the highest value of amplitude to be the max_noise
if current_audio_amplitude > max_noise:
max_noise = current_audio_amplitude
print('max-noise is: '+str(max_noise))
for i in range(len(time_s)):
# for any value amplitude that exceeds the max_noise value is taken to be a voice activity
if np.abs(audio_data1[i]) > max_noise:
y_vad.append(1)
# otherwise just take VAD value to be 0
else:
y_vad.append(0)
我正在尝试 运行 webRTC VAD
的示例代码找到 here。
但是当我给它一个 单声道 16 位波形文件 时,只有我说话时停顿很长时间,它只是检测到整个文件是 发声,而 voiced 输出 chunk-00.wav
是整个音频文件。
非常感谢任何帮助。下面我给出了我收到的控制台输出。
(base) gulag_dweller@Tumuls-MacBook-Pro python_transformers % python3 VAD-python.py /Users/gulag_dweller/Downloads/try_voice.wav
sample rate is: 48000 Hz
00001111111111+(0.12)11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111011111111111111111111111111111111111111111111111111111111111111111011111111111111111111111111111111111111111111100011111111111111111111111111111111111111110111111111111111111111111111111111111111110001111111111111111111111111111111111111111111111111-(16.22999999999986)
Writing chunk-00.wav
我想我找到了另一种获取 VAD 数据的方法。我没有尝试从上面 link 中显示的 pre-defined 方法获取 VAD,而是创建了自己的函数。
该函数主要测量波的振幅,在基本噪声水平 (1.6x the base value
) 之上观察到的任何尖峰都被认为是浊音 activity。此函数假设只有 1 个人在说话,并且噪音水平保持相对恒定。
y_list=list(audio_data1) # create an immutable list of amplitude values
y_vad=[] # initialise an array
max_noise = -1.0 # put the lowest value that one can
for i in range(len(time_s)):
t = time_s[i]
# Variable to store the current absolute amplitude value for the given index i
current_audio_amplitude = np.abs(audio_data1[i])
# since at the start, some issues arise, first few seconds are padded out
# and for any sudden change in |amplitude| i.e. > 60% results in stopping the program
if t>0.2 and max_noise > 0 and current_audio_amplitude > 1.6*max_noise:
print(t, current_audio_amplitude, max_noise)
break
# take the highest value of amplitude to be the max_noise
if current_audio_amplitude > max_noise:
max_noise = current_audio_amplitude
print('max-noise is: '+str(max_noise))
for i in range(len(time_s)):
# for any value amplitude that exceeds the max_noise value is taken to be a voice activity
if np.abs(audio_data1[i]) > max_noise:
y_vad.append(1)
# otherwise just take VAD value to be 0
else:
y_vad.append(0)