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

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

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

概要

NNMは、MMLを複数個集めて一つのファイルにするための仕様です。

また、Extended MML フォーマットと連携できる、NNM with Extended MMLライブラリ(同梱)を利用することで、以前存在したNMPACKS相当の機能を利用可能にしており、これをNNM開発チームでサポートします。

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

NNMフォーマットの書き方

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

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

記述サンプル

  1. @BGM0
  2. DATA”CDERCDERCDE”
  3. DATA 0
  4. @BGM1
  5. DATA”FADE L8FGAB−L4B+.”
  6. DATA 0

NNM with Extended MML

ここからはExtended MMLの機能です。

(Extended MMLの最新情報を記載するページが開発者双方よくわからなくなっており、決まるまでの経過措置としてここに掲載します)

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

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

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

標準要素一覧

TITLE曲のタイトル
ALBUMアルバム
COMP作曲者
ARR編曲者
LRCIST作詞者
TEXT曲の説明など
DATE公開日時など(DATE$と同じようにして記載する)
WAVxxxWAVSET用のデータ。xxxには使用する音色番号、内容には「アタック,ディケイ,サスティン,リリース,定義文字列[,基準音程]」を指定する。
VERバージョン情報。3は3号用、4は4用、0は両対応であることを表す。省略時は0。
PLAYSEC音楽プレイヤーで自動送り再生する際の最低秒数。小数を指定可能。
VOLデフォルト音量(0~127)。指定がない場合や異常値の場合は、各音楽プレイヤーで標準と定めた音量で再生することを推奨する。
DATEND{DATEND=}という記載方法しか認識されない。「}」の含まれる文字列以降にメタデータが含まれないことを宣言する。
  • マクロの仕様上、要素名は7文字以内である必要があります。
  • {」「}」「:」「」と改行文字の各文字はそれぞれ「\(」「\)」「\;」「\'」「\n」のように書くことで置き換えられます。
  • ↑での「\」は、「」「」のどちらかであればよいです。「」は改行文字にのみ使えます(旧版ExMMLとの互換運用)。

記述サンプル

  1. @BGM0
  2. DATA”CDERCDERCDE”
  3. DATA 0
  4. @BGM1
  5. DATA”{TITLE=FADE}{COMP=高原のな}”
  6. DATA”{TEXT=Polyglot}”
  7. DATA”{DATEND=}”
  8. DATA”FADE L8FGAB−L4B+.”
  9. DATA 0

テクニック

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

NNMフォーマットの読み方

メタデータを利用せず、MMLの変換も必要としない場合は、一切ライブラリを使用することなく直接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_BGMSETX 128,0
  6. BGMPLAY 128

命令・関数一覧

メタデータを取得せず、MMLのバージョン自動変換機能も利用せずに使用する場合は、ライブラリを使用しなくても使えます! 詳しくはBGMSETD命令とRESTORE命令のヘルプをご覧ください。

なお、NNMライブラリからはExMMLライブラリとユーティリティ、ExMMLライブラリからはユーティリティを参照しており、部分部分で切り離すと正常に動作しない可能性がありますのでご注意ください(次のバージョンで、NNMライブラリからExMMLライブラリを参照している部分を切り離し、NNM with Extended MMLライブラリとして切り出し可能に変更します)。

NNMライブラリ
命令・関数名、引数詳細
NNM_USE SLOT内部的にBGMSETDやRESTOREする際のスロットをSLOTにします。-1を指定するとスロット指定を外します。
NNM_LABEL$(ID)@BGM<ID>のラベル名を返します(次バージョンより、IDに負の値を指定すると@NNMのラベル名を返します)。
NNM_COUNTBGM()@BGM<番号>の番号が0からいくつまで続いているか確認します。欠番があると正しく判定できません。
NNM_BGMSET BGMNO,ID@BGM<ID>のMMLを、ユーザー定義曲番号BGMNO番に登録します。VER要素によるバージョン判別・変換は行いません。
NNM_GETMML$(ID)@BGM<ID>のMMLデータをすべて連結して取得します(次バージョンより、IDに負の値を指定すると@NNMの全データを返します)。
NNM with Extended MMLライブラリ
命令・関数名、引数詳細
NNM_BGMSETX BGMNO,ID@BGM<ID>のMMLを、ユーザー定義曲番号BGMNO番に登録します。VER要素によるバージョン判別・変換を行います。
NNM_WAVSET ID@BGM<ID>のWAVSETデータをすべてWAVSETします。IDに負の値を指定すると@NNMから読み込みます。
NNM_GETMETA$(ID,META$)@BGM<ID>のMETA$の要素データを取得します。IDが負か、内容が空文字か、要素が未定義の場合、@NNMのMETA$の要素データを取得します。
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します。
ユーティリティ
命令・関数名、引数詳細
RD1 OUT <空引数>,DAT$,IS_N_STR最初の引数には何も指定せず使います。内部的にREADを1回実行し、取得結果が文字列の場合はDAT$はその内容をIS_N_STRは0を返し、取得結果が数値の場合はDAT$は空文字をIS_N_STRは1を返します。
TYPEOF(V)プチコン3号向けRD1で内部的に使用している、プチコン4標準関数の劣化版です。Vが文字列の場合は3、数値の場合は0または1を返します。
MMLTO4$(MML$)プチコン3号系統MML形式のMML$をプチコン4で再生可能な形式に機械変換します。
MMLTO3$(MML$)プチコン4用MML形式のMML$をプチコン3号系統で再生可能な形式に機械変換します。
MML_REP$(MML$)MML$内のマクロをすべて展開します。

公開キー

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

共通版をプチコン4で動作させるには、次のようにプログラムを一部変更する必要があります。

NNM-LIB.PRG
TYPEOF関数をすべてコメント化するか削除し(正式なTYPEOF関数と競合するため)、NNM_BGMSETX命令内の「"3"」と「MMLTO3$」を「"4"」と「MMLTO4$」に書き換えます。
SAMPLE.PRG
EXECの書き方を改め、13行目~24行目のRETURNの値をコメントの値と入れ替えます。
プチコン3号/BIG/4 共通版 ver 2.0 サンプル付き
53RXD34E
プチコン3号/BIG/4 共通版 ver 2.0 ライブラリ単体
K5NX3334
プチコン4公開キー固定版 ver 2.0 サンプル付き
4N3P4Q3NJ

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

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

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

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

  • ☆NNMとExtended MMLを完全に融合し、使える機能と使えない機能を対応表で確認する形式に変更
  • ☆NNMの機能として、IDに負の値を指定した際に@NNMを読み込むのを全面対応
  • ☆NNMの機能として、WAVSETAに対応
  • ☆VOL要素の標準要素化(2.0の次のバージョンを待たず2020/01/15に対応)
  • □エスケープシーケンス処理の破壊的変更(一部記法の削除)
  • □字幕表示サポート機能の追加
  • ■おまけツールについて、一定の条件下でMML変換がうまく機能しない問題の解消
NNMライブラリバージョンExtended MMLバージョン更新日
1.01.1a2019年11月22日
1.11.42019年11月30日
1.21.42019年12月7日
1.31.42019年12月21日
1.41.5(応急処置版)2019年12月25日
1.4.11.5(正式版)2019年12月25日
2.01.6(高原版)2019年12月26日
修正されたバグ及び新機能
  • ver 1.1
    • (修正)空文字列を発見すると読み込みを終了してしまう。
    • (修正){DATEND=}がないと「Out of DATA」エラーが発生してしまう。
    • (修正)OPTION STRICTがあるプログラムにコピーすると「Undefined variable」エラーが発生してしまう。
  • ver 1.2
    • (修正){DATEND=}の次のMMLデータ文字列が読み込まれない。
  • ver 1.3
    • (追加)プチコン4対応及びNNM_BGMSETXを追加。
  • ver 1.4, ver 1.4.1
    • (修正)MMLTO3$(),MMLTO4$()が音長指定以外の場合でも文字「Q」に反応して誤作動する。
    • (修正)VER要素が設定されていないMMLでもNNM_BGMSETXを呼び出すと各バージョンへの変換を行い、状況によっては不正なMMLデータを生成してしまう。
  • ver 2.0
    • (追加)メタデータ取得系命令で必ず@NNMラベルから取得できるようにする機能
    • (追加)「{」「}」「:」「"」の各文字のためのエスケープシーケンス相当機能
    • (削除)GENRE要素、LYRIC要素の標準要素からの除外(除外されても引き続き問題なく使用できます)

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号】

ヘルプ

リンク

最近の更新

最近の人気ページ

オンライン情報

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

ページの先頭に戻る

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