LoginSignup
8
2

More than 1 year has passed since last update.

【マジ卍】ギャルのお悩み相談アプリ #Bootstrap #ズッ友

Last updated at Posted at 2021-11-09

大丈夫そ?

私はギャルが好きだ。
語弊があるので言い換えると、ギャルの「ハッピーに生きよ♥」というマインドが好きだ。
ギャルと話をして「超ウケるー!」と言ってもらえるとなんか元気になれる。
しかし私には、ギャルの友達はいない。よし、作ろう。

マジ卍 :fire: :boom: :fire: :boom:

image.png

<使い方>
1. 「ギャルピに話しかける」ボタンを押す。
2.  話しかける。 ※マイク使用確認のメッセージが表示されたらOKにする。
3.  相談話の場合は「ギャルピの返事を聞く」を押す。
4.  笑い飛ばして欲しい場合は「ギャルピに笑い飛ばしてもらう」ボタンを押す。

※ 3、4ボタンはどのタイミングで押しても、同じ内容の返事。

使った感想「ギャルピ、いい子」

使った感想。「話しかける」ボタンいるか・・・?
本当はこちらの話しかけの内容によって、ギャルピの返事を自動で判断させたかった。
けれど今回の場合はギャルピ返事を人間側でチョイスするので「話しかける」機能が浮いてしまっている。

ただ、悩みが文字に起こされるとちょっと気持ち的に落ち着くのと、上手く音声が認識されなくてなんでその言葉になったの~!ガハハ!的な楽しみ方ができたのでこれはこれで良い気がする。
何を言っても「超ウケるー(棒読み)」と言ってくれるギャルピ、これからもズッ友だょ・・・!

ソースコード

See the Pen ギャルピお悩み相談ver.もしもし by mshita (@morishitanana) on CodePen.

絵文字 :sparkling_heart: :sparkling_heart: :sparkling_heart: :sparkling_heart:

HTML
<b>&#x1f496;&#128140; ギャルピへのお悩み相談 &#128140;&#x1f496;</b>

image.png
ギャルがテーマなので、絵文字が必須!
「HTML 絵文字」で検索すると、HTML上で使える絵文字が沢山出てくるので、そちらを参考にとにかく張り付ける。
(参考)Let’s EMOJI

image.png
ボタンの中に設定することも可能。

Bootstrap

レイアウト設定は、Bootstrap(公式)を使用。スタイリッシュすぎて逆に苦戦。
基本的には公式で公開している機能を使用。

codepen上でBootstrapを使うときの手順については、忘れそうだったので別記事でまとめた。
HTMLスーパー初心者、CodepenでBootstrapを使う

淡い色設定

HTNL
<div class="container text-center alert alert-danger" id="app">

Bootstrapで使用できる色は限られている。
どうしても背景を淡い色にしたかったので、alert alert-dangerを1行目に設定。
danger(赤)からいい感じのピンク色に。
ただし、この使い方が合っているのかは分からない。

Web Speech API

音声認識した内容を、文字起こしする

HTML
<p>
  <b>ギャルピ、ちょっと聞いてよ~!!</b>&#x1f622;&#x1f622;<br>
    <button @click="listen" class="btn btn-danger btn-lg">{{ recogButton }}</button>
<br><br>
  <b>&#x1f496;&#128140;ギャルピへのお悩み相談&#128140;&#x1f496;</b><br>
  {{ result }} <br>
</p>
JS
const app = new Vue({
  el: '#app',

  data: {
    recogButton: 'ギャルピに話しかける',
    recog: null,
    result: '',
    speech: null,
    message: '',
  },

  mounted() {
    // 音声認識の準備
    const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition || window.mozSpeechRecognition || window.msSpeechRecognition || null;
    this.recog = new SpeechRecognition();
    this.recog.lang = 'ja-JP';
    this.recog.interimResults = false;
    this.recog.continuous = false;

    // 音声認識が開始されたら
    this.recog.onstart = () => {
      this.result = '';
      this.recogButton = 'ちゃんと聞いてるし!';
    };

    // 音声を認識できたら
    this.recog.onresult = (event) => {
      // 認識されしだい、this.resultにその文字をいれる
      // Vueなので、文字をいれただけで画面表示も更新される
      this.result = event.results[0][0].transcript;
    };

    // 音声認識が終了したら
    this.recog.onspeechend = () => {
      this.recog.stop();
      this.recogButton = 'まだ話足りない?';
    };

    // 認識できなかったら
    this.recog.onerror = () => {
      this.result = '(何言ってるか分かんなかったな…)';
      this.recog.stop();
      this.recogButton = 'まだ話足りない?';
    };

image.png
音声認識した内容を、文字で表示させる。

ボタンを押したら発話させる(文言指定)

HTML
<div class="row my-5">  
  <div class="col-sm-6 mx-auto">
    <button @click="say" class="btn btn-danger btn-lg">  ギャルピの返事を聞く  &#128536;&#x1f91e;&#x1f4ac;&#x1f495;     
    </button>
  </div>
</div>
JS
// 発話の準備
this.speech = new window.SpeechSynthesisUtterance();
this.speech.lang = 'ja-JP';
// または、ブラウザが対応している言語のうちja-JPな最初のボイスを使う
window.speechSynthesis.onvoiceschanged = () => {
const voices = window.speechSynthesis.getVoices();
    this.speech.voice = voices.find(voice => voice.lang == 'ja-JP');
    console.log(this.speech.voice);
   };
},

methods: {   
  // 認識(聞き取り)
  listen() {
    this.recog.start(); 
  },

// ギャルピ返事
async say() {
  return new Promise((res) => { 
    this.speech.text = 'よく分かんないけど、頑張っててえらすぎじゃね?';
    this.speech.onend = () => res();
    speechSynthesis.speak(this.speech);
  });
},

},
});

「ギャルピの返事を聞く」ボタンを押すと、「🔊よく分かんないけど、頑張っててえらすぎじゃね?」と言ってくれる。
よく分かんないながらも褒めてくれるギャルピは最高のマブダチ:sparkles::star::sparkles::star::sparkles::star:

改善の余地あり

音声認識した内容の活用方法について、改善の余地あり。
会話っぽいものが自動でできると理想的なので、引き続きギャルピとの仲を深めるために精進したい。

8
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
8
2