麦克风语音识别文本输入

麦克风语音识别文本输入

此mod利用语音识别技术,让您能通过麦克风输入文本并发送玩家消息。 按下V键即可进行语音识别并自动发送消息。

社交

麦克风文本输入模组用户文档

Architectury 2.x

图标

简介

麦克风文本输入模组是一款面向 Minecraft 客户端的 Fabric 模组。它提供语音识别输入功能,并自动将语音转换为文本聊天消息,从而增强游戏内的交流体验。

功能特性

  • 多种模式:支持不同的操作模式,包括 AUTO_SEND(自动发送)、RELEASE_KEY_TO_SEND(松开按键发送)和 RELEASE_KEY_TO_INPUT(松开按键输入)。
  • 高级配置:允许用户调整与 Whisper 库相关的高级参数,例如线程数、音频上下文大小和采样策略。

依赖关系

依赖名称 Fabric NeoForge
Java 21 21
Fabric API 参见 fabric.mod.json ❌
Architectury API ❌ 参见 neoforge.mods.toml
MidnightLib 参见 fabric.mod.json 参见 neoforge.mods.toml

配置

键位绑定

键位绑定名称 识别名称
分类 key.category.minecraft.mcmti
翻译键 key.mcmti.recognize
默认键 V

常规设置

设置项 翻译键 字段 类型 默认值 描述
GGML Whisper 模型 mcmti.midnightconfig.model me.jaffe2718.mcmti.config.McmtiConfig.model String "" GGML Whisper 模型的路径。
语言 mcmti.midnightconfig.language me.jaffe2718.mcmti.config.McmtiConfig.language String "en" 语音识别使用的语言。
模式 mcmti.midnightconfig.mode me.jaffe2718.mcmti.config.McmtiConfig.mode me.jaffe2718.mcmti.config.McmtiConfig.Mode "RELEASE_KEY_TO_SEND" 模组的工作模式。
录制周期(毫秒) mcmti.midnightconfig.recordCycleMs me.jaffe2718.mcmti.config.McmtiConfig.recordCycleMs int 5000 录制周期,单位毫秒。
录制缓冲区大小(字节) mcmti.midnightconfig.recordBufferSize me.jaffe2718.mcmti.config.McmtiConfig.recordBufferSize int 1024 录制缓冲区大小,单位字节。
前缀 mcmti.midnightconfig.prefix me.jaffe2718.mcmti.config.McmtiConfig.prefix String "⌈语音输入⌋" 添加到识别文本前面的前缀。
草稿输入 mcmti.midnightconfig.draftInput me.jaffe2718.mcmti.config.McmtiConfig.draftInput boolean false 启用草稿输入。若启用,识别文本将作为草稿显示在输入框中。
编码修复 mcmti.midnightconfig.encodingRepair me.jaffe2718.mcmti.config.McmtiConfig.encodingRepair boolean false 启用编码修复。
源编码 mcmti.midnightconfig.srcEncoding me.jaffe2718.mcmti.config.McmtiConfig.srcEncoding String Charset.defaultCharset().displayName() 文本的源编码。仅在启用编码修复时生效。
目标编码 mcmti.midnightconfig.dstEncoding me.jaffe2718.mcmti.config.McmtiConfig.dstEncoding String Charset.defaultCharset().displayName() 文本的目标编码。仅在启用编码修复时生效。

高级设置

设置项 翻译键 字段 类型 默认值 描述
启用高级配置 mcmti.midnightconfig.advancedConfig me.jaffe2718.mcmti.config.McmtiConfig.advancedConfig boolean false 启用高级配置。
nThreads(线程数) mcmti.midnightconfig.nThreads me.jaffe2718.mcmti.config.McmtiConfig.nThreads int 0 用于 Whisper 模型运算的线程数。0 表示使用最大核心数。
audioCtx(音频上下文) mcmti.midnightconfig.audioCtx me.jaffe2718.mcmti.config.McmtiConfig.audioCtx int 0 Whisper 模型的音频上下文大小。0 表示使用默认值。
nMaxTextCtx mcmti.midnightconfig.nMaxTextCtx me.jaffe2718.mcmti.config.McmtiConfig.nMaxTextCtx int 16384 将过去文本中用作解码器提示的最大 token 数。
offsetMs(偏移毫秒数) mcmti.midnightconfig.offsetMs me.jaffe2718.mcmti.config.McmtiConfig.offsetMs int 0 开始录制的偏移量,单位毫秒。
durationMs(时长毫秒数) mcmti.midnightconfig.durationMs me.jaffe2718.mcmti.config.McmtiConfig.durationMs int 0 待处理的音频时长,单位毫秒。0 表示使用默认值。
translate(翻译) mcmti.midnightconfig.translate me.jaffe2718.mcmti.config.McmtiConfig.translate boolean false 将文本翻译为默认语言。
noTimestamps(无时间戳) mcmti.midnightconfig.noTimestamps me.jaffe2718.mcmti.config.McmtiConfig.noTimestamps boolean false 不生成时间戳。
initialPrompt(初始提示) mcmti.midnightconfig.initialPrompt me.jaffe2718.mcmti.config.McmtiConfig.initialPrompt String "" 用作 Whisper 提示的初始文本。
noContext(无上下文) mcmti.midnightconfig.noContext me.jaffe2718.mcmti.config.McmtiConfig.noContext boolean true 不使用先前转写文本(如果有)作为解码器的初始提示。
singleSegment(单段) mcmti.midnightconfig.singleSegment me.jaffe2718.mcmti.config.McmtiConfig.singleSegment boolean false 强制单段输出(适用于流式传输)。
printSpecial(打印特殊标记) mcmti.midnightconfig.printSpecial me.jaffe2718.mcmti.config.McmtiConfig.printSpecial boolean false 打印特殊 token。
printProgress(打印进度) mcmti.midnightconfig.printProgress me.jaffe2718.mcmti.config.McmtiConfig.printProgress boolean true 打印进度信息。
printRealtime(实时打印) mcmti.midnightconfig.printRealtime me.jaffe2718.mcmti.config.McmtiConfig.printRealtime boolean false 从 whisper.cpp 内部打印结果(避免使用,应改用回调)。
printTimestamps(打印时间戳) mcmti.midnightconfig.printTimestamps me.jaffe2718.mcmti.config.McmtiConfig.printTimestamps boolean true 实时打印时,为每个文本段打印时间戳。
suppressBlank(抑制空白) mcmti.midnightconfig.suppressBlank me.jaffe2718.mcmti.config.McmtiConfig.suppressBlank boolean true 解码器选项。
suppressNonSpeechTokens(抑制非语音 token) mcmti.midnightconfig.suppressNonSpeechTokens me.jaffe2718.mcmti.config.McmtiConfig.suppressNonSpeechTokens boolean true 分词器选项。
temperature(温度) mcmti.midnightconfig.temperature me.jaffe2718.mcmti.config.McmtiConfig.temperature float 0.0f 初始解码温度。
maxInitialTs(最大初始时间戳) mcmti.midnightconfig.maxInitialTs me.jaffe2718.mcmti.config.McmtiConfig.maxInitialTs float 1.0f 最大初始时间戳。
lengthPenalty(长度惩罚) mcmti.midnightconfig.lengthPenalty me.jaffe2718.mcmti.config.McmtiConfig.lengthPenalty float -1.0f 长度惩罚。
temperatureInc(温度增量) mcmti.midnightconfig.temperatureInc me.jaffe2718.mcmti.config.McmtiConfig.temperatureInc float 0.4f 温度增量。
entropyThold(熵阈值) mcmti.midnightconfig.entropyThold me.jaffe2718.mcmti.config.McmtiConfig.entropyThold float 2.4f 熵阈值(类似于 OpenAI 的“compression_ratio_threshold”)。
logprobThold(对数概率阈值) mcmti.midnightconfig.logprobThold me.jaffe2718.mcmti.config.McmtiConfig.logprobThold float -1.0f 对数概率阈值。
noSpeechThold(无语音阈值) mcmti.midnightconfig.noSpeechThold me.jaffe2718.mcmti.config.McmtiConfig.noSpeechThold float 0.6f 无语音阈值。
greedyBestOf(贪婪最佳) mcmti.midnightconfig.greedyBestOf me.jaffe2718.mcmti.config.McmtiConfig.greedyBestOf int -1 特定于贪婪采样策略。
beamSearchBeamSize(束搜索尺寸) mcmti.midnightconfig.beamSearchBeamSize me.jaffe2718.mcmti.config.McmtiConfig.beamSearchBeamSize int 2 特定于束搜索采样策略。
beamSearchPatience(束搜索耐心) mcmti.midnightconfig.beamSearchPatience me.jaffe2718.mcmti.config.McmtiConfig.beamSearchPatience float -1.0f 特定于束搜索采样策略。
grammar(语法) mcmti.midnightconfig.grammar me.jaffe2718.mcmti.config.McmtiConfig.grammar String "" 语法文件路径。空表示不使用语法。
grammarPenalty(语法惩罚) mcmti.midnightconfig.grammarPenalty me.jaffe2718.mcmti.config.McmtiConfig.grammarPenalty float 100.0f 非语法 token 的惩罚。
whisperSamplingStrategy(采样策略) mcmti.midnightconfig.whisperSamplingStrategy me.jaffe2718.mcmti.config.McmtiConfig.whisperSamplingStrategy io.github.freshsupasulley.whisperjni.WhisperSamplingStrategy BEAM_SEARCH 用于配置 whisper 采样策略的 WhisperContext 枚举。
vad(语音活动检测) mcmti.midnightconfig.vad me.jaffe2718.mcmti.config.McmtiConfig.vad boolean false 启用 VAD(语音活动检测)。
vad__max_speech_duration_s mcmti.midnightconfig.vad__max_speech_duration_s me.jaffe2718.mcmti.config.McmtiConfig.vad__max_speech_duration_s float 0f 语音片段最大持续时间,超过后强制开始新片段。
vad__min_silence_duration_ms mcmti.midnightconfig.vad__min_silence_duration_ms me.jaffe2718.mcmti.config.McmtiConfig.vad__min_silence_duration_ms int 0 判定语音结束的最短静音持续时间。
vad__min_speech_duration_ms mcmti.midnightconfig.vad__min_speech_duration_ms me.jaffe2718.mcmti.config.McmtiConfig.vad__min_speech_duration_ms int 0 有效语音片段的最短持续时间。
vad__samples_overlap mcmti.midnightconfig.vad__samples_overlap me.jaffe2718.mcmti.config.McmtiConfig.vad__samples_overlap float 0f 复制语音片段音频样本时的重叠秒数。
vad__speech_pad_ms mcmti.midnightconfig.vad__speech_pad_ms me.jaffe2718.mcmti.config.McmtiConfig.vad__speech_pad_ms int 0 语音片段前后添加的填充时间。
vad__threshold mcmti.midnightconfig.vad__threshold me.jaffe2718.mcmti.config.McmtiConfig.vad__threshold float 0f 判定为语音的概率阈值。
vad_model_path(VAD 模型路径) mcmti.midnightconfig.vad_model_path me.jaffe2718.mcmti.config.McmtiConfig.vad_model_path String "" VAD 模型的路径。空表示使用默认。
useCustomDynamicLib(使用自定义动态库) mcmti.midnightconfig.useCustomDynamicLib me.jaffe2718.mcmti.config.McmtiConfig.useCustomDynamicLib boolean false 启用为 Whisper 使用自定义动态库。
customDynamicLibDir(自定义动态库目录) mcmti.midnightconfig.customDynamicLibDir me.jaffe2718.mcmti.config.McmtiConfig.customDynamicLibDir String "" Whisper 的自定义动态链接库目录。

警告:激活高级配置会改变 Whisper 模型配置的默认参数,这将对语音识别结果产生重大影响。不恰当的高级参数配置可能导致语音识别失败、计算机资源占用过高以及程序崩溃等问题。请谨慎使用。

使用方法

  1. 安装模组并下载 GGML Whisper 模型。
  2. 在配置菜单中根据您的需求配置模组。
  3. 使用您设置的键位绑定(默认为 V)开始录制和语音识别。
  4. 如果模式设置为 AUTO_SEND,识别文本将自动作为聊天消息发送。如果设置为 RELEASE_KEY_TO_SEND 或 RELEASE_KEY_TO_INPUT,请按照相应的松开按键操作执行。

使用 VAD

如果希望使用 VAD(语音活动检测),需要下载 VAD 模型,在配置菜单中启用高级配置并将 vad_model_path 设置为 VAD 模型的路径。

自定义动态库

  1. 从 Jaffe2718/whisper-jni 下载自定义动态库并解压文件。
  2. 在配置菜单中启用高级配置并设置 useCustomDynamicLib 为 true。
  3. 在配置菜单中将 customDynamicLibDir 设置为自定义动态库所在目录。
  4. 如果您希望使用支持 Vulkan 的动态库,请检查您的计算机是否安装了运行 Vulkan 所需的驱动和库。
    vulkaninfo
    
  5. 如果您希望使用 CUDA,请检查您的计算机是否安装了运行 CUDA 所需的驱动和库。
    nvidia-smi
    
    对于 Linux,您需要安装 CUDA Toolkit >= 12.4.0 并配置环境变量。 对于 Windows,如果游戏崩溃,您必须强制游戏使用 Java >= 25,参见 Jaffe2718/whisper-jni/v0.5.6

故障排除

  • 启动时崩溃:请检查您使用的动态链接库的兼容性和版本。您可以禁用高级配置并将 useCustomDynamicLib 设置为 false,以使用默认动态库(CPU 版本)。
  • 音频输入设备加载失败:请检查 Java 是否有权限访问音频输入设备。
  • Whisper 模型加载失败:请确保 GGML Whisper 模型的路径正确。

贡献

如果您想为这个项目做出贡献,欢迎在 GitHub 上提交问题或拉取请求。