2017年11月4日土曜日

【オリジナルガシャット】レッキングクルーガシャット動画公開【作製番外編1】

オリジナルガシャットの作製は相変わらず音ネタ探しに苦労している状況です。
10月1日の雑記に少し記載しましたが、ネタ被りで保留中の案件をこのまま眠らせておくのも勿体ないので、ブログ用として公開します。

レッキングクルーガシャット

ヒダカヒロジ様のスーパーマリオガシャットとゲームは異なりますが、マリオ被りするため保留中のレッキングクルーガシャットです。
BGMの入手元は手持ちのゲームサウンドミュージアム~ファミコン編~のレッキングクルーから。
シングルサイズのCDだったため、再生環境を整えるのに苦労しました。

ネタ的にはガシャコンブレイカーのハンマーモードでクリティカルストライクを…と考えていたのですが、動画はガシャコンブレイカーの電源入れ忘れ&クリティカルストライク音の調整が不十分だったため、動画の最後の方が少し残念な結果になってしまいました。


なお、今回の動画を撮影中、DFPlayerを1個壊してしまいました。
壊れたのはSDカードスロットなので、秋月電子あたりでマイクロSDカードコネクタを買って修理してみようかとも思いましたが、送料等を考えると新しいDFPlayerを買っても大差なさそうな金額になりそうなので、壊れたDFPlayerはジャンク行きにしました。
暇なときにでも、SDカード変換アダプタと結線して修理できるか挑戦してみます。

【動画を撮り直したのでこちらもどうぞ。】

2017年10月24日火曜日

【プラレール修理】つうきん電車(旧動力 緑)の修理

以前修理したけどブログにアップできなかったもの その2 です。
なお、修理前の画像は撮り忘れたので修理後の画像のみです。

つうきん電車(旧動力 緑)を修理しました。
修理箇所はシャーシの動力ユニットを固定する部分です。
全体画像

画像中央部、動力ユニットのツメを引っかけて固定する部分が欠損していたため、プラモデルの灰色ランナーを使用してヒートペンで再生させました。
シャーシ修理画像 上面

底面からはこんな感じです。
シャーシ修理画像 底面


シャーシに合う色の灰色ランナーを全部使ってしまったため一部不完全ではありますが、無事動くようになりました。
シャーシ修理後画像

2017年10月1日日曜日

【雑記】オリジナルガシャット作製の雑記2

あぁ…
オリジナルガシャット用に考えていた案のうち、最も音声データ作製が進んでいた案が使いづらいネタになってしまった。
残り3案のうちの一つはヒダカヒロジ様のガシャットと若干ネタ被りするしなぁ…

困りましたねぇ…

2017年9月18日月曜日

【プラレール修理】名鉄7000系パノラマカー(旧動力 白線なし)の修理

以前修理したけどブログにアップできなかったもの その1 です。
なお、修理前の画像は撮り忘れたので修理後の画像のみです。

名鉄7000系パノラマカー(旧動力 白線なし)を修理しました。
修理箇所は運転台窓枠が折れて紛失していた所と車体左側ひび割れの2ヶ所です。
全体画像

運転台の窓枠は、プラモデルの赤ランナーを使用してヒートペンで再生しました。
が、仕上げが甘くガタガタになってしまいました…
窓枠部分拡大画像


車体左側のひび割れも、プラモデルの赤ランナーとヒートペン塞いだのですが、微妙に赤の色合いが異なったため逆に目立つ結果に…
ボディ左側拡大画像

いつか時間が出来たら、修理し直したいです…

2017年9月3日日曜日

【音声改造】オリジナルガシャット作製その5 『動作確認動画とプログラム公開』

新しい仮面ライダーの放送が始まりましたが、私はまだガシャットを弄っています。
という事で今回は、前回修正したスケッチが正常に動作するか検証していました。

動画にするとこんな感じです。
ガシャット挿入音の再生中にキメワザスロットのボタンを押下しても次処理のキメワザ待機音は実行せず、ガシャット挿入音の再生が終了した後にボタンを押下することでキメワザ待機音が鳴るようになりました。

スケッチが長くなってしまったのでvoid loopの所のみ抜粋してありますがこんな感じです。
void loop(){
  current_state[0] = digitalRead(BUTTON_1_PIN);
  current_state[1] = digitalRead(BUTTON_2_PIN);
  current_state[2] = digitalRead(BUTTON_3_PIN);
 
  if(memcmp(before_state, OFF_OFF_OFF, N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      wait = 1;
      action = set_action(LEVEL_1);
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      wait = 1;
      action = set_action(GASHAT_IN);
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      if(single_mode_flag == false){
        wait = 1;
        action = set_action(GASHAT_NAME);
      }else{
        randNumber = random(2);
        if(randNumber == 0){
          wait = 1;
          action = set_action(GAME_CLEAR);
        }else{
          wait = 1;
          action = set_action(GAME_OVER);
        }
      }
      single_mode_flag = !single_mode_flag;
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      slot_in_time = 0;
      slot_in_flag  = true;
      wait = 1;
      action = set_action(GASHAT_IN);
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      wait = 1;
      action = set_action(LEVEL_1);
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      wait = 1;
      action = set_action(GASHAT_IN);
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      critical_mode_flag = true;
      slot_in_time = 0;
      slot_in_flag  = true;
      wait = 1;
      action = set_action(WEAPON_C_READY);
    }
  }else if(memcmp(before_state, ON_OFF_OFF, N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      if(s_process_ID == 3 && slot_in_time >= 40){
        randNumber = random(2);
        if(randNumber == 0){
          wait = 1;
          action = set_action(CRITICAL_FINISH);
        }else{
          wait = 1;
          action = set_action(CRITICAL_FINISH_KAI);
        }
        s_process_ID = 0;
      }else{
        ;
      }
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(LEVEL_2);
      }else{
       if(s_process_ID == 3 && slot_in_time >= 40){
          randNumber = random(2);
          if(randNumber == 0){
            wait = 1;
            action = set_action(CRITICAL_FINISH);
          }else{
            wait = 1;
            action = set_action(CRITICAL_FINISH_KAI);
          }
          s_process_ID = 0;
        }else{
          ;
        }
      }
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      wait = 1;
      action = set_action(LEVEL_2);
    }
  }else if(memcmp(before_state, OFF_ON_OFF, N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      if(s_process_ID == 2 && slot_in_time >= 40){
        wait = 1;
        action = set_action(GENRE);
        s_process_ID = 0;
      }else{
        ;
      }
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(LEVEL_3);
      }else{
        if(s_process_ID == 2 && slot_in_time >= 40){
          wait = 1;
          action = set_action(GENRE);
          s_process_ID = 0;
        }else{
          ;
        }
      }
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      wait = 1;
      action = set_action(LEVEL_X);
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      wait = 1;
      action = set_action(LEVEL_3);
    }
  }else if(memcmp(before_state, OFF_OFF_ON, N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      wait = 1;
      action = set_action(LEVEL_1);
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      wait = 1;
      action = set_action(GASHAT_IN);
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(CRITICAL_READY);
      }else{
        randNumber = random(2);
        if(randNumber == 0){
          wait = 1;
          action = set_action(CRITICAL_STRIKE);
        }else{
          wait = 1;
          action = set_action(CRITICAL_STRIKE_KAI);
        }
      }
      critical_mode_flag = !critical_mode_flag;
    }
  }else if(memcmp(before_state, ON_ON_OFF,  N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(DRIVER_CLOSE);
      }else{
        if(slot_in_time >= 40){
          randNumber = random(2);
          if(randNumber == 0){
            wait = 1;
            action = set_action(CRITICAL_FINISH);
          }else{
            wait = 1;
            action = set_action(CRITICAL_FINISH_KAI);
          }
        }else{
          s_process_ID = 3;
        }
      }
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(DRIVER_CLOSE);
      }else{
        if(slot_in_time >= 40){
          wait = 1;
          action = set_action(GENRE);
        }else{
          s_process_ID = 2;
        }
      }
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      if(s_process_ID >= 1 && slot_in_time >= 40){
        switch(s_process_ID){
          case 1:
            wait = 1;
            action = set_action(CRITICAL_READY);
            critical_mode_flag = !critical_mode_flag;
            break;
          case 2:
            wait = 1;
            action = set_action(GENRE);
            break;
          case 3:
            randNumber = random(2);
            if(randNumber == 0){
              wait = 1;
              action = set_action(CRITICAL_FINISH);
            }else{
              wait = 1;
              action = set_action(CRITICAL_FINISH_KAI);
            }
            break;     
        }
        s_process_ID = 0;
      }else{
        ;
      }
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      if(slot_in_time >= 40){
        if(critical_mode_flag == false){
          wait = 1;
          action = set_action(CRITICAL_READY);
        }else{
          randNumber = random(2);
          if(randNumber == 0){
            wait = 1;
            action = set_action(CRITICAL_STRIKE);
          }else{
            wait = 1;
            action = set_action(CRITICAL_STRIKE_KAI);
          }
        }
        critical_mode_flag = !critical_mode_flag;
      }else{
        s_process_ID = 1;
      }
    }
  }else if(memcmp(before_state, ON_OFF_ON,  N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(LEVEL_2);
      }else{
        ;
      }
    }
  }else if(memcmp(before_state, OFF_ON_ON,  N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      if(critical_mode_flag == false){
        wait = 1;
        action = set_action(LEVEL_3);
     }else{
        ;
      }
    }
  }else if(memcmp(before_state, ON_ON_ON,   N_BUTTON) == 0){
    if(memcmp(current_state, OFF_OFF_OFF, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_OFF_OFF, N_BUTTON) == 0){
      randNumber = random(2);
      if(randNumber == 0){
        wait = 1;
        action = set_action(CRITICAL_FINISH);
      }else{
        wait = 1;
        action = set_action(CRITICAL_FINISH_KAI);
      }
    }else if(memcmp(current_state, OFF_ON_OFF, N_BUTTON) == 0){
      wait = 1;
      action = set_action(GENRE);
    }else if(memcmp(current_state, OFF_OFF_ON, N_BUTTON) == 0){
      s_process_ID = 0;
      slot_in_flag  = false;
      critical_mode_flag = false;
      wait = 1;
      action = set_action(GASHAT_OUT);
    }else if(memcmp(current_state, ON_ON_OFF,  N_BUTTON) == 0){
      ;
    }else if(memcmp(current_state, ON_OFF_ON,  N_BUTTON) == 0){
      randNumber = random(2);
      if(randNumber == 0){
        wait = 1;
        action = set_action(CRITICAL_FINISH);
      }else{
        wait = 1;
        action = set_action(CRITICAL_FINISH_KAI);
      }
    }else if(memcmp(current_state, OFF_ON_ON,  N_BUTTON) == 0){
      wait = 1;
      action = set_action(GENRE);  
    }else if(memcmp(current_state, ON_ON_ON,   N_BUTTON) == 0){
      if(s_process_ID >= 1 && slot_in_time >= 40){
        switch(s_process_ID){
          case 1:
            wait = 1;
            action = set_action(CRITICAL_READY);
            critical_mode_flag = !critical_mode_flag;
            break;
          case 2:
            wait = 1;
            action = set_action(GENRE);
            break;
          case 3:
            randNumber = random(2);
            if(randNumber == 0){
              wait = 1;
              action = set_action(CRITICAL_FINISH);
            }else{
              wait = 1;
              action = set_action(CRITICAL_FINISH_KAI);
            }
            break;     
        }
        s_process_ID = 0;
      }else{
        ;
      }
    }
  }

  if(wait >= 1) {
    flash_led(action);
    wait = 0;
  }else{
    wait++;
  }

    before_state[0] = current_state[0];
    before_state[1] = current_state[1];
    before_state[2] = current_state[2];

  if(slot_in_flag == true){
    if(slot_in_time < 5000){
      slot_in_time++;
    }else{
      slot_in_time = 0;
    }
  }

  delay(50);
}
他の方が作製する際の参考になれば良いのですが…


ガシャットの個体差による認識率の問題はありますが、現時点での課題はほぼほぼ解決したので、次は音ネタ探しに移ります。
さてさて、何が良いでしょうかねぇ

その6に続きます。】

2017年8月27日日曜日

【音声改造】オリジナルガシャット作製その4 『動作確認とプログラム修正2』

土日はスケッチを弄ってました。
今回の改修箇所は、前回気付いたLED点灯間隔の改修とキメワザスロットや武器に挿入した際の挙動の改修です。

LED点灯間隔の改修

前回書いた通り、if文とカウンタを使用してループn回に1度の割合でflash_led(action)の処理をするようにしました。また、DX版のガシャットは最大22秒位点灯しているので、LEDの点灯データも25秒分に増やしました。


キメワザスロットや武器に挿入した際の挙動の改修

ガシャットを武器に挿入(①②③スイッチ同時押下)する際にガシャット挿入音~キメワザ待機音となるので、#define WEAPON_C_READY 17 で新しい処理を追加しました。

また、キメワザスロットや武器に挿入した際にガシャット挿入音が鳴るのですが、DX版のガシャットはガシャット挿入音が鳴っている約2秒の間にキメワザボタンあるいは武器のトリガーを操作しても、次の音は鳴らずにガシャット挿入音が鳴り終わるまでは次の処理を保留するので、それと同様の機構を追加しました。
この処理を流用すれば、ガシャット挿入音の再生完了後にキメワザ待機音を自動再生したり、クリティカルストライク(クリティカルフィニュッシュ)音の後にランダムで「会心の一発」音を再生させることもできそうですが、スケッチの殆どを作り直すことになり、処理も複雑になりそうなので別の機会へ持ち越しとします。


以上が今回の改修点です。
夜に作業していたため、スピーカーを接続せずにシリアルモニタで動作確認したのみですが、動作の方はいい感じに改修できていると思います。
おそらく次の土日になると思いますが、息子のゲーマドライバー等を借りて動作確認し、動作に問題なさそうであれば、現時点でのスケッチを載せてみようかと思います。

その5に続きます。】

2017年8月23日水曜日

【オリジナルガシャット】作製雑記2 『電源周りのトラブル』

オリジナルガシャット作製の際にやらかしてしまった電源周りのトラブルなどを書き残しておきます。
他の方が作製するときの参考になれば…

DFPlayerの電源はArduinoのVccから取らない

最初にブレッドボードでプロトタイピングした際、ArduinoのVccからDFPlayerの電源を取れば良いのではないかと考えて配線したのですが、うまく動いてくれませんでした。
調べたところ、ヒダカ ヒロジ様も同様の問題を経験されたらしく、過去の記事に記述があり、DFPlayerの電源はArduinoから直接取らない方が良いとのことです。
まぁ、回路図通りに作らなかった私が悪いのですが…
ちなみに、ブレッドボード用の電源モジュールから3.3Vを取った場合は正常に動いてくれました。


リチウム電池ではDFPlayerの再生が困難

スイッチサイエンスのリチウムイオン電池が売り切れだったため、ボタン電池のLR44と降圧型モジュールを組み合わせて、3.3Vでの駆動を考えていたのですが、一瞬しか再生してくれなかったり、不快なノイズ音が発生したりして、正常に動作させるのが困難でした。
何か良い方法がないか模索中です。