投稿

ダイソー テープライト リモコン付 分解

イメージ
ダイソーで血迷って買ったリモコン付きRGB LEDテープを分解した。 分解前に動作確認 リモコンで色の変更ができる。 とりあえず、RGBそれぞれ単体で光らせてみる。 これ以外に黄色やピンク、オレンジもあったがRGBの入り切りで混ぜて出していると思うので割愛。 後ほど出力ピンの電圧を測定して確認してみる。 このほかにスラッシュやフェードなど発光色の切り替え演出が備えてあった。 簡単に動作は確認したので分解してみる。 ご存じの通り自己責任で ちゃんと箱にも分解や改造するなと書いてあったので人間の皆さんは控えましょう。 本格的な分解の前に外見を確認していく。 画像上部がLEDテープ本体、画像下部がLEDテープの制御基板となっている。 LEDテープの裏には両面テープが貼られている。粘着力の具合はわからないが、触った感じでは逆さに貼ったら一週間以内に剝がれそうな両面テープ。 ケーブルは青、赤、緑、黒の4本がコネクタとLEDテープに接続されている。LEDテープと配線の接合部は熱収縮チューブでカバーされている。 配線の黒は5V+で電源の配線である。GNDではないので注意。 青、赤、緑の配線をGNDに接続することで、色に応じて発光する。 これは、 [1] で示されている抵抗省略の回路図の通りである。後ほどLEDテープの回路図を示す。 チップ抵抗はRGBそれぞれに対して接続されていると考えられる。121と表示されている120Ωのチップ抵抗が2個と、330と表示されている330Ωのチップ抵抗が1個実装されている。 LEDテープを切断し、表面の樹脂を除去した物が左画像、両面テープを除去した裏側が右画像である。 具体的な配線と部品の位置は下画像である。 回路図は以下のようになっている。 ...

ADX2LE ブロック再生やループポイントによる繰り返し処理の注意

ADX2LEでのループ処理の注意 サウンドミドルウェアのADX2LEを用いたループ再生について注意点をまとめてみました。 ※自己流のため参考程度にお願いします。 ループポイントによるループ再生 音源にループポイントを設定した場合はExPlayerにループを有効にすることでループ再生することができる。 しかし、ブロック再生でブロックループ回数を-1に設定した状態でExPlayerにループに有効にすると音が重なってしまう。 そのため、BGMではループポイントによるループ再生を行うのがよい。 ブロック再生でもBGMをループ再生することはできるがアレンジなどBGMの遷移をする場合は、音が途中でズレたり切れてしまう心配があるため向いていないと思う。 部分的にループ再生が必要な効果音ではブロック再生が最適だと考えられる。 例えば、チャージ音から発射音への遷移でチャージし続ける場合にブロックループが役に立つ。 参考 ※間違ってたらすみません。 わかった時点で修正します。

C++言語 ビットフィールド サイズについて

ビットフィールドとして構造体を作ったときのメモリ確保について 構造体の変数としてビットフィールドを使用したときにどのようにメモリが確保されるか。 サンプルプログラム1 #include <iostream> using namespace std; struct k_bool{ unsigned a : 8; unsigned b : 8; unsigned c : 8; unsigned d : 1; unsigned e : 1; unsigned f : 1; unsigned g : 1; unsigned h : 1; }; int main(void){ k_bool abcd; cout &lt&lt "sizeof : " &lt&lt sizeof(abcd); } これを実行すると次のようになる sizeof : 4 構造体内のコロンの後の数字がビット数である。 つまり、上のプログラムでは合計29ビットとなる。 8ビットで1バイトなので単純に計算すると3.625バイトと4バイトには満たない。 では、dで8ビット確保するとどうなるのか? #include <iostream> using namespace std; struct k_bool{ unsigned a : 8; unsigned b : 8; unsigned c : 8; unsigned d : 8; unsigned e : 1; unsigned f : 1; unsigned g : 1; unsigned h : 1; }; int main(void){ k_bool abcd; cout &lt&lt "sizeof : " &lt&lt sizeof(abcd); } これを実行すると次のようになる sizeof : 8 では、念のためにiを8ビットで追加して実行すると #include ...

PCゲーム【HyperNova】を作った話

イメージ
HyperNovaを作った話 友人に誘われて2週間で開発して3日でBoothに公開した時の話。 開発環境 ゲームエンジン:Unity 2019.4.11f1 統合開発環境:VisualStudio2019Comunity ミドルウェア:ADX2LE オーディオオーサリングツール:CRI Atom Craft LE プラットフォーム:Windows, MacOSX (2021/09/06 時点) プロジェクト共有:UnityCollaborate 開発人数:4人 開発の経緯 友人:テキトウにゲーム作ろうぜ! わい:面白そうだしいいよ~ 以上 これで開発が始まったのがHyperNovaである。 友人はゲームの完成図をすでに持っていたらしいが私は一切考えずに開発していたw 私が担当したのはサウンド実装とUIとモーション、セーブデータに関する部分であった。 友人はゲームのシステム自体をプログラムするのが得意で私は、コンピュータに影響が 出るようなシステム周りやミドルウェアを用いた負荷軽減などが得意でお互いにすみ分け ができていた。 開発の流れはTwitterで毎日進捗を投稿していたので興味があったら見てほしい。 リプライに毎日追加していった。 ① 8/14 ゲームジャム始動!! #tdu_gamejam 「進捗」 ・ゲームシステムの土台 ・PlayerとEnemy with @komiho_ri pic.twitter.com/qHAnNfNvR0 — どんぐり (@OhDonguri) August 14, 2021 初日はゲームのジャンルがSTGと決まったので早速、システムを作成。 友人は以前から開発していたゲームで使っていた汎用性の高いスクリプトのおかげで、敵と プレイヤーのステータス管理と判定管理が一気に片付いた。 2日目にしてステージの実装に敵の出現、エフェクト、モーション、サウンド実装… 今振り返ってみると開発スピードが免停覚悟するほど速い。 その日の進捗投稿会議で8割公開することが軽いノリで決まったがその後若干後悔したw 3日目はプレイヤーを追尾して一緒に弾を打つオプション砲が追加された。 Twitterにも進捗が投稿されている。 ここまではいいと。 問題はこの辺から。 丸1日作業して進捗を投稿できるほどの視覚的進...

Unity ADX2LE 演出付きでBGMを再生する CriAtomExPlayer

UnityでADX2LEを用いた演出付きBGM再生 サウンドミドルウェアのADX2LEを用いたBGM再生についてまとめてみた。 ※自己流のため参考程度にお願いします。 サンプルプログラム1 using CriWare; using System.Collections; using UnityEngine; using UnityEngine.UI; public class SoundSample : MonoBehaviour { public CriAtomSource criAtomSource; public string bgmCueSheet = "BGM"; public string[] bgmCueNames = new string[] { "BGM1", "BGM2", "BGM3", "BGM4", "BGM5" }; //キューシート「BGM」に入っているキューの名前一覧 private CriAtomExPlayer exPlayer, exPlayer2; private CriAtomExAcb atomExAcb; int num = 0; private IEnumerator Start(){ /* キューシートファイルのロード待ち */ yield return new WaitUntil(() =&gt !CriAtom.CueSheetsAreLoading); atomExAcb = CriAtom.GetAcb("BGM"); //BGMの入ったACBファイルを拾う //クロスフェードPlayer exPlayer = new CriAtomExPlayer(); //プレイヤーの生成 exPlayer.SetCue(atomExAcb, bgmCueNames[0]); //プレイヤーにキューをセットする exPlayer.Loop(true); //プレイヤーにループを設定する ...

C/C++言語 再帰関数

C/C++での再帰関数の挙動 C/C++で関数を作成し、その中で同じ関数を実行すると for文を用いなくとも繰り返し処理される。 サンプルプログラム1 #include <iostream> using namespace std; void increase(int i); int main(void){ increase(0); return 0; } void increase(int i){ if(i &lt 5){ increase(i + 1); cout &lt&lt i &lt&lt " " &lt&lt endl; } } これを実行すると次のようになる 4 3 2 1 0 これは同じ関数が同じ関数内で実行されているのだが、イメージしづらいだろう。 挙動自体は次のプログラムのようにふるまう。 void increase(int i) { if (0 &lt 5) { if (1 &lt 5) { if (2 &lt 5) { if (3 &lt 5) { if (4 &lt 5) { if (5 &lt 5) { cout &lt&lt 5 &lt&lt " " &lt&lt endl; //ここから外に出る連鎖が始まる } cout &lt&lt 4 &lt&lt " " &lt&lt endl; } cout &lt&lt 3 &lt&lt " " &lt&lt endl; ...

Unity ADX2LE フェード

UnityでADX2LEを用いたクロスフェード CriAtomSourceでフェーダーを取り付けてシーン切り替えなどのフェード演出をする。 ※CriAtomExPlayerの一部機能が使えなくなる。 サンプルプログラム1 int fadeinTime = 1000; int fadeoutTime = 1000; CriAtomSource source; source.player.AttachFader(); //CriAtomExPlayerにフェーダーを取り付ける source.player.SetFadeOutTime(fadeoutTime); //フェードアウト時間の設定 source.player.SetFadeInTime(fadeinTime); //フェードイン時間の設定 source.player.Start(); //間を開けて source.player.Stop(); Start()でフェードインが開始される。 Stop()でフェードアウトが開始される。 クロスフェードを行わないのであればTweenやエンペラードを使用するほうがいい。 クロスフェードを実際に行うにはプレイヤーを2つつけなければならない。 例えば プレイヤー1でフェードアウトしているならば、プレイヤー2ではフェードインするといった感じだ。 同一プレイヤーでは新しく音を再生する場合、以前に再生されていた音がキャンセルされて再生されてしまうためである。 参考 CRIWARE Unity Plugin Manual: CriAtomExPlayer クラス ※間違ってたらすみません。 わかった時点で修正します。