我尝试从闪存中录制PCM声音(使用Microphone类)。我使用org.bytearray.micrecorder.MicRecorder助手类。
在麦克风课程中,我找不到bitDepth
或bitsPerSample
这样的属性。
我总是得到32位。
有可能吗?
答案 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;情况。