あの楽器 for プチコン by 彬兄

再生

 「あの楽器」を知っているかな? そのスジでは有名な架空の楽器だ。様々なハードで再現されているこの楽器を、プチコン用に作った猛者が現われたぞ。
 基本操作は画面タッチ。画面内の四角形がピアノの黒鍵で、左端がドの音だと考えるとわかりやすいだろう。
 十字ボタン左右で音色をチェンジ。感触がかなりダイナミックに変わるぞ。音量調整は十字ボタン上下。Lボタンを押しながらタッチすると、簡易エコーがかかるようにもなっている。

私が作りました

彬兄

タッチパネルを使った「あの楽器」風なプログラムです。たいして工夫もしてませんが、とりあえず動くモノが出来たので投稿してみます。


 CHECK POiNT 

博士
ワシはこの分野にはうといのじゃが、ここを読むとなかなか有名な楽器なのじゃな。あえてプチコンで挑むその気概アッパレじゃ。

神崎
プチコンはMML対応していないものね。このプログラムではBEEPを使って音階を出しているんだ。これだけでも音楽系プログラムの参考になるんじゃないかな?

インテリ
ちなみにプログラム原型ではАボタンを押すと、「あの楽器」が使われた曲の伴奏が鳴るようになっていたんだけど、このリストでは著作権に配慮して、制作者の許可を得た上で117行以降をオリジナルの楽曲に変更しているよ。ご了承ください。

ワンパク
しかし差し替えるにしてもよォ、もうちょいセンスってモンが……。いや、これはこれでひとつのパンクスピリットなのか……? ブツブツ……

博士
(適当に音階を上下させただけとは、さすがに言えんのう……)

プログラムリスト

  1. ’アノカ゛ッキ for フ゜チコン
  2. CLEAR
  3. ’ヘンスウ セッテイ
  4. MAX=3       ’ヒョウシ゛スウ
  5. DIM TM(MAX) ’タイマ-
  6. DIM TY(MAX) ’タイフ゜
  7. DIM X(MAX)  ’Xサ゛ヒョウ
  8. DIM Y(MAX)  ’Yサ゛ヒョウ
  9. DIM R(MAX)  ’ハンケイ
  10. DIM P(MAX)  ’カクト゛
  11. DIM E(MAX)  ’エコ-
  12. DIM TN(MAX) ’エコ-ネイロ
  13. DIM O(MAX)  ’エコノオンカイ
  14. DIM V(MAX)  ’エコ-ホ゛リュ-ム
  15. LATE=2      ’フレ-ムレ-ト
  16. PNLTYPE ”OFF”
  17. CLS
  18. ? ”アノカ゛ッキ for フ゜チコン ver1.0”
  19. ? ”Бテ゛ シュウリョウ”
  20. ? ”ネイロ:22   ←→”
  21. ? ”VOL:127  ↑↓”
  22. ? ”BGM:OFF  А”
  23. TONE=22
  24. VOL=127
  25. BGM=0
  26. RG=PI()/180  ’1ト゛ ノ テイスウ
  27. GPAGE 1
  28. COLSET ”BG”,0,”000000”
  29. COLSET ”GRP”,0,”000000”
  30. COLSET ”GRP”,1,”00FF00”
  31. COLSET ”GRP”,2,”303030”
  32. BTCH=TCHST
  33. BB=BUTTON()
  34. @LOOP
  35. FOR L=1 TO LATE
  36. B=BUTTON()
  37. NTCH=TCHST
  38. II=(1-BTCH)*NTCH
  39. IF B!=BB THEN GOSUB @BUT
  40. IF II==1 THEN GOSUB @TP
  41. IF BGM==1 THEN GOSUB @BGM
  42. VSYNC 1
  43. BB=B
  44. BTCH=NTCH
  45. NEXT
  46. GOSUB @CHK
  47. GOTO @LOOP
  48. ’ホ゛タン カ゛ オサレタ
  49. @BUT
  50. IF B==0 THEN RETURN
  51. IF B AND 4 THEN TONE=TONE-1
  52. IF B AND 8 THEN TONE=TONE+1
  53. IF B AND 1 THEN VOL=VOL+1
  54. IF B AND 2 THEN VOL=VOL-1
  55. IF TONE<0 THEN TONE=69
  56. IF TONE>69 THEN TONE=0
  57. IF VOL<20 THEN VOL=20
  58. IF VOL>127 THEN VOL=127
  59. LOCATE 4,2
  60. ? STR$(TONE)+”  ”
  61. LOCATE 4,3
  62. ? STR$(VOL)+”  ”
  63. IF B AND 32 THEN END
  64. IF B AND 16 THEN BGM=1-BGM
  65. LOCATE 4,4
  66. P$=”OFF”
  67. IF BGM==1 THEN P$=”ON ”
  68. ? P$
  69. RETURN
  70. ’タッフ゜ サレタ
  71. @TP
  72. I=-1
  73. FOR J=MAX-1 TO 0 STEP -1
  74.  IF TM(J)==0 THEN I=J
  75. NEXT
  76. IF I>-1 GOTO @TP_1
  77. I=0
  78. FOR J=1 TO MAX-1
  79.  IF TM(I)<TM(J) THEN I=J
  80. NEXT
  81. @TP_1
  82. TM(I)=1
  83. X(I)=TCHX
  84. Y(I)=TCHY
  85. R(I)=RND(10)
  86. P(I)=RND(90)*RG
  87. TY(I)=RND(4)
  88. IF TY(I)>0 GOTO @TP_2
  89. R=RND(20)/10-1
  90. X(I)=TCHX+TCHY*R
  91. Y(I)=TCHX-(192-TCHY)*R
  92. @TP_2
  93. OCT=(TCHX-TCHX%16)/16*1024/3
  94. BEEP TONE,OCT,VOL
  95. IF B AND 256 GOTO @TP_3
  96. GOTO @TP_4
  97. @TP_3
  98. E(I)=2
  99. TN(I)=TONE
  100. O(I)=OCT
  101. V(I)=VOL/2
  102. @TP_4
  103. RETURN
  104. ’BGM ノ サイセイ
  105. @BGM
  106. BTM=MAINCNTL
  107. IF BTM>BBTM+30 THEN BBTM=BTM
  108. IF BTM<BBTM+6 GOTO @BGM_1
  109. BBTM=BBTM+6
  110. B_CNT=B_CNT+1
  111. B_OCT=-1
  112. IF B_CNT>23 THEN B_CNT=0
  113. IF B_CNT%6==1 THEN BEEP 29
  114. IF B_CNT%6==4 THEN BEEP 31
  115. IF B_CNT==1 THEN B_OCT=2
  116. IF B_CNT==4 THEN B_OCT=3
  117. IF B_CNT==7 THEN B_OCT=4
  118. IF B_CNT==10 THEN B_OCT=5
  119. IF B_CNT==15 THEN B_OCT=4
  120. IF B_CNT==19 THEN B_OCT=3
  121. IF B_OCT==-1 GOTO @BGM_1
  122. BEEP 16,B_OCT*1024/3,20
  123. @BGM_1
  124. RETURN
  125. ’ヒョウシ゛ チェック
  126. @CHK
  127. GCLS
  128. GOSUB @FRET
  129. FOR I=0 TO MAX-1
  130.  IF TM(I)>90 THEN TM(I)=0
  131.  IF TM(I)==0 GOTO @CHK_1
  132.  TM(I)=TM(I)+LATE*5
  133.  K=TY(I)
  134.  ON K GOSUB @LI,@CI,@CU,@TR
  135.  IF E(I)==0 GOTO @CHK_1
  136.  IF TM(I)>50 GOTO @CHK_1
  137.  BEEP TN(I),O(I),64
  138.  E(I)=E(I)-1
  139. @CHK_1
  140. NEXT
  141. RETURN
  142. ’チョクセン ヒョウシ゛
  143. @LI
  144. FOR J=-1 TO 1
  145.  GLINE X(I)+J,0,Y(I)+J,192,1
  146. NEXT
  147. RETURN
  148. ’エン ヒョウシ゛
  149. @CI
  150. II=R(I)+TM(I)*2
  151. FOR J=II TO II+2
  152.  GCIRCLE X(I),Y(I),R0+J,1
  153. NEXT
  154. RETURN
  155. ’シカク ヒョウシ゛
  156. @CU
  157. II=R(I)+TM(I)*2
  158. FOR J=II TO II+2
  159.  SI=J*SIN(P(I)-TM(I)*RG*2)
  160.  CO=J*COS(P(I)-TM(I)*RG*2)
  161.  X1=X(I)+SI:Y1=Y(I)+CO
  162.  X2=X(I)+CO:Y2=Y(I)-SI
  163.  X3=X(I)-SI:Y3=Y(I)-CO
  164.  X4=X(I)-CO:Y4=Y(I)+SI
  165.  GLINE X1,Y1,X2,Y2,1
  166.  GLINE X2,Y2,X3,Y3,1
  167.  GLINE X3,Y3,X4,Y4,1
  168.  GLINE X4,Y4,X1,Y1,1
  169. NEXT
  170. RETURN
  171. ’サンカク ヒョウシ゛
  172. @TR
  173. P1=P(I)-TM(I)*RG*2
  174. P2=P1+RG*120
  175. P3=P2+RG*120
  176. II=R(I)+TM(I)*2
  177. FOR J=II TO II+2
  178.  X1=X(I)+J*SIN(P1)
  179.  X2=X(I)+J*SIN(P2)
  180.  X3=X(I)+J*SIN(P3)
  181.  Y1=Y(I)+J*COS(P1)
  182.  Y2=Y(I)+J*COS(P2)
  183.  Y3=Y(I)+J*COS(P3)
  184.  GLINE X1,Y1,X2,Y2,1
  185.  GLINE X2,Y2,X3,Y3,1
  186.  GLINE X3,Y3,X1,Y1,1
  187. NEXT
  188. RETURN
  189. ’フレット ヒョウシ゛
  190. @FRET
  191. GBOX 17,1,31,191,2
  192. GBOX 49,1,63,191,2
  193. GBOX 97,1,111,191,2
  194. GBOX 129,1,143,191,2
  195. GBOX 161,1,175,191,2
  196. GBOX 209,1,223,191,2
  197. GBOX 241,1,255,191,2
  198. RETURN
  199. ’====END====