プチコンまとめArchive

投稿プログラム : PetitcoLOID

パンくずリスト

このページの最終更新 : 2022/09/20 (火) 12:44:00

2012年03月20日投稿 / 投稿者 : sou51 / タグ : 投稿プログラム QRコード 実用ツール mkII専用

概要

プチコンのTALK命令を使って歌わせるツールです。
勝手に機能拡張・変更・修正して使っていただいて構いません。

このプログラム自体にはデータ編集ツール機能はありません。
プログラムリスト内の@PLL、@MMLのデータを編集して好きな歌を歌わせるためのプログラムです。

PeticoLOID α3言語仕様

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現在、改行に化けるため、
回避策として В にもマッピングしています。

実際に出力文字列の「あさひににおう」に「お」が使用されていたため、
最初のバージョンではそこが改行に化け、正しく歌えませんでした。

拗音のマッピング

ただし、拗音のみ同じようにマッピングできないため、以下のようにしています。

ОЖжи

MMLの注意点

BGMPLAYの最初にR16程度の休止を入れると、割とぴったり合うと思います。
また進むにつれて微妙に遅れるていくので、適当なタイミングで16分~32分程度短くして調整してやってください。

スクリーンショット・動画

このバージョンの動画は以下です。

以下は、旧バージョンの動画ですが、歌唱能力自体は同程度なので参考にしてください。

QR コード

プチコンmkII 向けの QR コードです。
美咲フォントが設定されたBGF0データも含みます。

1/62/63/6
qr0_2.pngqr1_2.pngqr2_2.png
4/65/66/6
qr3_2.pngqr4_2.pngqr5_2.png

プログラムリスト

  1. ’---------------------------
  2. ’ PetitcoLOID Ver.Alpha 3
  3. ’---------------------------
  4. ’ PL$ニ PeticoLOID Languageヲ
  5. ’ キシ゛ュツシ @PLTALKヲ ヨフ゛ト
  6. ’ 1ツ ハツワ サレル。
  7. ’ VSYNCテ゛ PWフ゛ン マッテカラ
  8. ’ フタタヒ゛@PLTALKヲ ヨフ゛
  9. ’---------------------------
  10. ’ PMTMP=Beat Per Minute
  11. ’ PE=ERRORノ ハ゛アイ 1
  12. ’ PLE=PL$マツヒ゛ニ トウタツスルト 1
  13. ’ PHF=1ニスルト ハツワ マツヒ゛ニ”-”ツイカ
  14. ’---------------------------
  15. ’PMTMPハ VSYNCノ カンケイシ゛ョウ
  16. ’ ス゛レカ゛ ショウシ゛ナイ テンホ゜ト オンフ゜ハ
  17. ’  イカノ ヨウニナリマス
  18. ’    123468ABCフ゛オンフ゜
  19. ’ 50 ○○○○○○○○○ A=12フ゛
  20. ’ 60 ○○○○○○○○○ B=16フ゛
  21. ’ 72 ○○м○м○м○м C=24フ゛
  22. ’ 80 ○○○○○м○мм 3フ゛=1フ゛ノ3レンフ゜
  23. ’ 90 ○○м○м○○○м 6フ゛=2フ゛ノ3レンフ゜
  24. ’ 96 ○○○м○мммм 12フ゛=4フ゛ノ3レンフ゜
  25. ’100 ○○○○○○○○○ 24フ゛=8フ゛ノ3レンフ゜
  26. ’120 ○○○○○○○м○
  27. ’144 ○○м○ммммм
  28. ’150 ○○○○○○○○○
  29. ’160 ○○○м○мммм
  30. ’180 ○○м○м○м○м
  31. ’192 ○м○м○мммм
  32. ’200 ○○○○○○○м○
  33. ’225 ○○м○м○м○м
  34. ’240 ○○○○○м○мм MMLサイタ゛イ
  35. ’---------------------------
  36. ’ PetitcoLOID Language(PLL)
  37. ’            Ver.Alpha 3 シヨウ
  38. ’---------------------------
  39. ’  オクタ-フ゛イト゛ウ オンカイ オンチョウ ハツワ モシ゛レツ
  40. ’   テ゛、1セット。
  41. ’  オクタ-フ゛イト゛ウ: [<>]?
  42. ’  オンカイ:[RCDEFGAB][+#-]?
  43. ’  オンチョウ:[0-9]+¥.*
  44. ’  ハツワ:[¦_/.?!’ヲ-ン]+
  45. ’  モシ゛レツ:(¥[.+¥])?
  46. ’ オクタ-フ゛イト゛ウ イカ゛イハ ショウリャク フカ
  47. ’ キュウフノ ハ゛アイ ハツワ フヨウ
  48. ’ モシ゛レツ ショウリャク カノウ
  49. ’---------------------------
  50. GOTO@MAIN
  51. @PLL
  52. DATA”A4サ[─┐л ─┐л]A4クB2ラA4サA4クB2ラ
  53. DATA”A4ノ[▽дУё ─кё]B4ヤ<C4マ>B4モA4サB8トA8オF2モ
  54. DATA”E4ミ[Т┥╂┼ ┌┬Цм]C4ワE4タF4スE4カE8キ゛C8イ>B2リ
  55. DATA”<A4カ[┌┼Т┌ ┐ё┌]B4ス<C4ミ>B4カA4クB8モA8オF2カ
  56. DATA”E4ア[а─Ь◎ ◎ВЯ]C4サE4ヒF4ニE4ニE8オC8オ>B2ウ
  57. DATA”<A4サ[─┐л ─┐л]A4クB2ラA4サA4クB2ラ
  58. DATA”E4ハ[Ю○─Ц┌м]F4ナB8サ゛A8アF4カE1リ
  59. DATA””
  60. @MML
  61. DATA”T72R16L4AAB2AAB2
  62. DATA”AB<C>BAB8A8F2
  63. DATA”ECEFEE8C8>B2
  64. DATA”<AB<C>BAB8A8F2
  65. DATA”ECEFEE8C8>B2
  66. DATA”<AAB2AAB2
  67. DATA”EFB8A8F4E1
  68. DATA 0
  69. @MAIN
  70. CLEAR
  71. DIM N(14),NM(7)
  72. RESTORE @NDATA
  73. FOR I=0 TO 13:READ N(I):NEXT
  74. FOR I=0 TO 6:READ NM(I):NEXT
  75. BGMSETD 128,@MML
  76. GOSUB @PLINIT
  77. RESTORE @PLL
  78. READ PL$
  79. VSYNC 0
  80. BGMPLAY 128
  81. @PLP
  82. GOSUB @PLTALK
  83. IF PS$!=”” THEN ?PS$
  84. VSYNC PW
  85. IF !PE AND !PLE THEN GOTO@PLP
  86. READ PL$:P=0:PLE=0
  87. IF LEN(PL$)>0 THEN @PLP
  88. END
  89. @PLINIT
  90. P=0:PL$=””:PM=0:PO=0:PW=0
  91. PE=0:PTMP=72:PHF=1:RETURN
  92. @PLTALK
  93. PLE=(P>=LEN(PL$)):PE=0
  94. IF PLE AND PM<3 THEN PW=0:RETURN
  95. GOSUB@PLRI
  96. GOTO ”@PM”+STR$(PM)
  97. ’オンカイ
  98. @PM0
  99. IF C==60 THEN PO=PO+(PO<2):GOTO@PLTALK
  100. IF C==62 THEN PO=PO-(PO>-2):GOTO@PLTALK
  101. IF C==82 THEN PR=1:PM=1:GOTO@PLTALK
  102. IF C<65 OR C>71 THEN ?”ERROR0@”;P;”:”;CHR$(C):PE=1:RETURN
  103. PM=1:PR=0:C1=C-65:GOSUB@PLR
  104. IF C!=43 AND C!=35 AND C!=45 THEN PT=PO*690+N(NM(C1)):GOTO @PLTALK
  105. P=P+1:PT=PO*690+N(NM(C1)-(C==45)+(C==43 OR C==35))
  106. GOTO @PLTALK
  107. ’オンチョウ
  108. @PM1
  109. IF C<49 OR C>57 THEN ?”ERROR1@”;P;”:”;CHR$(C):PE=1:RETURN
  110. PM=2+PR:C1=C-48
  111. @PM1A
  112. GOSUB@PLR
  113. IF C!=46 AND(C<48 OR C>57)THEN PW=14400/PTMP/C1:PH=FLOOR(16/C1)-1:GOTO@PLTALK
  114. P=P+1
  115. IF C!=46 THEN C1=C1*10+C-48:GOTO @PM1A
  116. C2=1.5:C3=4
  117. @PM1B
  118. GOSUB@PLR
  119. IF C==46 THEN P=P+1:C2=C2+1/C3:C3=C3+1:GOTO@PM1B
  120. PW=14400/PTMP/C1*C2:PH=FLOOR(16/C1*C2)-1:GOTO@PLTALK
  121. ’ハツオンモシ゛レツ
  122. @PM2
  123. 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)
  124. A=A AND C!=45
  125. IF A THEN ?”ERROR2@”P”:”CHR$(C):PE=1:RETURN
  126. PT$=C$
  127. @PM2A
  128. GOSUB@PLR
  129. B=(C<166 OR C>223)
  130. 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
  131. IF !A THEN P=P+1:PT$=PT$+C$:GOTO@PM2A
  132. PM=3
  133. GOTO@PLTALK
  134. ’シュツリョクモシ゛レツ
  135. @PM3
  136. PS$=””
  137. IF C!=91 THEN P=P-1:PM=4+PR:GOTO@PLTALK
  138. @PM3A
  139. GOSUB@PLR
  140. IF C==0 THEN PE=1:RETURN
  141. IF C==92 THEN P=P+1:GOSUB@PLR:PS$=PS$+C$:GOTO@PM3A
  142. IF C!=93 THEN P=P+1:PS$=PS$+C$:GOTO@PM3A
  143. P=P+1:PM=4+PR:GOTO@PLTALK
  144. @PM4
  145. ’ハツオン
  146. T$=”@E16@N”+STR$(PT)+PT$+”-”*(PH+(C1==0))*PHF
  147. ’?T$
  148. TALK T$
  149. @PM5
  150. PWM=PWM+PW%1:PM2=(PWM>0)*(FLOOR(PWM)):PW=PW+PM2:PWM=PWM-PM2
  151. P=P-1+(P>=LEN(PL$)):PM=0
  152. RETURN
  153. @PLR
  154. IF P>=LEN(PL$) THEN C$=””:C=0 RETURN
  155. C$=MID$(PL$,P,1):C=ASC(C$)
  156. ’?C$;
  157. RETURN
  158. @PLRI
  159. IF P>=LEN(PL$) THEN C$=””:C=0 RETURN
  160. C$=MID$(PL$,P,1):C=ASC(C$)
  161. ’?C$”*”;
  162. P=P+1:RETURN
  163. @NDATA
  164. DATA 1403,1447,1510,1559,1626
  165. DATA 1686,1745,1792,1858,1916
  166. DATA 1971,2031,2093,2137
  167. @NMAP
  168. DATA 10,12,1,3,5,6,8

CHECKER FLAG (ひとことコメント)

この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)

  • バイカウントメルビル : うぽつー! (2012/03/21 (水) 12:39:21)
  • 名無しさん : うぽつ( ^_^)/ (2012/03/21 (水) 14:34:21)
  • アレクサンドロ・ハーバー(仮) : す~げ~な~ (2012/03/21 (水) 22:28:37)
  • 名無しさん : これMkIIかどうかの判定入れないとだめでないかなぁ… (2012/03/21 (水) 22:38:31)
  • 名無しさん : ↑どうしてそんなことをする必要があるんだ? 配信終了している初代にこのプログラムを入力する人がいるとは思えないし、たとえ入れたとしても、どうせTALKを実行しようとした時点でエラーになるし。 (2012/03/22 (木) 05:37:38)
  • 名無しさん : スゴイ (2012/03/22 (木) 13:50:09)
  • 名無しさん : 混在表示ってhttp://d.hatena.ne.jp/eidaht/20120129/1327802409これと同じようなもの? (2012/03/22 (木) 15:38:06)
  • sou51 : PCGにひらがなを置いているという点では似ています。リンク先では、カナに対応した位置にシフトさせて配置していますが、PeticoLOID同梱のBGFではPCGキーボードで入力しやすいように配置しているので文字コード順だとバラバラな並びです。処理は全く違います。リンク先では\H、\Kでひらがなモード、カタカナモードを切り替えて、カナ文字をシフトしたりしなかったりしていますが、プチコロイド同梱のフォントは単にPCGを自分で入力するだけです。 (2012/03/22 (木) 22:21:33)
  • sou51 : んー、解析処理がちょっと重たいかなー。微妙に遅れていくかも。 (2012/03/22 (木) 23:04:58)
  • 名無しさん : プチコロイドって名前どこにも歌う要素が入ってないけどいいですね。 (2012/03/23 (金) 01:38:54)
  • ななしさん : ↑おそらく某DTMソフトのリスペクトだろうw (2012/03/23 (金) 22:20:15)
  • sou51 : プチカロイドにしちゃうとプチコン色が薄くなっちゃう感じがしたので、"プチコ"まで引っ張った感じ。コでもCが被ってたりするし。 (2012/03/23 (金) 23:15:13)
  • sou51 : 逐次解析じゃなくて、一括解析した後、再生するような改造をしてみたけど、ズレはほぼ変わらない感じだった。VSYNCだけで同期させるのはこの辺が限界なのかなー (2012/03/23 (金) 23:16:17)
  • 名無しさん : これって、さくらの音楽がきけるプログラムdayona (2012/03/24 (土) 17:43:50)
  • 名無しさん : さくらがきけただけ (2012/03/24 (土) 19:35:14)
  • sou51 : データ部分(@PLL、@MML)にそれぞれプチコロイド用の記述とMMLを記述すれば、好きなように歌わせることができます。「プログラムを作る」からロードして、該当データ部分を書き換えてお楽しみください。 (2012/03/25 (日) 12:29:21)
  • ロジウム : このプログラムの題名がS51PTCL3で、PTCLはプチコロイドのことだと思うの (2012/03/25 (日) 08:56:43)
  • ロジウム : ですがS51はなんですか? (2012/03/25 (日) 08:57:35)
  • sou51 : S51は単に、自分のハンドルから取ってるだけです。(大量になったときに作者ごとにまとめたりできるので) (2012/03/25 (日) 12:31:21)
  • ロジウム : なるほど (2012/03/25 (日) 18:32:15)
  • 名無しさん : コロイド溶液? (2012/03/28 (水) 12:04:47)
  • ロジウム : えっと、QRコードに美咲フォントはどうやって入れたんですか? (2012/03/29 (木) 09:51:33)
  • sou51 : BGF0をパッケージングしただけですよー。SAVE"S51PTCL3","1000" (2012/03/31 (土) 20:05:22)
  • sou51 : ボーカルというにはあまりに弱いので、Cだけ重複しとけばいいかという考えです。いずれにしても命令形で文句言われる筋合いは無いと思っています。 (2012/04/06 (金) 23:55:42)
  • カービィ★KIRBY : うお、スゲー! プチコンが歌った! (2012/06/03 (日) 13:16:26)
  • Lv100 : 動画が見れない… (2012/06/03 (日) 15:56:42)
  • 名無しさん : ↑ 確かに、ページに埋め込んだ方がいいかもしれません。 (2015/01/10 (土) 22:49:23)