プチコン3号&BIGまとめWiki

投稿プログラム : 音楽パックフォーマット「NNM」

2019年11月22日投稿 / 2019年12月7日更新 / 投稿者 : 高原のな・Na / タグ : 投稿プログラム 音楽 実用ツール

概要

Extended MML フォーマットを利用して、MMLにメタデータを付加しつつ、
複数のMMLをまとめ上げるのに便利なフォーマットを目指して開発しました。

実質的なNMPACKSの後継フォーマットです。(by 高原)

3号のMMLを4用に変換するのに便利なDEFが付属しています。

NNMフォーマットの書き方

拡張子は「.NNM」とすることを推奨します。

各MMLは、0から順番に(途中で番号を抜かさずに)整数を使った「@BGM<番号>」というラベルの後ろに、DATA文を用いて書きます。MML部分はBGMSETD利用時のルールで記載すればOKで、その他に何も特別なことをする必要はありません。

メタデータの要素は「{要素名=内容}」のようにして記述します。

ラベル〜DATA 0の間の文字列内ならばどこに記載しても問題はありませんが、DATEND要素と組み合わせてMML先頭部分に記載することを推奨します。 改行は「/n」または「\n」で記載します。

下に標準要素を示します。各種音楽プレイヤーはこの要素に対応している可能性が高いので便利です。 なお、標準要素以外の要素を個別に定義しても構いません。

標準要素一覧

TITLE曲のタイトル
ALBUMアルバム
COMP作曲者
ARR編曲者
LRCIST作詞者
LYRIC歌詞(フォーマット未定)
TEXT曲の説明など
GENREジャンル
DATE公開日時など(DATE$と同じようにして記載する)
WAVxxxWAVSET用のデータ。アタック,ディケイ,サスティン,リリース,定義文字列[,基準音程]を指定する。
VERバージョン情報。3は3号用、4は4用、0は両対応であることを表す。省略時は0。
PLAYSEC音楽プレイヤーで自動送り再生する際の最低秒数。小数を指定可能。
DATEND{DATEND=}という記載方法しか認識されない。「}」の含まれる文字列以降にメタデータが含まれないことを宣言する。
  • NMPACKS及びExtended MMLをベースに一部要素の改廃を行いました。
  • マクロの仕様上、要素名は7文字以内である必要があります。
  • また、マクロの仕様上、「{」「}」「:」を使うことは難しいです。今後容易に使用可能にする機能を追加予定です。

記述サンプル

  1. @BGM0
  2. DATA”{TITLE=ドレミ}{DATEND=}”
  3. DATA”CDERCDERCDE”
  4. DATA 0

テクニック

  • @NNMラベル内にメタデータを書いておくと、MML内に要素が発見できなかった時に検索されます。
  • 標準要素以外の要素を定義してもエラーにはなりません。また不足していてもエラーにはなりません。
  • DATEND要素を除いて、要素の定義順序にルールはありません。

NNMフォーマットの読み方

メタデータを利用しない場合は、一切ライブラリを使用することなく直接BGMSETDして利用することが可能です。

メタデータを楽に利用する目的では次のように利用することがおすすめです。

  1. NNM-LIB.PRGをプログラム内にコピペするか、EXECで別スロットに読み込みます。
  2. 適当なスロットにNNMファイルをロードします。
  3. NNMファイルのデータをUSE命令またはEXEC命令で利用できるようにしたうえで、NNM_USEを使って使用宣言します。
  4. それ以降はNNM_GETMETA$関数や、NNM_BGMSET命令などを用いていろいろできるようになります。

サンプルプログラム

メタデータを読み込まない場合の例
  1. LOAD”PRG1:CDE.NNM”,0
  2. USE 1
  3. BGMSETD 128,”1:@BGM0”
  4. BGMPLAY 128
メタデータを読み込む場合の例
  1. LOAD”PRG1:NNM−LIB.PRG”,0
  2. LOAD”PRG2:CDE.NNM”,0
  3. USE 1:USE 2:NNM_USE 2
  4. PRINT NNM_GETMETA$(0,”TITLE”)
  5. NNM_BGMSET 128,0
  6. BGMPLAY 128

命令・関数一覧

メタデータを取得せずに使用する場合は、ライブラリを使用しなくても使えます! 詳しくはBGMSETD命令とRESTORE命令のヘルプをご覧ください。

NNMライブラリ
命令・関数名、引数詳細
NNM_USE SLOT内部的にBGMSETDやRESTOREする際のスロットをSLOTにします。-1を指定するとスロット指定を外します。
NNM_LABEL$(ID)@BGM<ID>のラベル名を返します。
NNM_COUNTBGM()@BGM<番号>の番号が0からいくつまで続いているか確認します。欠番があると正しく判定できません。
NNM_BGMSET BGMNO,ID@BGM<ID>のMMLを、ユーザー定義曲番号BGMNO番に登録します。VER要素によるバージョン判別・変換は行いません。
NNM_WAVSET ID@BGM<ID>のWAVSETデータをすべてWAVSETします。
NNM_GETMETA$(ID,META$)@BGM<ID>のMETA$の要素データを取得します。空文字または未定義の場合、@NNMのMETA$の要素データを取得します。
NNM_GETMML$(ID)@BGM<ID>のMMLデータをすべて連結して取得します。
NNM_GETMETASEC$(ID)@BGM<ID>のMMLデータのうち、初めから「{DATEND=}」が含まれる文字列までを連結して取得します。メタデータはEXMML$関数で取り出せます。
Extended MMLライブラリ
命令・関数名、引数詳細
EXMML$(MML$,META$)Extended MML形式のMML$からMETA$の要素データを取得します。
EXMML_DEL$(MML$,META$)Extended MML形式のMML$からMETA$の要素データを削除します。
EXMML_WAVSET MML$Extended MML形式のMML$内のWAVSETデータをすべてWAVSETします。
MMLTO4$(_M$)プチコン3号系統MML形式の_M$をプチコン4で再生可能な形式に機械変換します。
MMLTO3$(_M$)プチコン4用MML形式の_M$をプチコン3号系統で再生可能な形式に機械変換します。
MML_REP$(MML$)MML$内のマクロをすべて展開します。

公開キー

プチコン3号用の公開キーです。トップメニューの「作品公開とダウンロード」から公開キーを入力すると、作品をダウンロードすることができます。

ver1.2(高原版) サンプル付き
QKQPPEX3
ver1.2(Na版) NNM-LIB.PRGのみ
公開終了

なお、高原版とNa版で得られる結果に差はありません。多少違う方法でバグ修正が行われていますが。

サンプル付きプロジェクト同梱ファイル一覧

NNM-LIB.PRG
NNMライブラリ+Extended MMLライブラリファイル
SAMPLE.PRG
シンプルな音楽プレイヤー(NMPACKSライブラリ集同梱ソフトの改良版)
SAMPLE.NNM
サンプルファイル。NMPACKSライブラリ集同梱のものとExtended MMLライブラリ集同梱のものをくっつけたもの。

バグ情報・アップデート情報

次のバージョンで変更されるものは「☆」、変更する見込みのあるものは「□」、変更を見送ったものは「■」で示します。

  • □プチコン4版の提供。
NNMライブラリバージョンExtended MMLバージョン更新日
1.01.1a2019年11月22日
1.11.42019年11月30日
1.21.42019年12月7日
修正されたバグ
  • ver1.1
    • 空文字列を発見すると読み込みを終了してしまう。
    • {DATEND=}がないと「Out of DATA」エラーが発生してしまう。
    • OPTION STRICTのプログラムにコピーすると「Undefined variable」エラーが発生してしまう。
  • ver1.2
    • {DATEND=}の次の行のMMLデータが読み込まれない。

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

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

  • takumi : 勝手ですがMusicsに導入させていただきますね... (2019/12/07 (土) 12:45:13)
  • takumi : すみません。NNM_GETMML$を使って読み込んでもメタデータしか取得できません (2019/12/07 (土) 16:34:27)
  • Na : こちらでは普通に取得できていますが...最新(ver1.1)ですか? (2019/12/07 (土) 18:07:47)
  • takumi : はい。MusicGに入れるため(未だに配列にMMLを入れていますが)プログラムを導入しているのですがその部分でおかしくなります。3曲(サンプル)の3曲目はきちんと動作するのですが・・・ (2019/12/07 (土) 19:01:33)
  • takumi : QKYXJ3SD(公開キー)のmusics_ggのプログラム内にわからないところを書いています (2019/12/07 (土) 19:06:47)
  • takumi : 208行付近です (2019/12/07 (土) 19:07:04)
  • Na : 本当ですね。修正します。 (2019/12/07 (土) 19:45:57)
  • Na : 修正しました。 (2019/12/07 (土) 19:53:16)
  • takumi : ありがとうございます (2019/12/07 (土) 20:04:44)
  • 高原のな : ご利用ありがとうございます! また、バグでご迷惑おかけしました。 (2019/12/07 (土) 20:13:21)

メニュー 【3号】

ヘルプ

リンク

最近の更新

最近の人気ページ

オンライン情報

  • 現在同時に 6 人がこのサイトを見ています
  • このページはこれまでに 261 回、本日は 1 回、昨日は 5 回閲覧されました

ページの先頭に戻る

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.042 秒 | このページの最終更新 : 2019/12/10 (火) 22:37:43 (5d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30