Hatena::ブログ(Diary)

Ko-Taのバ・ー・ルのようなもの

2007-03-18

.cwav

富山星人がいきなりこんなURLを。

http://ja.wikipedia.org/wiki/Cwav

今更その…はずかしいよう(みすず


『cwav』で検索すると色々錯綜して「oggvorbisの一種」だとか「MediaPlayerで聞ける」とか色々ありますが、そんな事はありません。

生き別れの弟も居ません。

なんかまだソースコードが残ってて、ちょっとコンパイルしてみたら動いちゃったので、再生用においときます。(コンパイラのゴミ入り)

・cwav library & player

http://kota.dokkoisho.com/#cw


cwav形式は、ずーーーーーーっと昔に、mp3が著作権で泥臭い時代に、しょーがないので出来合いで作られた、どうしようもない非可逆圧縮型の音声波形形式で、BGMのストリーミング再生用に作ったものです。

音質は悪く、圧縮精度も高くなく、それでいて展開速度もHuffman符号化がネックで決して速いものではありません。

(でも生WAVE直再生よりかは随分とメモリに優しいはずです)


cwavの圧縮プロセスは「差分化」「Huffman符号化」の2つからなります。


■差分化

波形を表すビット数を16Bitから8Bitに落とします。

ただ落とすのではなくて、差分数値(微分っていうの?)に変換して、そこから「1,2,4,8,16,32〜」と言った不等間隔な値で数値化し8Bitテーブル化します。

これにより、数値に偏りをもたせます。

(生Wave)

1 ,16 ,14 ,10 ,2 ,3 ,0 ,0 ,0

(差分化)

1 ,15 ,-2 ,-4 ,-8 ,1 ,-3 ,0 ,0

(8Bit化)

1 ,16 ,-2 ,-4 ,-8 ,1 ,-2 ,-1 ,1

実際の変換は0〜255(半分はマイナスで使用)の8Bitテーブルを用いて、そこに好きな数字を入れて8Bit化しています。

このテーブルの数値の増加が比較的緩やかなほど波形の再現が高くなり音質が良くなりますが、偏りが弱くなり圧縮が利きにくくなります。

逆に増加が激しいと波形の再現にブレが生じ音質が悪くなりますが、偏りが生じ圧縮が利きやすくなります。

圧縮はそこそこ重めですが、展開時はテーブル参照だけで済むので処理は結構軽めです。

(この段階ではデータが16Bit→8Bitで容量が1/2になっただけです)

(実際は差分化したものの差分を8bit化してます。今考えるとなんか逆効果な気がするなぁ)


■Huffman圧縮

詳しくはwikiを参照してください。

http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%95%E3%83%9E%E3%83%B3%E7%AC%A6%E5%8F%B7

出現回数の多い数字のBit数を減らしてデータ数を減らします。

上の処理でデータの数値に大きな偏りが生じているので、Huffmanをかけることで結構小さくなってくれます。

この時の圧縮率は、差分化する際のテーブルデータ次第ということになります。


■ループ再生とシーク

さて、ループについてなんですが、実はすごくダメな仕様になっております。

先ほど解説したとおり、データが差分化されているので、特定の場所から再生が出来ません。

(普通はある一定間隔ごとに絶対データを保持する構造にするのですがそんなことしてません:D)

じゃぁどうなってるのかというと、言いたく無いんですが、再生中にループ開始ポイントになるとその時の絶対データを格納しておいて、ループ終端ポイントになるとその値を使って強引に戻します。

というわけで、こいつにはシークが無いのです:D


■あとがき

とまぁ、とっても「こういう風に使えればいいやぁ」的なものなんですが、これでも当時はBGMのストリーミング再生の選択肢が無かったので、個人的には重宝しておりました。

今はOggVorbisがあるので、これを使う理由は見当たりません。

uoxuox 2007/03/19 01:09 富山は星だったのか

sdmnsdmn 2007/03/19 13:34 「作者のサイト消滅」に全米が泣いた。
関係ないけど、Wikipediaの動画フォーマットのカテゴリにMASLが無いのが片手落ちですね。

Ko-TaKo-Ta 2007/03/19 21:58 >魚介類
日本じゃないし、やっぱり星なんじゃないかな?
>sdmnさん
動画よりかはFlashのようなアニメーション特殊形式か、吉里吉里みたいなスクリプトエンジンの部類かもしれませんね。Windowsで森ベンチを再生させる環境とかあるのかな?

Ko-TaKo-Ta 2007/03/19 23:18 Windows版がありますね。でもWinG32.dllが居るそうなので、実行ファイルの場所に入れたら「System32に入れてね」って言われてショック。

tobytoby 2007/03/20 18:06 > 富山星人
うけたw

確かに、mp3前は、昔差分な感じの音楽フォーマットははやってましたね。
ADPCMとか(だっけ?)
エロゲ用?の音楽フォーマットなのかな?

Ko-TaKo-Ta 2007/03/21 13:30 そうっす。ADPCMっす。エロゲ専用って酷くね?

sdmnsdmn 2007/03/21 15:02 ADPCMは音声ファイルのフォーマットというより、符号化の方法です。原理が単純なのでハードウェア化も容易で(音質は犠牲になるものの)確実に容量を減らせるので昔の音源チップには良く用いられていました。PCではX68000やPC-8801シリーズのサウンドボードIIなどに採用されていましたね。

ただ、当時はメモリが非常に貴重だったので、特にPC-8801などではADPCM用のメモリをキャッシュメモリとして使われるケースが頻繁に起こっていたと記憶しています。

Ko-TaKo-Ta 2007/03/21 21:59 PC-8801にも付いてたなんて…。当時500kな時代ですから、そりゃぁもう使うしかないですよね:D

RANYONRANYON 2007/03/21 22:27 どうも、富山星人です
因みに地球の富山県は植民地なんでそこんとこヨロシク

RANYONRANYON 2007/03/21 22:28 どうも、富山星人です
因みに地球の富山県は植民地なんでそこんとこヨロシク

uoxuox 2007/03/22 01:50 富山星人は意思伝達にテレパシーと音声を同時に使うのか!

Ko-TaKo-Ta 2007/03/22 07:20 >富山星人
だめだ!よそ当たってくれ!
>魚介類
そういう君もエラ呼吸で喋らないでください。

tobytoby 2007/03/25 09:18 ああー、X68000とかのサウンドもこれかー。

>因みに地球の富山県は植民地
ガーン Σ(゜Д゜)

sdmnsdmn 2007/03/25 19:26 石川県で地震あったようですけど、富山星人の方々はご無事でしょうか。心配です。

Ko-TaKo-Ta 2007/03/31 20:14 >X68000
8チャンネルステレオFM音源(YM2151)、ADPCM (MSM6258) を1チャンネルだそうです。ドラムにADPCMを使ったりとかやってましたよね。たぶん。
>心配
なんか、顔が横に長いSTGつくってたよー

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証