「あの楽器」を知っているかな? そのスジでは有名な架空の楽器だ。様々なハードで再現されているこの楽器を、プチコン用に作った猛者が現われたぞ。
基本操作は画面タッチ。画面内の四角形がピアノの黒鍵で、左端がドの音だと考えるとわかりやすいだろう。
十字ボタン左右で音色をチェンジ。感触がかなりダイナミックに変わるぞ。音量調整は十字ボタン上下。Lボタンを押しながらタッチすると、簡易エコーがかかるようにもなっている。
彬兄
タッチパネルを使った「あの楽器」風なプログラムです。たいして工夫もしてませんが、とりあえず動くモノが出来たので投稿してみます。
BEEP
を使って音階を出しているんだ。これだけでも音楽系プログラムの参考になるんじゃないかな?
- ’アノカ゛ッキ for フ゜チコン
- CLEAR
- ’ヘンスウ セッテイ
- MAX=3 ’ヒョウシ゛スウ
- DIM TM(MAX) ’タイマ-
- DIM TY(MAX) ’タイフ゜
- DIM X(MAX) ’Xサ゛ヒョウ
- DIM Y(MAX) ’Yサ゛ヒョウ
- DIM R(MAX) ’ハンケイ
- DIM P(MAX) ’カクト゛
- DIM E(MAX) ’エコ-
- DIM TN(MAX) ’エコ-ネイロ
- DIM O(MAX) ’エコノオンカイ
- DIM V(MAX) ’エコ-ホ゛リュ-ム
- LATE=2 ’フレ-ムレ-ト
- PNLTYPE ”OFF”
- CLS
- ? ”アノカ゛ッキ for フ゜チコン ver1.0”
- ? ”Бテ゛ シュウリョウ”
- ? ”ネイロ:22 ←→”
- ? ”VOL:127 ↑↓”
- ? ”BGM:OFF А”
- TONE=22
- VOL=127
- BGM=0
- RG=PI()/180 ’1ト゛ ノ テイスウ
- GPAGE 1
- COLSET ”BG”,0,”000000”
- COLSET ”GRP”,0,”000000”
- COLSET ”GRP”,1,”00FF00”
- COLSET ”GRP”,2,”303030”
- BTCH=TCHST
- BB=BUTTON()
- @LOOP
- FOR L=1 TO LATE
- B=BUTTON()
- NTCH=TCHST
- II=(1-BTCH)*NTCH
- IF B!=BB THEN GOSUB @BUT
- IF II==1 THEN GOSUB @TP
- IF BGM==1 THEN GOSUB @BGM
- VSYNC 1
- BB=B
- BTCH=NTCH
- NEXT
- GOSUB @CHK
- GOTO @LOOP
- ’ホ゛タン カ゛ オサレタ
- @BUT
- IF B==0 THEN RETURN
- IF B AND 4 THEN TONE=TONE-1
- IF B AND 8 THEN TONE=TONE+1
- IF B AND 1 THEN VOL=VOL+1
- IF B AND 2 THEN VOL=VOL-1
- IF TONE<0 THEN TONE=69
- IF TONE>69 THEN TONE=0
- IF VOL<20 THEN VOL=20
- IF VOL>127 THEN VOL=127
- LOCATE 4,2
- ? STR$(TONE)+” ”
- LOCATE 4,3
- ? STR$(VOL)+” ”
- IF B AND 32 THEN END
- IF B AND 16 THEN BGM=1-BGM
- LOCATE 4,4
- P$=”OFF”
- IF BGM==1 THEN P$=”ON ”
- ? P$
- RETURN
- ’タッフ゜ サレタ
- @TP
- I=-1
- FOR J=MAX-1 TO 0 STEP -1
- IF TM(J)==0 THEN I=J
- NEXT
- IF I>-1 GOTO @TP_1
- I=0
- FOR J=1 TO MAX-1
- IF TM(I)<TM(J) THEN I=J
- NEXT
- @TP_1
- TM(I)=1
- X(I)=TCHX
- Y(I)=TCHY
- R(I)=RND(10)
- P(I)=RND(90)*RG
- TY(I)=RND(4)
- IF TY(I)>0 GOTO @TP_2
- R=RND(20)/10-1
- X(I)=TCHX+TCHY*R
- Y(I)=TCHX-(192-TCHY)*R
- @TP_2
- OCT=(TCHX-TCHX%16)/16*1024/3
- BEEP TONE,OCT,VOL
- IF B AND 256 GOTO @TP_3
- GOTO @TP_4
- @TP_3
- E(I)=2
- TN(I)=TONE
- O(I)=OCT
- V(I)=VOL/2
- @TP_4
- RETURN
- ’BGM ノ サイセイ
- @BGM
- BTM=MAINCNTL
- IF BTM>BBTM+30 THEN BBTM=BTM
- IF BTM<BBTM+6 GOTO @BGM_1
- BBTM=BBTM+6
- B_CNT=B_CNT+1
- B_OCT=-1
- IF B_CNT>23 THEN B_CNT=0
- IF B_CNT%6==1 THEN BEEP 29
- IF B_CNT%6==4 THEN BEEP 31
- IF B_CNT==1 THEN B_OCT=2
- IF B_CNT==4 THEN B_OCT=3
- IF B_CNT==7 THEN B_OCT=4
- IF B_CNT==10 THEN B_OCT=5
- IF B_CNT==15 THEN B_OCT=4
- IF B_CNT==19 THEN B_OCT=3
- IF B_OCT==-1 GOTO @BGM_1
- BEEP 16,B_OCT*1024/3,20
- @BGM_1
- RETURN
- ’ヒョウシ゛ チェック
- @CHK
- GCLS
- GOSUB @FRET
- FOR I=0 TO MAX-1
- IF TM(I)>90 THEN TM(I)=0
- IF TM(I)==0 GOTO @CHK_1
- TM(I)=TM(I)+LATE*5
- K=TY(I)
- ON K GOSUB @LI,@CI,@CU,@TR
- IF E(I)==0 GOTO @CHK_1
- IF TM(I)>50 GOTO @CHK_1
- BEEP TN(I),O(I),64
- E(I)=E(I)-1
- @CHK_1
- NEXT
- RETURN
- ’チョクセン ヒョウシ゛
- @LI
- FOR J=-1 TO 1
- GLINE X(I)+J,0,Y(I)+J,192,1
- NEXT
- RETURN
- ’エン ヒョウシ゛
- @CI
- II=R(I)+TM(I)*2
- FOR J=II TO II+2
- GCIRCLE X(I),Y(I),R0+J,1
- NEXT
- RETURN
- ’シカク ヒョウシ゛
- @CU
- II=R(I)+TM(I)*2
- FOR J=II TO II+2
- SI=J*SIN(P(I)-TM(I)*RG*2)
- CO=J*COS(P(I)-TM(I)*RG*2)
- X1=X(I)+SI:Y1=Y(I)+CO
- X2=X(I)+CO:Y2=Y(I)-SI
- X3=X(I)-SI:Y3=Y(I)-CO
- X4=X(I)-CO:Y4=Y(I)+SI
- GLINE X1,Y1,X2,Y2,1
- GLINE X2,Y2,X3,Y3,1
- GLINE X3,Y3,X4,Y4,1
- GLINE X4,Y4,X1,Y1,1
- NEXT
- RETURN
- ’サンカク ヒョウシ゛
- @TR
- P1=P(I)-TM(I)*RG*2
- P2=P1+RG*120
- P3=P2+RG*120
- II=R(I)+TM(I)*2
- FOR J=II TO II+2
- X1=X(I)+J*SIN(P1)
- X2=X(I)+J*SIN(P2)
- X3=X(I)+J*SIN(P3)
- Y1=Y(I)+J*COS(P1)
- Y2=Y(I)+J*COS(P2)
- Y3=Y(I)+J*COS(P3)
- GLINE X1,Y1,X2,Y2,1
- GLINE X2,Y2,X3,Y3,1
- GLINE X3,Y3,X1,Y1,1
- NEXT
- RETURN
- ’フレット ヒョウシ゛
- @FRET
- GBOX 17,1,31,191,2
- GBOX 49,1,63,191,2
- GBOX 97,1,111,191,2
- GBOX 129,1,143,191,2
- GBOX 161,1,175,191,2
- GBOX 209,1,223,191,2
- GBOX 241,1,255,191,2
- RETURN
- ’====END====