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

时间:2014-10-16 16:14:19

标签: actionscript-3 flash audio

我尝试从闪存中录制PCM声音(使用Microphone类)。我使用org.bytearray.micrecorder.MicRecorder助手类。
在麦克风课程中,我找不到bitDepthbitsPerSample这样的属性。
我总是得到32位。
有可能吗?

1 个答案:

答案 0 :(得分:0)

更新:提问者 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 

}


要在您准备就绪时运行上述功能,只需在{&#34;记录完成&#34;情况。