1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【スタックチャン】デスクトップチャンのおくちの開き方のセッティング

Last updated at Posted at 2024-10-08

1. 少し改修して、おくちの開き方を調整可能に…

 まっくです。昨日の続きを書きます。先日はPCにスタックチャンを召喚するやり方を記事として投稿しましたが、その続きと言いますか?せっかくなのでおくちの開き方の調整ができればと思ったです。

 くうねるさんのソースをあまり大きく変更せずに、PCの音量とリップシンクの動作の調整をできるようにしました。PCの音量は、環境により異なると思いますので、そちらは極力いじりたくないと思います。そこで【ゲイン(強度)値】を用いて、物理的な取得値を増幅させるようにしたいと思いました。変更箇所はmain.cppの112行目以降の void loop() の中身です。今回は下記のようにしてみました。

main.cpp
// ----------------------------------------------------------
using lgfx::v1::delay;
void loop() {
    M5.update();
    float volumeLevel = getVolumeLevel();
    if (volumeLevel >= 0) {
        float gain = 3.0f;                 // ゲイン値
        float minVolumeThreshold = 0.15f;  // 最小しきい値(音量がこれ以下なら無視)

        if (volumeLevel < minVolumeThreshold) {
            volumeLevel = 0.0f;  // 小さな音量は無視
        }

        float scaledVolumeLevel = volumeLevel * gain;
        scaledVolumeLevel = std::min(1.0f, std::max(0.0f, scaledVolumeLevel));
        avatar.setMouthOpenRatio(scaledVolumeLevel);
    } else {
        avatar.setMouthOpenRatio(0);  // 取得に失敗したら口を閉じる
    }
    delay(100);
}

 ワイのPC環境はWindows音量を 30% にしています。なので、ここで取得する物理値を3倍にさせ、デスクトップチャンとしては音量90%として認識するようにしました。そんでもって、PCから出てくる音量で、BGMとしゃべり音の違いを見分ける…なんていうのはなかなかできないのですが、最小しきい値を前後させて、ちょうど良いところを見つけてみましょう。ばっちり決まれば、正にしゃべっているようにおくちを動かす事ができるものと思います。

        float gain = 3.0f;                 // ゲイン値
        float minVolumeThreshold = 0.15f;  // 最小しきい値(音量がこれ以下なら無視)

image.png

 多分、もっと頭の良いやり方はあるかもしれませんが、ワイはただのキモヲタオッサンでカリスマプログラマーとかじゃないため、ぜひ他のヒトの改変やフォークに期待したいところであります。(今回も、やりたい事をちょっとまとめてChatGPTさんに処々書いてもらいましたwww)

2. アバターのフレームについて

 昨日、全部を表現しきれておらず申し訳ありません。(っていうか、1ページにまとめても見づらいものと思いますし) ちょっとスタックチャンアバターのフレーム表示に関して書き残しておきます。

編集するのは platformio.ini を修正します。

platformio.ini
build_flags = -O0 -xc++ -std=c++14
    -lSDL2                               ; for Display avatar
    -DM5GFX_SHOW_FRAME                   ; M5Stack/Stick/Dial等のフレーム表示有無
    ; -DM5GFX_BOARD=board_M5Stack        ; for Display avatar M5Stack
    -DM5GFX_BOARD=board_M5StackCore2     ; for Display avatar M5StackCore2
    ; -DM5GFX_BOARD=board_M5StackCoreS3  ; for Display avatar M5StackCoreS3
    ; -DM5GFX_BOARD=board_M5StackCoreInk ; for Display avatar M5StackInk
    ; -DM5GFX_BOARD=board_M5StickCPlus   ; for Display avatar M5StickCPlus
    ; -DM5GFX_BOARD=board_M5StickCPlus2  ; for Display avatar M5StickCPlus2
    ; -DM5GFX_BOARD=board_M5Dial         ; for Display avatar M5Dial
    -DM5GFX_SCALE=1                      ; for Display avatar size 1 - 3
    -lmmdevapi -luuid -lole32            ; for Get Desktop Volume

下記のようにフレーム表示のオプションをつけて、ボードの種類として7つのうちのどれかを採用すればOKっす。

    -DM5GFX_SHOW_FRAME                   ; M5Stack/Stick/Dial等のフレーム表示有無
    -DM5GFX_BOARD=board_M5StackCore2     ; for Display avatar M5StackCore2

出てくるスタックチャンのお顔はこんな感じw

image.png

なんか…電柱の影からチラッとしている印象で、良い感じっすねwww
当然ここは気に入らないものと思いますが、この座標は src/BaseFace.h 149行目以下を編集する必要があります。

image.png

ごめんなさい…ここはお絵描き職人さんの出番かな?と思いますのでベストな座標を是非ともX投稿してくれると嬉しいっすー。みなさまも遊んでみてください。

src/BaseFace.h

  /**
   * Faceクラスを継承したBase顔描画用のクラス
  */
  class BaseFace : public Face
  {
  public:
    BaseFace()
        : Face(new BaseMouth(50, 90, 4, 60), new BoundingRect(148, 163),
              new BaseEye(8, false),         new BoundingRect(93, 90),
              new BaseEye(8, true),          new BoundingRect(96, 230),
              new BaseEyeblow(32, 0, false), new BoundingRect(67, 96),
              new BaseEyeblow(32, 0, true),  new BoundingRect(72, 230)) {}
  };

ではではー!

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?