見出し画像

RF64 wav対応Pythonライブラリ wave-bwf-rf64の紹介とPro toolsが吐き出す変なwavにやられた話

WavCheckerを実装する時に課題になったのが64bitWAVへの対応でした。
Python標準のwaveライブラリは64bitWAVに対応していません。
ハイレゾ云々のこの時代、ライブコンテンツで2時間を超えてくると使用頻度が高くなるのが64bitWAV。

開発も中盤に進んできたところでどうしたもんかなーと思っていたころ、
たまたまGithubで見かけたNRK(ノルウェー国立放送局)のオープンソースライブラリwave-bwf-rf64がドンピシャでRF64に対応していることに気づき、とても助かりました。

しかし、実戦に投入してみるとAVID Protoolsで吐き出したwavに何故かエラーになるやつがたまにあることが判明。

「たまにってどういうこっちゃ?」

EBUの仕様書を読みながらデータをダンプして眺めていたところ、
なんとも微妙なProtoolsのバグ(とも言い切れないんですが)であることがわかりました。

EBU-TECH 3306-2007
RF64: An extended File Format for Audio

https://tech.ebu.ch/docs/tech/tech3306v1_0.pdf

Pro Toolsは画像の部分の「tableLength」に0(何もエントリがない)としているのに、実際にはChunkSize64構造体を生成してくるのです。
これは規格違反とまでは言わないですが、意味がなく謎な挙動です。

で、ついでに言うとそれを読み込むwave-bwf-rf64の当該部分の実装も手抜きでイケてなかったのがわかりました。
仕様外のデータなんて来ないという楽観で作られていたのです。

なので、自分でwave-bwf-rf64を修正してプルリクエストを出しました。
https://github.com/nrkno/wave-bwf-rf64/pull/4

・変なデータを出すPro tools(たぶん一番悪い)
・変なデータなんてくるわけないと思っていたwave-bwf-rf64ライブラリ(そんなに悪いわけでもない)
・そもそも仕様がざっくりして、値のMUST説明がないEBUの仕様書
(そこそこ悪い気がする)

いろんな人のすれ違いでこうなっちゃったという、
WAVは魔境だなあというよもやま話でした。

余談:
nrknoは放送局システム全体をオープンソースにしているようで、
wave-bwf-rf64以外にも極めて興味深いプロジェクトがいっぱいあります。
興味ある方は色々眺めてみるといいと思います。

サワツ