Я делаю простое приложение AS3, которое будет записывать звук с микрофона, а затем воспроизводить его с использованием данных ByteArray.
Я создал приложение, оно записывает, но когда я пытаюсь воспроизвести его, оно воспроизводится в 2 раза быстрее ...
Интересно то, что раньше все было хорошо, а теперь быстрее ... И даже когда я запускаю старый файл, у него есть код, который работал на 100%, прежде чем он теперь быстрее ...
Вот код:
import flash.media.*;
import flash.events.*;
import flash.utils.ByteArray;
var ch:SoundChannel;
var soundBytes:ByteArray = new ByteArray();
var soundO:ByteArray = new ByteArray();
var sound:Sound= new Sound();
var mic:Microphone = Microphone.getMicrophone();
var recMode:Boolean = false;
var playMode:Boolean = false;
function init()
{
mic.codec = "Speex";
mic.setSilenceLevel(0);
mic.gain = 50;
mic.rate = 44;
}
function startRecord():void
{
mic.addEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler);
}
function stopRecord():void
{
mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler);
soundBytes.position = 0;
soundO.length = 0;
soundO.writeBytes(soundBytes);
soundO.position = 0;
soundBytes.length = 0;
}
function micSampleDataHandler(event:SampleDataEvent):void
{
while (event.data.bytesAvailable)
{
var sample:Number = event.data.readFloat();
soundBytes.writeFloat(sample);
}
}
function playSound():void
{
soundO.position = 0;
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, playbackSampleHandler);
ch = sound.play();
ch.addEventListener(Event.SOUND_COMPLETE,onSC);
}
function stopSound():void
{
sound.removeEventListener(SampleDataEvent.SAMPLE_DATA, playbackSampleHandler);
ch.stop();
ch.removeEventListener(Event.SOUND_COMPLETE,onSC);
}
function onSC(evt:Event):void
{
stopSound();
soundO.position = 0;
playMode = ! true;
rec_btn.visible = true;
rec_btn2.visible = false;
play_btn.visible = true;
play_btn2.visible = false;
}
function playbackSampleHandler(event:SampleDataEvent):void
{
for (var i:int = 0; i < 8192; i++)
{
if (soundO.bytesAvailable < 4)
{
break;
}
var sample:Number = soundO.readFloat();
event.data.writeFloat(sample);
event.data.writeFloat(sample);
}
}
rec_btn.buttonMode = rec_btn2.buttonMode = play_btn.buttonMode = play_btn2.buttonMode = true;
function showPlayUI()
{
play_btn.visible = true;
}
function hidePlayUI()
{
play_btn2.visible = false;
rec_btn2.visible = false;
}
rec_btn.addEventListener(MouseEvent.CLICK,onRecord);
rec_btn2.addEventListener(MouseEvent.CLICK,onRecord);
play_btn.addEventListener(MouseEvent.CLICK,onPlay);
play_btn2.addEventListener(MouseEvent.CLICK,onPlay);
function onRecord(evt:MouseEvent=null):void
{
if (playMode)
{
playMode = ! true;
play_btn2.visible = false;
play_btn.visible = true;
stopSound();
}
if (! recMode)
{
recMode = true;
rec_btn.visible = false;
rec_btn2.visible = true;
play_btn2.visible = false;
startRecord();
}
else
{
recMode = ! true;
rec_btn.visible = true;
rec_btn2.visible = false;
play_btn2.visible = false;
stopRecord();
showPlayUI();
}
}
function onPlay(evt:MouseEvent=null):void
{
if (recMode)
{
recMode = false;
rec_btn.visible = true;
rec_btn2.visible = false;
stopRecord();
}
if (! playMode)
{
playMode = true;
rec_btn2.visible = false;
play_btn2.visible = true;
play_btn.visible = false;
playSound();
}
else
{
playMode = ! true;
rec_btn2.visible = false;
play_btn2.visible = false;
play_btn.visible = true;
stopSound();
}
}
hidePlayUI();
init();
Как вы можете видеть, скорость кодирования составляет 44, что является скоростью приема ...
Я проверял это на Vista и на XP на моем ПК,и на обоих это быстрее ...
Вот URL: Запись и воспроизведение