Я испытываю странную проблему и спрашиваю себя, есть ли у кого-нибудь представление о том, что происходит.
В 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;
}