Java audioRecord如何以指定的采样率检索数据

Java audioRecord如何以指定的采样率检索数据,java,android,fft,android-audiorecord,Java,Android,Fft,Android Audiorecord,我的实验是这样的: 首先,我使用matlab创建一个指定的wave文件,速率为44100,这意味着任何持续1s的片段都包含44100个元素,这些元素以双精度表示。 然后,我用智能手机的麦克风来接收电波。采样率为44100,以恢复波形。 但是,audioRecord将数据存储为字节,而我需要的是双字节。从字节到双字节的转换是合理的,我仍然不明白采样率44100意味着录音应该在1s内记录44100字节,或者44100*4字节,因为双字节包含4个字节? 我所做的其他实验: 使用记录软件检索波形并存储在

我的实验是这样的: 首先,我使用matlab创建一个指定的wave文件,速率为44100,这意味着任何持续1s的片段都包含44100个元素,这些元素以双精度表示。 然后,我用智能手机的麦克风来接收电波。采样率为44100,以恢复波形。 但是,audioRecord将数据存储为字节,而我需要的是双字节。从字节到双字节的转换是合理的,我仍然不明白采样率44100意味着录音应该在1s内记录44100字节,或者44100*4字节,因为双字节包含4个字节? 我所做的其他实验: 使用记录软件检索波形并存储在.wav中 分别用matlab的wavread和java读取.wav文件。 对于1s,我们得到44100个元素,如下所示: -0.00164794921875
1.52587890625E-4
2.74658203125E-4
-0.003326416015625
0.001373291015625
-4.2724609375E-4
0.0044556640625
9.1552734375E-5
-9.1552734375E-4
7.62939453125E-4
-0.0039978027375
9.46044921875E-4
-0.00103759765625
0.002471923828125
0.001922607421875
-0.00250244140625
8.85009765625E-4
-0.0032958984375
8.23974609375E-4
8.23974609375E-4

有人知道在采样率为44100的1s内,audioRecord将检索多少个元素吗?

audioRecord的默认设置是为每个采样返回每个通道16位(
ENCODING\u PCM\u 16BIT

现在有两个读取重载,允许您指定短[](16位)或字节[](8位)缓冲区

因此,1秒单声道缓冲区(1个通道)应具有长度为44100的
short[]
缓冲区。立体声(2个频道)将有88200等

我会避免使用
byte[]
缓冲区,除非您出于某种原因将录音格式设置为
ENCODING\u PCM_8BIT
(并非所有设备都支持该格式)

现在,如果您想将这些短值转换为双倍值,您必须认识到,您在matlab中记录的
double
值是
双精度标准化样本
,它们从
[-1到1]
标准化,而
值将从
[-32768到32767]
因此,您必须编写一个转换函数,而不是尝试将数字从短转换为双精度

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