teacup. [ 掲示板 ] [ 掲示板作成 ] [ 有料掲示板 ] [ ブログ ]


新着順:25/789 記事一覧表示 | 《前のページ | 次のページ》

Re: お世話になっております~♪

 投稿者:nekosan  投稿日:2015年 7月26日(日)11時57分18秒
  通報 返信・引用
  > No.772[元記事へ]

猫サックスさんへのお返事です。



> ひとまず、ここに書いたらいいかな?という感じでスケッチを完成させて動作させてみましたら、何故か音が鳴らなくなりました。
> それと、ファンクションボタンも反応しなくなって・・・。
>
> 因みに以下のスケッチになります。
>
> 何卒宜しくお願い申し上げます。



昨日のスケッチは、2つの関数(bank_select、program_change)
を動かすためのサンプルなので、これのloop処理の中身を、
そのままloopに入れてしまうと、多分うごかないでしょう。

(1)for文の処理
  →この場合のfor(;;){}というのは、ここで処理を
   打ち切って、無限ループにするという定番処理
   なので、以降の処理がストップしてしまいます。

(2)2つの関数を呼び出す条件
  →loop処理は、無条件で何度も何度も繰り返す処理を
   書くところなので、ここに呼び出す処理を書くと、
   延々とバンクセレクト、プログラムチェンジを
   出力し続けてしまいます。

「特定のキーが押された」時に、この2つの関数を順に
呼び出すという風にするのが、多分意図されている
処理だと思います。

  キー全般の入力処理
   →特定のキーが押されているかのチェック
    →押されていれば、2つの関数を呼び出し


どのような回路、どのような配線になっているかが
詳しくわからないのですが、多分check_and_output
の関数内で、特定のキーが押されているかどうかを
チェックして、押されてたら2つの関数を呼び出す、
という感じになるのではと思います。


ちなみに、配列「note」や、変数now_velocity、
now_pitch_bend、now_modulation といったものは、
それぞれ、各音程用のキーを押してるかどうか、
ベロシティー量、ピッチベンド量、モジュレーション量
を扱う専用の変数なので、バンク切り替え用のキー入力
があったかどうかを格納しておく変数については、
これらとは別に確保する必要があるでしょう。
(冒頭の変数定義の処理)

で、key_input関数内で、その変数に入力値を格納
する、といった処理も必要になると思います。




具体的にこの内容でコードを書いていくまえに、
スケッチ全体の処理を1行ずつ、および1関数ずつ、
どんなことをしているのかを、一旦日本語に翻訳して
みるとよいかと思います。
(で、setup、loopを順に処理していく流れの中で、
 各関数がどんなタイミングで、どんな条件で
 呼び出されて、結果どんな動作を起こすのかを、
 時系列的に追ってみると、スケッチの意味が
 掘り下げられるかと思います)


配列の使い方だとか、「newなんとか」「oldなんとか」
みたいな変数の意味や機能が、プログラミングに
慣れないとわかりにくいかもしれません。
が、一般に良く使われているような処理ロジックの
パターンで書いてあるので、「おきまり」なんだな、
と思って、なんとかがんばって読み込んで、日本語化
に挑戦してみてください。


→「変数表」(各変数がどんな目的で使用されて、
 どんな値を取って、どんなところで更新・参照
 されるのか、みたいにまとめたもの)だとか、
 各関数の意味や機能を纏めたものを書いておくと、
 便利だし解りやすくなり、実際、開発の仕事では
 設計書に変数表や関数定義を書いておいたりも
 するんですが、このプログラムだと短いし、
 趣味用なので、そこまでしていません。

白紙に、変数の名前を書いておいて、処理を1行1行
目で追いながら、変数がどのように書き換わっていくか
を、紙上でシミュレートしていくと、変数の意味が
つかめていくと思います。

(ステップ実行ができる統合開発環境とかなら、
 いちいち紙に書かなくても画面で簡単にできて
 しまうんですが、Arduino-IDEはそういう機能が
 ないんですよね)



あと、bank_selectやprogram_changeを呼び出すときの
引数は、現状、(0, 0x3F, 0x01)とか(0, 109)とか
固定値になっています。

バンクやプログラムをどんな値に変えるかを、
キー操作の内容によって細かく設定したい場合は、
キー入力によって処理を振り分けする必要があるので、
そのあたりも含めて、自由に仕様を変えられるように、
スケッチ1行1行がどんな風に機能していて、それらが
組み合わさって関数としてどんな機能を実現していて、
全体の中でどんな意味を持っているのか、日本語で
スケッチの動作を言語化しておくと、あとあと、
機能変更するときに役立つかと思います。



 
 
》記事一覧表示

新着順:25/789 《前のページ | 次のページ》
/789