やったAudaciousでtta再生できた

  • 問題点だった所

私のシステムがx86_64だった事。というかttaプラグインが64ビットシステムを考慮して書かれていなかった事。
早い話『32ビット想定で書かれている部分に突っ込まれる変数が全部long』だった事。ぐぐって探した資料(Linuxアプリケーションの64ビット・システムへの移植)には『ポインター、int、およびlongは、64ビット・システムでは同じサイズでなくなる』とある。つまりintとlongのサイズが違ってしまっているのではと考えたのである。
例えばヘッダを定義してある構造体の内にある32ビット長の数値を想定している箇所がlongになっていた場合、そこが32ビット余計に読まれてしまうことになる(sizeof(ttahdr)(ttahdrがそのヘッダの構造体)で読み取っているため、もともとのヘッダ以上の長さを読まれてしまう。その数値以降のデータが全部ずれてしまうことになる)。それでif (ENDSWAP_INT32(ttahdr.TTAid) != TTA1_SIGN)(in ttadec.c, open_tta_file, 236行目)がtrueになってくれなくてちゃんとしたファイルでも異常ファイル扱いされつづけてたりした。
同様の事がデコード部分にも存在した(filter.h)。

  • 対処

修正箇所はttadec.h, ttadec.c, filters.h, ttalib.h。ファイル全体の"long"を"int"にしたあと、"int int"になっちゃってるのを"long int"に直した。
今はちゃんと再生できてます。でも恐いのでコミットはしない。