0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

FDK-AACを試してみた

Last updated at Posted at 2023-02-06

FDK-AACというライブラリも試してみました。

FreeBSDにパッケージがあるのでインストールしてみます。

このパッケージはみごとにライブラリだけなので、参照実装を探します。

ここのsrcにデコーダーのサンプルがあます。cmakeなので面倒なのでccを直接たたきました。

% cc -lfdk-aac -L/usr/local/lib -I/usr/local/include/fdk-aac aac-dec.c -o aac-dec

どっか適当なところからhlsのtsファイルを拾って変換してみます。

% ./aac-dec master48k_00977.aac test.raw
sampleRate:48000,bitRate:76687,frameSize:2048,channels:2

変換できました。WAVにしてきいてみます

% sox -t raw -e signed-integer -c 2 -b 16 -r 48000 test.raw -t wav test.wav

ちゃんと音になりました。めでたしめでたし。

FreeBSD/mips RT3883でも試してみました。

# date;./aac-dec sample4.aac /dev/null ;date
Thu Jan  1 09:06:23 JST 1970
sampleRate:44100,bitRate:107493,frameSize:1024,channels:2
Thu Jan  1 09:08:26 JST 1970

123秒でまずまずのようです。

aac-dec.cをstdoutにfwriteするようにして、

# ./aac-dec sample4.aac | play -t raw -e signed-integer -c 2 -b 16 -r 44100 -

で再生できました。

ところがHLSのtsファイルの圧縮は重いようで、正常に再生できません。fdk-aacはmipsのDSP(SIMD)命令を使ったコードがあるのですが、ライブラリがなくてビルドできません。

ライブラリのコードが見つかったので、DSP命令使うようにしてみました。

# date;./aac-dec sample4.aac >/dev/null;date
Thu Jan  1 11:25:53 JST 1970
Thu Jan  1 11:27:38 JST 1970

10%くらい削減できてるのですが、HLSのtsの圧縮にはちょっと厳しいです。

DSPでの最適化はfftのライブラリコードとgccのビルトインマクロで行われているのですが、ビルトインマクロは-mdspオプションで有効になるようです。

O3でビルドしてみました。

# date;./aac-dec sample4.aac >/dev/null;date
Thu Jan  1 09:03:24 JST 1970
Thu Jan  1 09:03:55 JST 1970

信じられないくらいきいています。なにか副作用がないといいのですが。

FDK-AACはライセンスが特殊なようですが、FreeBSDのpkgにもなってるので、普通に使っても問題なと思われますが、商用利用などの場合は確認してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?