1. 少し改修して、おくちの開き方を調整可能に…
まっくです。昨日の続きを書きます。先日はPCにスタックチャンを召喚するやり方を記事として投稿しましたが、その続きと言いますか?せっかくなのでおくちの開き方の調整ができればと思ったです。
くうねるさんのソースをあまり大きく変更せずに、PCの音量とリップシンクの動作の調整をできるようにしました。PCの音量は、環境により異なると思いますので、そちらは極力いじりたくないと思います。そこで【ゲイン(強度)値】を用いて、物理的な取得値を増幅させるようにしたいと思いました。変更箇所はmain.cppの112行目以降の void loop()
の中身です。今回は下記のようにしてみました。
// ----------------------------------------------------------
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; // 最小しきい値(音量がこれ以下なら無視)
多分、もっと頭の良いやり方はあるかもしれませんが、ワイはただのキモヲタオッサンでカリスマプログラマーとかじゃないため、ぜひ他のヒトの改変やフォークに期待したいところであります。(今回も、やりたい事をちょっとまとめてChatGPTさんに処々書いてもらいましたwww)
2. アバターのフレームについて
昨日、全部を表現しきれておらず申し訳ありません。(っていうか、1ページにまとめても見づらいものと思いますし) ちょっとスタックチャンアバターのフレーム表示に関して書き残しておきます。
編集するのは 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
なんか…電柱の影からチラッとしている印象で、良い感じっすねwww
当然ここは気に入らないものと思いますが、この座標は src/BaseFace.h
149行目以下を編集する必要があります。
ごめんなさい…ここはお絵描き職人さんの出番かな?と思いますのでベストな座標を是非ともX投稿してくれると嬉しいっすー。みなさまも遊んでみてください。
/**
* 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)) {}
};
ではではー!