Jasmine Teaで音声処理!

この記事は、 [Jasmine Tea アドベントカレンダー 2023](https://qiita.com/advent-calendar/2023/jasminetea) の第25日目です。

# はじめに

[Jasmine Tea](https://jasminetea.app) (ジャスミンティー) は、プログラミングの楽しさを多くの人に知ってもらうために作られたプログラミング言語です。初心者が学びやすい仕組みで、実際に社会で使われている多くのプログラミング言語に応用できる基礎が身に付きます。

ここでは、Jasmine Teaを実際に開いて、音声を扱うプログラムを紹介していきます。

まず、Studio 画面を開いてください。もし Studio 画面をまだ開いたことがなければ、 [Studio画面を表示する - Jasmine TeaでHello, world!](https://qiita.com/yoichiro6642/items/3dc478726f4f73941b46#studio%E7%94%BB%E9%9D%A2%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B) を参考にして Jasmine Tea の試用を開始してください。

# 声で操作するコンピューター

皆さんは、Google アシスタントや Amazon Alexa などをお使いでしょうか？これらは、普段話している言葉で語りかけると、その内容を理解して、適切な返事を返してくれます。しかも、その返事も音声です。このように、コンピューターを声で操作することは、珍しいことではなくなりました。

スマートフォンという高性能なコンピューターを持ち歩いているのが今ですが、今後は「指で操作する」のではなく「声で操作する」ことがもっともっと当たり前になってくると思います。

Jasmine Tea では、音声を扱うプログラムを簡単に作ることができます。今日は、音声を扱う方法を紹介します。

# コンピューターに話してもらおう

まず、コンピューターに話をしてもらいましょう。Jasmine Tea では、[`speak` 命令](https://jasminetea.app/docs/references/command-speak) が提供されています。では、Studio 画面のエディターに、以下のプログラムを入力してください。

```vb
speak "メリークリスマス！"
```

エディターの下にある青色の「実行」ボタンを押して、プログラムを実行してください。「メリークリスマス！」という声が聞こえてきたと思います。もし何も聞こえなかったときは、コンピューターにスピーカーが備わっていることと、音量を確認して、再度実行してみてください。

`speak` 命令に書いたパラメーターの通りに、コンピューターが話してくれます。言って欲しい文章をいろいろ変えて、実行してみてください。

# コンピューターに聞いてもらおう

次に、今度はマイクに話しかけたことを、コンピューターに聞いてもらいましょう。Jasmine Tea では、[`listen` 命令](https://jasminetea.app/docs/references/command-listen) を使うと、マイクから入力された言葉を認識して、文字列にしてくれます。

エディターに入力されているプログラムを一旦全部消して、以下のプログラムを入力してください。

```vb
listen
do
  if not listening() then
    print hear$()
    listen
  end if
loop
```

`listen` 命令にて、マイクからの音声の入力を開始します。[`do` 命令](https://jasminetea.app/docs/references/command-do) と [`loop` 命令](https://jasminetea.app/docs/references/command-loop) を使って、無限ループを作ります。`listen` 命令で開始された音声入力は、マイクから何か音声が入力されるか、一定時間無音だったときに、終了します。無限ループの中で、[`listening` 関数](https://jasminetea.app/docs/references/function-listening) を使うことで、音声入力を受け付けている最中かどうかを確認します。もし受け付けが終了したら、つまり [`if` 命令](https://jasminetea.app/docs/references/command-if) の条件式 `not listening()` が成立したときは、[`hear$` 関数](https://jasminetea.app/docs/references/function-hear$)  にて認識された音声の文章を文字列で取得して、`print` 命令で実行画面に表示しています。

では、実行してみましょう。「実行」ボタンを押して、プログラムを実行してください。

![スクリーンショット 2023-12-24 19.47.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632303/18493038-d54b-df2a-e5a3-204c62c2ccd3.png)

もし上記のような画面が表示されたときは、「許可する」を押してください。その後、何かマイクに向かって話をしてみてください。

![スクリーンショット 2023-12-24 20.34.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632303/f1a7a285-07a8-d814-897a-d143838d205b.png)

上記は、「こんにちは、メリークリスマス」とマイクに向かって話をしてみたときの実行画面の表示です。このように、話した内容が文字で表示されたと思います。単語だけのときは認識されにくいので、何か文章を言うと良いでしょう。

# 認識したことに応じて返事をしてみよう

マイクに向かって話した内容に基づいて、何か返事をするようにしてみましょう。ここでは、`hear$` 関数によって得られた文字列の中に「時」という文字が含まれていたときは、今何時か返事をしてみましょう。

エディター内で `print hear$` と書かれた行を消して、代わりに以下のプログラムを追加してください。

```vb
    if include(hear$(),"時") then
      t=datetime@()[3]
      speak "今は"+str$(t)+"時です。"
    end if
```

[`include` 関数](https://jasminetea.app/docs/references/function-include) は、第1引数に指定した文字列の中に、第2引数で指定した文字列が含まれているかどうかを確認することができます。第1引数に `hear$` 関数の戻り値、つまり認識した音声の文章を指定していて、それに "時" という文字が含まれていれば、`if` 命令の次の行から実行されます。

あとは、[`datetime@` 関数](https://jasminetea.app/docs/references/function-datetime@) で現在日時を取得して、その中から添え字 3 を指定して時間を取得します。そして、[`str$` 関数](https://jasminetea.app/docs/references/function-str$) で数値を文字列に変換したあとに返事の文字列を「+」で組み立てて、`speak` 命令で発声します。

では、「実行」ボタンを押して、プログラムを実行してください。その後に、「今何時ですか？」や「何時？」「時間は？」とマイクに向かって話してみてください。

「今は20時です」というように返事をしてくれることがわかるかと思います。

# まとめ

第1日目から第25日目まで、Jasmine Tea アドベントカレンダーは隙間なく記事で埋まりました。記事を投稿してくれた方々、本当にありがとうございます！

Jasmine Tea は、プログラミングを学びたい！と思っている方々が楽しみながらプログラミングを学べるように、という願いから開発されました。キャラクターを動かしたり、アニメーションを作ったり、そして音声をも扱いながら、いろいろなプログラムを作ることができます。プログラミングとは、命令や関数、文法を覚えるだけでなく、「どのような手順でやりたいことを実現するか？」ということがとても大事であり、それはパズルのような楽しさがあります。

プログラミングを覚えることで、世の中を変えることができます。誰しもが、その可能性を持っています。

ぜひ、この冬は、[Jasmine Tea](https://jasminetea.app) からプログラミングの世界に飛び込んでみてください！