4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SAPIで湯婆婆を実装してみる

Last updated at Posted at 2020-11-20

前置き

巷では湯婆婆の実装が流行っているそうですね。
私も真似してみようと思いましたが、有名どころのプログラミング言語は粗方実装され尽くしているように思います。

なので少し趣向を変えて、テキストではなく音声で湯婆婆を再現してみたいと思います。

コード

湯婆婆.vbs
Option Explicit

Dim sapi
Set sapi = CreateObject("SAPI.SpVoice")

sapi.Speak "契約書だよ。そこに名前を書きな。"

Dim name
name = InputBox("契約書")

If Len(name) = 0 Then
	Wscript.Arguments(-1)
End If

sapi.Speak ("フン。" & name & "というのかい。贅沢な名だねぇ。")

Dim newName
Randomize
newName = Mid(name, Int(Len(name) * Rnd + 1), 1)

sapi.Speak ("今からお前の名前は" & newName & "だ。いいかい、" & newName & "だよ。分かったら返事をするんだ、" & newName & "!!")

Set sapi = Nothing

WindowsのSAPI (Speech APIの略で、サピと読みます) を使用し、VBSで実装しました。

解説

まずはSAPIを呼び出すためのオブジェクトを生成します。
生成以降、Speakメソッドで音声が出力できるようになります。

Dim sapi
Set sapi = CreateObject("SAPI.SpVoice")

sapi.Speak "契約書だよ。そこに名前を書きな。"

次に、契約書を入力するためのボックスを表示します。

Dim name
name = InputBox("契約書")

image.png

そして入力後、未記入の場合にクラッシュする必要があるため、わざとエラーを引き起こすようにしています。

If Len(name) = 0 Then
	Wscript.Arguments(-1)
End If

記入されている場合はランダムで文字を1つ選び、後は名前を奪って完了です。
※乱数取得前にRandomizeを実行しておかないと、続けて実行したときに同じ乱数が返ってきてしまいます。

sapi.Speak ("フン。" & name & "というのかい。贅沢な名だねぇ。")

Dim newName
Randomize
newName = Mid(name, Int(Len(name) * Rnd + 1), 1)

sapi.Speak ("今からお前の名前は" & newName & "だ。いいかい、" & newName & "だよ。分かったら返事をするんだ、" & newName & "!!")

感想

SAPIで湯婆婆を実装してみる、ということでSAPI婆を実装してみました。
使ってみて良いなと思ったのは、名前を入力した時と1文字だけ抜き取った時とで漢字の読みが変わることです。例えば、千尋は"チヒロ"と読み、千は"セン"と読み上げてくれます。
また難点はやはり、棒読みになってしまい緊張感に欠けることですね。最後に"!!"を付けても感情を込めてくれないので、劇中の情景とはギャップが生まれます。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?