AS3在录音开始点击声音
问题描述:
我目前正在录音并存储字节数组以供播放和随后编码为mp3。AS3在录音开始点击声音
不幸的是,虽然我在录制的一开始就得到了一个点击声音。
我试图几个方法来尝试消除这种如:
记录所述第1.3秒mic.gain = 0;然后设置mic.gain = 50;
清除字节组后第1.3秒钟,然后继续写的ByteArray(实际上删除记录的第1.3秒)。
无论这些方法已经停止点击是添加。
有没有人有一个想法,我可以如何防止点击被添加?
这是我录制/存储代码:
public var mic:Microphone = Microphone.getMicrophone();
public var micSilence:uint;
private var soundBytes:ByteArray = new ByteArray();
private var soundBA:ByteArray = new ByteArray();
mic.gain = 50;
mic.setSilenceLevel(1, 2000);
mic.rate = 44;
Security.showSettings("2");
mic.setLoopBack(false);
mic.setUseEchoSuppression(false);
private function startRecordingAfterCountdown():void {
mic.addEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler);
}
private function micSampleDataHandler(event:SampleDataEvent):void {
while (event.data.bytesAvailable){
var sample:Number = event.data.readFloat();
soundBytes.writeFloat(sample);
}
}
private function stopRecord():void {
mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler);
soundBytes.position = 0;
soundBA.clear();
soundBA.writeBytes(soundBytes);
soundBA.position = 0;
soundBytes.clear();
var newBA:ByteArray = new ByteArray();
newBA.writeBytes(soundBA);
recordingsArray[0] = newBA;
}
答
虽然我不能重现一下,我想可能通过在记录的开始音量的急剧增加引起。因此可以通过平滑增加音量来消除影响。这样的事情:
// the amount of volume increasing time in ms
public static const VOLUME_INC_TIME_MS:uint = 200;
// in bytes
public static const VOLUME_INC_BYTES:uint = VOLUME_INC_TIME_MS * 44.1 * 4;
private function micSampleDataHandler(event:SampleDataEvent):void
{
var bytesRecorded:uint = soundBytes.length;
while(event.data.bytesAvailable)
{
var sample:Number = event.data.readFloat();
if(bytesRecorded < VOLUME_INC_BYTES)
{
// using linear dependence, but of course you can use a different one
var volume:Number = bytesRecorded/VOLUME_INC_BYTES;
soundBytes.writeFloat(sample * volume);
bytesRecorded += 4;
}else
{
soundBytes.writeFloat(sample);
}
}
}
希望这会有所帮助。
再次令人惊叹!谢谢Semen :) – crooksy88 2011-12-15 13:19:35