2010-11-30 20 views
2

SDLでは、オーディオ出力デバイスをセットアップするときに、SDLとオーディオフォーマットが一致する必要があります。 44.1KHzステレオ16ビット符号付きリトルエンディアン。それはいいです。しかし、最終的に合意されたフォーマットとともに、計算された「無音」値も得られますが、それは十分に文書化されていないようです。SDLオーディオAPIの「無音」値は正確には何ですか?

サイレントサウンドのサンプルは、同じサンプル値が何度も何度も何度も繰り返されていることが明らかです。このサンプル値は「ゼロ」レベルにします。ある意味では一定の値は変わりませんが、値に同意する必要があります(別のサウンドに切り替えるときにポップ音を出さないようにする必要があります)。そして、気晴らしの世界では、サンプルの中央の値を選択したい値の範囲。

したがって、0..whateverのサンプル値の範囲に符号なしフォーマットを使用すると、無音値は(何でも/ 2)になります。

EDIT - 混乱を避けるため、下記の「符号なし」が挿入されています。

これはすべて問題ありません。しかし、与えられた無音値は符号なしの8ビット整数です。これは、符号なし16ビットサンプルを必要とする場合にはうまくいきません.0x8000の論理無音値は2つの異なるバイト値を必要とし、正しいエンディアン順になる必要があります。

SDLから得られる無音の値はあまり意味がないようです。バッファを拭くために、例えば余分な複雑さに対処せずに、あらかじめ計算された無音値を無意味にする推定を行うことはできません。

もちろん、私はこの点を誤解しています。

これは、無音値の使用方法でない場合、どのようににする必要がありますか?

+0

16ビット*符号付き*オーディオデータを使用している場合は、範囲が-32k〜+ 32kであるため、正しいサイレンス値は0x0000になりませんか?私はあなたが署名されていないオーディオデータのための有効なポイントを持っていると思う。 SDLの沈黙の価値に関する私の意見は、あなたが静かにあなたが見たことを忘れて、自分自身を計算して、あなたの好奇心をそそられるべきであるということは、たぶん無駄な遺産の塊であるということです。 :) – cecilkorik

+0

SDLは、16ビット符号付きおよび符号なし、大および小エンディアンをサポートしています。また、前の段落では、符号なしの書式を使用してサンプル値を0とするコンテキストを確立しました。しかし、私はより明示的になる可能性があります - 修正されます。 – Steve314

+0

もちろん、署名されたサンプルの場合、0はあなたの言うとおりに機能しますが、すべてのフォーマットで無音にゼロを使用すると予想される場合、無音値を計算するポイントはありません。しかし...今、あなたはそれを言います、私は16ビットサンプルが符号なし(8ビットのみかもしれない)ことが100%ではありません。私は二重チェックをしなければならないが、今はもう戻らない。 – Steve314

答えて

1

私はこれを裏付ける証拠がありませんが、私はここでは「沈黙」は「一般的なサウンドカード形式の沈黙」と解釈できると考えています。それらビーイング:

  1. 符号なし8ビット整数
  2. 符号付き16ビット整数(24ビットのオーディオデータ用)
  3. 符号付き32ビット整数
  4. 正規32ビット浮動小数点
  5. 正規化された64ビット浮動小数点。

符号なし8ビット以外のすべてのケースでは、ゼロ(0)は「ゼロ振幅」値です。したがって、返された符号なし8ビット整数には、これらの形式の "ゼロ振幅"の可能な値がすべて含まれています。

+0

そう考えられるように聞こえます。それで、私は一貫性があるかもしれないと思います。私が期待しているもの(ゼロかどうか)をチェックしてください。 – Steve314

関連する問題