楽器をつくる:シーケンサ編

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
楽器をつくる:シーケンサ編 [2018/12/26 12:59] – [設計] baba楽器をつくる:シーケンサ編 [2020/06/20 11:28] (現在) – [発音] baba
行 1: 行 1:
 ====== 最初に ====== ====== 最初に ======
-このページではプログラミング初学者の人が簡単なミュージックシーケンサを作成するまでをまとめたウェブサイトになります。自作デバイス上でArduinoを動かすことを想定していますが、教材用にProcessingで動作するソフトウェアとして紹介します。配列の宣言の仕方など、Arduino場合と少し異なりますので、適時読み替えてください。+このページではプログラミング初学者の人が簡単なミュージックシーケンサを作成するまでをまとめたウェブサイトになります。自作デバイス上でArduinoを動かすことを想定していますが、教材用にProcessingで動作するソフトウェアとして紹介します。配列の宣言の仕方など、Arduino場合と少し異なりますので、適時読み替えてください。
  
 ====== 設計 ====== ====== 設計 ======
行 11: 行 11:
 重要なのは想定する一つ一つの部品や機能をソフトウェア上でclassとして作成していってください。いわゆるオブジェクト指向で考えていきます。シーケンサの機能としては、レイヤー階層になっており、各レイヤーごとに4x4のボタンが用意されています。ボタンを押すごとにそのボタンのonとoffを切り替えることができます。onになったボタンはタイムラインに従って自動で発音します。 重要なのは想定する一つ一つの部品や機能をソフトウェア上でclassとして作成していってください。いわゆるオブジェクト指向で考えていきます。シーケンサの機能としては、レイヤー階層になっており、各レイヤーごとに4x4のボタンが用意されています。ボタンを押すごとにそのボタンのonとoffを切り替えることができます。onになったボタンはタイムラインに従って自動で発音します。
  
-実際にコードを作成していく際、ベースから作る場合と、トップから作っていく場合がありますが、 +実際に完成するソフトウェアは下記のようなものです。では一緒にやってみましょう。 
-馬場の普段の作り方は、トップから作っていく方法になります。一緒にやってみましょう。実際に完成するソフトウェアは下記のようなものです。 +<html> 
-{{ :楽器をつくる:poco.mov |}}+<iframe width="560" height="315" src="https://www.youtube.com/embed/jLvlKYu8v5w" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> 
 +</html>
  
  
行 105: 行 106:
   }   }
   void update()   void update()
-  {+  {   
     // マウスがボタン上にあるとき(ボタン押下処理)     // マウスがボタン上にあるとき(ボタン押下処理)
-    if ( sqrt( pow(x-mouseX, 2) + pow(y-mouseY, 2) ) < size/2 ) { +    if ( dist(x, y, mouseX, mouseY) < size/2 ) { 
-      + 
       // マウスボタンが押されている、且つ一つ前の状態では押されていなかったとき       // マウスボタンが押されている、且つ一つ前の状態では押されていなかったとき
       if ( mousePressed == true && previous_mousePressed == false) {       if ( mousePressed == true && previous_mousePressed == false) {
         status = !status; // falseならtrue, trueならfalseにする         status = !status; // falseならtrue, trueならfalseにする
-        + 
         // trueなら明るめのグレーにする         // trueなら明るめのグレーにする
         if( status == true ){         if( status == true ){
行 123: 行 124:
       }       }
     }     }
-        + 
     previous_mousePressed = mousePressed;     previous_mousePressed = mousePressed;
   }   }
 + 
   int x; // x座標   int x; // x座標
   int y; // y座標   int y; // y座標
行 134: 行 135:
   boolean previous_mousePressed; // 一つ前のマウスボタン状態を保存しておく   boolean previous_mousePressed; // 一つ前のマウスボタン状態を保存しておく
 } }
 + 
 Button[] button = new Button[16]; Button[] button = new Button[16];
- + 
 void setup() void setup()
-{ +{  
- +  size(500, 500); 
-  size(500, 500); +
   for ( int i = 0; i < 16; i++ ) {   for ( int i = 0; i < 16; i++ ) {
     button[i] = new Button();     button[i] = new Button();
行 148: 行 146:
   }   }
 } }
-{{ :楽器をつくる:スクリーンショット_2018-12-22_9.11.29.png?nolink |}} 
 void draw() void draw()
 { {
行 159: 行 156:
 </file> </file>
  
-ここらで少しButtonクラスの記述が増えて来たので、別ファイルにクラスの記述を移します。クラスの記述部分をすべてButtonというタブに移します。+ここらで少しButtonクラスの記述が増えて来たので、下記のスクリーンショットのようにクラスの記述を別ファイルに移します。クラスの記述部分をすべてButtonというタブに移します。
  
 {{ :楽器をつくる:スクリーンショット_2018-12-22_9.11.29.png?nolink |}} {{ :楽器をつくる:スクリーンショット_2018-12-22_9.11.29.png?nolink |}}
  
 ====== タイムライン(自動演奏のための時間)機能を追加 ====== ====== タイムライン(自動演奏のための時間)機能を追加 ======
-は次にタイムラインを追加します。タイムラインは決められたテンポで順番にボタンのON、OFFに従って自動演奏を行います。そこでまず決められたテンポを算出するクラスとして、Metroクラスを作ります。常時このMetroをupdate()することで、指定テンポでtrueを返す設計にします。まずは次のようなクラスを作成します。下記コードは先程のButtonクラスと同様に、新規タブからMetroとして作成してください。+各ボタンのON/OFFの制御に関して上記までで記述できたので,次にタイムラインを追加します。タイムラインは決められたテンポで順番にボタンのON、OFFに従って自動演奏を行います。そこでまず決められたテンポを算出するクラスとして、Metroクラスを作ります。常時このMetroをupdate()することで、指定テンポでtrueを返す設計にします。まずは次のようなクラスを作成します。下記コードは先程のButtonクラスと同様に、新規タブからMetroとして作成してください。
  
 <file .pde Metro.pde> <file .pde Metro.pde>
行 183: 行 180:
   }   }
   int ms;   int ms;
-  long ms_stamp;+  long ms_stamp; // long はintよりも桁数の多い整数を扱うときに利用します.
 } }
 </file> </file>
行 299: 行 296:
   * {{ :楽器をつくる:drumsound.zip |}}   * {{ :楽器をつくる:drumsound.zip |}}
  
-ではsound libraryを利用して、それらを読み込み、シーケンスのタイミングに合わせて発話するようにします。今回はCHH.wavを利用します。+ではsound libraryを利用して(Minim Libraryでもよいですが,Version3以上からはsound libraryが公式の音を扱うライブラリになった為)、それらを読み込み、シーケンスのタイミングに合わせて発話するようにします。今回はCHH.wavを利用します。
  
 <file .pde sq.pde> <file .pde sq.pde>
  • /home/users/2/lolipop.jp-4404d470cd64c603/web/ws/data/attic/楽器をつくる/シーケンサ編.1545796768.txt.gz
  • 最終更新: 2018/12/26 12:59
  • by baba