
麦克风语音识别文本输入
此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 的自定义动态链接库目录。 |
- 更多信息,请参阅 WhisperFullParams.java
警告:激活高级配置会改变 Whisper 模型配置的默认参数,这将对语音识别结果产生重大影响。不恰当的高级参数配置可能导致语音识别失败、计算机资源占用过高以及程序崩溃等问题。请谨慎使用。
使用方法
- 安装模组并下载 GGML Whisper 模型。
- 在配置菜单中根据您的需求配置模组。
- 使用您设置的键位绑定(默认为
V)开始录制和语音识别。 - 如果模式设置为
AUTO_SEND,识别文本将自动作为聊天消息发送。如果设置为RELEASE_KEY_TO_SEND或RELEASE_KEY_TO_INPUT,请按照相应的松开按键操作执行。
使用 VAD
如果希望使用 VAD(语音活动检测),需要下载 VAD 模型,在配置菜单中启用高级配置并将 vad_model_path 设置为 VAD 模型的路径。
自定义动态库
- 从 Jaffe2718/whisper-jni 下载自定义动态库并解压文件。
- 在配置菜单中启用高级配置并设置
useCustomDynamicLib为true。 - 在配置菜单中将
customDynamicLibDir设置为自定义动态库所在目录。 - 如果您希望使用支持 Vulkan 的动态库,请检查您的计算机是否安装了运行 Vulkan 所需的驱动和库。
vulkaninfo - 如果您希望使用 CUDA,请检查您的计算机是否安装了运行 CUDA 所需的驱动和库。
对于 Linux,您需要安装nvidia-smiCUDA Toolkit >= 12.4.0并配置环境变量。 对于 Windows,如果游戏崩溃,您必须强制游戏使用Java >= 25,参见 Jaffe2718/whisper-jni/v0.5.6
故障排除
- 启动时崩溃:请检查您使用的动态链接库的兼容性和版本。您可以禁用高级配置并将
useCustomDynamicLib设置为false,以使用默认动态库(CPU 版本)。 - 音频输入设备加载失败:请检查 Java 是否有权限访问音频输入设备。
- Whisper 模型加载失败:请确保 GGML Whisper 模型的路径正确。
贡献
如果您想为这个项目做出贡献,欢迎在 GitHub 上提交问题或拉取请求。
正在加载版本记录…



正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。