初めて投稿いたします。至らない点、失礼な点等ありましたらご指導下さい。
VC++6.0 で音声入力のアプリケーションを作成していますが、指定した周波数どおりのサンプルとならなくて困っています(8KHzを指定したが、実際は約8.1KHz)。
VC++フォーラムへの投稿がふさわしいかどうか疑問はあるのですが、どなたか情報を頂けると幸いです。
<以下詳細>
パソコンのマイク入力を8000Hz 16bitでサンプリングし、1024Byteたまったら、別装置(自前ハードウェア)にEthernetでUDP送信するというアプリです。音声入力を行なうAPIは、waveInXXXを使用しており、1024Byteのバッファを2面使って、片側バッファフルのタイミングで送信をしています。
受信側(自前ハードウェア)では、送信側とのクロック誤差を吸収する程度のバッファリングを行ない、再生を行います。あるパソコンでは問題なく動作しますが(実測サンプリング8KHz)、別のパソコンでは、サンプリングが約8.1KHzとなってしまい、受信側のバッファがオーバーする方向となります。これは、クロック誤差とはいえないです。
5台のパソコンについて確認しましたが、3台が正常(8KHz)、2台が約8.1KHzとなってしまいます。同じような事象を経験された方、情報頂けると幸いです。
<以下付加情報>
また、5台のパソコンについて、XPに添付されているサウンドレコーダを使って以下のようになりました。
・「長さ」を300秒(長いほうが分かりやすいので)にする。
・「位置」を0秒にして録音を開始する。と同時にストップウォッチをスタートする。
・サウンドレコーダの「位置」が300秒になったらストップウォッチを止める。
・サンプリングレートが8kHzならストップウォッチも300秒ですが8.1kHzだと296秒前後になります。
以上、宜しくお願いします。