2012年03月20日投稿 / 投稿者 : sou51 / タグ : 投稿プログラム QRコード 実用ツール mkII専用
プチコンのTALK命令を使って歌わせるツールです。
勝手に機能拡張・変更・修正して使っていただいて構いません。
このプログラム自体にはデータ編集ツール機能はありません。
プログラムリスト内の@PLL、@MMLのデータを編集して好きな歌を歌わせるためのプログラムです。
PeticoLOID α3の言語仕様は以下のようになっています。
([<>]*[CDEFGABR][+#-]?[1-9][0-9]*\.*['/|_.?!%ヲ-゜\-]+(\[([^]]|\\\])*]\])?)*
先頭から、相対オクターブ移動、音階/休符、音の長さ、発話文字列、出力文字列、となっています。
これはMMLと同じです。Oコマンドによる絶対指定はできません。
オクターブ移動しない場合は省略可能です。
これもMMLと同じです。CDEFGABで音階、Rで休符となります。
省略不可。
これもMMLと同様ですが、省略不可です。
仕様上1以上の数字の指定ができますし、付点もいくらでもつけられると思いますが、
あまり意味が無いことになると思います。
TALK文で発音する文字列です。カナ文字以外では、'|_.?!%が指定出来ます。
ただしPHF変数が1の場合、末尾に自動的に音の長さに合わせた長音が付加されるため、
発話文字列が記号などで終わっていた場合、TALKでエラーになると思われます。
音階/休符で、休符を指定した場合は、不要です。(記述するとエラーになります。)
PS$に格納される文字列です。[]で囲った文字列がそのまま格納されます。
文字列に[を含めたい場合は、円マークをつけてエスケープしてください。
円マークは常に次の文字をそのまま出力するため、円マークを出力する場合は2個連続して記述してください。
PL$ | 入力 | PetitcoLOID Languageを格納します |
---|---|---|
PTMP | 入力 | テンポ(BPM)を格納します |
PHF | 入力 | 1にすると、音の長さに応じて発話文字列の末尾に長音が追加されます。 |
PE | 出力 | 解析エラーがあると1になります |
PLE | 出力 | PL$末尾に到達すると1になります |
PW | 出力 | 待機すべきフレーム数です |
PS$ | 出力 | 出力文字列が格納されます。出力文字列が無い場合は空文字列となります。 |
美咲フォントを使用しています。
美咲フォントのライセンス
These fonts are free softwares. Unlimited permission is granted to use, copy, and distribute it, with or without modification, either commercially and noncommercially. THESE FONTS ARE PROVIDED "AS IS" WITHOUT WARRANTY. これらのフォントはフリー(自由な)ソフトウエアです。 あらゆる改変の有無に関わらず、また商業的な利用であっても、自由にご利用、複製、再配布することができますが、全て無保証とさせていただきます。
ということなので、QRコードの方にはBGF0も付けています。
ひらがなもPCGにマッピングしているため、ひらがな、カタカナ、アルファベットの混在が可能です。
サンプルコードでは、出力文字列にひらがなを使用しています。
ひらがなは、キーボード上で、カタカナ入力にできるだけ対応するようにマッピングしています。
「お」は ★ にマッピングしていましたが、Ver.2.0現在、改行に化けるため、
回避策として В にもマッピングしています。
実際に出力文字列の「あさひににおう」に「お」が使用されていたため、
最初のバージョンではそこが改行に化け、正しく歌えませんでした。
ただし、拗音のみ同じようにマッピングできないため、以下のようにしています。
■ | ▲ | ▼ | О | Ж | ↓ | ж | ↑ | и |
---|---|---|---|---|---|---|---|---|
ぁ | ぃ | ぅ | ぇ | ぉ | っ | ゃ | ゅ | ょ |
BGMPLAYの最初にR16程度の休止を入れると、割とぴったり合うと思います。
また進むにつれて微妙に遅れるていくので、適当なタイミングで16分~32分程度短くして調整してやってください。
このバージョンの動画は以下です。
以下は、旧バージョンの動画ですが、歌唱能力自体は同程度なので参考にしてください。
プチコンmkII 向けの QR コードです。
美咲フォントが設定されたBGF0データも含みます。
- ’---------------------------
- ’ PetitcoLOID Ver.Alpha 3
- ’---------------------------
- ’ PL$ニ PeticoLOID Languageヲ
- ’ キシ゛ュツシ @PLTALKヲ ヨフ゛ト
- ’ 1ツ ハツワ サレル。
- ’ VSYNCテ゛ PWフ゛ン マッテカラ
- ’ フタタヒ゛@PLTALKヲ ヨフ゛
- ’---------------------------
- ’ PMTMP=Beat Per Minute
- ’ PE=ERRORノ ハ゛アイ 1
- ’ PLE=PL$マツヒ゛ニ トウタツスルト 1
- ’ PHF=1ニスルト ハツワ マツヒ゛ニ”-”ツイカ
- ’---------------------------
- ’PMTMPハ VSYNCノ カンケイシ゛ョウ
- ’ ス゛レカ゛ ショウシ゛ナイ テンホ゜ト オンフ゜ハ
- ’ イカノ ヨウニナリマス
- ’ 123468ABCフ゛オンフ゜
- ’ 50 ○○○○○○○○○ A=12フ゛
- ’ 60 ○○○○○○○○○ B=16フ゛
- ’ 72 ○○м○м○м○м C=24フ゛
- ’ 80 ○○○○○м○мм 3フ゛=1フ゛ノ3レンフ゜
- ’ 90 ○○м○м○○○м 6フ゛=2フ゛ノ3レンフ゜
- ’ 96 ○○○м○мммм 12フ゛=4フ゛ノ3レンフ゜
- ’100 ○○○○○○○○○ 24フ゛=8フ゛ノ3レンフ゜
- ’120 ○○○○○○○м○
- ’144 ○○м○ммммм
- ’150 ○○○○○○○○○
- ’160 ○○○м○мммм
- ’180 ○○м○м○м○м
- ’192 ○м○м○мммм
- ’200 ○○○○○○○м○
- ’225 ○○м○м○м○м
- ’240 ○○○○○м○мм MMLサイタ゛イ
- ’---------------------------
- ’ PetitcoLOID Language(PLL)
- ’ Ver.Alpha 3 シヨウ
- ’---------------------------
- ’ オクタ-フ゛イト゛ウ オンカイ オンチョウ ハツワ モシ゛レツ
- ’ テ゛、1セット。
- ’ オクタ-フ゛イト゛ウ: [<>]?
- ’ オンカイ:[RCDEFGAB][+#-]?
- ’ オンチョウ:[0-9]+¥.*
- ’ ハツワ:[¦_/.?!’ヲ-ン]+
- ’ モシ゛レツ:(¥[.+¥])?
- ’ オクタ-フ゛イト゛ウ イカ゛イハ ショウリャク フカ
- ’ キュウフノ ハ゛アイ ハツワ フヨウ
- ’ モシ゛レツ ショウリャク カノウ
- ’---------------------------
- GOTO@MAIN
- @PLL
- DATA”A4サ[─┐л ─┐л]A4クB2ラA4サA4クB2ラ
- DATA”A4ノ[▽дУё ─кё]B4ヤ<C4マ>B4モA4サB8トA8オF2モ
- DATA”E4ミ[Т┥╂┼ ┌┬Цм]C4ワE4タF4スE4カE8キ゛C8イ>B2リ
- DATA”<A4カ[┌┼Т┌ ┐ё┌]B4ス<C4ミ>B4カA4クB8モA8オF2カ
- DATA”E4ア[а─Ь◎ ◎ВЯ]C4サE4ヒF4ニE4ニE8オC8オ>B2ウ
- DATA”<A4サ[─┐л ─┐л]A4クB2ラA4サA4クB2ラ
- DATA”E4ハ[Ю○─Ц┌м]F4ナB8サ゛A8アF4カE1リ
- DATA””
- @MML
- DATA”T72R16L4AAB2AAB2
- DATA”AB<C>BAB8A8F2
- DATA”ECEFEE8C8>B2
- DATA”<AB<C>BAB8A8F2
- DATA”ECEFEE8C8>B2
- DATA”<AAB2AAB2
- DATA”EFB8A8F4E1
- DATA 0
- @MAIN
- CLEAR
- DIM N(14),NM(7)
- RESTORE @NDATA
- FOR I=0 TO 13:READ N(I):NEXT
- FOR I=0 TO 6:READ NM(I):NEXT
- BGMSETD 128,@MML
- GOSUB @PLINIT
- RESTORE @PLL
- READ PL$
- VSYNC 0
- BGMPLAY 128
- @PLP
- GOSUB @PLTALK
- IF PS$!=”” THEN ?PS$
- VSYNC PW
- IF !PE AND !PLE THEN GOTO@PLP
- READ PL$:P=0:PLE=0
- IF LEN(PL$)>0 THEN @PLP
- END
- @PLINIT
- P=0:PL$=””:PM=0:PO=0:PW=0
- PE=0:PTMP=72:PHF=1:RETURN
- @PLTALK
- PLE=(P>=LEN(PL$)):PE=0
- IF PLE AND PM<3 THEN PW=0:RETURN
- GOSUB@PLRI
- GOTO ”@PM”+STR$(PM)
- ’オンカイ
- @PM0
- IF C==60 THEN PO=PO+(PO<2):GOTO@PLTALK
- IF C==62 THEN PO=PO-(PO>-2):GOTO@PLTALK
- IF C==82 THEN PR=1:PM=1:GOTO@PLTALK
- IF C<65 OR C>71 THEN ?”ERROR0@”;P;”:”;CHR$(C):PE=1:RETURN
- PM=1:PR=0:C1=C-65:GOSUB@PLR
- IF C!=43 AND C!=35 AND C!=45 THEN PT=PO*690+N(NM(C1)):GOTO @PLTALK
- P=P+1:PT=PO*690+N(NM(C1)-(C==45)+(C==43 OR C==35))
- GOTO @PLTALK
- ’オンチョウ
- @PM1
- IF C<49 OR C>57 THEN ?”ERROR1@”;P;”:”;CHR$(C):PE=1:RETURN
- PM=2+PR:C1=C-48
- @PM1A
- GOSUB@PLR
- IF C!=46 AND(C<48 OR C>57)THEN PW=14400/PTMP/C1:PH=FLOOR(16/C1)-1:GOTO@PLTALK
- P=P+1
- IF C!=46 THEN C1=C1*10+C-48:GOTO @PM1A
- C2=1.5:C3=4
- @PM1B
- GOSUB@PLR
- IF C==46 THEN P=P+1:C2=C2+1/C3:C3=C3+1:GOTO@PM1B
- PW=14400/PTMP/C1*C2:PH=FLOOR(16/C1*C2)-1:GOTO@PLTALK
- ’ハツオンモシ゛レツ
- @PM2
- A=C!=95 AND C!=39 AND C!=37 AND C!=47 AND C!=124 AND C!=46 AND C!=33 AND C!=63 AND(C<166 OR C>223)
- A=A AND C!=45
- IF A THEN ?”ERROR2@”P”:”CHR$(C):PE=1:RETURN
- PT$=C$
- @PM2A
- GOSUB@PLR
- B=(C<166 OR C>223)
- A=C!=95 AND C!=39 AND C!=37 AND C!=47 AND C!=124 AND C!=46 AND C!=33 AND C!=63 AND B AND C!=45
- IF !A THEN P=P+1:PT$=PT$+C$:GOTO@PM2A
- PM=3
- GOTO@PLTALK
- ’シュツリョクモシ゛レツ
- @PM3
- PS$=””
- IF C!=91 THEN P=P-1:PM=4+PR:GOTO@PLTALK
- @PM3A
- GOSUB@PLR
- IF C==0 THEN PE=1:RETURN
- IF C==92 THEN P=P+1:GOSUB@PLR:PS$=PS$+C$:GOTO@PM3A
- IF C!=93 THEN P=P+1:PS$=PS$+C$:GOTO@PM3A
- P=P+1:PM=4+PR:GOTO@PLTALK
- @PM4
- ’ハツオン
- T$=”@E16@N”+STR$(PT)+PT$+”-”*(PH+(C1==0))*PHF
- ’?T$
- TALK T$
- @PM5
- PWM=PWM+PW%1:PM2=(PWM>0)*(FLOOR(PWM)):PW=PW+PM2:PWM=PWM-PM2
- P=P-1+(P>=LEN(PL$)):PM=0
- RETURN
- @PLR
- IF P>=LEN(PL$) THEN C$=””:C=0 RETURN
- C$=MID$(PL$,P,1):C=ASC(C$)
- ’?C$;
- RETURN
- @PLRI
- IF P>=LEN(PL$) THEN C$=””:C=0 RETURN
- C$=MID$(PL$,P,1):C=ASC(C$)
- ’?C$”*”;
- P=P+1:RETURN
- @NDATA
- DATA 1403,1447,1510,1559,1626
- DATA 1686,1745,1792,1858,1916
- DATA 1971,2031,2093,2137
- @NMAP
- DATA 10,12,1,3,5,6,8
この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)