音楽堂 2722
このページでは、いろいろと実験的なことを考えています。 ごく断片的ですが、実例のサンプルを置いておきますので、 内容の理解とさらなる研究にお役立てください。
2004年6月29日 WavPack 4.0 beta 3リリース「問題なければ数日中に正式版」
WavPack (.wv)のメジャーバージョンアップ 4.0 が、 まもなく正式公開される見通しだ。 WavPack は、ユニークなハイブリッド・モードを持つオープンソース(BSDライセンス)の可逆圧縮。 再生側は 3.97 と後方互換を保っている。
3.97 からの変更点をまとめると、
(1) 内部構造が完全に変わって、ブロック単位の圧縮になった。そのため、
- (1a) シークが軽くなった。手元の foobar2000 でテストしたところ、小刻みなシークはうまく反応してくれないときもあるが、 パッと前後に大きく飛ぶのは非常に速い。
- (1b) エラーに強く、ストリーミングも可能。そして多重化しやすい。動画の音声成分として有望なので、 オーディオマニアでなくても、ちょっと注目していいかと。
(2) 32ビットがサポートされた(CoolEdit の独自の32ビットも含む)。
(3) 「VHQ みたいな」オプションができた。 例えば、fast モードで圧縮するとき、-xスイッチをつけると、再生時負荷は fast モードの軽さのままで、 圧縮率が少し上がる。ただし圧縮はかなり遅くなる。fast モードで効果があるようだ。 数パーセント変わる。 もともと圧縮率重視のモードでは、害はないが、効果は少なく、相当遅くなる。
(4) lossy での音質が向上。また、ハイブリッドモードで「全体のサイズ優先」というオプションができた。 WavPack というのは斬新な圧縮テクノロジーで、可逆と不可逆の両方が使える。 例えば、不可逆で 256 kbps などにもできる。 ところが、このとき -c スイッチをつけて、.wvc という「補正」ファイルを作っておくことで、 256 kbps の .wv と、この .wvc の両方が同じフォルダにあると、可逆になる。 (.wvcが同じフォルダにない場合には).wv 単体でも(不可逆圧縮として)デコードできる。もちろん、不可逆wv+wvc でも全体としては、 オリジナルよりずっと小さくなるのだが、上記の機能を実現するため、可逆wvよりは効率が悪くなる。 その効率をアップする(圧縮率を高める)オプションがついた。ただし、不可逆wvの音質に影響するとのこと。
作者は、今後、Linux版やMac版の開発に協力するほか、 Cueシートをサポートする予定だという。
(ハイブリッドについての補足説明)
foobar2000 のような対応プレーヤーでは、 それ単体では不可逆の.WVと同じフォルダに対応する.WVCがあると、自動的に可逆で再生し、 .WVCがなければ、.WV単体でも不可逆で再生(賢い)。
2004年3月18日 RadLight OptimFROG DirectShow Filter v1.0.0.0 .ofrがDS再生可能に
フィルター名 RLOFRDec.ax 1.0.0.1, OptimFROG.dll 1.0.0.0
音声のロスレス圧縮といえばAPE、FLAC、Shorten、WavPackの4つが古くからの定番だろう。 OptimFROG もけっこう有名で、サポート例も割と多い。 最近は IEEE Float のロスレス圧縮を世界で最初にサポートしている。
WMAロスレスとかRealAudioロスレスとかロスレスばやりだが、 DS再生できるものにAPE、FLAC、そして今回のこのOFRが加わった。 APEのフィルターは先行したDS Monkey Audioと、 その後から出たRadLight APE directshow filterの2種類ある(開発元が違うだけで機能的にはほとんど同じ)。 FLACは、もちろんCoreFLAC、動画の音声にも使える。 そして今回RadLightからFROGのフィルターが出た。これで .ofr がDSプレーヤーで直接再生できる。
.ofr はもともと foobar2000 のような対応プレーヤーで再生できるが、 このDSフィルターによって任意のDSプレーヤーで再生できるようになる。 手元では MPC, WMP6.4, WMP9, ZP, TCMP で再生できることを確認した。 Bs Player では Unknown Format というエラーが出て再生できなかった。 また高圧縮のOFRではジッターが出たものの(それなりのCPUパワーが必要)、 標準では再生はなめらかだった。
ちなみにOFRの圧縮率は、デフォルト同士ではAPEと同程度(APEより高いことも)。速度もまずまずだ。 高圧縮設定で比較すると、APEには圧縮率ではかなわないようで、特に圧縮速度でかなり負ける。 とはいえ、ロスレスに興味あるかたは、とりあえず試してみてください。 「WMA9 Lossless→WAV/ほか」もごらんください。 ちなみに日本でも MIO というロスレス圧縮が開発中(ERIシリーズ)。 また、RKを音声圧縮に特化した RKAU という形式も比較的知られている。
http://pessoal.onda.com.br/rjamorim/COREaacDS.zip
AAC音声を再生する DirectShow フィルター CoreAAC.ax の新しいバイナリが公開された。 The CoreAAC directshow filter 2004-02-05 として RareWares からダウンロードできる。
Matroska Pack 1.0.1 などに用いられている CoreAAC 1.0b8 系(ビルド626)は、 RAAC(特に Real AAC multichanel )の対応が完全ではない。 RAACは、ごく最近、2004年1月ごろ、RV10プラットフォームで導入されたAAC形式だから、 Matroska Pack 1.0.1 に含まれる2003年10月のバージョンで完全対応できていないのは仕方ないことだ。 新しい CoreAAC 1.0b9 系(ビルド642)は RAACにも対応しているので、RV10を使いたいユーザは導入を検討しよう。 (ただし、RealMediaSplitter の更新も必要で、RealMediaSplitter が古いと CoreAAC だけ新しくても、 例えば .rmvb コンテナ内の RAAC は DirectShow 再生できないようだ。)
1.0b9 は公式リリースではないのだが、RAAC 対応の必要性などで、 既に非公式に用いられてきて、細かい修正も行われていた。 ライブラリのFAAD2にバグが見つかったが、 それも修正された。
出たばかりの新しいものであり、インストーラもないので、更新については各自の判断で行おう。 バージョン管理がごちゃごちゃしないように更新履歴を簡単にまとめておくが、正式なチェンジログがないため、 多少間違っているかもしれない。あくまで参考程度です。
参考リンク
音声成分 AAC 128Kbps のメニュー付 Matroska Audio
空間の中でXYZ方向に文字が移動・回転するASSサンプル。 ソース付き
ASSスクリプトによる「歌の部分がボタンのように動く」カラオケ字幕のサンプルです。 少し複雑なので、 SSAとASSが分からないと、スクリプトの理解はちょっと難しいかも。
「ボタンの穴」の底面にあたるレイヤー1(以下L1)と、「ボタンの表面」にあたるレイヤー2(以下L2)を考える。
L2では、ハイライト開始された部分は、ボタン表面が消える(押下されるので)。 すなわち、透過度hFFになる。 ハイライト終了した場合、ボタン表面が再描画される(押下されていたボタンが戻る)。 すなわち、透過度h00に戻る。 これをカラオケとして実現するため、 L2をL21層とL22層に分解する。 L21は、1aが全透過で2aが可視の「ハイライトされると消える、だんだん行全体が消えてゆくカラオケ」である。 L22は、2aが全透過で1aが可視の「ハイライトされると表示開始される、だんだん行全体が見えてくるカラオケ」である。 L21に対するL22の遅れは、ボタンが押下されている持続を意味する。この作例では定数200msであり、 概略24fpsの3フレームにあたる。 L21によってボタン表面は左から右へと全部消去されてゆくが、200ミリ秒遅れて走るL22によって、 ボタン表面が順々に再描画される。
ボタンの戻りの遅れを「次のボタンが押される瞬間に戻る」ようにして変数にしても良い。 それには単にKタグを1個ずつずらすだけだ。 この例では、やってみると、200ms定数のほうがリズミカルで気持ち良かった。 「長い音符でも足の軽さは同じ」という意味だ。
L1はボタンの影と、押下状態のボタン表面を担当する。 押下状態においては、L2のボタン表面が消えるかわりに、L1層がハイライトされる(押されたボタンの表面)。 このとき、ボタンの影が同じ幅でボタンを取り巻くようにすることで、 つぶれた感じで平面的に見えて、ボタンが押された感じになる。 すなわち、L1層はbord2とする。 押し下げられたボタンの絵は、ボタンが上がったときにはデフォルト状態で再描画される。 したがって、L1層にもL11とL12があって、L11はハイライト部分が「押されたボタン表面の色」でぬられてゆくカラオケ、 L12は、その上を一歩遅れて元の色で塗り直してゆくカラオケである。
影らしくなるために、L1とL2は2~3ピクセルずつ横と縦がずれている。
以上のように同じ歌詞に対してレイヤー11、12、21、22の四重のカラオケを同時進行させることで、 ボタンが次々と押されては解放される状態を作れる。 以下のASSスクリプト断片(UTF-16)を観察せよ。 見やすくするためにデータの途中で改行しているが、 実際には改行してはいけない。
Style: Song,Mikachan-P,32,65535,3368550,3368550,0,-1,0,0,0,100,100,3,0,1,0,0,2,0,0,20,0
Dialogue: 11,0:00:58.47,0:01:03.04,Song,,0000,0000,0000,,
{\an7\move(62,408,62,428,0,200)}{\bord2}{\1c&H66cccc&}
{\k30} {\k37}わ{\k19}た{\k23}し{\k21}{\k16}の {\k60}彼{\k25}は
Dialogue: 12,0:00:58.67,0:01:03.04,Song,,0000,0000,0000,,
{\an7\move(62,408,62,428,0,200)}{\1c&H336666&\2a&Hff&}
{\k30} {\k37}わ{\k19}た{\k23}し{\k21}{\k16}の {\k60}彼{\k25}は
Dialogue: 21,0:00:58.47,0:01:03.04,Song,,0000,0000,0000,,
{\an7\move(64,411,64,425,0,200)}{\2c&H00ffff&\1a&Hff&}
{\k30} {\k37}わ{\k19}た{\k23}し{\k21}{\k16}の {\k60}彼{\k25}は
Dialogue: 22,0:00:58.67,0:01:03.04,Song,,0000,0000,0000,,
{\an7\move(64,411,64,425,0,200)}{\1c&H00ffff&\2a&Hff&}
{\k30} {\k37}わ{\k19}た{\k23}し{\k21}{\k16}の {\k60}彼{\k25}は
同じ変化タイミングのカラオケをスタートタイムを200ミリ秒遅らせてやっていることに注意。 4つのうち2つは58.47にスタートし、あとの2つは58.67から追いかける。
理解しやすくするために、4つのスタイルを定義するかわりに色を直接タグで指定してある。 65535(h00FFFF)すなわち純色の黄色をハイライトとする。押されたボタン表面は(ボタン穴の奥にあるので) それより少し暗く純度の低い66CCCCを指定してある。3368550(h336666)が影の色だ。
ボタンがZ方向に動くだけでは芸がないので、 字幕が出現するときY方向に上から下に字幕が落ちてくる。 この単純なY方向の運動で、ずいぶん生き生きとした効果がある。 Y落下で字幕の落ち着く先、つまりmoveの第三と第四の引数に注意。 L1は62,428で止まるが、L2は64,425で止まる。この2~3ピクセルのずれで、ボタン表面(L1)と影(L2)の立体感を作っている。落下にかかる時間は200ミリ秒にしてある。そのためカラオケ字幕は通常より300ミリ秒早くから表示され、 データの頭の空のk30のあいだカラオケ効果が始まらないまま待っている。 この待機時間のあいだに字幕の落下が起きる。落下のあとからZ方向のボタン押下が始まる。
また、この例では正確なタイミングより200ミリ秒早くボタンが押下される。 正確なタイミングと同時では、人間の脳からみて、気持ちよく流れない。 音楽より絵が常に200ミリ秒速めに変化することで、ノリが良くなる。 move用の300ミリ秒と合わせて、本当に声が出るより500ミリ秒前から字幕が出ている。
以上が、この技法の骨格である。 このスケルトンを参考にして、いっそうおもしろい表現を工夫してほしい。 「歌の間合いに字幕が小さく上部に現れて、XY平面上をくるくる回転しながら拡大しながら落ちてきて、 an2位置に落ち着く」なんて、ポップな効果もASSなら可能だ。 このスケルトンは少々地味なので「踏まれると色が変化する」とか、 あるいは字幕の持続のなかで字幕全体の色がじんわり変化するようにしても良いだろう。 どちらもASSではタグ1個程度の手間だ。
なお、「自己中~」「自己満~」は800ミリ秒の変化でフェイドアウトさせている。 すーっと消えていく感じが、妙にハマっている。
TextSubプラグインによって音声と字幕を同期させる例(公開終了)です。 最も基本的な設定のままで、フォントのスタイルはされていません。 タイミングのサンプルなので絵も動きません。
AAC音声の圧縮をQuickTime, Nero (LC, HA), TsyTEL などで比較してみました。
また、AACを音声成分とするOGM動画、MKV動画、MP4動画をフリーで作成する方法を考えてみました。
フリーの可逆音声圧縮コーデックFLACです。Winamp2ではファイル名の表示が文字化けするようです。 Winamp3では問題ないです。詳しい説明。
これから広まるかもしれない「未来の形式」Ogg Vorbis に winamp が対応しました。
MusicHall/2722