藤本健のDigital Audio Laboratory
第1019回
FLACよりも圧縮率が優秀!? 日本発のロスレス音声コーデック「SRLA」とは
2024年10月28日 07:30
FLACやALAC(Apple Lossless)で広く使われるようになったオーディオのロスレス圧縮(可逆圧縮)のコーデック。MP3やAACなどロッシー(非可逆圧縮)コーデックがオリジナルの1/10以下に圧縮できるのに対し、ロスレス圧縮では高音質ではあるけれど圧縮率が1/2程度に留まっている。
そんなロスレス圧縮に対し、「圧縮率をさらに高めることができないか?」という研究が国内でも行なわれているのだが、先日開催された一般社団法人情報処理学会の音楽情報科学研究会(SIGMUS)のシンポジウムでその研究成果に関する発表があった。
SIGMUSでの発表内容としては少し異色のテーマだったようにも思うが、非常に興味深い内容だったので、その概要について紹介してみよう。
ロスレス音声コーデックとは
今回取り上げるのは、8月26~27日に東京の駒澤大学・駒沢キャンパスで行なわれた第141回 音楽情報科学研究会での発表内容の1つだ。
全国の大学や研究機関、企業が参加し、音や音声、音楽に関するさまざまな発表が行なわれた。2日間のプログラム内容は下記の通り。非常に多岐にわたる内容が並んでいるが、やはりAI、深層学習を絡めた発表が非常に増えており、5~10年前とはだいぶテーマも変わってきたように感じる。
情報処理学会 音楽情報科学研究会(SIGMUS)
第141回研究発表会プログラム
さて、さまざまな発表があった中、非常に気になったのが2日目に発表された「線形予測に基づくロスレス音声コーデックSRLAの圧縮率改善」というものだ。
電気通信大学大学院の峰尾太陽氏と庄野逸氏の連名での論文となっているが、当日発表したのは峰尾氏。現在はすでに大学院を修了していて、ヤマハで電子楽器の開発を行なっているそうだ。その峰尾氏の発表内容を見ていこう。
まずは言葉の定義から。
ロスレス音声コーデックは音データを劣化なく圧縮するシステムだ。MP3やAACなど一般的なオーディオ圧縮はロッシーと呼ばれるもので、音が重なり合って聴き取りにくい音や非常に高域であまり聴こえない音などをカットすることでオーディオデータを圧縮している。そのため、例えば44.1kHz/16bitのステレオのオーディオストリーム、1,411kbpsを128kbpsと約1/11程度にしてもほとんど違いを判別できないほどだ。
ただし、この圧縮では聴こえにくい音を捨ててしまい、ZIPの展開のように元に戻すことができないため“非可逆圧縮”と呼んでいる。
それに対し、ロスレスは完全に元に戻せるため“可逆圧縮”とも呼ぶが、圧縮率は1/2程度。試しにWAVファイルをZIPなどで圧縮してみるとわかるが、ほとんど容量を小さくすることができない。
こうしたロスレス音声コーデックの基本的な構造はどの方式でもだいたい同じだ。音声データの時間的な経過にともない、次にどんな信号になるかを予測し、その予測とのズレを元に符号化していく、というもの。
その予測においては線形予測符号化(LPC)が一般的となっている。この線形予測符号化はレビンソン・ダービン(Levinson-Durbin)法というものを用いて高速に計算できるのも大きなポイントとなっている。
では、コーデックの性能というのはどこでみるのか?
これは実は圧縮率だけではなく、デコード速度、エンコード速度も絡んでくる。というのも、ZIPなどでの圧縮と異なりオーディオ圧縮コーデックでは、圧縮されたデータをツールを使って元のファイルに戻してから使うのではなく、そのまま再生するため、とくにデコード速度が重要になるのだ。いくら圧縮率が高くても、デコード速度が再生速度に追いつかなければ、実用性がなくなるため、とくにデコード速度は重要というわけだ。
では現状あるロスレス圧縮コーデックにおいて、性能的にどれが優れているのか。平均圧縮率、平均デコード速度を元にプロットしたのが下のグラフだ。
これを見ると「TAK」なるものが優秀なように見える。TAKとはTom's lossless Audio Kompressorの略でThomas Becker氏が開発したWindows用のフリーコーデックで、だれでも無償でダウンロードできる。
FLACのコードを元にして開発したとされているが、オープンソースではなく、商用利用をNGとしている。そこで峰尾氏らが開発するロスレス圧縮コーデックである「SRLA」(Svr-fiR Lossless Audio)をさらにブラッシュアップして圧縮率を高めよう、というのがここで発表された研究の目的なのだ。
SRLAの圧縮率向上の成果とは
では実際、どのように性能を上げていくのか。その手法を少し見ていこう。
まずは、長時間のデータを一気に圧縮することは難しいため、一定のフレームに分割していくことが必要となる。しかし単純に2048サンプルごとなど、一定のフレームで分割することは望ましくない。
なぜならオーディオ信号はどんどん変化していくので、単純に分割するより、信号の内容が変化したところで分割するほうが圧縮しやすくなるからだ。
そしてもう1つ。先ほどの線形予測符号化において最大指数Pを32から256へと増加させることによって、残差がより0に集中していくため、圧縮率を改善することができる。
ただし、係数領域が増大し、CD音源を圧縮した場合、これだけで3%程度となってしまうこと。さらに係数計算負荷が増大し、自己相関関数の計算負荷が大きくなってしまう、という問題点があった。そこで、これらの問題点の改善して指数増加を効率的に実現。さらに、線形予測符号化の係数計算におけるレビンソン・ダービン法において、必要な自己相関をFFT(高速フーリエ変換)で高速計算することでスピード面においても改善することに成功した。
このようにして開発された新たなSRLAを用い、改めて実験した結果がこちら。
ここで用いているのは「RWC研究用音楽データベース」という、研究者が研究目的で利用できる音楽のデータベースだ。ここにはクラシック、音楽ジャンル(ポップス、ロック、ダンスなど10種類のジャンル)、ジャズ、ポピュラー音楽、著作権切れ音楽という5つのカテゴリーの楽曲、計211トラックを用いてエンコードしたもの。
可変フレーム分割を行なうことにより圧縮率は1~2%改善しているが、分割数を増やしていくと指数的に負荷が上がってしまうことも見て取れる。一方、次数増加の効果もハッキリ出ており、とくにクラッシックにおいては圧縮率が大きく改善していることもわかる。ただ、こちらも最大次数を上げていくと線形的に負荷が上がっていくようだ。
さて、この結果を冒頭と同様にほかのコーデックと比較するとどうなるのか。SRLAのオプションを指定し、8種類のパターンで比較した結果が以下の画像だ。
これを見ると、やはり圧縮率においてはTAKが強い部分はあるけれど、とくに分割数を2にした際にはスピード面、圧縮面においてTAKより優れた部分も出てきている。これをより拡大したのが以下のグラフだ。
エンコード速度においては少し課題もあるようだが、かなり優秀なロスレス圧縮コーデックではないかと思う。ここまでくれば、FLACへの実装なども含め、もっと積極的に世界へと働きかけてもいいのではと思うが、その点について峰尾氏はどのように考えてるのか。
「まだ実験段階であり、一般に周知するところに至るまで時間を要すると思っています。ロスレス圧縮コーデックの開発者が集まる『hydrogen audio』というコミュニティがあります。まずはここに投稿して、みなさんからの客観的な評価を仰ぎたいと思っています。そこで認められれば、自然と周知されていくと思うので、その次の段階に移っていくと考えています。またGitHubでも公開しているので、ぜひそちらでも試していただければと思っています」と話す。
調べてみると、確かにGitHubにおいてSRLAのソースコードが公開されており、プログラムが分かる方であれば誰でもコンパイルして試すことが可能だ。
さらに、SRLAの0.0.7というバージョンにおいてmacOS用、Windows用、Ubuntu用それぞれの実行ファイルもGitHubで公開されている。こちらを使えば誰でも最新のSRLAを試すことができる。
SRLAコーデックを試してみた
試しにWindows版をダウンロードしてエンコードおよび再生について試してみた。
ダウンロードしたZIPファイルを展開すると、通常版のプログラムのほか、AVX2対応プロセッサ版、SSE4.1対応プロセッサ版の3つが収められていたので、ここでは通常版を試す。
確認したところ、エンコード、デコードができるsrla.exeという実行ファイルと、エンコードした圧縮データを直接再生するためのsrlaplayer.exeという2つのファイルが入っていた(22)。GUIはサポートしていないため、コマンドラインからの実行となるが、手元にあったポッポス楽曲をエンコードした結果、58.26%という圧縮率になった。
またその結果をsrlaplayerで再生してみるとしっかり標準のオーディオAPIへとオーディオストリームが流れるようで、間違いない音で再生できることも確認できた。
hydrogen audioの掲示板を覗いてみると、9月10日に最初の投稿が行なわれ、その後かなり活発なやり取りが展開されている。さまざまな開発者が実際にテストし、質疑応答などが行なわれているのだ。
その結果を反映する形で、0.0.7から0.0.8へとアップデートされている。ただ筆者の手元で試してみたところ、0.0.8のWindows版だとsrlaplayerにおいて「Unsupported format for WASAPI Playback」というエラーメッセージが出てうまく動かなかった。まぁまさに開発進行中という感じ。今後も世界中の開発者を巻き込んで開発が進んでいくと面白くなりそうだ。
すぐにFLACのエンジンに採用される……というわけではないだろうが、いつかSRLAという日本で生まれた技術が世界へと広がっていくことを期待したい。