microphone bytearray mix and replay
oeann Sep 20, 2011 11:28 AMHello i need your help
I have an application with microphone record and i mix another sound from song. For this step is ok i can save to my desktop and the mix is good.
But i would like to play my mix from bytearray. And is there i have a problem.
The sound is very slow....... and not same that my file save.
My code:
var epos:Number=0
//ByteArray in which the microphone sound data is stored
var soundBytes:ByteArray = new ByteArray();
//Gets your default microphone
var mic:Microphone = Microphone.getMicrophone();
Security.showSettings("microphone");
function init(){
//Sets the minimum input level that should be considered sound
mic.setSilenceLevel(0);
//The amount by which the microphone boosts the signal.
mic.gain = 50;
//The rate at which the microphone is capturing sound, in kHz.
mic.rate = 44;
}
//function called when start Record button is clicked
function startRecord():void
{
mic.addEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler);
}
//function called when stop Record button is clicked
function stopRecord():void
{
mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler);
}
function micSampleDataHandler(event:SampleDataEvent):void
{
var temp:ByteArray=new ByteArray()
var mdata:ByteArray=event.data
var l:Number=mdata.bytesAvailable
sound_kar.extract(temp,l/4,epos);
temp.position=0
var b:Number=temp.bytesAvailable
epos+=l/4
var s1,s2,s3:Number
while (mdata.bytesAvailable)
{
s3= mdata.readFloat();
s1=0
s2=0
if(temp.bytesAvailable>=8){
s1=temp.readFloat()
s2=temp.readFloat()
}
mixTracks(s1,s2,s3);
}
}
function mixTracks(l:Number,r:Number,m:Number):void
{
//the function which mixes the microphone audio with background audio...
var sampleT1_L:Number;
var sampleT1_R:Number;
var sampleT2:Number;
var trackL:Number;
var trackR:Number;
sampleT1_L = l;
sampleT1_R = r;
sampleT2 = m;
trackL = (sampleT1_L + sampleT2);
trackR = (sampleT1_R + sampleT2);
trackL = trackL > 1 ? 1:trackL;
trackR = trackR > 1 ? 1:trackR;
trackL = trackL < -1 ? -1:trackL;
trackR = trackR < -1 ? -1:trackR;
mixedTrack.writeFloat(trackL);
mixedTrack.writeFloat(trackR);
}
For replay mix:
mixedTrack.position = 0;
soundPlay.addEventListener(SampleDataEvent.SAMPLE_DATA, playbackSampleHandler);
channelPlay = soundPlay.play();
function playbackSampleHandler(event:SampleDataEvent):void
{
if (!mixedTrack.bytesAvailable > 0)//if end; return
return;
for (var i:int = 0; i < 8192/(44/44); i++){
var sample:Number = 0;
if (mixedTrack.bytesAvailable > 0)
sample = mixedTrack.readFloat();
//write sample, i.e., play
for(var j:int=0; j<int((44.0/44)*2);j++){//4 for 22 khz?for 8khz
event.data.writeFloat(sample);
}
}
}
Can you help me to replay my mix in bytearray?
Thanks a lot
Oeann
