1
1

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 5 years have passed since last update.

12-16 tremolo

Posted at

https://adventar.org/calendars/3353 の16日目エントリーです。

tremolo

tremoloはOgg Vorbisのデコードを行うライブラリです。

tremoloはtremorをARM NEON命令を活用して最適化したものです。tremorは浮動小数点ではなく整数型のみを使用して実装されているOgg Vorbisの展開ライブラリです。浮動小数点ほど微細な音声にはなりませんが、モバイル環境など軽量な処理が求められる環境により相応しいものになっています。

GoogleがAndroid向けに最適化されたものとしてAOSP(Android Open Source Project)の一部として配布しているもので、実装としてはほぼ完成しているはずです。

libvorbisencとlibvorbisidec

浮動小数点を使用した実装は(おそらくLinux系ディストリビューションの大半では)libvorbislibvorbisencおよびlibvorbisfileとしてパッケージされているでしょう。筆者が使用しているUbuntu 18.04ではlibvorbis0a、libvorbisenc2、libvorbisfile3となっています。(dpkg -L libvorbisenc2などで内容を確認できます。)

一方tremorはlibvorbisidecという名前でパッケージされています。tremorとlibvorbisの間にはいくつかの部分でAPI互換性がありません(もともとのAPIが概ね同じところからスタートしているので、大部分は互換であるといえます)。APIが似ているからといって、これらを混同して使うと期待通りに動作しないでしょう。他言語バインディングなどを作成するときには注意しましょう。

Androidで使う場合

なお、tremoloはAndroidで使われているので、Android M以前の端末ではアプリケーションにlibvorbisidec.soをパッケージしなくても大抵の場合は呼び出すことが出来ましたが、tremoloはAndroid NDKの標準APIには含まれていないので、tremoloをアプリケーションで使おうと思ったら、自分で明示的にビルドして含める必要があります。

筆者はtremoloのC#バインディングtremolo-sharpを作って公開しているのですが、実はまだ全然使っておらず、作業内容も、昔作ったアプリケーションからのtremolo interop部分の抜き出しと、tremoloのNDKビルドスクリプトの作成がほとんどでした(使っていたコードなので動くには動くとは思います)。後者は他の言語バインディングを作成したい場合にも有用だと思うので、適宜再利用してもらえればと思います。

1
1
3

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?