作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在录制声音,并存储字节数组以进行播放和随后的mp3编码。
不幸的是,尽管在录音的一开始我就得到了咔嗒声。
我尝试了几种方法来消除这种情况,例如:
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);
}
}
}
关于flash - 录音开始时AS3的喀哒声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8518778/
我是一名优秀的程序员,十分优秀!