SDLでは、オーディオ出力デバイスをセットアップするときに、SDLとオーディオフォーマットが一致する必要があります。 44.1KHzステレオ16ビット符号付きリトルエンディアン。それはいいです。しかし、最終的に合意されたフォーマットとともに、計算された「無音」値も得られますが、それは十分に文書化されていないようです。SDLオーディオAPIの「無音」値は正確には何ですか?
サイレントサウンドのサンプルは、同じサンプル値が何度も何度も何度も繰り返されていることが明らかです。このサンプル値は「ゼロ」レベルにします。ある意味では一定の値は変わりませんが、値に同意する必要があります(別のサウンドに切り替えるときにポップ音を出さないようにする必要があります)。そして、気晴らしの世界では、サンプルの中央の値を選択したい値の範囲。
したがって、0..whateverのサンプル値の範囲に符号なしフォーマットを使用すると、無音値は(何でも/ 2)になります。
EDIT - 混乱を避けるため、下記の「符号なし」が挿入されています。
これはすべて問題ありません。しかし、与えられた無音値は符号なしの8ビット整数です。これは、符号なし16ビットサンプルを必要とする場合にはうまくいきません.0x8000の論理無音値は2つの異なるバイト値を必要とし、正しいエンディアン順になる必要があります。
SDLから得られる無音の値はあまり意味がないようです。バッファを拭くために、例えば余分な複雑さに対処せずに、あらかじめ計算された無音値を無意味にする推定を行うことはできません。
もちろん、私はこの点を誤解しています。
これは、無音値の使用方法でない場合、どのようにをにする必要がありますか?
16ビット*符号付き*オーディオデータを使用している場合は、範囲が-32k〜+ 32kであるため、正しいサイレンス値は0x0000になりませんか?私はあなたが署名されていないオーディオデータのための有効なポイントを持っていると思う。 SDLの沈黙の価値に関する私の意見は、あなたが静かにあなたが見たことを忘れて、自分自身を計算して、あなたの好奇心をそそられるべきであるということは、たぶん無駄な遺産の塊であるということです。 :) – cecilkorik
SDLは、16ビット符号付きおよび符号なし、大および小エンディアンをサポートしています。また、前の段落では、符号なしの書式を使用してサンプル値を0とするコンテキストを確立しました。しかし、私はより明示的になる可能性があります - 修正されます。 – Steve314
もちろん、署名されたサンプルの場合、0はあなたの言うとおりに機能しますが、すべてのフォーマットで無音にゼロを使用すると予想される場合、無音値を計算するポイントはありません。しかし...今、あなたはそれを言います、私は16ビットサンプルが符号なし(8ビットのみかもしれない)ことが100%ではありません。私は二重チェックをしなければならないが、今はもう戻らない。 – Steve314