Mathematicaで音を鳴らす


Mathematicaには関数などを音にして出力する機能があります。

今回はそれを使ってピアノ鍵盤を作ってみました。(思いきり力技です)
クリックすると音が鳴ります。

キーボード入力で音を出させたかったのですが、どうやらMathematicaではキーボードイベントが無いようなので、代わりにゲームコントローラ(!)の入力で音が鳴るようにしました。

今回は単音のピアノですが、他の楽器の音や、和音を鳴らすこともできます。
midiファイルを読み込んでMathematicaで再生、もできると思います。(あんまり意味はないですが・・・)


以下、需要などあるわけがないソースコードです。

Graphics[
 {
  White,
  EdgeForm[Black],
  
  Button[Polygon[{{0, 0}, {1, 0}, {1, 4}, {0, 4}}], 
   EmitSound[Sound[SoundNote["C4"]]]],
  Button[Polygon[{{1, 0}, {2, 0}, {2, 4}, {1, 4}}], 
   EmitSound[Sound[SoundNote["D"]]]],
  Button[Polygon[{{2, 0}, {3, 0}, {3, 4}, {2, 4}}], 
   EmitSound[Sound[SoundNote["E"]]]],
  Button[Polygon[{{3, 0}, {4, 0}, {4, 4}, {3, 4}}], 
   EmitSound[Sound[SoundNote["F"]]]],
  Button[Polygon[{{4, 0}, {5, 0}, {5, 4}, {4, 4}}], 
   EmitSound[Sound[SoundNote["G"]]]],
  Button[Polygon[{{5, 0}, {6, 0}, {6, 4}, {5, 4}}], 
   EmitSound[Sound[SoundNote["A"]]]],
  Button[Polygon[{{6, 0}, {7, 0}, {7, 4}, {6, 4}}], 
   EmitSound[Sound[SoundNote["B"]]]],
  Button[Polygon[{{7, 0}, {8, 0}, {8, 4}, {7, 4}}], 
   EmitSound[Sound[SoundNote["C5"]]]],
  
  Black,
  
  Button[Polygon[{{0.6, 4}, {1.4, 4}, {1.4, 2}, {0.6, 2}}], 
   EmitSound[Sound[SoundNote["C#"]]]],
  Button[Polygon[{{1.6, 4}, {2.4, 4}, {2.4, 2}, {1.6, 2}}], 
   EmitSound[Sound[SoundNote["D#"]]]],
  Button[Polygon[{{3.6, 4}, {4.4, 4}, {4.4, 2}, {3.6, 2}}], 
   EmitSound[Sound[SoundNote["F#"]]]],
  Button[Polygon[{{4.6, 4}, {5.4, 4}, {5.4, 2}, {4.6, 2}}], 
   EmitSound[Sound[SoundNote["G#"]]]],
  Button[Polygon[{{5.6, 4}, {6.4, 4}, {6.4, 2}, {5.6, 2}}], 
   EmitSound[Sound[SoundNote["A#"]]]]
  
  }
 ]
Dynamic[If[ControllerState["B1"], EmitSound[Sound[SoundNote["C4"]]], 
  ""]]
Dynamic[If[ControllerState["B2"], EmitSound[Sound[SoundNote["D"]]], 
  ""]]
Dynamic[If[ControllerState["B3"], EmitSound[Sound[SoundNote["E"]]], 
   ""]] Dynamic[
  If[ControllerState["B4"], EmitSound[Sound[SoundNote["F"]]], ""]]
Dynamic[If[ControllerState["B5"], EmitSound[Sound[SoundNote["G"]]], 
  ""]]
Dynamic[If[ControllerState["B6"], EmitSound[Sound[SoundNote["A"]]], 
  ""]]
Dynamic[If[ControllerState["B7"], EmitSound[Sound[SoundNote["B"]]], 
  ""]]
Dynamic[If[ControllerState["B8"], EmitSound[Sound[SoundNote["C5"]]], 
  ""]]