桁があふれた、ワナワナワナ

先日wavデータの合成処理を書いていたらですね、なんかブチブチと、定期的に変なノイズが入るんですね。
いったいなんのこっちゃと色々と調べてみたところ、なんのことはない単なる桁あふれをしていただけでした。

そもそもPCMデータって、8bitか16bitかのどちらかで、今回は16bitの方を使って計算していたのですが、16bit+16bit=16bit なわけで、合成結果が16bitを超えちゃうと、オーバーフローを起こして一気に符号が逆転してしまいます。
そんなわけで、波形が山から谷へと一気に変化し、そりゃぁノイズ出るよね、といったオチでした。

昔のゲーム機はメモリが小さかったので、char型(8bit)とかshort型(16bit)とか使って、1byteでも節約しようとか貧乏くさいことしてたので、わりとその辺気にしていたのですが、最近は、バリバリint型(32bit)使いまっくているので、たまーにshort型とか使うと、こんなしょーもないことではまったりするわけです。

とりあえず波形の合成は、int型にキャストしてから計算し、16bitを超えたら16bitiに丸めてみました。

カテゴリー: 独り言   パーマリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>