ymx-speech
    正在准备搜索索引...

    接口 YmxSpeech

    语音合成与语音识别

    文本播报与语音转文字均在本机离线完成,无需网络;仅适用于中国境内。

    事件通过 setListener 接收,eventName 固定为 event,data 为 { action, data }:

    • 语音合成:ttsStart、ttsData、ttsComplete、ttsStop、ttsError
    • 语音识别:asrStart、asrEvent、asrResult、asrComplete、asrError
    const speech = ymx.requirePlugin('ymx-speech') as YmxSpeech;

    speech.setListener((eventName, res) => {
    if (eventName !== 'event') return;
    if (res.action === 'ttsComplete') console.log('播报完成');
    if (res.action === 'asrResult') console.log('识别结果:', res.data.result);
    });

    // 语音合成
    await speech.createTts({ person: 0 });
    await speech.speak({ text: '你好,欢迎使用语音合成' });

    // 语音识别
    await speech.createAsr();
    await speech.startListening();
    interface YmxSpeech {
        id: string;
        version: string;
        cancelListening(): Promise<void>;
        createAsr(data?: AsrConfig): Promise<void>;
        createTts(data?: TtsConfig): Promise<void>;
        finishListening(): Promise<void>;
        isRecognizing(): Promise<RecognizeStateResult>;
        isSpeaking(): Promise<SpeakStateResult>;
        listLanguages(): Promise<LanguageListResult>;
        listVoices(data?: VoiceQueryData): Promise<VoiceListResult>;
        releaseAsr(): Promise<void>;
        releaseTts(): Promise<void>;
        removeListener(): Promise<void>;
        setListener(
            listener: (eventName: string, data: any) => void,
        ): Promise<void>;
        speak(data: SpeakData): Promise<void>;
        startListening(data?: AsrStartData): Promise<void>;
        stopSpeak(): Promise<void>;
        writeAudio(data: AsrAudioData): Promise<void>;
    }

    层级

    • JsApiBase
      • YmxSpeech
    索引

    属性

    id: string

    获取插件 ID

    version: string

    获取插件版本,如 1.2.3

    方法

    • 取消识别

      返回 Promise<void>

      无返回值

      await speech.cancelListening();
      
    • 创建语音识别引擎

      重复调用会复用已有引擎;识别前需要麦克风授权。

      参数

      返回 Promise<void>

      无返回值

      const speech = ymx.requirePlugin('ymx-speech') as YmxSpeech;
      await speech.createAsr({ recognizerMode: 'short' });
    • 创建语音合成引擎

      重复调用会复用已有引擎;同一设备最多 3 个引擎实例。

      参数

      返回 Promise<void>

      无返回值

      const speech = ymx.requirePlugin('ymx-speech') as YmxSpeech;
      await speech.createTts({ language: 'zh-CN', person: 0 });
    • 结束识别

      最终结果通过 asrResult(isLast 为 true)与 asrComplete 事件回传。

      返回 Promise<void>

      无返回值

      await speech.finishListening();
      
    • 查询是否正在识别

      返回 Promise<RecognizeStateResult>

      识别状态

      const res = await speech.isRecognizing();
      console.log(res.recognizing);
    • 查询是否正在合成播报

      返回 Promise<SpeakStateResult>

      合成状态

      const res = await speech.isSpeaking();
      console.log(res.speaking);
    • 查询支持的语言

      返回 Promise<LanguageListResult>

      语言列表

      const res = await speech.listLanguages();
      console.log(res.languages);
    • 释放语音识别引擎

      返回 Promise<void>

      无返回值

      await speech.releaseAsr();
      
    • 释放语音合成引擎

      返回 Promise<void>

      无返回值

      await speech.releaseTts();
      
    • 移除监听器

      返回 Promise<void>

    • 设置监听器,接收 eventName 事件名称,data 事件数据

      注意: 此接口为覆盖操作,仅保留最后一个监听器,最后的 listener 才能收到事件通知。

      参数

      • listener: (eventName: string, data: any) => void

      返回 Promise<void>

    • 合成并播报文本

      播报过程通过事件回传:ttsStart 开始、ttsData 返回音频流、ttsComplete 完成、ttsStop 停止、ttsError 失败。 文本中支持 [hN] 单词播报、[nN] 数字播报、[pN] 静音停顿、[=MN] 指定汉字发音等标记。

      参数

      返回 Promise<void>

      无返回值

      await speech.speak({ text: '你好,欢迎使用语音合成', speed: 1, volume: 2 });
      
    • 开始语音识别

      引擎采集麦克风音频并实时识别,结果通过 asrResult 事件回传(含中间结果与最终结果); 首次调用会请求麦克风授权,用户拒绝时返回失败。

      参数

      返回 Promise<void>

      无返回值

      await speech.startListening({ vadBegin: 2000, vadEnd: 3000 });
      
    • 停止合成播报

      返回 Promise<void>

      无返回值

      await speech.stopSpeak();
      
    • 写入音频数据

      用于音频文件转文字等自行采集音频的场景,音频数据长度仅支持 640 或 1280 字节。

      参数

      返回 Promise<void>

      无返回值

      await speech.writeAudio({ audioData: pcmBytes });