2 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊
一幀音頻是一個(gè)或多個(gè)同時(shí)定時(shí)的音頻樣本。在您的情況下,立體聲 ( frames ==2
)。在流中,它們通常是交錯(cuò)的(例如 L、R、L、R....)。
您可以通過(guò)將每個(gè)示例編寫(xiě)兩次來(lái)解決此問(wèn)題。
雖然 Java(或任何其他具有停止世界垃圾收集功能的 JITd 語(yǔ)言運(yùn)行時(shí))從來(lái)都不是低延遲音頻軟件的實(shí)現(xiàn)選擇,但我懷疑您檢測(cè)到的“草率”實(shí)際上是一個(gè)較長(zhǎng)的音頻緩沖期:默認(rèn)設(shè)置緩沖期可能只有幾分之一秒。

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊
對(duì)于這個(gè)特定的想法,您可以使用
while (true) {
double samplingInterval = (double) (sampleRate / freq);
double angle = (2.0 * Math.PI * i) / samplingInterval;
byte toPlay = (byte) (Math.sin(angle) * 127);
byte[] data=new byte[1024];
for(int j=0; j<data.length; j++) data[j]=toPlay;
line.write(data, 0, data.length);
i++;
}
或者長(zhǎng)度為 4 就足夠了。
添加回答
舉報(bào)