我遇到了一个奇怪的问题,并想知道是否有人知道发生了什么。
使用ActionScript 3我使用麦克风录制13秒的声音片段。 我将mic.setSilenceLevel设置为0,因此数据一直在被采样。
单击开始以启动计时器并从麦克风写入字节数据。 13秒后计时器停止,我将数据写入byteArray,然后编码为mp3。
如果我录制13秒无声音,则mp3文件的长度为12.251秒。 如果我录制了13秒的声音,那么mp3文件的长度为12.512秒。
任何想法为什么?
mic.addEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler);
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);
}
}
}
private function stopRecord():void {
mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler);
var START_BYTES:uint = 0;
soundBytes.position = 0;
soundBA.clear();
soundBA.position = 0;
//insert the .2 seconds of silence to the new sound at the beginning
for (var i:int = 0; i<4096; i++) {
soundBA.writeFloat(0);
soundBA.writeFloat(0);
}
soundBA.writeBytes(soundBytes, START_BYTES);
soundBA.position = 0;
}