English / Japanese

WWWC META Check

8hz-mp3's room

 フリーでソースが公開されているMPEG Audio Layer-3エンコーダ、'8hz-mp3'のお部屋です。ここに(私がいじった)最新版を置いておきますので、必要なら取っていってください。
 例のパテント問題では、また動きがある(BladeEncの作者にも再び警告が来たらしい)模様ですが、少なくとも日本の特許法では特許侵害にあたらないことは確認済みです。あ、これはあくまで私が趣味・研究対象としてこのアルゴリズムを利用しているという前提であれば、ですけど。

現在の最新版は 8hz-mp3 v02b for Win32 04J(99/04/17 公開版)です。
また、ソースファイルのみでtar+gzipなものもあります。

8hz-mp3とは

 このプログラムは、MPEG Audio Layer-3エンコーダです。オリジナルソースはhttp://www.8hz.com/mp3/にありました(過去形)。また、古いバージョンながら作成元から提供されている実行可能なバイナリ(Win32版はv0.11bとv0.1b)もこちらで入手できました(過去形)。さらにその大元は ISO のパブリックなソースです。現在は、MP3技術のパテント(特許)所有元から特許料の支払いの請求を受けたため、公開を中止しています。

 オリジナルの最新版には少し障害があるので、ひとまずまともに変換できるよう&多少は使いやすくなるといいなって感じに私が修正したのが、このプログラムです。障害のおかげもあって評価がいまいちみたいなので、ここらで株を上げようかな、なんて(^^;。せっかくフリーでソースが公開されている数少ない 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ファイルが従来と変わっていますので、ご注意ください。たぶん品質に影響はないでしょう。

 1999/4/17にreleaseした04Jバージョンは細かいFixで、エラーで止まることがあったのを無理矢理抑え(^^;、さらにLinuxなどWin32環境以外でコンパイルできなかったのを修正しました。また、開発環境が変わり、VisualC++6.0にてコンパイルされました。

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


現在の状況(99/04/17現在)

 とりあえず04J公開。でもこれってば何もしてないのと一緒だよね〜。


今後の方針

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

  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ソースの特徴らしい高音域で妙にシャカシャカした耳につく音が感じられるので、音質についてもなんとか改善したいなぁ

 あ〜あ、こんなに大風呂敷広げちまって・・・・知らないぞ・・・。で、やっぱし未だにできないでやんの(笑)。


8hz-mp3の簡単な使い方

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

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

変換できるデータ

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


使い方

|  8hz-mp3 1998 8Hz software
|  for Win32(04J) 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など他の環境の方は、ソースファイルから自分でビルドしてください。念のため古いバージョンも残してありますが、まぁなくてもいいかな? ソースファイルだけあればいいやって人は、tar+gzip形式でパックしたソースファイルだけのアーカイブがあるんで、こちらをどうぞ。
 あと、もしどうしてもオリジナルの8hzにあったソースがほしい人はメールでもして下さい。


おまけのコラム

 一応例の問題は、エラー自体を無視することで回避しました(笑)。ISOのオリジナルソースでは処理を止めずに先に進んでいるところを、8hz-mp3だけはエラーとして止めるようにしていました。メールで指摘を受けまして、「なるほど」というわけでエラーを出さないようにしてみました。
 ちなみに、無音状態が続くと例の問題にあたるみたいですね。再現するというデータを使用しても、再現しなくなったので、とりあえずよし、かな? 音に何か問題があるかどうかというと…わからないっす。



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