今、私は1つのオーディオ信号処理を行っています。私は自分の電話機で録音したリアルタイムのオーディオサウンドウェーブを表示したいと思います。短い[]をdouble []に変換するにはどうすればよいですか?
私のオーディオフォーマットが「ENCODING_PCM_16BIT」であるという問題があります。では、16ビットのショートデータをダブルフォーマットに変更するにはどうすればよいですか?
ここは私のコードですが、正しく動作しません。誰でもこの問題を解決する手助けができますか?私は
おかげで "ダブル[] tempraw" を "ショート[]バッファ" でそれらのデータを入れたい
try {
AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, Sample_rate, Channel, Encording,
Buffersize);
DataOutputStream dos = new DataOutputStream(
new BufferedOutputStream(new FileOutputStream(MainActivity.file)));
short[] buffer = new short[Buffersize/2]; //870 double/ 2 = 435 double
System.out.println("The buffer size is " + Buffersize);
timer1();
audioRecord.startRecording(); // Start record
while (MainActivity.isrecord) {
int bufferReadResult = audioRecord.read(buffer, 0, buffer.length);
System.out.println("The buffer size is " + bufferReadResult);
for (int i = 0; i < bufferReadResult/2; i++) {
dos.writeShort(buffer[i]);
**tempraw[i] = (double)buffer[i];**
}
phase = DataProcess(tempraw);
}
audioRecord.stop(); // record stop
audioRecord.release();
audioRecord = null;
dos.close(); // Output stream close
dos = null;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
!
インターネットからコードを見た後、私はこれを作った。私はそれだけでdouble配列にint型の配列のように一つの二重
private static double shorttodouble(short[] a, int index) {
// TODO Auto-generated method stub
long l;
l = a[index + 0];
l &= 0xffff;
l |= ((long) a[index + 1] << 16);
l &= 0xffffffffl;
l |= ((long) a[index + 2] << 32);
l &= 0xffffffffffffl;
l |= ((long) a[index + 3] << 48);
l &= 0xffffffffffffffffl;
l |= ((long) a[index + 4] << 64);
return (double)l;
}
...しかし、それは正しくない作品の...'正確に何が正しく動作しないのですか? –
私は短い[]があり、短いです。長さの番号。そして、短い4つの数字ごとに、1つのdouble値に変換されます。しかし、自分のコードで使用されている方法を使用すると、短い形式の2つの形式に変更されます。それは正しくありません。私はそれを知っているので、私は短いショート配列[短い[]バッファ=新しい短い[バッファサイズ/ 2];ダブル[] tempraw =新しいダブル[バッファサイズ/ 2/4] "。そして日食は "outofboundsexception"と伝えます – MarvinC
あなたはあなたの質問を編集し、これをすべて記述する必要があります。まず、アルゴリズムの説明と実装方法を示します。その後、例外の詳細(メッセージ、スタックトレース、起点)を通知します。ところで、例外メッセージのためにGoogleにしようとすると、おそらくあなた自身がそれを理解することができます。 –