RIFF MP3 技術情報 (1998-04-09版) HTML Version
Written by Mika Tanai / YunaSoft

Contents

1998-04-05版からの変更点
RIFF MP3 フォーマット
RIFF MP3 の互換性について
RIFF MP3 作成における注意事項
RIFF MP3 の情報フィールド
サンプル (1998-04-27 修正)
履歴
この文書の扱いについて
お問い合わせ

1998-04-05版からの変更点(ごめんなさいですm(_ _)m)

ICRDの日本語解釈が違ってたみたいなので修正。
file じゃなくて the subject of the file が作成された年月日を入れてください。つまりID3のYearに相当します。
よってIPCDは *廃止*

RIFF MP3 フォーマット

RIFFでraw MP3データをラッピングしたものです。略称RMP(?)
従来のID3タグは仕様上フィールド長が30バイト(全角でわずか15字)固定で、日本語環境では明らかに不十分です。RIFF MP3 フォーマットはID3タグとの互換性を残しながらも冗長性を重視して、すべての情報フィールドを可変長で扱います。RIFF MP3を利用することでつまらない文字数の制限から解放されます。

RIFF MP3はdataチャンクとLISTチャンクを持ち、dataチャンクにraw MP3データ、LISTチャンクに Summary Information Field (SIフィールドとでも呼びましょうか^^;) というID3Tagに相当する情報格納領域が定義されています。
まぁ添付のYunaSoft MP3 Wrapperの出力ファイルをバイナリエディタで覗けば開発者の方(というかWAVEファイルのハンドリングをかじってみた人^^;)には一目瞭然ってことで詳しい説明は省略します(^^;

RIFF MP3では以下のフォーマットが定義されてます。

RIFF/WAVE MP3 フォーマット
従来から使われているMPEG Layer-3形式のWAVEファイルに、LISTチャンクによるSIフィールドを定義したものです。拡張子は wav です。
エクスプローラから右クリックのプロパティ表示で曲情報を表示できます(これはOS組み込みの機能です)

RIFF/RMP3 MP3 フォーマット
raw MP3データをdataチャンクに格納し、さらにLISTチャンクによるSIフィールドを定義したものです。拡張子は rmp です(推奨では無いが互換性を考えて mp3 も可)
上記のRIFF/WAVEからfmtチャンクを省いたもの、でもあります(^^;
RIFFのフォーマットタイプとしてRMP3を使用します。

RMP3はRMIDのパクリです^^;サンプルが必要でしたら、Windows - Mediaフォルダの "The Microsoft Sound.wav" と そこにあるRMIファイルをダンプしてみてください。
それと Sound Forge 4.0 の tutor2.wav と ヘルプも役に立ちます。ダンプしてみてください。

なお RIFF MP3 フォーマットは 303tekYunaSoft が勝手に決めてそれぞれ自分のソフトに実装するものです。何らかの公的な組織がオーソライズするものではありませんし、されるものでもありません(^^;


RIFF MP3 の互換性について(重要)

互換性の確認ですが、Windows Multimedia API の mmioRead 関数でRIFFが正しく読めればOKということにします(^^;

要するに、たとえ正しいRIFFであっても、mmioReadで読めない RIFF MP3 は RIFF MP3 ではありません(ってそんなのあるんだろか?^^;)

mmioナントカの使い方ですが、Win32 SDKのサンプルにWAVEファイルを扱うものが多数収録されていますのでぜひご覧ください。

#MacとUNIX?今後の課題ですね(^^;


RIFF MP3 作成における注意事項

文字列を格納するフィールドは必ずNULLで終端してください。つまりNULLまで出力してください。詳しくは添付のサンプルソースでもご覧ください(^^;

例:

49 43 52 44 0B 00 00 00 31 39 39 38 2D 30 34 2D 30 34 00
I  C  R  D  [size 0x0B] 1  9  9  8  -  0  4  -  0  4 [NULL]
チャンクサイズはNULLを含んで0x0Bとなります。

IID3フィールドはNULLで終端する必要はありません(してもいいけど)

拡張子のリネームは好ましくないが、されても問題ないように作っておくのが好ましいです。MP3ソフトウェアの実装によっては、3バイトを拾って raw MP3 dataの開始と判定するものがあるので(例えば 0xFF 0xFB 0x90 とか見つけると128kbps、44kHzと思い込む)完璧を期すならdataチャンクより前にそのようなバイトの並びができることのないように気をつけてあげてもいいかもしれないです。

実際は RIFF/RMP3 では不定な部分は 0x04-0x07、0x10-0x13 だけなので確率的にはほとんど気にならないと思うんだけど、RIFF/WAVEだとfmtチャンク等いろいろ付加されるんで、上記の誤作動をもたらすバイトの並びが出現する確率がRIFF/RMP3より高くなるんで、リネームはちょっとアレかな、と思います・・・(^^;

#マックバイナリがついているMP3ファイルにも同様のことが言えます(^^;

* ちなみにMP3 Wrapper v0.7/RMP-DR3 ではそんなめんどくさい作業はしてないよー(笑)<おいおい

RIFF MP3 の 情報フィールド

RIFF MP3では基本的に Windows 95 / Windows NT で対応しているサブチャンクを利用します。WAVEフォーマット、RMP3フォーマット共通です。
足りないものはこちらで適当に追加しています(^^;
英文説明は Sound Forge 4.0 のものです。なるべく Sound Forge の仕様に添う形で情報領域を定義しています。
「未定義」と書かれたフィールドは、RIFF MP3オリジナルのフィールドです。


読み方:
---------------------------------------------------------------------
英語版Windowsでのフィールド表記 / 日本語版Windowsでのフィールド表記
英文説明
日本語文説明(対応するID3タグ)
---------------------------------------------------------------------

---------------------------------------------------------------------
* 推奨フィールド(対応するのが望ましいけど必須では無いです^^;)
---------------------------------------------------------------------
INAM Name / 名前
Stores the title of the subject of the file, such as,
 "Madison From Above."
タイトルです(ID3のTitle)
---------------------------------------------------------------------
IART Artist / アーティスト
Lists the artist of the original subject of the file. For example,
 "Bach."
アーティスト名(ID3のArtist)
---------------------------------------------------------------------
IPRD Product / 製品
Specifies the name of the title the file was originally intended for,
 such as "Encyclopedia of Midwest Geography."
そのファイルが由来するものというか、まぁ音楽ならそれが収録されている
アルバムの名前とか、そういう感じかな?(ID3のAlbum)
---------------------------------------------------------------------
ICMT Comments / コメント
Provides general comments about the file or the subject of the file.
 If the comment is several sentences long, end each sentence with a
 period. Do not include newline characters.
コメント(ID3のComment)
---------------------------------------------------------------------
IGNR Genre / ジャンル
Describes the original work, such as, "landscape," "portrait,"
 "still life," etc.
ジャンル(ID3のGenre)
---------------------------------------------------------------------
ICRD Creation Date / 作成日
Specifies the date the subject of the file was created. List dates in
 year-month-day format, padding one-digit months and days with a zero
 on the left. For example, "1964-03-02" for March 2, 1964.
ファイルのsubjectの作成日(ID3のYear)ということは例えばその曲が1995年
8月1日のリリースなら1995-08-01となる。
---------------------------------------------------------------------
ICOP Copyright / 著作権
Records the copyright information for the file. For example,
 "Copyright Sonic Foundry, Inc. 1996." If there are multiple
 copyrights, separate them by a semicolon followed by a space.
言わずと知れた著作権。複数あったらセミコロン+半角スペースで分けて書き
ます。
---------------------------------------------------------------------
IENG Engineer / エンジニア
Stores the name of the engineer who worked on the file. If there are
 multiple engineers, separate the names by a semicolon and a blank.
 For example, "Sayre, Jack; Feith, John."
ファイルを作った人の名前です。複数いたらセミコロン+半角スペースで分け
て書きます。
---------------------------------------------------------------------
ISRC Source / ソース
Identifies the name of the person or organization who supplied the
 original subject of the file. For example, "Sonic Foundry, Inc."
そのファイルのオリジナルを作成した人/組織名。
例えばSony Music Entertainment, Inc. とか?(^^;
---------------------------------------------------------------------
ISFT Software / ソフトウェア
Identifies the name of the software package used to create the file,
 such as "Sound Forge."
ファイル作成に用いたソフトウェア名です。例えば "YunaSoft MP3 Wrapper"
---------------------------------------------------------------------


---------------------------------------------------------------------
* オプションフィールド
---------------------------------------------------------------------
IID3 (N/A) / 未定義
ID3 Tag field.
ID3タグ(128バイト)を格納する。このフィールドを一番最後に置くことで一
般的なID3タグエディタでの読み込みをサポートできる
(ファイルをダンプすれば一目瞭然^^;)
(注)このフィールドは必ず一番最後に置いてください^^;
Windows では未定義です。
---------------------------------------------------------------------
IKEY Keywords / キーワード
Provides a list of keywords that refer to the file or subject of the
 file. Separate multiple keywords with a semicolon and a blank. For
 example, "Madison; aerial view; scenery."
キーワード
---------------------------------------------------------------------
ITCH Technician / 技術者
Identifies the technician who digitized the file. For example,
 "Palmer, Curt."
デジタルデータにした人の名前(^^;
---------------------------------------------------------------------
ILYC (N/A) / 未定義
Lyrics.
歌詞。Kuo's の Lyrics ファイルをまるごと格納してもいいし、Lyricsファ
イル名だけ書き込んであってもいいかも。
Windows では未定義です。
---------------------------------------------------------------------
ICMS Commissioned / コミッション
Lists the name of the person or organization that commissioned the
 subject of the file. For example, "XYZZY Records."
まぁ必要に応じて(^^;
---------------------------------------------------------------------
IMED Medium / 中間
Describes the original subject of the file, such as, "computer image,"
 "drawing," "lithograph," and so forth.
中間って何?(笑)必要に応じて(^^;
---------------------------------------------------------------------
ISBJ Subject / タイトル
Describes the contents of the file, such as "Aerial view of Madison."
なぜかWindowsでは「タイトル」として扱われてしまい混乱しそうなので今回
は利用しません(^^;
---------------------------------------------------------------------
IMP3 (N/A) / (未定義)
MP3 Information
サンプルレート、ビットレート、演奏時間、データサイズ、ファイル作成日
等をさくっと格納したいけど未定(^^;
---------------------------------------------------------------------

サンプル

簡単な入出力のサンプルソースです(Visual C++ 向け)
rmpin.cpp
- RIFF入力
rmpout.cpp (1998/04/27 修正)
- RIFF出力/冗長な処理を修正しました(MMIO_CREATELIST 一発で済みますね^^;)

また RIFF 出力時に余分な NULL がくっつく件ですが、SDK の mmioAscend に書いてあります。
If the chunk size is odd, mmioAscend writes a null pad byte at the end of the chunk.
だそうです。つまり、mmioAscend はチャンクサイズが奇数の時にNULLをパディングするようになっているということです。
mmio系のAPIを使わないで出力を行う時は留意してください。

履歴

1998/05/05 スペルミス修正(^^;
1998/04/27 rmpout.cpp 修正(^^;
1998/04/12 ドキュメントを不完全ながらHTML化(^^;
1998/04/09 IPCDをICRDにリプレース
1998/04/05 「必須」->「推奨」に修正。NULL終端を明記する。
1998/04/04 IID3をRead/Write化にします(^^;
1998/04/04 ドキュメント修正&一般公開(^^;
1998/03/07 「1998-03-06」版公開。
特に問題もなさそうなのでこのまま仕様確定
1998/03/01 仕様をさくっと作って303tekのwataru氏に公開(^^;

この文書の扱いについて

諸般の事情で転載はご遠慮ください(^^;

お問い合わせ

yunasoft@geocities.co.jp まで(^^;