如何使用每个样本16位(16位深度)录制声音



我尝试从闪光灯录制PCM声音(使用麦克风类)。我使用org.byarray.micrecorder.micrecorder辅助类
在Microphone类中,我找不到类似bitDepthbitsPerSample的属性
我总是得到32位
有可能做到吗?

UPDATE:请求者John812能够使用..解决此问题。。

bit16_bytes.writeShort( data.readFloat() * 32767 );上下文见以下注释


方法#2:根据我使用LoadPCMfromByteArray方法的经验

我有一些你可以尝试的东西,但我只将它与实际的32位WAVE文件一起使用,并通过LoadPCMFromByteArray命令播放。

AS3麦克风类记录32位。您必须自己编写样本到不同比特深度的转换。我不知道你正在处理多少个样本,但下面的通用代码向你展示了如何转换。注意:* 512意味着使用实际样本量(例如:* 4096?或* 8192?)如果你弄错了数字,就会发出嘶嘶声/失真,所以要么从小处进行实验,要么在你的问题中提供完整的细节,以获得更有用的编辑/答案。

CONVERT:假设您记录的byteArray被称为数据

public var bit16_bytes : ByteArray; //will hold the 16bit version
public function convert_to16Bit () : void
{
    bit16_bytes = new ByteArray(); data.position = 0;
    while (bit16_bytes.position < data.length - 4) 
    //if you get noise/distortion try either: 256, 512, 1024, 2048, 4096 or 8192
    { bit16_bytes.writeShort( data.readInt() * 512 );  } //multiply by samples amount
    data = new ByteArray(); //recycle for re-use
    bit16_bytes.position = 0; //reset or else E-O-File error
    bit16_bytes.readBytes( data ); //copy 16bit back into Data byte-array 
}


只要准备好就可以运行上述函数,只需在处理"录制完成"情况的任何函数中添加convert_to16Bit();行即可。

最新更新