检测语音音频文件中非语音响亮声音的位置
Detect where non-speech loud sound exists in a speech audio file
有没有办法检测音频文件中除语音以外的其他响亮声音的位置(开始和结束)?比如敲东西的声音、爆裂音效、鼠标点击音效、电脑生成的短音乐等
综上所述,条件是:
- 声音不是人声。
- 声音比该音频文件中人类语音的平均音量大。
有许多现成的开源语音 Activity 检测器。如果满足以下条件:
- 给定的音频帧未分类为语音并且
- 音频帧能量高于根据语音帧计算的自适应阈值
将帧分类为“大声非语音”。
RNNoise,一个噪声抑制库,有很好的VAD,算法很容易实时工作。
下面是一个关于如何使用库获取 VAD 的粗略示例:
#include <stdio.h>
#include "rnnoise.h"
#define FRAME_SIZE 480
int main(int argc, char **argv) {
int i;
int framepos = 0;
float vad;
float x[FRAME_SIZE];
FILE *f1;
DenoiseState *st;
st = rnnoise_create(NULL);
if (argc!=2) {
fprintf(stderr, "usage: %s <noisy speech>\n", argv[0]);
return 1;
}
f1 = fopen(argv[1], "rb");
while (1) {
short tmp[FRAME_SIZE];
fread(tmp, sizeof(short), FRAME_SIZE, f1);
if (feof(f1)) break;
for (i=0;i<FRAME_SIZE;i++) x[i] = tmp[i];
vad = rnnoise_process_frame(st, x, x);
if (vad < 0.1) printf("Non-speech frame position %d VAD %f", framepos, vad);
framepos += FRAME_SIZE;
}
rnnoise_destroy(st);
fclose(f1);
return 0;
}
我没有编译它/运行,所以你可能需要修复一两行才能让它工作。
有没有办法检测音频文件中除语音以外的其他响亮声音的位置(开始和结束)?比如敲东西的声音、爆裂音效、鼠标点击音效、电脑生成的短音乐等
综上所述,条件是:
- 声音不是人声。
- 声音比该音频文件中人类语音的平均音量大。
有许多现成的开源语音 Activity 检测器。如果满足以下条件:
- 给定的音频帧未分类为语音并且
- 音频帧能量高于根据语音帧计算的自适应阈值
将帧分类为“大声非语音”。
RNNoise,一个噪声抑制库,有很好的VAD,算法很容易实时工作。
下面是一个关于如何使用库获取 VAD 的粗略示例:
#include <stdio.h>
#include "rnnoise.h"
#define FRAME_SIZE 480
int main(int argc, char **argv) {
int i;
int framepos = 0;
float vad;
float x[FRAME_SIZE];
FILE *f1;
DenoiseState *st;
st = rnnoise_create(NULL);
if (argc!=2) {
fprintf(stderr, "usage: %s <noisy speech>\n", argv[0]);
return 1;
}
f1 = fopen(argv[1], "rb");
while (1) {
short tmp[FRAME_SIZE];
fread(tmp, sizeof(short), FRAME_SIZE, f1);
if (feof(f1)) break;
for (i=0;i<FRAME_SIZE;i++) x[i] = tmp[i];
vad = rnnoise_process_frame(st, x, x);
if (vad < 0.1) printf("Non-speech frame position %d VAD %f", framepos, vad);
framepos += FRAME_SIZE;
}
rnnoise_destroy(st);
fclose(f1);
return 0;
}
我没有编译它/运行,所以你可能需要修复一两行才能让它工作。