2012-01-18 21 views
0

我試圖將一個聲音對象的字節數組添加到捕獲的麥克風聲音字節數組。如何提取聲音對象到單聲道字節數組在AS3

它可以工作,但提取的聲音對象會變長,並且長度加倍。我想這是因爲聲音對象的字節數組是立體聲,而麥克風數組是單聲道。

我有這樣的:

sound.extract(myByteArray, extract); 

myByteArray現在包含立體聲數據。我怎樣才能把它變成單聲道(我是ByteArrays的新手)。

UPDATE:

這裏是一個有效的解決方案:

existingByte.position = 0; 
var mono : ByteArray = new ByteArray(); 
while(existingByte.bytesAvailable) { 
    var left : Number = existingByte.readFloat(); 
    mono.writeFloat(left); 
    existingByte.position +=4; 
} 

回答

0

只需選擇一個渠道來提取。我認爲ByteArray是交錯的,所以如果你選擇所有奇數字節的左通道,如果你選擇所有的偶數字節,它是正確的通道。

var mono : ByteArray = new ByteArray(); 
for(var i : int = 0; i < raw.length; i+=2) { 
    var left : int = raw[i]; 
    var right : int = raw[i+1]; 

    var mixed : int = left * 0.5 + right * 0.5; 
    if(pickLeft) { 
     mono.writeByte(left); 
    } else if(pickRight) { 
     mono.writeByte(right); 
    } else { 
     mono.writeByte(mixed); 
    } 
} 
+0

謝謝。不幸的是,如果我正在使用您的代碼,我使用的wave writer類(由Adobe提供)會觸發以下錯誤: 錯誤:音頻樣本不是浮動格式 \t at classes :: WAVWriter/processSamples() – shredding 2012-01-19 10:05:16

+0

是的,我的「代碼」是不正確的。讀取字節將意味着一切都是8位。一個浮點數是16位,所以你需要讀取交替浮點數(如果數據流是16位,則不需要字節),但選擇左聲道,右聲道或混合它們的想法仍然有效。 – chubbsondubs 2012-01-19 16:59:49