簡體   English   中英

audioRecord如何以指定的采樣率檢索數據

[英]how audioRecord retrieve data with a specified sampling rate

我的實驗是這樣的:首先,我使用matlab創建一個速率為44100的指定波形文件,這意味着任何持續1s的片段都包含44100個元素,這些元素顯示為double。 然后,我使用智能手機的麥克風來檢索波形。 並且采樣率為44100,以便恢復波。 但是,audioRecord將數據存儲為字節,而我想要的是雙倍。 從字節轉換為雙音聽起來合理,我仍然感到困惑的是,采樣率44100意味着audioRecord應該以1s或44100 * 4字節記錄44100字節,因為double包含4個字節? 我承諾的其他實驗:使用錄制軟件檢索wave並存儲在.wav中,分別通過matlab的wavread和java讀取.wav。 至1s,我們得到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.85009765625E -4-
-0.0032958984375
8.23974609375E -4-
8.23974609375E -4-
有誰知道audioRecord將在1s內檢索多少元素,采樣率為44100?

AudioRecord的默認設置是為每個樣本返回每通道16位( ENCODING_PCM_16BIT )。

現在有兩個讀取重載,可以指定short [](16位)或byte [](8位)緩沖區。

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

因此1秒單聲道緩沖器(1聲道)應該有一個長度為44100的short[]緩沖器。立體聲(2聲道)將有88200等...

我會避免使用byte[]緩沖區,除非您出於某種原因將AudioRecord格式設置為ENCODING_PCM_8BIT (並不保證所有設備都支持)。

現在,如果你希望將這些短值轉換為你必須認識到雙打double錄制值在MATLAB是double-precision normalized samples ,其從標准化[-1 to 1]short值將是來自[-32768 to 32767]所以你必須編寫一個轉換函數,而不是只是嘗試將數字從short轉換為double。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM