2 Replies Latest reply: Sep 21, 2011 5:17 AM by oeann RSS

    microphone bytearray mix and replay

    oeann Community Member

      Hello 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

        • 1. Re: microphone bytearray mix and replay
          oeann Community Member

          hello i really need your help and excuse me for my english... i speak french..

           

          i change my function

          function playbackSampleHandler(event:SampleDataEvent):void

          {

              for (var i:int = 0; i < 8192 && mixedTrack.bytesAvailable > 0; i++)

              {

                                var sample:Number = mixedTrack.readFloat();

                               

                                event.data.writeFloat(sample);

                                event.data.writeFloat(sample);

               }

          }

           

              

           

          the sound play is very slowly......

          can  you help me and tell me what i doing wrong?

           

          Thanks again

           

           

           

          • 2. Re: microphone bytearray mix and replay
            oeann Community Member

            ok i found my problem and is ok.. if this can help you:

             

            function playbackSampleHandler(event:SampleDataEvent):void

            {

                for (var i:int = 0; i < 8192 && mixedTrack.bytesAvailable > 0; i++)

                {

                            

                    mixedTrack.position = int(position) * 8;

                    position += 1;

             

                    var sample:Number = mixedTrack.readFloat();

                                 

                    event.data.writeFloat(sample);

                    event.data.writeFloat(sample);

                }

            }

             

            good day