Help us understand the problem. What is going on with this article?

12-16 tremolo

More than 1 year has passed since last update.

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

tremolo

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

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

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

https://android.googlesource.com/platform/external/tremolo/

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ビルドスクリプトの作成がほとんどでした(使っていたコードなので動くには動くとは思います)。後者は他の言語バインディングを作成したい場合にも有用だと思うので、適宜再利用してもらえればと思います。

https://github.com/atsushieno/tremolo-sharp

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした