1

私の実験は次のようになります。最初に、matlabを使用して44100のレートで指定されたwaveファイルを作成します。つまり、1秒続くフラグメントには44100要素が含まれ、これらの要素はdoubleとして表示されます。次に、スマートフォンのマイクを使用して波を取得します。そして、波を復元するために、サンプリングレートは44100です。しかし、audioRecordはデータをバイトとして保存しますが、私が欲しいのはdoubleです。バイトからダブルへの変換は妥当なように聞こえますが、サンプリングレート44100は、オーディオレコードが44100バイトを1秒または44100 * 4バイトで記録する必要があることを意味します。ダブルには4バイトが含まれているのでしょうか?私がコミットした他の実験:記録ソフトウェアを使用してwaveを取得し、.wavに保存すると、matlabのwavreadとjavaでそれぞれ.wavが読み取られます。1にすると、44100個の要素が取得され、以下にリストされます。-0.00164794921875
1.52587890625E-4
2.74658203125E-4
-0.003326416015625
0.001373291015625
-4.2724609375E-4
0.00445556640625 9.1552734375E
-5
-9.1552734375E-4
7.62939453125E-4
-0.003997802734375 9.46044921875E
- 4
-0.00103759765625
0.002471923828125
0.001922607421875
-0.00250244140625 8.850097656 -4 人は、audioRecordが44100のサンプリングレートで1秒間に取得する要素の数を知っていますか?




4

1 に答える 1

3

AudioRecordのデフォルトでは、サンプルごとにチャネルごとに16ビットが返されます(ENCODING_PCM_16BIT)。

ここで、short [](16ビット)またはbyte [](8ビット)バッファーのいずれかを指定できる2つの読み取りオーバーロードがあります。

int read(short[] audioData, int offsetInShorts, int sizeInShorts)
int read(byte[] audioData, int offsetInBytes, int sizeInBytes)

したがって、1秒のモノラルバッファ(1チャネル)short[]には長さ44100のバッファが必要です。ステレオ(2チャネル)には88200などがあります。

何らかの理由でbyte[]AudioRecord形式を設定していない限り、バッファの使用は避けます(すべてのデバイスでサポートされるとは限りません)。ENCODING_PCM_8BIT

これらの短い値をdoubleに変換する場合はdouble、matlabに記録する値がdouble-precision normalized samples正規化されていることを理解する必要があります。そのため、キャストを試みるのではなく、変換関数を作成する必要があります。ショートからダブルまでの数字。[-1 to 1]short[-32768 to 32767]

于 2012-05-14T09:13:06.007 に答える