試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

x86_64版ttaenc-3.3を動作するように修正する

(2007/9/22)バージョン3.4系では、特に修正をすることなく、x86_64でも問題なく動作しているので、最新版にすることを推奨。公式サイトの3.4リリースのところにも、対応したことが書かれている。


www.altlinux.com/index.php?module=sisyphus&package=ttaenc (リンク切れ)
に、「fixed x86_64 build」と書かれているRPMパッケージがあるのを発見し、ソースRPMのspecファイルを拝見すると、次のような記述がされていた。
[引用] ファイル名: ttaenc-3.3-alt3.spec

subst 's/unsigned long long/u_int64_t/g' %name.h
subst 's/long/int/g' %name.c *.h

この情報をもとに、置換を行った後でビルドしたところ、無事にx86_64版のttaencがまともに動作するようになった。→「x86_64なGNU/LinuxにおけるTTA(The True Audio)対応の現状[2007/6/19]」

修正からインストールまでの手順

sedコマンドにより置換フィルタをかける。
また、このパッケージは、「sudo make install」実行時にstripも行ってくれるので、手動で実行する必要はない。その代わり、install-stripターゲットは存在しない。

$ mkdir ttaenc-3.3
$ cd ttaenc-3.3
$ unzip [ttaenc-3.3-src.zipの場所]
$ sed -i -e 's/unsigned long long/u_int64_t/g' ttaenc.h
$ for i in *.[ch]; do sed -i -e 's/long/int/g' $i; done
$ make
$ sudo make install

動作確認結果: 良好

コマンドからのテストは成功。

$ ttaenc -t sample_44_2_16.tta
TTA1 lossless audio encoder/decoder, release 3.3
Copyright (c) 2005 Alexander Djourik. All rights reserved.
For more information see http://tta.sourceforge.net
------------------------------------------------------------
File:    [sample_44_2_16.tta]
------------------------------------------------------------
Total:   [1/1] succeeded, time: 0'00
------------------------------------------------------------

元のTTAファイルのMD5を確認しておく。

$ md5sum sample_44_2_16.tta
e045db4070889c1136b1982ef24ebba3  sample_44_2_16.tta

TTAをWAVにデコード。成功

$ ttaenc -d sample_44_2_16.tta
TTA1 lossless audio encoder/decoder, release 3.3
Copyright (c) 2005 Alexander Djourik. All rights reserved.
For more information see http://tta.sourceforge.net
------------------------------------------------------------
File:    [sample_44_2_16.tta]
Decode:  wrote 3454688 bytes, done, ratio: 1.60, time: 0 time: 0
------------------------------------------------------------
Total:   [1/1, 3.3/2.1 Mb], ratio: 1.598, time: 0'00
------------------------------------------------------------

元のTTAファイルの削除をした後で、WAVからTTAエンコード。成功

$ rm sample_44_2_16.tta
rm: remove 通常ファイル `sample_44_2_16.tta'? y
$ ttaenc -e sample_44_2_16.wav
TTA1 lossless audio encoder/decoder, release 3.3
Copyright (c) 2005 Alexander Djourik. All rights reserved.
For more information see http://tta.sourceforge.net
------------------------------------------------------------
File:    [sample_44_2_16.wav]
Encode:  wrote 2161961 bytes, done, ratio: 0.63, time: 1 time: 1
------------------------------------------------------------
Total:   [1/1, 2.1/3.3 Mb], ratio: 0.626, time: 0'01
------------------------------------------------------------

MD5が合っていることを確認。

$ md5sum sample_44_2_16.tta
e045db4070889c1136b1982ef24ebba3  sample_44_2_16.tta

x86版との性能比較

TiMidity++で、再生時間が長めの曲を低速再生WAV出力したものを用意して、比較実験を行ってみた。極端な差は出なかったが、x86_64版のほうが速いことは間違いない。
x86版の結果

Total:   [1/1, 469.4/896.6 Mb], ratio: 0.524, time: 1'20

x86_64版の結果

Total:   [1/1, 469.4/896.6 Mb], ratio: 0.524, time: 1'13

注意点:

  • 今回の実験では、x86_64版が速いことを実証するべく、エンコード時間を長くする意図で、ファイルサイズの大きな(900MiB近い)素材を用意したのだが、音楽CDから吸い出したデータのエンコードなどでは、体感的な差はさほどないと思われる。
  • 使用した素材(MIDIデータの演奏をWAV化したもの)の特性からか、圧縮率が高めに出ているが、CDの曲などでは6〜7割程度が目安とされる。

同じファイルをFLACでもエンコードしてみたが、最速(低圧縮率)設定では上の時間より短いものの、圧縮率を上げるとエンコード時間では歯が立たなくなる。TTAの大きな特長である、「エンコード速度と圧縮率のバランス」を実感させられる。