麦克风语音识别文本输入

麦克风语音识别文本输入

此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_SENDRELEASE_KEY_TO_INPUT,请按照相应的松开按键操作执行。

使用 VAD

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

自定义动态库

  1. Jaffe2718/whisper-jni 下载自定义动态库并解压文件。
  2. 在配置菜单中启用高级配置并设置 useCustomDynamicLibtrue
  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 上提交问题或拉取请求。