English / Japanese

GigaHit WWWC META Check

8hz-mp3's room

 フリーでソースが公開されているMPEG Audio Layer-3エンコーダ、'8hz-mp3'のお部屋です。相変わらずページの作りがいいかげんです。ここに(私がいじった)最新版を置いておきますので、必要なら取っていってください。
 しかしながら、FraunhoferとTHOMSONによるMP3技術のパテントについて警告がエンコーダ開発元各所に対して行われ、なにやら雲行きが怪しくなってきました。本家の8hzサイトは現在のところ閉鎖して様子を見る模様ですね。他のエンコーダ開発元も、ほとんど沈黙を守っています(もっとも1999年1月現在、あまりこの話聞かないんですけどね)。
 今のところ私のもとには問題の警告文は届いていません。届いていないから安心、というわけではありませんが、過剰に反応しても仕方がないので当面の間現状維持で推移を見守ることにします。なお、現在のところ8hz-mp3配布中止の予定はありませんが、将来において保証されるわけではないのでご注意ください。
 安心をとるなら、8hz-mp3のソースをこのまま使い続けるよりもISOパブリックソースのルーチンをいっさい利用せず、完全に独自のコードで新たに作り直すのがベストみたいですけど。誰かMP3の技術的なドキュメントとか書籍、ご存じないですか?(結構マジ) とにかくパテントに引っかかって足下すくわれるのだけは避けなきゃいかんです。

現在の最新版は 8hz-mp3 v02b for Win32 03J(98/08/03 公開版)です。

 現在のところ03Jには1件障害が確認されています。とりあえずの回避方法はこのページの後ろの方を眺めてみてください。回避方法といってもまぁアレなんですが(笑)。



8hz-mp3とは

 このプログラムは、MPEG Audio Layer-3エンコーダです。オリジナルソースはhttp://www.8hz.com/mp3/にあります(が、1999年1月現在も、パテント問題によって閉鎖されていますので、ここでは入手不能です)。また、古いバージョンながら作成元から提供されている実行可能なバイナリ(Win32版はv0.11bとv0.1b)もこちらで入手できます。さらにその大元は ISO のパブリックなソースらしいです。ついでにISOのソースも手に入ったので眺めてみたのですが、やっぱりよくわかりませんでした(笑)。
 オリジナルの最新版には少し障害があるので、ひとまずまともに変換できるよう&多少は使いやすくなるといいなって感じに私が修正したのが、このプログラムです。障害のおかげもあって評価がいまいちみたいなので、ここらで株を上げようかな、なんて(^^;。せっかくフリーでソースが公開されている数少ない MP3 エンコーダですからねぇ。

 1998/7/5にreleaseした01Jバージョンより、L3ENC.EXEと互換を持つパラメータを受け付けるようになりましたので、L3ENC.EXE用のGUIフロントエンドツールがそのまま使えるようになっています(多少の制約はありますが)。
 今のところ、Visual Encode&Decoder v1.53と、L3ENC for DOS 楽々変換L3ENC FRONTENDで動作を確認しています。とくに後者の2つはれっきとした日本語版で、しかも8hz-mp3に対応と謳っています。

 1998/7/13にreleaseした02Jバージョンより、Mike Cheng氏による修正分を反映し、かなりの高速化がはかられています。私もちょこっとだけ高速化してみた部分があるのですが、そんなのほんのカスでした。Mike Cheng氏の高速化は驚異的です(^^;。
 品質を落とした状態だと、そこそこに高速なマシンでもリアルタイムエンコードが可能です(爆)。まぁそこまでしなくても、従来通りのモードでも充分な早さを実現していますので、わざわざ品質を落とす必要はないようです。事実、高品質(従来)と低品質(今回新設)とでエンコード速度を比較してみても、それほど大きな開きがあるわけではありませんので、品質重視で行く方が正解っぽいです。

 Mike Cheng氏が修正したものは、http://www.cryogen.com/mikecheng/にて入手できます(ました?)。02Jにはm10までの修正を反映しています。データ初期化に一部バグがあったらしく、生成するMP3ファイルが従来と変わっていますので、ご注意ください。たぶん品質に影響はないでしょう。

 とりあえず、他のGUIフロントエンドが使えるようになったので、独自のGUIフロントエンド搭載版は、遅れてもOKってことになりましたね(笑)。DLL化の作業も含めて、のんびりやらせてもらいます。仕事もハマリに突入してあまり時間をかけられなくなってしまいましたので…(;_;)。
 それ以前にもう優秀なフロントエンドが登場しているので、必要性も薄れているカモしれず。あとはDLLだけあればOK?


現在の状況(99/01/24現在)

 マイナーバージョンアップ版である03Jが公開されてからずいぶん経ちました。
 「WAVEファイルによっては、エンコード時にgain>256〜とかいうエラーが出て止まる」という問題(障害)がありまして、03Jにおいても直っていないことが判明してます。再現可能なデータは何とか入手できたのですが、デバッグする暇もないっス。誰か助けてぇ〜。嫁さんには終電じゃなくもっと早く帰ってこいと怒られるし(涙)。仕事なんだからしょうがないじゃん・・・。


今後の方針

 とりあえず主だった障害修正は終わったと思われるので(オリジナルのソースに極端に手を入れないように気をつかって作業してますが)、次の事くらいはやろうかな〜と考えてます。

  1. コマンドライン版とWin32 DLL版の2系統に分ける(現バージョンでコマンドライン版は一応安定、あとはDLL版だ)
  2. Win32 DLL版は、独自GUIフロントエンドとセットで使うためのものだが、API仕様は公開するので外部からも利用可能
  3. それ以前にソースは公開し、製作元である8hzにもフィードバック&向こうのアップデートにも追従
  4. MP3ファイルにID3タグの出力を含むだけでなく、RMPの出力機能も持たせると便利かも(別にDLLがやらなくてもいいけど)
  5. ACMは作り方と開発環境が揃ったら作れるかも
  6. そういえば、CRC演算の部分がバグってるみたいだけど、直せるかな?別にCRCがOFFのままでも困らないみたいですが
  7. ISOソースの特徴らしい高音域で妙にシャカシャカした耳につく音が感じられるので、音質についてもなんとか改善したいなぁ
  8. gain>256とか表示されるエラーを防がなきゃ・・・まだ直っていないんですよね、これ

 あ〜あ、こんなに大風呂敷広げちまって・・・・知らないぞ・・・。


8hz-mp3の簡単な使い方

動作環境(添付しているバイナリの環境)

 提供しているアーカイブにある(win32フォルダの下にあるはず)"8hz-mp3.exe"は、この環境で動作します。NTのもっと古いバージョンでは動作確認がとれてないので分かりません。動きそうな気もしますが。
 Win32sでは動かないでしょう。また、外見こそコマンドライン上で動かすアプリながら、DOSでも動きません。これらのOS上のコマンドプロンプトから実行します。
 ただし、ソースファイルを自分でコンパイルすれば、UNIX環境でも動作します。というか、もともとこれUNIX用のソースなんですよ(笑)。そのかわり、WIn32以外の環境ではL3ENC.EXE互換パラメータなど一部の機能は、不要なので使えなくなっています。

変換できるデータ

 WindowsのWAVEファイルだけです。対応しているのは以下のもののみ。これからはずれている場合は、サウンドレコーダ(できればこれは使わない方がいい)とか、サウンド系のツールなどで対応している形式に変えてからにしましょう。


使い方

|  8hz-mp3 1998 8Hz software
|  for Win32(03J) 1998 Jun Somekawa http://www.yk.rim.or.jp/~somekawa/
|  USAGE   : 8hz-mp3 [options] infile outfile
|  OPTIONS : -h            this help message
|            -b bitrate    set the bitrate, default 128kbit
|            -c            set copyright flag, default off
|            -o            set original flag, default off
|            -r            force raw PCM reading instead of wav
|            -f <Hz>       set frequency for PCM reading. Default: 44100
|            -x            pcm is bigEndian byte order (default: littleEndian)
|            -q <int>      Quality switch. (Default : 0. highest quality)
|                          [Normal range is 0.. 30]
|            ==== L3Enc.exe compatible parameters for Win32 ====
|            -br <bitrate> set the bitrate, default 112kbit
|            -dm           set downmix for mono, default off(cannot use)
|            -crc          set CRC flag, default off(cannot use)
|            -hq           set High quality output, default off(cannot use)
|
|  Use - as infile to read from stdin

 とりあえず実行するには、"8hz-mp3.exe"をパスのとおるフォルダに置くか、カレントフォルダにコピーしておいてから

8hz-mp3 wavfile.wav mp3file.mp3

と、元になるWAVEファイルと作成するMP3ファイル名をフルパスで書いて実行します。この2つは省略できません。こうすると、カレントフォルダにあるwavfile.wav から mp3file.mp3 を作成します。このときできるMP3ファイルは、ビットレートが128kbit/sec. になります。ビットレートを設定する場合には、 -b オプションを使います。

8hz-mp3 -b 112 wavfile.wav mp3file.mp3

とすれば、112kbit/sec. にビットレートを設定します。ちなみにモノラルデータの場合、ビットレートを半分にしてあげましょう。ステレオで 128kbit/sec.相当の音質は、モノラルなら 64kbit/sec. です。

 ちなみに設定可能なビットレートは、以下の通り。ビットレートを指定しない 場合は 128kbit/sec. が指定されたものとみなします。

32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320

 他にも、CopyrightフラグをONにするなら -c を、オリジナルフラグを ON にするなら -o をオプションとして付加します。詳しい使い方などは、英文のREADME.8hz-mp などをよく読みましょう(^^)。

 -r オプションは、WAVEファイルの代わりにRAW PCMファイルを読み込むのに使用します。たぶんWin32環境ではほとんど使う事はないでしょう。
 -f オプションは、-r オプションを使ったときに有効で、RAW PCMファイルのサンプリング周波数をhz単位で指定します。
 -x オプションは、-r オプションを使ったときに有効で、RAW PCMファイルのエンディアンをビッグエンディアンに指定します。指定しないときは、リトルエンディアンになっています。
 -q オプションは、生成するMP3の品質を設定するもので、品質を下げる事でエンコード速度を向上することができます。指定しない場合は最高品質である0を指定したことになります。100は最高速&最低品質(笑)ってことになります。ちなみに最高品質っていうのは、01Jまでの出力と同じです。0を指定したときと100を指定したときの速度の差はそれほどないので、デフォルトである0のまま使うのが良いでしょう。

 入力ファイル名を指定せず、標準入力からサンプリングデータを渡す事もできます。

type wavdata.wav | 8hz-mp3 -b 128 - mp3file.mp3

などということもできてしまいます。Win32環境じゃこんなことできても嬉しくないでしょうが・・・。ちなみにUNIX環境では02Jから実現しています。

L3ENC.EXE互換について

 独自機能の1つとして、お馴染みコマンドライン型のエンコーダのL3ENC.EXEと、パラメータレベルでの互換を持たせてあります(Win32のみ)。同じくWin32用のBladeEncと同レベルの互換機能でして、L3ENC.EXE用のGUIフロントエンドツールを利用できる様になるというメリットがあります(というか、それしかない)。
 エンコーダを好きなパスに設定できるツールならば動くでしょう。実際、Visual Encode&Decoder v1.53と、L3ENC for DOS 楽々変換L3ENC FRONTENDでの動作を確認しています。
 しかしながら、完全な互換など望めるべくもなく、概ねよく使われそうなパラメータを通すのが精一杯で、その中でも8hz-mp3で対応している機能だけはちゃんと実行しますが、対応してない機能は無視します。動くだけでもめっけもんでしょう。
 L3ENC.EXE互換機能で用意しているパラメータは次のものがあります。

|            ==== L3Enc.exe compatible parameters for Win32 ====
|            -br <bitrate> set the bitrate, default 112kbit
|            -dm           set downmix for mono, default off(cannot use)
|            -crc          set CRC flag, default off(cannot use)
|            -hq           set High quality output, default off(cannot use)


 しかし、実際に機能するのは'-br'のみで、他は無視するだけです。'-crc'くらいは対応できるかと思ったのですが、どうもCRC演算はうまくいかないみたいなので、ONにできないようにしてあります。モノラル変換である'-dm'についてもまだ対応していませんし、'-hq'などという高品位出力ったって、どうしたらいいのやら(笑)。逆にこっちには低品質モード、というか品質レベルを設定できますが、デフォルトが高品質モードになっているので事実上意味がありません。

 指定できるビットレートは基本的に8hz-mp3で可能なレベル(ただ'-br'ではkbit/sec.ではなくbit/sec.で指定する)なので、32000以下を指定するとエラーになりますし、逆に320000はL3ENC.EXEで使えないため、たぶん指定できなくなっているものがほとんどでしょう。8hz-mp3に対応してくれているフロントエンドなら、指定できるようです。

 ちなみに、'-br'指定時は、オリジナルフラグ(8hz-mp3では'-o')を立てるようにしてあります。他のエンコーダの出力を見ると、どうやら立てておいたほうが良さそうなので。

オリジナルとの相違

 オリジナルには、v0.2bのWin32版なんてものはないです(笑)。ソースしかないんだもんね。ちなみに今回はVisualC++5.0でコンパイルしました。次は違うかもしれない…つもりでしたが、どうやら速度面ではVCが一番有利らしいので、変える事は許されないようです(コンパイラ変えたせいで遅くなるのは不本意でしょ?)。
 なお、01Jからコンパイル時の最適化オプションを最強にしてほんの少しだけ速くなっているようです。ただし、最適化の影響で動作がおかしくなったりする可能性があるので、「なんかおかしいぞこれ?」と思うような現象がありましたら報告してください。昔のレベルに戻します。んでもって、03Jでは最適化を
少し弱くしてあります。

 8hzオリジナルのv0.2bに対し、ソースレベルで以下の障害を修正してあります。


これ以外は手を加えていないつもりです。なるべく製作元の更新を追跡できるようにしたいので、このようなスタイルを維持してい・・・たのですが、Mike Cheng氏の修正を入れた時点でこのスタイルが崩れざるを得なかったので、やめちゃいました(笑)。一応それでもソースを比較すれば分かる程度かと思います。

ソースについて

  オリジナルのソースではWAVEファイルを読むのに難があり、生成するMP3ファイルにノイズが乗ったり、モノラルファイルを読ませると変なMP3ファイルを出すなど問題があったので、勝手に修正しました。修正した部分には、以前は/* Modified by Jun Somekawa(98/06/25) */などとコメントを入れていたのですが、Mike Cheng氏の修正を反映するのと、今後広く公開する上で問題アリアリだろうと思い、全部消しました(笑)。
 オリジナルファイルと比較してどこをいじったか適当に判断してください。
 自分でソースをコンパイルして使っている人は、もしまだ修正してないなら参考にでもしてやってください。しょぼい修正なんで、「俺のほうがもっとましに直せるな」と思われることでしょう(;_;)。それと、多少Win32向けの機能が入ってきていますが、他の環境で使用する場合はコンパイルされないはずなので大丈夫でしょう。
 製作元にもフィードバックしなきゃ…でも English 苦手なんだよなぁ…。最低でもMike Cheng氏にはフィードバックしないと。
 ・・・などと書いているうちに、いろいろよそでは問題が起きて、なんかオリジナルのサイトは閉じちゃうし、すでにソースは入手不可能になって来つつあります。なんか残っているの私のところだけなのかいな?

 ちなみにこれを元に別のエンコーダ作ろうともご自由にどうぞ。ついでに音質改善とかバグ修正してもらえると非常にありがたいです(笑)。


ダウンロード

 ここからダウンロードできます。これらはすべて、ソースコードとWindows95/98/NT4.0用のバイナリ(即実行可能な形式)がセットで入っています。UNIXなど他の環境の方は、ソースファイルから自分でビルドしてください。念のため古いバージョンも残してありますが、まぁなくてもいいかな?
 あと、もしどうしてもオリジナルの8hzにあったソースがほしい人はメールでもして下さい。


おまけのコラム

 なぜかここもさっくり書き換えてたりして(^^;。

 例の特定のデータでエンコード中に止まる障害ですけど、未だに直せていないので、もし障害が発生したら他のエンコーダ使って回避してください。8hz-mp3だけの障害みたいですから、他のエンコーダなら(8hz-mp3の仲間である)ISO系エンコーダであっても問題は起こりません。たとえばSCMPXとか、BladeEncなど(URL示そうと思ったら・・・どこだか忘れちゃったので、自分で探して下さい)が良いでしょう。



[Homeへ戻る]
[e-mail]somekawa@yk.rim.or.jp