challenge 音声合成でHello, world!

与えられた文字列を音声合成して再生する関数を作ってください。

使用したライブラリはタグでつけてください。またOSに依存する場合もタグでつけてください。日本語文字列も発音できることが好ましいですが、必須ではありません。

以下はサンプルです。

>>> say("Hello, world!")
>>> say("con nitch were") # 「こんにちは」
>>> say("daw cat coo org, sole what program mar know tum yen know Colosseum death")

Posted feedbacks - Scala

 FreeTTSを使って実装してみました。

 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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.beans.PropertyVetoException;
import java.util.Locale
import javax.speech.AudioException
import javax.speech.Central
import javax.speech.EngineException
import javax.speech.EngineStateError
import javax.speech.synthesis.Synthesizer
import javax.speech.synthesis.SynthesizerModeDesc
import javax.speech.synthesis.Voice

class HelloWorld {
    private    var    s:Synthesizer = null
    val    d:SynthesizerModeDesc = new SynthesizerModeDesc(null, "general", Locale.US, null, null)
    var    v:Voice = null
    s = Central.createSynthesizer(d)
    if (s == null) {
        Console.println("cannot create synthesizer.")
        System.exit(1)
    }
    v = new Voice("kevin16", Voice.GENDER_DONT_CARE, Voice.AGE_DONT_CARE, null)
    if (v == null) {
        Console.println("cannot create voice.")
        System.exit(1)
    }
    s.allocate
    s.resume
    s.getSynthesizerProperties().setVoice(v)
    
    def sayHello(m:String):Unit = {
        s.speakPlainText(m,null)
        s.waitEngineState(Synthesizer.QUEUE_EMPTY)
    }
    
    def deallocateSynthesizer:Unit = s.deallocate
}

object HelloWorldMain {
    def main(args:Array[String]):Unit = {
        try {
            val    h:HelloWorld = new HelloWorld
            args.size match {
                case    0 => h.sayHello("Hello World")
                case    _ => h.sayHello(args(0))
            }
            h.deallocateSynthesizer
        } catch {
            case e:Exception => {
                e.printStackTrace
                System.exit(1)
            }
        }
    }
}

Index

Feed

Other

Link

Pathtraq

loading...