上云无忧 > 文档中心 > 百度智能云开源VAD音频切分工具开发工具
语音识别
百度智能云开源VAD音频切分工具开发工具

文档简介:
由于百度rest api接口有60s的音频时长限制,使用此demo可以粗略地按照静音切分音频。 项目地址: https://github.com/Baidu-AIP/speech-vad-demo 集成 webrtc 开源项目,vad模块,具体算法GMM(Gaussian Mixture Model)。 注意这个是开源项目,效果远不如与百度语音LInux C++ SDK ,Android及iOS SDK自带的VAD功能,切割的文件需为pcm(16000采样率 小端序 16bits)的格式,其他格式需要提前转换,切割后也是pcm文件 【百度智能云】实时语音识别 【百度智能云】短语音识别标准版
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

简介

由于百度rest api接口有60s的音频时长限制,使用此demo可以粗略地按照静音切分音频。

项目地址: https://github.com/Baidu-AIP/speech-vad-demo

集成 webrtc 开源项目,vad模块,具体算法GMM(Gaussian Mixture Model)。 注意这个是开源项目,效果远不如与百度语音LInux C++ SDK ,Android及iOS SDK自带的VAD功能,切割的文件需为pcm(16000采样率 小端序 16bits)的格式,其他格式需要提前转换,切割后也是pcm文件

原理

一个FRAME时长默认10s,通过webrtc的vad计算这个FRAME是否是活动(ACTIVE: 有声音, INACTIVE:静音)。

这样可以获得音频的所有FRAME的活动值(ACTIVE或者INACTIVE)。从而在静音(INACTIVE)的音频段上的切分音频。

运行环境

  • g++ 4.8以上,
  • cmake 2.8 及 make 3.8 编译需要,可以跳过或者尝试使用低版本
  • 任意操作系统

如果没有g++ 4.8的版本,centos可以参考“Linux C++ SDK”的文档,进行g++ 4.8的安装。

由于webrtc项目vad模块依赖于rtc_base模块 进行运行时的参数检查,因此需要可以编译rtc_base的。 如果您无法升级到g++ 4.8 或者是只能编译C项目,可以自行修改源代码,删除rtc_bas目录,及其它文件对rtc_base中宏的依赖,,剩余文件均为C代码。去除后请详细测试。

运行及结果

运行命令

```bash
# 确认g++ 和cmake 版本
sh build_and_run.sh

# 或
cmake . && make
```

结果

如果不修改代码的话,结果保存在 output_pcm内。 文件名如下

16k_1.pcm_0-12989_A.pcm         // 第0-12989毫秒的音频,
16k_1.pcm_33730-47389_A.pcm     // 第33730-47389毫秒的音频
16k_1.pcm_0-4049_A.pcm         // A 表示此段有声音,不是完全的静音
···
16k_1.pcm_114060-121689_I.pcm  // I 表示此段都是静音

参数设置

common.h

```c
// MULTI = 1 2 3 webrtc vad可以设置分别为以10ms 20ms 30ms作为包
#define MULTI 1

// VAD 模式 Aggressiveness mode (0, 1, 2, or 3). 数值越大,判断越是粗略,连着的静音或者响声增多
#define WEBRTC_VAD_MODE 3

// 有声音的音频段,xxx 毫秒后,认为该音频段结束,不能为0
#define FILE_CUT_SILENCE_AFTER_ACTIVE_MS 500

// 静音的音频段,切分xxx毫秒给之后有声音的音频段
#define FILE_CUT_SILENCE_BEFORE_ACTIVE_MS 300

// 最小的音频切分长度,即每个切分后音频文件不少于这个时长,最后一个除外
#define FILE_CUT_MIN_MS  (10 * 1000)

// 最大的音频切分长度,即每个切分后音频文件不多于这个时长
#define FILE_CUT_MAX_MS  (60 * 1000)

/** 上述示例中音频文件尽可能依次满足如下条件
1. 最短10s,最长 60s。
2. 每个音频文件的最后的静音500ms,
2. 每个音频文件的开始的静300ms。
 */
```

切割逻辑修改

demo因为考虑到流式,采用了尽快切割的方法。如果您对这个切割算法不满意的话,

可以对照periods_print的结果, 自行修改file_cut.c内的代码逻辑

// [5150, 5220) [5230, 6380) [6520, 6970) [7000, 8040) [8080, 8670) // 表示 [5150, 5220) 等区间内是有声音的,
其它区间均为静音, // 如果需要切割的话,应该在静音区间选择合适的位置切割

相似文档
  • 语义理解是通过一系列的AI算法,将语音识别输出的文本结果解析为结构化的、机器可读的意图与词槽信息,便于互联网开发者在语音交互场景下更好的理解并满足用户需求。 百度AI开放平台面向互联网开发者提供对自然语言文本的语义理解服务。语义理解基于百度最专业的语义理解平台——UNIT2.0,为开发者预置可一键式接入的语义理解服务,方便快捷的满足语义理解需求。 【百度智能云】实时语音识别 【百度智能云】短语音识别标准版
  • 语义理解协议描述语言: 语义理解的结果通过语义理解协议向开发者返回,为了易于人阅读,同时也方便机器解析和生成,采用 json 语言进行描述,utf-8 编码。json 语言的基本概念: 属性名/属性值。 即键值对(key-value)。 【百度智能云】实时语音识别 【百度智能云】短语音识别标准版
  • 天气(weather)能支持对天气、温度、风速等属性的查询的解析。天气意图及词槽表示如下: 注:"/"表示多个示例值分割;"{}"表示词槽的归一值取值范围是封闭集合,在示例中全部列举。以下各领域皆同。 列车(train)能够支持通用列车信息的查询解析,也可以解析对坐席、列车类别、票价等特殊查询请求的解析。列车意图及词槽表示如。 【百度智能云】实时语音识别 【百度智能云】短语音识别标准版
  • HI,您好,欢迎使用EasyDL语音识别。 原语音自训练平台即日已结束公测正式上线,品牌升级更名为“EasyDL语音识别”,平台和语音识别通用接口全面打通,语音技术下任一接口开通付费即可免费训练语音识别模型,无需额外费用。 【百度智能云】飞桨EasyDL零门槛AI开发平台 【百度智能云】语音自训练平台
  • 在导航栏【模型中心】-【我的模型】页中可以点击【创建模型】按钮;也可以直接点击左侧导航菜单中的【创建模型】进入创建模型步骤。目前一个账号下支持创建10个模型,模型可删除。 在创建模型步骤中,需要进行“基础信息填写”“上传测试集”“选择基础模型”三个环节完成创建。 【百度智能云】飞桨EasyDL零门槛AI开发平台 【百度智能云】语音自训练平台
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部