@ capgo/ 电容- speech- 识别
在您的 Capacitor app 中将语音转换成文本, 低潜度, 现场部分结果和本地识别器在 iOS 和 Android 上 .
🤖 建筑与AI编码代理? 安装 Capgo 技能 所以克劳德代码,代码,光标,副驾驶,或双子座CLI知道如何安装和使用
@capgo/capacitor-speech-recognition在您的电容应用程序中:npx skills add Cap-go/capgo-skills。然后问你的经纪人: 加入@capgo/capor-speech - 识别我的Capacitor应用程序并把它接通 代理设置指南 • 妇女 主机磁共振
主要特点
- 现场录音: 与
partialResults: true, (中文(简体) ),start()用户说话时更新流程 .stop()财务报告和审定财务报表forceStop()结束会话. - 语言和终端模式数字 :
getSupportedLanguages()列出本地地址,isOnDeviceRecognitionAvailable()检查设备支持和useOnDeviceRecognition: true选择加入. - 准确性选项: 在iOS 16上和后期上标出和域名的上下文字符串.
- 推着说话数字 :
setPTTState()报告是否按住按钮,用于continuousPTT或你自己的握住和说话的流程. - 事件和权限数字 :
listeningState, (中文(简体) ),audioLevel财务报告和审定财务报表error事件,加上麦克风和语音许可帮助者. - 平台: iOS和Android. 互联网档案馆的存檔,存档日期2013-12-22. iOS 使用语音框架, Android 使用
SpeechRecognizer. 分片结果仅为Android. 在网上不可用.
为什么是这个插件?
这个包是从极好的开始的 capacitor-community/speech-recognition 插件, 但是在最需要的调取请求中折叠( 插取支持、 分会话、 崩溃修正) , 并保留在 Capgo 伞下 。 你得到熟悉的API+:
- ✅ 合并社区公关,在iOS(PR #74)上分解切换,在Android(PR #104)上分解结果和沉默处理,以及
recognitionRequest安全固定(PR #105)出舱. - 🚀 新建 Capgo 特性,可配置的静音窗口,流线片段的收听器,一致的许可帮助器,以及一个被刷新的例子应用.
- 🛠️ 主动维修,与所有 Capgo 插件(SPM, Podspec, 工作流程, 例如 app) 一样的常规, 因此它跟踪 Capacitor 主要版本, 不使用比特- rot .
- 📦 降入移徙, TypeScript 定义仍然与社区插件相容,同时披露额外的选项(
addPunctuation, (中文(简体) ),allowForSilence, (中文(简体) ),segmentResults(见a/c.5/49/70,附件).
文档
这里有最完整的医生: https://capgo.app/docs/plugins/speech-识别/
兼容性
| 插件版本 | 电容兼容性 | 维护 |
|---|---|---|
| 联合国 | 联合国 | ✅ |
| 页:1 | 页:1 | 应要求 |
| 页:1 | 页:1 | ❌ |
| 页:1 | 页:1 | ❌ |
说明: 此插件的主要版本沿用了Capacitor的主要版本. 使用匹配您的 Capacitor 安装的版本( 如 Capacitor 8 的插件 v8) 。 只有最新的主要版本得到积极维护.
安装
您可以使用我们的 AI 辅助设置安装插件 。 使用以下命令将 Capgo 技能添加到您的 AI 工具 :
npx skills add https://github.com/cap-go/capacitor-skills --skill capacitor-plugins
然后使用下列提示:
Use the `capacitor-plugins` skill from `cap-go/capacitor-skills` to install the `@capgo/capacitor-speech-recognition` plugin in my project.
如果您更喜欢手动设置,请通过运行以下命令来安装插件,并遵循下面的平台特定指令:
bun add @capgo/capacitor-speech-recognition
bunx cap sync
使用量
import { SpeechRecognition } from '@capgo/capacitor-speech-recognition';
await SpeechRecognition.requestPermissions();
const { available } = await SpeechRecognition.available();
if (!available) {
console.warn('Speech recognition is not supported on this device.');
}
const partialListener = await SpeechRecognition.addListener('partialResults', (event) => {
console.log('Partial:', event.matches?.[0]);
});
await SpeechRecognition.start({
language: 'en-US',
maxResults: 3,
partialResults: true,
});
// Later, when you want to stop listening
await SpeechRecognition.stop();
await partialListener.remove();
iOS 倒置和上下文字符串
iOS 用途 SFSpeechRecognizer 默认情况下,包括在iOS 26.以下版本.
设定 useOnDeviceRecognition: true 只当您想要iOS 26+时
SpeechAnalyzer 路径和 isOnDeviceRecognitionAvailable() 报告支持.
如果无法找到较新的路径, 插件会回到 SFSpeechRecognizer。 。 。 .
使用 contextualStrings 对特定应用术语的偏见。 打开
被传递到遗产路径 SFSpeechRecognizer; 在 iOS 26+ 上与
useOnDeviceRecognition,它们通过 AnalysisContext 编辑
SpeechAnalyzer 路径 :
await SpeechRecognition.start({
language: 'en-US',
partialResults: true,
contextualStrings: ['Capgo', 'Live Update', 'channel override'],
});
设备识别模式
此插件现在支持在清晰的后端选择在设备上识别路径
useOnDeviceRecognition 旗帜.
这是什么
默认路径保留了长期存在的识别器流以进行后向相容.
useOnDeviceRecognition 当平台支持时, 切换到更新的本地语音管道:
- 在iOS 26+上,它使用苹果的
SpeechAnalyzer编号 :SpeechTranscriber堆栈. - 在更古老的iOS版本上,不支持的iOS 26+地區,或被禁用后旗会使用
SFSpeechRecognizer。 。 。 . - 在近期的Android版本上,它使用在线设备
SpeechRecognizer路径.
为什么你可能想要它
- 更好地与最新本地语音 API 保持一致 .
- 在支持的平台上改进了安装模型处理.
- 如果您想要采用更新的语句堆栈而不立即改变每个用户, 则需要更清洁的推出路径 .
为什么选入
即使有新的堆栈技术可用,改变识别行为也会默默地影响:
- 语句
- 平分行为
- 部分结果时间
- 产品计量和用户期望
因此插件默认保留了后遗症识别器,需要为新路径打出一个明确的旗帜.
建议推出
- 检查通用语音支持
available()。 。 。 . - 检查设备上的路径
isOnDeviceRecognitionAvailable()。 。 。 . - 启用
useOnDeviceRecognition只当第二次检查返回时true。 。 。 . - 如果你的应用依赖于稳定的记录或分析,就逐步推出.
示例
import { SpeechRecognition } from '@capgo/capacitor-speech-recognition';
await SpeechRecognition.requestPermissions();
const { available } = await SpeechRecognition.available();
if (!available) {
throw new Error('Speech recognition is not available on this device.');
}
const { available: onDeviceRecognitionAvailable } =
await SpeechRecognition.isOnDeviceRecognitionAvailable({
language: 'en-US',
});
await SpeechRecognition.start({
language: 'en-US',
partialResults: true,
useOnDeviceRecognition: onDeviceRecognitionAvailable,
});
还没用的时候
如果 :
- 您需要对现有用户采取不变的行为
- 您没有验证您的目标区域的记录
- 您想要在较旧和较新版本的 OS 版本中相同的制作行为
平台注释
- iOS只在iOS 26+上使用更新的device路径,并且仅用于通过更新的语音堆栈对本地人Apple进行曝光.
- Android只在内置模式中使用了安装在设备上的识别器.
popup: true继续使用系统对话框,但不兼容useOnDeviceRecognition。 。 。 . - 在Android上,一个被支持的device上语言可能需要模型下载才能开始识别.
推动对话和会议活动
此插件还支持围绕三个API构建的以推向对讲器为导向的流:
setPTTState({ held })让您的用户界面在按下或放出按钮时告诉插件 .forceStop()立即停止活动会话,并以forced: true当可用时.getLastPartialResult()允许您在任何时间读取最新的缓存记录.
continuousPTT 是一种实验的跨平台模式,它通过在演讲部分最后敲定时重新启动识别,使一个所举行的推向对讲会保持活力。 Android和iOS都支持这种重启流,以进行内置/内置识别.
插件还发出决定会话生命周期事件, 以便 UIs 可以干净的反应 :
listeningState现在携带state, (中文(简体) ),sessionId, (中文(简体) ),reason选择errorCode除了遗产status。 。 。 .error每一个本地识别器错误都会被释放, 而不是只依靠拒绝承诺.readyForNextSession当本地资源被撕毁,插件准备再开始时,信号.
iOS 用户描述
在您的应用程序中添加以下密钥 Info.plist数字 :
NSSpeechRecognitionUsageDescriptionNSMicrophoneUsageDescription
API 密码
available()isOnDeviceRecognitionAvailable(...)start(...)stop()forceStop(...)getLastPartialResult()setPTTState(...)getSupportedLanguages()isListening()checkPermissions()requestPermissions()getPluginVersion()addListener('endOfSegmentedSession', ...)addListener('segmentResults', ...)addListener('partialResults', ...)addListener('listeningState', ...)addListener('error', ...)addListener('audioLevel', ...)addListener('readyForNextSession', ...)removeAllListeners()- 接口
- 类型异名
可用( )
available() => Promise<SpeechRecognitionAvailability>
检查本地语音识别服务是否可以在当前设备上使用 .
回返情况: Promise<SpeechRecognitionAvailability>
可识别文件(...)
isOnDeviceRecognitionAvailable(options?: Pick<SpeechRecognitionStartOptions, "language" | "preferLegacyRecognizer"> | undefined) => Promise<SpeechRecognitionAvailability>
检查是否为选定的地方提供在线语音识别 .
这是您启用前应该使用的能力检查 useOnDeviceRecognition。 。 。 .
在iOS上,结果取决于哪个识别器路径 start() 将使用 :
- 何时
preferLegacyRecognizer实值false(默认)在iOS 26+上,此检查现代SpeechAnalyzer路径. - 在旧的iOS版本上,或何时
preferLegacyRecognizer实值true,这个检查SFSpeechRecognizer.supportsOnDeviceRecognition为遗产之路.
传出同样的 preferLegacyRecognizer 这里和里面的值 start() 因此,可用性
检查匹配的识别路径 .
SDK 平台文件 : iOS: (英语) 发言 机器人: 语音识别器
| 参数 | 类型 |
|---|---|
options | Pick<SpeechRecognitionStartOptions, 'language' | 'preferLegacyRecognizer'> |
回返情况: Promise<SpeechRecognitionAvailability>
启动(...)
start(options?: SpeechRecognitionStartOptions | undefined) => Promise<SpeechRecognitionMatches>
开始捕捉音频和转录语音.
何时 partialResults 实值 true,返回的承诺立即解决,更新是
流经 partialResults 直到会话结束.
默认路径保留了后向相容性的遗留识别器行为.
过 useOnDeviceRecognition: true 仅在检查后
(原始内容存档于2018-10-29). QQlink Speech Recognition Plugin.is On Device Recognition Available }.
| 参数 | 类型 |
|---|---|
options | SpeechRecognitionStartOptions |
回返情况: Promise<SpeechRecognitionMatches>
停止( )
stop() => Promise<void>
停止倾听 并撕毁本土资源.
强制停止(...)
forceStop(options?: ForceStopOptions | undefined) => Promise<void>
强制停止当前会话 .
在Android上,这首先尝试一个正常的停站,然后倒回到破坏/重建之后 timeout。 。 。 .
在iOS上,本会话被立即停止.
如果部分记录稿被缓存,则通过 partialResults 监听器 forced: true。 。 。 .
| 参数 | 类型 |
|---|---|
options | ForceStopOptions |
获取 LastPartial Result ()
getLastPartialResult() => Promise<LastPartialResult>
获取上次缓存的部分转录结果 .
回返情况: Promise<LastPartialResult>
设置PTT状态(...)
setPTTState(options: PTTStateOptions) => Promise<void>
更新当前按下按键状态.
一起使用这个 continuousPTT 或带有自定义的握住对口流.
| 参数 | 类型 |
|---|---|
options | PTTStateOptions |
获取支持语言( )
getSupportedLanguages() => Promise<SpeechRecognitionLanguages>
获得基础识别器支持的地方 .
Android 13+设备不再披露这一清单;在这种情况下 languages 为空.
回返情况: Promise<SpeechRecognitionLanguages>
正在听( )
isListening() => Promise<SpeechRecognitionListening>
返回插件是否正在积极监听语音 .
回返情况: Promise<SpeechRecognitionListening>
检查( )
checkPermissions() => Promise<SpeechRecognitionPermissionStatus>
获得当前权限状态.
回返情况: Promise<SpeechRecognitionPermissionStatus>
请求( )
requestPermissions() => Promise<SpeechRecognitionPermissionStatus>
请求麦克风+语音识别权限.
回返情况: Promise<SpeechRecognitionPermissionStatus>
获取 PluginVersion ()
getPluginVersion() => Promise<{ version: string; }>
返回与此软件包捆绑的本地插件版本 .
当报告问题时,确认本地版本和联署材料版本相符是有用的.
回返情况: Promise<{ version: string; }>
添加倾听器( “ 结束会议 ” ,...)
addListener(eventName: 'endOfSegmentedSession', listenerFunc: () => void) => Promise<PluginListenerHandle>
听分会场完成活动(仅限Android).
| 参数 | 类型 |
|---|---|
eventName | 'endOfSegmentedSession' |
listenerFunc | () => void |
回返情况: Promise<PluginListenerHandle>
添加收听器( 组件Results',...)
addListener(eventName: 'segmentResults', listenerFunc: (event: SpeechRecognitionSegmentResultEvent) => void) => Promise<PluginListenerHandle>
听取分解识别结果(仅Android).
| 参数 | 类型 |
|---|---|
eventName | 'segmentResults' |
listenerFunc | (event: SpeechRecognitionSegmentResultEvent) => void |
回返情况: Promise<PluginListenerHandle>
添加倾听器( “ 部分结果 ” , )
addListener(eventName: 'partialResults', listenerFunc: (event: SpeechRecognitionPartialResultEvent) => void) => Promise<PluginListenerHandle>
听到部分复制更新,同时发布 partialResults 已启用.
| 参数 | 类型 |
|---|---|
eventName | 'partialResults' |
listenerFunc | (event: SpeechRecognitionPartialResultEvent) => void |
回返情况: Promise<PluginListenerHandle>
添加倾听器( “ listening state ” ,...)
addListener(eventName: 'listeningState', listenerFunc: (event: SpeechRecognitionListeningEvent) => void) => Promise<PluginListenerHandle>
聆听本地监听状态的变化 .
| 参数 | 类型 |
|---|---|
eventName | 'listeningState' |
listenerFunc | (event: SpeechRecognitionListeningEvent) => void |
回返情况: Promise<PluginListenerHandle>
添加倾听器( 'error',...)
addListener(eventName: 'error', listenerFunc: (event: SpeechRecognitionErrorEvent) => void) => Promise<PluginListenerHandle>
注意识别错误.
| 参数 | 类型 |
|---|---|
eventName | 'error' |
listenerFunc | (event: SpeechRecognitionErrorEvent) => void |
回返情况: Promise<PluginListenerHandle>
添加倾听器( “ audiolevel ” ,...)
addListener(eventName: 'audioLevel', listenerFunc: (event: SpeechRecognitionAudioLevelEvent) => void) => Promise<PluginListenerHandle>
在识别活动时, 请聆听现场麦克风输入级别 .
每秒给药约10至20次,正常 0..1 级别.
身份识别闲置时不会发生任何事件 .
仅iOS和Android. Web接受收听者注册,但不会放出事件.
| 参数 | 类型 |
|---|---|
eventName | 'audioLevel' |
listenerFunc | (event: SpeechRecognitionAudioLevelEvent) => void |
回返情况: Promise<PluginListenerHandle>
添加倾听器( 已准备好下次会议) ,...)
addListener(eventName: 'readyForNextSession', listenerFunc: (event: SpeechRecognitionReadyEvent) => void) => Promise<PluginListenerHandle>
听好,确认器准备好再开会.
| 参数 | 类型 |
|---|---|
eventName | 'readyForNextSession' |
listenerFunc | (event: SpeechRecognitionReadyEvent) => void |
回返情况: Promise<PluginListenerHandle>
删除所有收听器( )
removeAllListeners() => Promise<void>
删除每个已注册的收听者.
接口
语音识别
| Prop | 类型 |
|---|---|
available | boolean |
语音识别开始选项
配置识别器在调用 QQlink Speech Recognition Plugin. start 时的表现 .
| Prop | 类型 | 说明 | 默认 | 自兹 |
|---|---|---|---|---|
language | string | 本地标识符, 如 en-US当省略设备语言时. | ||
maxResults | number | 本地 API 返回的最大最终匹配数 。 默认为 5。 。 。 . | ||
prompt | string | 在Android系统对话框(在iOS上被点名)内显示的快速消息. | ||
popup | boolean | 何时 true,Android显示OS语音对话框,而不是运行内置识别. 默认为 false。 。 。 . | ||
partialResults | boolean | 输入部分文本更新 partialResults 音频被捕获时的听众. | ||
addPunctuation | boolean | 启用所支持的本地 puntuation 处理( iOS 16+) . | ||
contextualStrings | string[] | 应被本地语音API更准确识别的词汇或短语. 在iOS上,这些传递给 SFSpeechRecognitionRequest.contextualStrings 当插件使用遗产时 SFSpeechRecognizer 路径。 该路径是所有iOS版本的默认,倒置于iOS 26下方,通过离开仍然可以在iOS 26+上使用 useOnDeviceRecognition 已禁用或设置 preferLegacyRecognizer ——因此可以同时使用上下文的字符串和上声识别. 在iOS 26+上,插件使用时 SpeechAnalyzer 路径,相同的字符串通过 AnalysisContext.contextualStrings 通过 SpeechAnalyzer.setContext(_:)被Android忽视了. | ||
useOnDeviceRecognition | boolean | 可用时可进入平台更新的安装设备识别路径. 在iOS 26+上,这个使用苹果公司的 SpeechAnalyzer 编号 : SpeechTranscriber 输油管。 在近期的Android版本上,它使用在线设备 SpeechRecognizer 路径。 除非他们选择推出新行为, 在 iOS 上, 离开此禁用保留 SFSpeechRecognizer 每个支持的OS版本。 关于遗产 SFSpeechRecognizer 路径,启用此拒绝 ON_DEVICE_RECOGNITION_UNAVAILABLE 当不支持本地地址的在线识别时。 在 iOS 26+ 上,启用此功能不包含 preferLegacyRecognizer 使用现代 SpeechAnalyzer 路径; 否则, 识别会回到具有同样拒绝规则的遗留路径。 使用 QQlink Speech Recognition Plugin.is 在生产中启用前使用 Device recognition Available } 。 SDK平台文件: iOS: 发言, (中文(简体) ), 语音分析器, (中文(简体) ), 语音翻译 机器人: 语音识别器 默认为 false。 。 。 . | ||
preferLegacyRecognizer | boolean | 只有 iOS: 跳过现代 SpeechAnalyzer 路径,即使有,这样 useOnDeviceRecognition 适用于 SFSpeechRecognizer (单位:千美元)requiresOnDeviceRecognition相反。 在 iOS 26 设备上有用,其中现代路径开始和停止一个会话而不排放 partialResults。 。 。 . | false | 8.1.11 联合国 |
allowForSilence | number | 允许在将承认会话分出分会话前保持多毫秒的沉默. 要求大于0,目前仅支持在Android上. | ||
continuousPTT | boolean | 警告: 保持 PTT 会话在静默中保持活性, 在按钮保持时重新启动识别 。 此重启行为被应用于Android内线识别和iOS本土识别. | ||
muteRecognizerBeep | boolean | 当内置识别开始或重启时,会压制Android系统鸣叫. 使用无证识别器意向外加临时通知/系统流积突变的最佳组合。 一些设备忽略了意图外加;音量回落是可移植路径. 默认为 true 何时 continuousPTT 已启用. |
语音识别
| Prop | 类型 |
|---|---|
matches | string[] |
强制停止选项
QQlink 语音识别 Plugin. ForceStop} 的选项 .
| Prop | 类型 | 说明 |
|---|---|---|
timeout | number | 仅Android:以毫秒计超时后再通过破坏/再造来强制停止. 在iOS上,当前会话被立即停止并被忽略这个值. 默认为 1500。 。 。 . |
最后一个部分
由QQlink Speech Recognition Plugin.getLastPartial Result}所出 .
| Prop | 类型 | 说明 |
|---|---|---|
available | boolean | 目前是否缓存部分结果 . |
text | string | 当地人认识的最新记录文本. |
matches | string[] | 当前所有可用的选项都匹配 . |
PTT 状态选项
QQlink 语音识别 Plugin. setPTT State } 的选项 .
| Prop | 类型 | 说明 |
|---|---|---|
held | boolean | PTT 按钮目前是否被持有 . |
mute | boolean | 设定时, 更新Android是否应压制识别器为活动会话启动哔声 。 哔哩哔哩的压制是最佳的,是设备专用的;参见QQlink 语音识别启动选项. mute recognizerBiep曰. 师曰. |
语音识别语言
| Prop | 类型 |
|---|---|
languages | string[] |
语音识别
| Prop | 类型 |
|---|---|
listening | boolean |
语音识别状态
权限映射返回 checkPermissions 财务报告和审定财务报表 requestPermissions。 。 。 .
Android上的州地图 RECORD_AUDIO 允许.
在iOS上,它结合语音识别和麦克风许可.
| Prop | 类型 |
|---|---|
speechRecognition | PermissionState |
插件听筒
| Prop | 类型 |
|---|---|
remove | () => Promise<void> |
语音识别部分
每当产生分化结果(只有Android)时就会提高.
| Prop | 类型 |
|---|---|
matches | string[] |
语音识别
制作部分抄本时提高.
| Prop | 类型 | 说明 |
|---|---|---|
matches | string[] | 当本地识别者报告时, 当前的识别匹配 。 对于被强迫或仅被累积的有效载荷,可以省略. |
accumulated | string | 由早期连续的PTT周期所累积的转录. |
accumulatedText | string | 最后累积案文,包括目前的结果. |
isRestarting | boolean | true 当插件在连续的 PTT 会话内重新启动识别时. |
forced | boolean | true 当有效载荷由 forceStop()。 。 。 . |
语音识别
随听州变起起.
原画 status 字段为后向相容性保存并存在
二进制 started 编号 : stopped 各州.
| Prop | 类型 | 说明 |
|---|---|---|
state | ListeningFiniteState | 承认会议的有限状态. |
sessionId | number | 当前收听会话的独特标识符 . |
reason | ListeningReason | 为何这一州过渡发生. |
errorCode | string | 转换因出错而出错代码 . |
status | 'started' | 'stopped' | 后相相相二进制状态被更早的发行所使用. |
语音识别错误事件
当本地识别报告错误时会提高.
| Prop | 类型 |
|---|---|
code | string |
message | string |
sessionId | number |
语音识别
在识别活动时使用现场麦克风级别 .
level 改为 0..1 方便波形/米UI.
只能通过iOS和Android接收. Web接受收听者注册,但不会放出事件.
| Prop | 类型 |
|---|---|
level | number |
语音识别
本地资源被撕毁后发送, 插件已准备好进行另一个会话 .
| Prop | 类型 |
|---|---|
sessionId | number |
类型异名
选择
从 T 中选择一组键在 C 中的属性
{
[P in K]: T[P];
}
权限状态
'prompt' | 'prompt-with-rationale' | 'granted' | 'denied'
监听国家
识别会话生命周期的限定状态值 .
'startingListening' | 'started' | 'stoppingListening' | 'stopped'
倾听Reason的声音
为什么发生了监听状态的转变.
'userStart' | 'userStop' | 'forceStop' | 'results' | 'silence' | 'error' | 'unknown'