← 开源
gkonovalov

android-vad

Android Voice Activity Detection (VAD) library. Supports WebRTC VAD GMM, Silero VAD DNN, Yamnet VAD DNN models.

AI EngineeringMake agent see hear talkC
在 GitHub 打开
增长势头
+024 小时新增 Star0.0%
511
Star
101
Fork
+1
本周
2
贡献者
创建于 2019-11-28 · 更新于 2026-10-15 · 今日第 18067 名
主要开发者
gkonovalovMorteza-arifi

gkonovalov/android-vad 排名第 18,067,有 511 个星标。

同类别比较

gkonovalov/android-vad 排名第 18,067,此处有 8 个同类条目;Undertone0809/promptulate 排名第 18,061。

同类别比较
名称排名指标
itbench-hub/ITBench18,047
语言:
Python
星标数:
512
分叉数:
51
简介:
An open source benchmarking framework for IT automation
seratch/ChatGPT-in-Slack18,052
语言:
Python
星标数:
512
分叉数:
178
简介:
Swift demonstration of how to build a Slack app that enables end-users to interact with a ChatGPT bot
Accenture/mcp-bench18,055
语言:
Python
星标数:
511
分叉数:
69
简介:
MCP-Bench: Benchmarking Tool-Using LLM Agents with Complex Real-World Tasks via MCP Servers
Undertone0809/promptulate18,061
语言:
Python
星标数:
511
分叉数:
43
简介:
🚀Lightweight Large language model automation and Autonomous Language Agents development framework. Build your LLM Agent Application in a pythonic way!
tryproduck/produck-skills18,076
语言:
HTML
星标数:
511
分叉数:
10
简介:
Agent skills to help you build products your users love.
GraphRAG-Bench/GraphRAG-Benchmark18,080
语言:
Python
星标数:
510
分叉数:
58
简介:
The official repo of GraphRAG-Bench for evaluating GraphRAG models. "When to use Graphs in RAG: A Comprehensive Analysis for Graph Retrieval-Augmented Generation". (ICLR'26)
JimLiu/claude-agent-kit18,082
语言:
TypeScript
星标数:
510
分叉数:
72
Muvon/octocode18,085
语言:
Rust
星标数:
510
分叉数:
59
关键参数与规格
关键参数与规格
参数值
语言C
类别AI Engineering
子类别Make agent see hear talk
关键词Speech-to-text, Voice bots
星标数511
分叉数101
贡献者2
创建日期2019-11-28
更新日期2026-10-15
1 天星标数0
7 天星标数1
排名18,067
上次排名7,060
排名变化-11,007
7 天星标排名11,573
上次 7 天星标排名8,970
7 天星标排名变化-2,603
总星标排名19,046
上次总星标排名19,008
总星标排名变化-38
README 摘录

Android Voice Activity Detection (VAD) Android VAD library is designed to process audio in real-time and identify presence of human speech in audio samples that contain a mixture of speech and noise. The VAD functionality operates offline, performing all processing tasks directly on the mobile device. The repository offers three distinct models for voice activity detection: WebRTC VAD [[1]](#1) is based on a Gaussian Mixture Model (GMM) which is known for its exceptional speed and effectiveness in distinguishing

between noise and silence. However, it may demonstrate relatively lower accuracy when it comes to differentiating speech from background noise. Silero VAD [[2]](#2) is based on a Deep Neural Networks (DNN) and utilizes the ONNX Runtime Mobile for execution. It provides exceptional accuracy and achieves processing time that is very close to WebRTC VAD. Yamnet VAD [[3]](#3) is based on a Deep Neural Networks (DNN) and employs the Mobilenet_v1 depthwise-separable convolution architecture. For execution utilizes the

Tensorflow Lite runtime. Yamnet VAD can predict 521 audio event classes (such as speech, music, animal sounds and etc). It was trained on AudioSet-YouTube corpus. WebRTC VAD is lightweight (only 158 KB) and provides exceptional speed in audio processing, but it may exhibit lower accuracy compared to DNN models. WebRTC VAD can be invaluable in scenarios where a small and fast library is necessary and where sacrificing accuracy is acceptable. In situations where high accuracy is critical, models like

Silero VAD and Yamnet VAD are more preferable. For more detailed insights and a comprehensive comparison between DNN and GMM, refer to the following comparison Silero VAD vs WebRTC VAD. WebRTC VAD Parameters WebRTC VAD library only accepts **16-bit Mono PCM audio stream** and can work with next Sample Rates, Frame Sizes and Modes. Frame Size (required) - **320** - The frame size of the audio input. Mode (required) - **VERY_AGGRESSIVE** - The confidence mode of the VAD model. Silence Duration (optional

) - **300ms** - The minimum duration in milliseconds for silence segments. Speech Duration (optional) - **50ms** - The minimum duration in milliseconds for speech segments. Usage WebRTC VAD can identify speech in short audio frames, returning results for each frame. By utilizing parameters such as **silenceDurationMs** and **speechDurationMs**, you can enhance the capability of VAD, enabling the detection of prolonged utterances while minimizing false positive results during pauses between sentences. Java example: Kotlin example: An example of how to detect speech in an audio

file: Silero VAD Parameters Silero VAD library only accepts **16-bit Mono PCM audio stream** and can work with next Sample Rates, Frame Sizes and Modes. Sample Rate (required) - **16KHz** - The sample rate of the audio input. Frame Size (required) - **512** - The frame size of the audio input. Mode (required) - **NORMAL** - The confidence mode of the VAD model. Silence Duration (optional) - **300ms** - The minimum duration in milliseconds for silence segments. Speech Duration (optional) - **50ms** - The minimum duration in milliseconds for

speech segments. Usage Silero VAD can identify speech in short audio frames, returning results for each frame. By utilizing parameters

常见问题

记录了多少星标和分叉?

gkonovalov/android-vad 有 511 个星标和 101 个分叉。

仓库排名是多少?

gkonovalov/android-vad 排名第 18,067。

记录的语言和类别是什么?

gkonovalov/android-vad 有 511 个星标,语言为 C,类别为 AI Engineering。

哪个仓库排名最接近?

gkonovalov/android-vad 与 Undertone0809/promptulate 比较,后者排名第 18,061,有 511 个星标。

README

Android Voice Activity Detection (VAD)

Android VAD library is designed to process audio in real-time and identify presence of human speech in audio samples that contain a mixture of speech and noise. The VAD functionality operates offline, performing all processing tasks directly on the mobile device.

The repository offers three distinct models for voice activity detection:

WebRTC VAD [1] is based on a Gaussian Mixture Model (GMM) which is known for its exceptional speed and effectiveness in distinguishing between noise and silence. However, it may demonstrate relatively lower accuracy when it comes to differentiating speech from background noise.

Silero VAD [2] is based on a Deep Neural Networks (DNN) and utilizes the ONNX Runtime Mobile for execution. It provides exceptional accuracy and achieves processing time that is very close to WebRTC VAD.

Yamnet VAD [3] is based on a Deep Neural Networks (DNN) and employs the Mobilenet_v1 depthwise-separable convolution architecture. For execution utilizes the Tensorflow Lite runtime. Yamnet VAD can predict 521 audio event classes (such as speech, music, animal sounds and etc). It was trained on AudioSet-YouTube corpus.

WebRTC VAD is lightweight (only 158 KB) and provides exceptional speed in audio processing, but it may exhibit lower accuracy compared to DNN models. WebRTC VAD can be invaluable in scenarios where a small and fast library is necessary and where sacrificing accuracy is acceptable. In situations where high accuracy is critical, models like Silero VAD and Yamnet VAD are more preferable. For more detailed insights and a comprehensive comparison between DNN and GMM, refer to the following comparison Silero VAD vs WebRTC VAD.

WebRTC VAD

Parameters

WebRTC VAD library only accepts 16-bit Mono PCM audio stream and can work with next Sample Rates, Frame Sizes and Modes.

Valid Sample Rate Valid Frame Size
8000Hz 80, 160, 240
16000Hz 160, 320, 480
32000Hz 320, 640, 960
48000Hz 480, 960, 1440
Valid Mode
NORMAL
LOW_BITRATE
AGGRESSIVE
VERY_AGGRESSIVE

Recommended parameters for WebRTC VAD:

  • Sample Rate (required) - 16KHz - The sample rate of the audio input.
  • Frame Size (required) - 320 - The frame size of the audio input.
  • Mode (required) - VERY_AGGRESSIVE - The confidence mode of the VAD model.
  • Silence Duration (optional) - 300ms - The minimum duration in milliseconds for silence segments.
  • Speech Duration (optional) - 50ms - The minimum duration in milliseconds for speech segments.

Usage

WebRTC VAD can identify speech in short audio frames, returning results for each frame. By utilizing parameters such as silenceDurationMs and speechDurationMs, you can enhance the capability of VAD, enabling the detection of prolonged utterances while minimizing false positive results during pauses between sentences.

Java example:

    VadWebRTC vad = Vad.builder()
        .setSampleRate(SampleRate.SAMPLE_RATE_16K)
        .setFrameSize(FrameSize.FRAME_SIZE_320)
        .setMode(Mode.VERY_AGGRESSIVE)
        .setSilenceDurationMs(300)
        .setSpeechDurationMs(50)
        .build();

    boolean isSpeech = vad.isSpeech(audioData);

    vad.close();

Kotlin example:

    VadWebRTC(
        sampleRate = SampleRate.SAMPLE_RATE_16K,
        frameSize = FrameSize.FRAME_SIZE_320,
        mode = Mode.VERY_AGGRESSIVE,
        silenceDurationMs = 300,
        speechDurationMs = 50
    ).use { vad ->
        val isSpeech = vad.isSpeech(audioData)
    }

An example of how to detect speech in an audio file:

    VadWebRTC(
        sampleRate = SampleRate.SAMPLE_RATE_16K,
        frameSize = FrameSize.FRAME_SIZE_320,
        mode = Mode.VERY_AGGRESSIVE,
        silenceDurationMs = 600,
        speechDurationMs = 50
    ).use { vad ->
        val chunkSize = vad.frameSize.value * 2

        requireContext().assets.open("hello.wav").buffered().use { input ->
            val audioHeader = ByteArray(44).apply { input.read(this) }
            var speechData = byteArrayOf()

            while (input.available() > 0) {
                val frameChunk = ByteArray(chunkSize).apply { input.read(this) }

                if (vad.isSpeech(frameChunk)) {
                    speechData += frameChunk
                } else {
                    if (speechData.isNotEmpty()) {
                        val speechFile = File("/folder/", "${nanoTime()}.wav")

                        FileOutputStream(speechFile).use { output ->
                            output.write(audioHeader)
                            output.write(speechData)
                        }
                        
                        speechData = byteArrayOf()
                    }
                }
            }
        }
    }

Silero VAD

Parameters

Silero VAD library only accepts 16-bit Mono PCM audio stream and can work with next Sample Rates, Frame Sizes and Modes.

Valid Sample Rate Valid Frame Size
8000Hz 256, 512, 768
16000Hz 512, 1024, 1536
Valid Mode
OFF
NORMAL
AGGRESSIVE
VERY_AGGRESSIVE

Recommended parameters for Silero VAD:

  • Context (required) - The Context is required to facilitate reading the model file from the Android file system.
  • Sample Rate (required) - 16KHz - The sample rate of the audio input.
  • Frame Size (required) - 512 - The frame size of the audio input.
  • Mode (required) - NORMAL - The confidence mode of the VAD model.
  • Silence Duration (optional) - 300ms - The minimum duration in milliseconds for silence segments.
  • Speech Duration (optional) - 50ms - The minimum duration in milliseconds for speech segments.

Usage

Silero VAD can identify speech in short audio frames, returning results for each frame. By utilizing parameters such as silenceDurationMs and speechDurationMs, you can enhance the capability of VAD, enabling the detection of prolonged utterances while minimizing false positive results during pauses between sentences.

Java example:

    VadSilero vad = Vad.builder()
        .setContext(requireContext())
        .setSampleRate(SampleRate.SAMPLE_RATE_16K)
        .setFrameSize(FrameSize.FRAME_SIZE_512)
        .setMode(Mode.NORMAL)
        .setSilenceDurationMs(300)
        .setSpeechDurationMs(50)
        .build();

    boolean isSpeech = vad.isSpeech(audioData);

    vad.close();

Kotlin example:

    VadSilero(
        requireContext(),
        sampleRate = SampleRate.SAMPLE_RATE_16K,
        frameSize = FrameSize.FRAME_SIZE_512,
        mode = Mode.NORMAL,
        silenceDurationMs = 300,
        speechDurationMs = 50
    ).use { vad ->
        val isSpeech = vad.isSpeech(audioData)
    }

Yamnet VAD

Parameters

Yamnet VAD library only accepts 16-bit Mono PCM audio stream and can work with next Sample Rates, Frame Sizes and Modes.

Valid Sample Rate Valid Frame Size
16000Hz 243, 487, 731, 975
243, 487, 731, 975
Valid Mode
OFF
NORMAL
AGGRESSIVE
VERY_AGGRESSIVE

Recommended parameters for Yamnet VAD:

  • Context (required) - The Context is required to facilitate reading the model file from the Android file system.
  • Sample Rate (required) - 16KHz - The sample rate of the audio input.
  • Frame Size (required) - 243 - The frame size of the audio input.
  • Mode (required) - NORMAL - The confidence mode of the VAD model.
  • Silence Duration (optional) - 30ms - The minimum duration in milliseconds for silence segments.
  • Speech Duration (optional) - 30ms - The minimum duration in milliseconds for speech segments.

Usage

Yamnet VAD can identify 521 audio event classes (such as speech, music, animal sounds and etc) in small audio frames. By utilizing parameters such as silenceDurationMs and speechDurationMs and specifying sound category (ex. classifyAudio("Speech", audioData)), you can enhance the capability of VAD, enabling the detection of prolonged utterances while minimizing false positive results during pauses between sentences.

Java example:

    VadYamnet vad = Vad.builder()
        .setContext(requireContext())
        .setSampleRate(SampleRate.SAMPLE_RATE_16K)
        .setFrameSize(FrameSize.FRAME_SIZE_243)
        .setMode(Mode.NORMAL)
        .setSilenceDurationMs(30)
        .setSpeechDurationMs(30)
        .build();

    SoundCategory sc = vad.classifyAudio("Speech", audioData);

    if ("Speech".equals(sc.getLabel())) {
        System.out.println("Speech Detected: " + sc.getScore());
    } else {
        System.out.println("Noise Detected: " + sc.getScore());
    }
    
    vad.close();

Kotlin example:

    VadYamnet(
        requireContext(),
        sampleRate = SampleRate.SAMPLE_RATE_16K,
        frameSize = FrameSize.FRAME_SIZE_243,
        mode = Mode.NORMAL,
        silenceDurationMs = 30,
        speechDurationMs = 30
    ).use { vad ->
        val sc = vad.classifyAudio("Cat", audioData)

        when (sc.label) {
            "Cat" -> println("Cat Detected: " + sc.score)
            else -> println("Noise Detected: " + sc.score)
        }
    }

Requirements

Android API

WebRTC VAD - Android API 21 and later.
Silero VAD - Android API 24 and later.
Yamnet VAD - Android API 23 and later.

JDK

JDK 8 or later.

Download

Gradle is the only supported build configuration, so just add the dependency to your project build.gradle file:

  1. Add it in your root build.gradle at the end of repositories:
allprojects {
   repositories {
     maven { url 'https://jitpack.io' }
   }
}
  1. Add one dependency from list below:

WebRTC VAD

dependencies {
    implementation 'com.github.gkonovalov.android-vad:webrtc:2.0.10'
}

Silero VAD

dependencies {
    implementation 'com.github.gkonovalov.android-vad:silero:2.0.10'
}

Yamnet VAD

dependencies {
    implementation 'com.github.gkonovalov.android-vad:yamnet:2.0.10'
}

You also can download precompiled AAR library and APK files from GitHub's releases page.

References

[1] WebRTC VAD - Voice Activity Detector from Google which is reportedly one of the best available: it's fast, modern and free. This algorithm has found wide adoption and has recently become one of the gold-standards for delay-sensitive scenarios like web-based interaction.

[2] Silero VAD - pre-trained enterprise-grade Voice Activity Detector, Number Detector and Language Classifier hello@silero.ai.

[3] Yamnet VAD - YAMNet is a pretrained deep neural network that can predicts 521 audio event classes based on the AudioSet-YouTube corpus, employing the Mobilenet_v1 depthwise-separable convolution architecture.


Georgiy Konovalov 2025 (c) MIT License

排名相邻
同类项目