Comment detail

音声合成でHello, world! (Nested Flatten)
eSpeakのライブラリをSML#のFFI機能を使って呼んでいます。
ライブラリの場所は/usr/libに決め打ち。さらに設定はすべて固定。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
fun say text =
let
  open DynamicLink

  val lib = dlopen "/usr/lib/libespeak.so"
  val init = dlsym (lib, "espeak_Initialize")
  val synth = dlsym (lib, "espeak_Synth")
  val sync = dlsym (lib, "espeak_Synchronize")

  val espeakSyncronize = sync : _import () -> int
  fun espeakInitialize () =
    _ffiapply init (0 : int,
                    0 : int,
                    NULL : string ptr,
                    0 : int) : int

  fun espeakSynth () =
    _ffiapply synth (text : string,
                     size text + 1 : int,
                     0 : int,
                     1 : int,
                     0 : int,
                     0 : int,
                     NULL : word ptr,
                     NULL : char ptr) : int
in
  espeakInitialize ();
  espeakSynth ();
  espeakSyncronize ()
end;

say "Hello, world!"
同等のコードをpythonで書いてみました。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from ctypes import cdll

def init():
  es = cdll.LoadLibrary('libespeak.so.1')
  es.espeak_Initialize(0, 0, None, 0)
  es.espeak_Synchronize()
  return lambda s: es.espeak_Synth(s, len(s)+1, 0, 1, 0, 0, None, None)

say = init()
say('Hello, world!')
say('con nitch were')
say('daw cat coo org, sole what program mar know tum yen know Colosseum death')

Index

Feed

Other

Link

Pathtraq

loading...