Skip to content

Instantly share code, notes, and snippets.

@cat2151
Last active March 22, 2016 10:49
Show Gist options
  • Save cat2151/d35667ee8227919165c3 to your computer and use it in GitHub Desktop.
Save cat2151/d35667ee8227919165c3 to your computer and use it in GitHub Desktop.
プチコン3号 備忘録
'[例] SPLIT("A_B_C_", "_") → 戻り値は配列 "A"と"B"と"C"と""
DEF SPLIT(__I$, __D$)
DIM __R$[0]
VAR __IDX
WHILE INSTR(__I$, __D$) != -1
__IDX = INSTR(__I$, __D$)
PUSH __R$, MID$(__I$, 0, __IDX)
__I$ = MID$(__I$, __IDX + LEN(__D$), LEN(__I$) - __IDX - 1)
WEND
PUSH __R$, __I$
RETURN __R$
END
プチコン3号 MMLリファレンス
プチコン3号MML用参考、プチコン2号のサウンド関係マニュアル
http://smileboom.com/special/ptcm2/co_manual/p10.php#3
プチコン3号MMLメモ
:コマンドは、:0~:15 の16ch指定可能
ポルタメントについて。
 ・L16C_Gで、
  ・発音時間:16分音符2個ぶん
  ・ポルタメントタイム:16分音符2個ぶん
  ・つまりポルタメントがかかるのは16分音符2個ぶんの間ずっと
 ・ポルタメントタイムを短くしたいなら、L16C32_G32
 ・もっとポルタメントタイムを短くしたいなら、L16C64_G32.
 ・挙動が表記に比べ複雑。詳しいことはぐぐるといいのかも
スラーとピッチベンド(をデチューンを使って実現)について
 ・例 O5C& @D32C& @D64C&
プリセットPCM音色にはどんなものがあるか
 ・MMLで@で使えるPCM音色は0~511(ユーザ音色や空を含む)
 ・128~130の3つはdrum setで、ノートナンバーごとに別PCM音色
 ・0~511とdrumそれぞれ音色旨みのわかるピッチはまちまち
デチューンコマンドについて
 ・HELPにある「1音」とは、「全音1つ」の意味、つまり200centの意味である。
 ・半音(100cent)デチューンしたいなら、+64か-64を指定する。
WAVSETAする波形について
 ・16384サンプルのバッファに256周期で波形を書いて、基準ノートナンバー69で登録した場合、
  @D-4O4C で、プリセット波形のO4Cと概ね同じピッチになる。
プチコン3号MML以外のメモ(3.02以降で未確認かも)
 SMILEボタンから起動した場合のみの仕様
  ・LOADで他プロジェクトのファイルをLOAD可能。
   例:LOAD"PRG1:WORK/AAA" ※WORKというPROJECTのAAAというファイルをSLOT1にロード。"PRG1:"のようにSLOTを明示的に指定しないとエラー。
  ・EXECで他プロジェクトのファイルをEXEC可能。
   ・LOAD同様、"PRG1:"のようにSLOTを明示的に指定しないとエラー。
   ・このとき、カレントプロジェクトは、他プロジェクトのものになる。
   ・EXECしたプログラムが終了したあとは、カレントプロジェクトは、
    実行直前のプロジェクトに戻る。
   ・EXECでSLOTを指定しているため、
    指定SLOTにプログラムがあったらそれは上書きされて消える。
    ・備考:EXECで、SLOT指定せず、SMILEボタンに登録したツールと同じプロジェクトのファイルを実行した場合、
     つまり通常SMILEボタンを使う流儀の場合は、
     内部的にはSLOT4にプログラムがロードされるため、
     SLOT0~3のプログラムは上書きされない。
  ・参考 http://d.hatena.ne.jp/eidaht/20160320/1458432429
 FILESの隠し仕様
  ・FILESの第一引数にプロジェクト名を指定できる。
   例:FILES"WORK"で、WORKというPROJECTのファイル一覧を取得できる。
     配列変数に格納して利用することも可能。
 現SLOTを知る方法
  プログラム先頭でBACKTRACE実行後にCHKCHR命令で画面に表示されたスロット番号を取得
  BACKTRACE:SLOT=CHKCHR(CSRX,CSRY-1)-48
(3.02で解決済み、備忘)ハング原因と対策
 ・BGMPLAY 128直後にBGMSET 128実行を繰り返すとハング
 ・再現コード(実行すると保存していないプログラムは消えるので、電源落としてもいい状態にしてから実行すること)> FOR I=0 TO 99999:IF I MOD 99==0 THEN ?I:ENDIF:BGMSET 128,"CDE":BGMPLAY 128:NEXT
 ・応急対策はBGMSET直後にWAIT 1を入れること。これでハングしなくなった
 ・バージョン3.02では、上記は修正された。上記コードでハングしなくなったことを確認した。上記にWAIT 1を入れる必要はなくなった。
(3.02で解決済み、備忘)VSYNCちらつきバグ対策
  VSYNC後にfor空ループ999回を実行 ※New3DSでVSYNCが想定より短時間で終了するバグ。3.02で修正済み
プチコン3号公開キー
 ソフトシンセWAVLPF:V3EN3JK1 ※Cutoff+reso、簡易オートメーション付
  DEMO SOUND: https://soundcloud.com/cat2151/wavlpf-demo-20150301
  説明書: https://miiverse.nintendo.net/posts/AYIHAAAEAAA5VHwlAmxH8Q
 簡易リズムシーケンサ開発中:S344FD
 処理落ちチェックツール(関数):N3ANEDRS
 MICオシロスコープ: QKADJ3KD ※autoGain,noiseGate付
 MML移調: BA5XE33J ※scale変更付
 SPANIMやWAVSETの10行~1画面サンプルTIPS集: PE3X3NQE
 MENU関数: T45XA3R4 ※簡易仕様。関数 MENU$() を呼ぶだけで使えます
リンク
プチコン3号 備忘録(Github.Gist版)
https://gist.github.com/cat2151/d35667ee8227919165c3
プチコン3号 備忘録(Qiita版)
http://qiita.com/cat2151/items/c289b650d28006b78f92
?"PUSH TO START"
WHILE BUTTON(0): VSYNC 1: WEND
WHILE !BUTTON(0): VSYNC 1: WEND
A=MAINCNT
?"PUSH TO STOP"
WHILE BUTTON(0): VSYNC 1: WEND
WHILE !BUTTON(0): VSYNC 1: WEND
B=MAINCNT:C=B-A
SEC=C DIV 60
MIN=C DIV 3600
MS=SEC MOD 60
?MIN;" MIN ";MS;" SEC"
INPUT BPM
T0$=TIME$
F0=MAINCNT
D=3600/BPM
F1=F0+D
WHILE 1
VSYNC 1
IF F1 < MAINCNT THEN
F1=F1+D
BEEP
INC CTR
?CTR,F1-F0,T0$,TIME$
ENDIF
WEND
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment