私はAndroidAPIのAudioRecord機能をいじり回していて、それでいくつかの奇妙な振る舞いを見つけました。
背景情報:私の電話はHTCIncredibleです。エミュレーターでAndroid開発用のEclipseプラグインを使用しています。ターゲットプラットフォームまたはOSは2.2です...それは私の電話が使用しているものだからです。
いくつかのコード:
bufferSize = AudioRecord.getMinBufferSize(FREQUENCY, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, FREQUENCY, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);
これは、AudioRecordAPIをセットアップするために使用するコードです。さて、エミュレーターの場合、それが機能するためにFREQUENCYを8000に設定するのが好きです。バッファサイズ640で戻ってきます。私が44100を使用している電話の場合、ここでの1つの問題は、ウェーブの結果のPCMデータが8ビットの符号付きウェーブのように見えることです。-127から128までの値を取得します。この値AudioFormat.ENCODING_PCM_16BIT
は別の値を生成すると思いました。
音声をスレッドで処理します。
public void run() {
while(isRecording) {
audioRecord.startRecording();
byte[] data = new byte[bufferSize];
audioRecord.read(data, 0, bufferSize);
listener.setData(data);
handleData(data);
}
audioRecord.release();
}
を使用して、対応するウェーブをリアルタイムでグラフィカルに表示する方法がありSurfaceView
ます。MICからのノイズが多いようです。このノイズは、エミュレーターと電話からも発生します。ある種のフィルターを介してデータを実行する必要がありますか?このデータを使用して、波をいじくり回すための楽しいFFTなどを計算したいと思います。しかし、私はどうにかしてノイズを減らす必要があります。
他の誰かもこれを経験していますか?誰かが解決策を持っていますか?
私はあなたの時間と応答に感謝します、ありがとう、dk