4
這裏就是我與現在的工作:如何混合PCM音頻源(Java)?
for (int i = 0, numSamples = soundBytes.length/2; i < numSamples; i += 2)
{
// Get the samples.
int sample1 = ((soundBytes[i] & 0xFF) << 8) | (soundBytes[i + 1] & 0xFF); // Automatically converts to unsigned int 0...65535
int sample2 = ((outputBytes[i] & 0xFF) << 8) | (outputBytes[i + 1] & 0xFF); // Automatically converts to unsigned int 0...65535
// Normalize for simplicity.
float normalizedSample1 = sample1/65535.0f;
float normalizedSample2 = sample2/65535.0f;
float normalizedMixedSample = 0.0f;
// Apply the algorithm.
if (normalizedSample1 < 0.5f && normalizedSample2 < 0.5f)
normalizedMixedSample = 2.0f * normalizedSample1 * normalizedSample2;
else
normalizedMixedSample = 2.0f * (normalizedSample1 + normalizedSample2) - (2.0f * normalizedSample1 * normalizedSample2) - 1.0f;
int mixedSample = (int)(normalizedMixedSample * 65535);
// Replace the sample in soundBytes array with this mixed sample.
soundBytes[i] = (byte)((mixedSample >> 8) & 0xFF);
soundBytes[i + 1] = (byte)(mixedSample & 0xFF);
}
從據我所知,這是該算法的精確表示此頁面上的定義:http://www.vttoth.com/CMS/index.php/technical-notes/68
然而,僅僅混合聲音沉默(全0)會產生很明顯聽起來不正確的聲音,也許最好將其描述爲更高調更響亮。
希望能幫助您確定我是否正確實施算法,或者如果我只是需要以不同的方式(不同的算法/方法)去解決它?
試過這段代碼。經過少量編譯和丟失括號錯誤後,當兩個音頻源混合時背景中仍然存在白噪聲。是否還有其他遺漏? –
經過了很長時間的處理這個問題,我決定不使用這種轉換方式,而是'ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer()。get(shorts);',在短褲上。然後返回字節ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer()。put(shorts);'..這完美地工作。 –