41 lines
2.0 KiB
Objective-C
41 lines
2.0 KiB
Objective-C
//
|
|
// SenseVoiceBridge.h
|
|
// 康康
|
|
//
|
|
// Objective-C 封装:端侧 SenseVoice ASR(语音→文字),经 sherpa-mnn 在 MNN 后端跑。
|
|
// 「记录问诊」用它把整段录音离线转写成文字,再交本地 LLM 整理成问诊小结。
|
|
//
|
|
// 与 MNNLLMBridge 同一套思路:真实实现在 .mm 里以 C 调用 <sherpa-mnn/c-api/c-api.h>;
|
|
// 当工程尚未链接 sherpa-mnn(当前默认)时,以 __has_include 编为桩(isAvailable 返回 NO),
|
|
// 上层 SenseVoiceASRService 自动回退到系统端侧识别(SFSpeech),App 不受影响。
|
|
// 构建/接入 sherpa-mnn.xcframework 的步骤见 docs/release/sensevoice-integration.md。
|
|
//
|
|
|
|
#import <Foundation/Foundation.h>
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
@interface SenseVoiceBridge : NSObject
|
|
|
|
/// 本构建是否含真实 sherpa-mnn ASR(已链接 + 非桩=YES)。NO 时上层回退系统识别。
|
|
+ (BOOL)isAvailable;
|
|
|
|
/// 用转换好的 SenseVoice MNN 模型 + tokens 创建离线识别器(贪心解码)。
|
|
/// modelPath: MNNConvert 产出的 model.mnn;tokensPath: tokens.txt;
|
|
/// language: "auto" / "zh" / "en" / "ja" / "ko" / "yue"。失败返回 nil。
|
|
/// 识别器随实例常驻,dealloc 时释放——调用方按「一次问诊建一个」用,用完即释放降内存峰值。
|
|
- (nullable instancetype)initWithModelPath:(NSString *)modelPath
|
|
tokensPath:(NSString *)tokensPath
|
|
language:(NSString *)language;
|
|
|
|
/// 转写一段单声道 PCM(float32,取值 [-1, 1])。sherpa 内部按 sampleRate 重采样到 16k 再抽 fbank。
|
|
/// samples 在本调用期间需保持有效。返回识别文本(可能含 <|lang|> 等标签,由上层清洗);失败返回 nil。
|
|
/// 同步阻塞直到解码结束——调用方务必放到后台线程,且经 AIRuntime 闸门与 LLM/VL 互斥(防 OOM)。
|
|
- (nullable NSString *)transcribeSamples:(const float *)samples
|
|
count:(int)count
|
|
sampleRate:(int)sampleRate;
|
|
|
|
@end
|
|
|
|
NS_ASSUME_NONNULL_END
|