sample_vosk.hsp

sample\iron\sample_vosk.hsp » Plain Format

;============================================================
;  sample_vosk.hsp — hspvosk.dll オフライン音声認識 (WAV) デモ
;
;  alphacephei Vosk (Kaldi ベース) の軽量オフライン STT。
;  モデル 50MB 〜で多言語対応 (日本語含む)。
;
;  前提:
;    1. Vosk のモデルを DL して展開:
;         https://alphacephei.com/vosk/models
;       日本語なら vosk-model-small-ja-0.22 (約 48MB)
;       英語なら  vosk-model-small-en-us-0.15 (約 40MB)
;    2. 展開先ディレクトリ名を model_path に設定
;    3. 16kHz mono の WAV を用意
;
;  モデルの置き方:
;    sample_vosk.hsp と同じフォルダに
;      vosk-model-small-ja-0.22/
;        am/ conf/ graph/ ivector/ rescore/ rnnlm/ (展開後の中身)
;    を丸ごと配置。
;
;  ライブマイク認識は iron_speech.hsp 経由の
;    iron_speech_listen_start_mic / listen_poll / listen_stop
;  で行う (partial + final phrase 取得可)。
;============================================================

#include "hsp3_net_64.as"
#include "hspvosk.as"

    title "hspvosk demo"
    screen 0, 720, 500
    font "MS Gothic", 14

    model_path = "vosk-model-small-ja-0.22"
    wav_path   = "voice.wav"
    sample_rate = 16000

    mes "hspvosk demo — Vosk (Kaldi) オフライン認識"
    mes "model : " + model_path
    mes "wav   : " + wav_path
    mes "rate  : " + sample_rate + " Hz"
    mes ""

    ;------- 1. モデルロード -------
    exist model_path
    if strsize < 0 {
        ; HSP の exist はディレクトリには効かないが、strsize が -1 に
        ; なるケースもある。ここでは情報表示のみ。
    }

    h = hspvosk_open(model_path, sample_rate)
    if h < 0 {
        color 255, 0, 0
        mes "モデルのロードに失敗しました (code=" + h + ")"
        mes ""
        color 0, 0, 0
        mes "次の手順でモデルを用意してください:"
        mes "  1. https://alphacephei.com/vosk/models から"
        mes "     vosk-model-small-ja-0.22.zip を DL"
        mes "  2. このスクリプトと同じフォルダに解凍"
        mes "     vosk-model-small-ja-0.22/am/..."
        mes ""
        mes "モデルディレクトリ内に am / conf / graph 等があれば OK。"
        stop
    }
    color 0, 128, 0
    mes "[OK] Vosk open handle=" + h
    color 0, 0, 0

    ;------- 2. 文字起こし -------
    exist wav_path
    if strsize < 0 {
        color 255, 0, 0
        mes ""
        mes "voice.wav が見つかりません。"
        mes "16kHz mono PCM の WAV を用意してください。"
        hspvosk_close h
        stop
    }

    sdim text, 65536
    ret = hspvosk_transcribe_wav(h, wav_path, text, 65535)

    mes ""
    if ret < 0 {
        color 255, 0, 0
        mes "認識に失敗しました (code=" + ret + ")"
        color 0, 0, 0
    } else {
        color 0, 0, 192
        mes "----- 認識結果 -----"
        color 0, 0, 0
        mes text
    }

    hspvosk_close h
    stop