2012-01-18 20 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