@ 学位标志/ 语音
将语音转换成文字, 私下, 由用户自己使用 设备。 用它来形容、语音笔记、抄本、语音到文字、文字 转到语音和TTS,之后没有云服务、账户或网络连接 设置.
试试现场演示 要运行语音到 文本和文本到浏览器中的语音,没有安装.
目录
为什么
- 下行:重量下载一次,然后每个解码都运行在机器上.
- 流线 :
transcribe返回活控并不断更新音频 来了. - 1 API:同名条目自动检测出Node.js和浏览器.
- 任何音频: 16千赫单PCM, a
Blob或者说File、 URL、 文件系统路径或 浏览器麦克风. - 已打入: TypeScript 声明覆盖了每次导出.
- 两个方向:语音到文字,文字到语音.
- 自控: 缓存、 存储和音频解码器在构建时捆绑 时间.
多莉丝蒂 将软件包用于任务描述和语音 注释.
安装
npm install @degreesign/voice
yarn add @degreesign/voice
pnpm add @degreesign/voice
需要24号节点或更新。 主要出口的确认和 语音库. 口述控制器有自己的条目.
公布的文件有:
dist/node/degreesign.node.min.js,用于节点的 CommonJS 条目.dist/browser/degreesign.min.js,完整的UMD条目为window.dsVoice。 。 。 .dist/browser/whisper.min.js,仅Whisper的UMD条目为window.dsVoiceWhisper。 。 。 .dist/browser/dictation.min.js(原始内容存档于2017-03-26). Dictation UMD 条目.dist/browser/dictation.worker.js那个预建的拼写工.
从源创建到 yarn build 输入 yarn typecheck。 。 。 .
光盘N
<script src="https://cdn.jsdelivr.net/npm/@degreesign/voice@latest/dist/browser/degreesign.min.js"></script>
试试看 现场演讲演示 在安装前。 它在浏览器中运行语音到文本和语音.
快开始
浏览器麦克风
<script src="https://cdn.jsdelivr.net/npm/@degreesign/voice@latest/dist/browser/degreesign.min.js"></script>
<script>
const { Language, transcribe } = window.dsVoice;
const session = transcribe({ language: Language.auto });
const timer = setInterval(() => {
output.textContent = session.fullText().text;
}, 500);
stopButton.onclick = async () => {
clearInterval(timer);
const result = await session.stop();
output.textContent = result.text;
};
</script>
浏览器会话没有 pcm,没有 audioFilePath 没有要求手动种子
麦克风访问和记录,直到 stop。 。 。 .
PCM 输入
输入为 16 kHz 单 Float32Array PCM (英语).
import { Language, transcribe } from "@degreesign/voice";
const session = transcribe({ pcm, language: Language.auto });
console.log(session.fullText().text);
const result = await session.done;
console.log(result.text, result.duration, result.meta.rtf);
先给模特取暖,打个电话 preloadVoice在音频到达的时候,
通过 microphone: false 并附带样本 push。 。 。 .
对文本的发言
transcribe(options?) 返回 a TranscribeSession 马上.
| 成员 | 说明 |
|---|---|
fullText() | 最新文本和解码时间。 便宜而同步. |
push(pcm) | 附加 16 kHz 单采样 microphone: false。 。 。 . |
stop() | 停止抓取或输入,冲出尾部并下定决心. |
cancel() | 丢弃待发音频并解析, 没有最终解码 . |
done | 在输入结束后决定, stop 或者说 cancel。 。 。 . |
error | 首先同步失败,或者 null。 。 。 . |
选项
| 外地 | 说明 |
|---|---|
model | ModelId.WhisperBase唯一一个模特儿. |
pcm | 16千赫单相 Float32Array,最高优先来源. |
audioFilePath | URL 字符串, Blob 或者说 File,或节点文件系统路径. |
microphone | 抓住麦克风 默认为 true· ; false 接受 push。 。 。 . |
language | 音频语言或 Language.auto。默认自动检测. |
quality | Quality.High (F16) 默认, Medium (问题8 0)或 Low (问题4 K M). |
timestamps | TimestampMode.none, (中文(简体) ), .segment 或者说 .word。 。 。 . |
lowLatency | 跳过30秒垫。 默认为 true。 。 。 . |
allowedDiskSpaceMB | MB 缓存盖 。 默认为 512。 。 。 . |
updateIntervalMs | 现场更新 Cadence in ms. 默认为 1000。 。 。 . |
weightsBaseUrl | 重量主机,默认为 https://huggingface.co。 。 。 . |
weightCacheMB | MB中的F32起式缓存盖. |
threads | ThreadCount.Two, (中文(简体) ), .Four 或者说 .Eight默认为 Four。 。 。 . |
onProgress | 在每个文件中下载并加载进度 . |
型号加载
import {
Language,
ModelId,
Quality,
isModelCached,
loadModel,
preloadVoice,
} from "@degreesign/voice";
await preloadVoice({
model: ModelId.WhisperBase,
language: Language.en,
quality: Quality.Low,
});
const cached = await isModelCached({
model: ModelId.WhisperBase,
language: Language.en,
quality: Quality.Low,
});
const model = await loadModel({
model: ModelId.WhisperBase,
language: Language.en,
quality: Quality.Low,
});
preloadVoice 提前下载并加载一个模型. loadModel 返回时
装入的模型. isModelCached 在不使用网络的情况下检查商店.
明确 Language.en 选择仅有的英文检查点; 所有其他
语言,包括 Language.auto,使用多语种检查站.
音频和时间安排
第一个来源获胜: pcm,则 audioFilePath,然后是一个
手动种子 microphone: false,然后是浏览器麦克风.
在节点中,路径从文件系统读取并解码为WAV,FLAC或MP3.
在浏览器中获取 URL, a Blob 或者说 File 直接读取,以及
解码使用Web Audio API. 支持的浏览器格式取决于
浏览器.
下面的音频 -50 dBFS 作为沉默处理,返回空文本,不包含
触摸模型。 短于一秒钟的可读输入集中在
沉默,所以被剪辑的单词保持了两侧上下文.
一段会话在12秒后暂停等待音频,没有音频,或
当停止。 已执行的文本不再更改, 其音频已发布, 因此
内存在长相录音时会被限制. msElapsed 财务报告和审定财务报表 meta.rtf 覆盖
解码只工作,不下载,加载,音频解码或等待音频.
重量镜像
设定 weightsBaseUrl 服务于您所在的检查站:
await preloadVoice({
weightsBaseUrl: "https://models.example.com",
});
镜像保持了"拥抱相貌"的布局:
<base>/<repo>/resolve/main/<file>读取GGUF的重量
handy-computer 仓库和文本文件 openai 存储器.
支助 Range 请求允许可重复的平行下载.
语音文本
语音库有两个48千赫的声音. 两者都使用MOSS-TTS-Nano 100M和克隆 被捆绑的参考代码,因此不下载参考记录. 每个声音 第一次使用大约需要133 MB 。 已经捆绑了 16 kHz 预览片段 .
| 语音 | 编号 | 型号 | 产出 |
|---|---|---|---|
| 妇女 | VoiceId.Female | 最低业务安全标准-TTS-Nano 100M | 48千赫兹 |
| 男性 | VoiceId.Male | 最低业务安全标准-TTS-Nano 100M | 48千赫兹 |
文本本身选择了20种最低业务安全标准语言之一:阿拉伯文、中文、捷克文、, 丹麦语、英语、法语、德语、希腊语、希伯来语、匈牙利语、意大利语、日语, 朝鲜语、波斯语、波兰语、葡萄牙语、俄语、西班牙语、瑞典语和土耳其语.
import {
VoiceId,
getVoiceSample,
isVoiceCached,
listVoices,
loadVoice,
removeVoice,
synthesize,
} from "@degreesign/voice";
const voices = listVoices();
const sample = getVoiceSample(VoiceId.Female);
console.log(voices.map((voice) => voice.label), sample.sampleRate);
if (!(await isVoiceCached(VoiceId.Female))) {
await loadVoice({
voice: VoiceId.Female,
onProgress: ({ phase, ratio }) => console.log(phase, ratio),
});
}
const audio = await synthesize({
voice: VoiceId.Female,
text: "Hello from @degreesign/voice.",
});
// audio.pcm is mono Float32 at audio.sampleRate.
await removeVoice(VoiceId.Female);
| 函数 | 说明 |
|---|---|
listVoices() | 每一个语音谱,按照库序. |
getVoiceSpec(voice) | 一个带有文件、许可证和预览行的光谱 . |
getVoiceSample(voice) | 被捆绑的WAV字节和剪辑率. |
isVoiceCached(voice) | 每个语音文件被存储时为真 . |
loadVoice(options) | 下载语音文件 。 接受 weightsBaseUrl。 。 。 . |
prepareVoice(options) | 下载并解析不说话的声音 . |
synthesize(options) | 文本和返回 VoiceAudio。 。 。 . |
removeVoice(voice) | 删除已缓存的声音文件 . |
synthesize 接受可选 pitch 以半音为单位, rate 线性 gain。 。 。 .
皮奇和速率在合成后适用于每个语音. 最低业务安全标准的声音
接受 seed 财务报告和审定财务报表 temperature。增益默认值为 2, 投出值为 0 和 比率
对一个。 解析后重量保持不变,直到另一个声音取代它们.
语音克隆
cloneVoice 记录浏览器麦克风3秒钟并编码
使用最低业务安全标准音频显示器录制。 第一次通话下载45MB
编码器,然后保持它居住.
import { cloneVoice, synthesize, VoiceId } from "@degreesign/voice";
const clone = await cloneVoice({ durationMs: 3000 });
const audio = await synthesize({
voice: VoiceId.Female,
text: "This is the recorded voice.",
reference: clone.codes,
});
A 类 VoiceClone 持有 codes,帧数和原生48千赫速率. 存储
在页面上重新使用同一声音而不再次录制的代码 :
const audio = await synthesize({
voice: VoiceId.Male,
text: "The stored reference still speaks.",
reference: clone.codes,
});
过 pcm 与 sampleRate 以编码您已经拥有的录音。 这个
编码器再被复制到48千赫并保持了最多4秒. 简称
超过一秒钟被否决. onProgress 遵循编码器下载.
拼写
@degreesign/voice/dictation 是用于直播麦克风的无头控制器
相会. 它拥有工人,捕捉,暂停状态,模型进步和部分
语句。 该页保留了自己的标记和副本.
复制页面旁边的预建工人,或者从同一个来源路径为它服务:
cp node_modules/@degreesign/voice/dist/browser/dictation.worker.js \
public/dictation.worker.js
import {
createDictation,
DictationState,
Language,
} from "@degreesign/voice/dictation";
const dictation = createDictation({
workerUrl: "/dictation.worker.js",
language: Language.en,
onState: (state, { modelReady, ratio }) => {
status.textContent = state === DictationState.recording && modelReady
? "Listening"
: `${state} ${Math.round(ratio * 100)}%`;
},
onText: (text) => {
input.value = text;
},
onError: ({ source, message }) => console.error(source, message),
});
micButton.onclick = () => void dictation.start();
pauseButton.onclick = () => dictation.togglePause();
doneButton.onclick = () => void dictation.finish();
cancelButton.onclick = () => dictation.cancel();
主要选项是: workerUrl 或者说 workerFactory, (中文(简体) ), model, (中文(简体) ), language, (中文(简体) ),
quality, (中文(简体) ), threads, (中文(简体) ), timestamps, (中文(简体) ), updateIntervalMs, (中文(简体) ), partialIntervalMs, (中文(简体) ),
onState, (中文(简体) ), onText, (中文(简体) ), onFrequency, (中文(简体) ), onError 和高级 capture
超过。 一个控制器属于一个输入或组件. 主计长:
页面共享一个工人,从一个开始取消活动的工人。 取消发送
onText("", true) 这样页面就可以恢复其基础文本.
各州是 idle, (中文(简体) ), requesting, (中文(简体) ), recording, (中文(简体) ), paused, (中文(简体) ), loading 财务报告和审定财务报表
working。控制器的方法是 start, (中文(简体) ), pause, (中文(简体) ), resume, (中文(简体) ),
togglePause, (中文(简体) ), finish, (中文(简体) ), cancel, (中文(简体) ), reset, (中文(简体) ), active, (中文(简体) ), state 财务报告和审定财务报表 destroy。 。 。 .
演示
打开 现场演示 尝试
在安装前在浏览器中双向移动。 装入 @degreesign/voice
从jsDelivr 并让你:
- 从麦克风录音或选取音频文件并阅读记录稿.
- 选一出出声,调音投出,收分,收分,温度和种子,再听.
- 记录一个引用,用被克隆的声音来表达文字.
语音演示为文本使用 Quality.Low,59MB下载. 演示
来源是 文件/索引.html运行
node test/example/serve.cjs,然后打开
http://127.0.0.1:17544/docs/index.html 以服务当地.
模型
| 编号 | 检查站 | 语文 |
|---|---|---|
ModelId.WhisperBase | 华声基地 | 多语种 |
ModelId.WhisperBase + 键 Language.en | 耳语基础.en | 联合国 |
低语基数使用 handy-computer/whisper-base-gguf 与
openai/whisper-base 文本文件。 英国检查站使用
handy-computer/whisper-base.en-gguf 与 openai/whisper-base.en两种份额
一个 ModelId,一个使用记录和一个 meta.model。 。 。 .
重量公布为F16,Q8 0和Q4 K M. Quality.High 默认值.
Quality | 重量 | 华声基地 | 耳语基础.en |
|---|---|---|---|
High | F16 导弹 | 151 甲基溴 | 151 甲基溴 |
Medium | 问题8 0 | 85 MB 设备 | 85 MB 设备 |
Low | 问题4 K M | 59 MB (英语) | 59 MB (英语) |
被量化的文件在第一次访问时被分解为F32. 内核是 所以质量会改变下载的大小 和第一次访问的成本, 而不是稳定状态解码路径.
储存和性能
节点.js 存储模型文件通过 @degreesign/cache 下级
~/.cache/decoder。浏览器将其存储于索引数据库
@degreesign/storage。 。 。 .
重量作为4个米B块存储,其中包含一个清单,文本文件为JSON,以及
usage.json 跟踪磁盘预算的大小和最后使用。 下载使用四个
平行 Range 从存储块中请求并恢复 。 失败块是
在整个文件回归到一流之前,通过备份重新进行了测试.
allowedDiskSpaceMB 封盖存储模型字节并默认为512. 一个模型
已经缓存 .
该图以WebAssembly SIMD内核运行在CPU上. threads 默认为
ThreadCount.Four。浏览器需要交叉原产地隔离
Cross-Origin-Opener-Policy: same-origin 财务报告和审定财务报表
Cross-Origin-Embedder-Policy: require-corp 使用工人池;无
引擎使用单一线程路径。 F32收发机缓存
默认检查站一次; weightCacheMB 下盖.
建筑
承诺地图 文件/档案.html 显示 档案和发挥乐队的作用,从公众进入到模范家庭, 百度运行时间,平台商店和音频输入. 离线了 HTML文件. 直接打开并用面板追踪一个电话.
许可证发放
这个寄存器的运行时间代码是MIT许可的. 轻声的重量和象征
数据为Apache-2.0. 最低业务安全标准TTS权重、指示器和参考码是
阿帕奇2.0 (英语). 捆绑的 MP3 解码器是 CC0 和 minimp3-wasm 约束是
阿帕奇2.0 (英语). 见 第三个 财务报告和审定财务报表 自由主义。 。 。 .