node.js使用vosk

引入vosk

"vosk": "^0.3.32"

创建js文件

import vosk from 'vosk'
import fs from "fs"
const { Readable } = require("stream");
const cp = require("child_process");
const wav = require("wav");
export default {
    //语音识别
    async readFile(that,filePath,callback){
        let model = await new vosk.Model(that.modePath)
        let wfReader = await new wav.Reader();
        const wfReadable = new Readable().wrap(wfReader);
        wfReader.on('format', async ({ audioFormat, sampleRate, channels }) => {
            console.log(audioFormat, sampleRate, channels)
            let rec = new vosk.Recognizer({model: model, sampleRate: sampleRate});
            if (audioFormat != 1 ||channels !=1) {
                process.exit(1);
            }
            let i=0
            let wordResult=[]
            for await (let data of wfReadable) {
                that.itemSize=data.length
                const end_of_speech = await rec.acceptWaveformAsync(data);
                i++;
                if (end_of_speech) {
                    let text=rec.result().text
                    console.log(text);
                    wordResult.push({index:i,size:data.length,word:text})
                }else{
                    wordResult.push({index:i,size:data.length,word:''})
                }
            }
            let re=await rec.finalResult();
            callback(wordResult);
            rec.free();
        });
        fs.createReadStream(filePath, {'highWaterMark': 4096}).pipe(wfReader);
    },
}

that是引用资源的this对象,filePath是wav格式的音频文件路径,callBack是完成后方法回调,modePath是vosk的model路径。

https://download.csdn.net/download/qq_22071421/85159760

这里没有像java和ws生成时间节点的json,只有识别文字,所以我是想用{index:i,size:data.length,word:text}这样的对象,然后获取音频文件的总大小,和data.length去计算。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暮雪...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值