2011-06-21 22 views
0

私は、音声の周波数を取得するためのコードを書いています。
私はゼロクロッシングアルゴリズムを使用して、短い配列を周波数(int)に変換しました。 正常に動作します。
私は2500Hzのオーディオ周波数を自分のPCで再生するたびに、私には完璧な価値が与えられます。
2500Hz = 1400
私はそれが 10秒のために私にを与える 10秒ため2500Hzオーディオ周波数を再生する場合。
私はそれが問題なく正常に動作すると言うことができます。コードに問題はありません。
Androidの音声周波数

私の問題は、デバイスを変更するたびに出力も変わったことです。
例えば出力上記の私はサムスンGT-I5700を使用するときに私が得る。(アンドロイド2.2)
しかし、私はマイクロマックスA-60(アンドロイド2.1)を使用する場合それは私にその2500Hz = 771のような出力を提供します。

デバイスが変更されたときに出力が変更される理由はわかりません。
どうすればこの問題を解決できますか?
アンドロイドバージョンと音声の周波数の間に接続がありますか?
注:
PCスピーカーからデバイスMICに出力するケーブルがあります。だから私はPCでトーンを演奏し、それを直接Device MICに送ることができます。

+0

2つのデバイスでサンプルレートが異なる場合はありますか?ただし、ゼロクロスを使用することは、周波数を測定することが非常に信頼性の低い方法です。ノイズがゼロの純粋なトーン(正弦波)に対してのみ実際に機能します。ヒステリシスを追加することは少し助けになるかもしれませんが、決して大きな解決策にはなりません。 –

+0

ここにあなたのコードを貼り付けてください、私たちはあなたがすでにそれを持っている場合、私たちはそれを参照してくださいしてくださいヘルプypuを助けてください、 ありがとうVanPersie –

答えて

0

ハンドセットを変更したときに計算された周波数が変更された場合、実際にはコードが正しくないと思われます。 3台目のハンドセットを試しましたか?それが前の2台のハンドセットのいずれかと一致するかどうか観察しましたか?

潜在的により正確な解決策を探している場合(2500Hzのトーン出力1400が私にとって奇妙に思える)、オプ​​ションについてはHow do you analyse the fundamental frequency of a PCM or WAV sample?をご覧ください。

0

Androidでこのimplementationを使用すると、まれに正しい頻度が得られないことがわかりました。しかし、それはトーン対ランダム音声を聞いているときに「一貫した」値を生成しますが、これはまだ有用です。