espeak

オープンソース、多言語対応の音声合成エンジン。 日本語には未対応。

ライセンスは GNU General Public License V3

http://espeak.sourceforge.net/

Ubuntu Linux には espeak パッケージが存在する。

NVDAにおけるespeak

ここではnvdajpのための技術調査について書く。

synthDrivers/_espeak.py が espeak DLL のラッパーである。

initialize() にて ctypes による DLL のロードが行われる。

espeakDLL.espeak_SetSynthCallback() でコールバックをセットする。

このコールバック関数は python で実装されている。

DLL側の仕様を確認すると

http://espeak.sourceforge.net/speak_lib.h

typedef int (t_espeak_callback)(short*, int, espeak_EVENT*);

void espeak_SetSynthCallback(t_espeak_callback* SynthCallback);

音声合成エンジン(espeak)は SynthCallback という関数ポインタを受け取り、 波形をある長さ生成したらこの関数を呼び出す。

コールバックを見てみる。

t_espeak_callback=CFUNCTYPE(c_int,POINTER(c_short),c_int,POINTER(espeak_EVENT))
@t_espeak_callback
def callback(wav,numsamples,event):
    # 以下略

wav が空でなく、numsamples が0より大きければ、

player.feed(string_at(wav, numsamples * sizeof(c_short)))

でデータをオーディオ出力デバイスに送っている。

そして player オブジェクトは nvwave.py に実装されている nvwave.WavePlayer() のインスタンスである。

nvwave は ctypes を使って Win32 のオーディオ出力APIを叩いている。

nvwave (NVDA)

WinMM のラッパークラス

nvwave.WavePlayer の主なメソッド

  • idle()
  • feed()
  • stop()
  • pause()

espeak.txt · 最終更新: 2010/08/31 02:51 (外部編集)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0