« 紅華祭での研究室展示「学習ゲームフェスタ」が子ども達で大賑わい | トップページ | 八王子国際交流フェスティバル2016に留学生クルディ・ゼヤードさんが参加 »

ランダムキーボードを作ってみよう!

2016年10月31日 (月) 投稿者: メディア技術コース

みなさん、こんにちは、

 
メディア学部の授業「音声音響メディア処理」では信号処理ソフトを使って、いろいろな音を体験します。今日は、音あそびとして Scilab   を使って、メチャメチャなキー配置の「ランダムキーボード」を作ってみましょう。
1秒間のディジタル音の数(サンプリング周波数)をコンパクトディスクの音質の半分の22050個にして、0.5秒の音を鳴らします。半音も含ませた1オクターブ分の鍵盤を作りましょう。音の高さの範囲はC5(523Hz)からC6(1046Hz)までにします。
ここで、grandという関数を使って、キーの順序をメチャメチャにします。
Matplotという関数を使って、色鍵盤を作ります。
色のついている領域をマウスクリックすると、その色鍵盤に対応した音が出ます。色鍵盤の外をマウスクリックすると、停止します。locateというのが、座標を読み込む関数です。色表示は13段階のjetと呼ばれるカラーマップ(色と値の対応)を使います。whileというのは、条件が満たされている間endまでのプログラムを繰り返し実行するということです。%piは円周率3.14です。roundは四捨五入で左からのキー番号が求められます。
以下を、コンソールに打ち込んでください。
 
fs = 22050 ;                  //1秒間の音サンプルの数
t = 0 : 1/fs : 0.5 ;             //時間刻みの目盛
se = 2 ^ ( 1 / 12 ) ;          //半音周波数比
f = 523 * se . ^ ( 0 : 12 ) ; //1オクターブ分の半音刻み周波数
as = grand( 1 , "prm" , ( 1 : 13 ) )  ;     //ランダムな順列
Matplot( as ) ;     //色表示
xset( 'colormap', jetcolormap( 13 ) ) ;     //jetカラーマップ
x = 1 ; y = 1 ;
while x  > 0.5 & x <  13.5 & y > 0.5 & y < 1.5   ;   //鍵盤内
i = round( x ) ;          //横軸座標四捨五入
sound( sin( 2 * %pi * f(  as(  i  ) ) * t ) , fs ) ;   //指定の音を発音
p = locate(1) ;   //座標をマウスクリックで読み込み
x = p( 1 ) ; y = p( 2 ) ;
end ;
 
さて、動作しましたか?

こんな鍵盤ができたと思います。初めに初期音が鳴ります。鍵盤をマウスクリックすると音が鳴ります。音は鳴りましたか?この鍵盤は音の高さの並びがメチャメチャです。何か曲を演奏してみてください。

Photo

                    図1 ランダム配列のキーボード
 
もし、順序がわからなくなってしまったら、
 
Matplot( 1 : 13 ) ;
xset( 'colormap', jetcolormap( 13 ) ) ;
 
をやってみてください。次のずのような正しい順序が表示されます。つまり、低いドが濃い青、高いドが濃い赤ということです。ただし、これは、色の順番を示すだけですから、これをマウスクリックしても音は鳴りません!

Jet13step

                    図2 正しい順序の色鍵盤

 

もし、間違って、鍵盤の外をマウスクリックするより前に、色鍵盤の右上のXマークで鍵盤を消してしまった場合には、Scilabを一旦終了させてください。

相川清明

授業紹介」カテゴリの記事

高校生向け」カテゴリの記事

« 紅華祭での研究室展示「学習ゲームフェスタ」が子ども達で大賑わい | トップページ | 八王子国際交流フェスティバル2016に留学生クルディ・ゼヤードさんが参加 »