Ejemplo n.º 1
0
Archivo: Host.cs Proyecto: PavelPZ/REW
 public void recordEnd() {
   if (recordStartPar == null) return;
   try {
     trace("recordEnd, begin");
     LMMedia.Recorder.RecordEnd();
     if (recordStartPar.toDisc) { //zapis na disk
       //if (recordStartPar.slOldBrowser) //ukonceni uploadu PCM na disk a vyvolani server side MP3 komprese 
       //  recordStartPar.toDiscLib.Dispose();
       //else
       onPCMData(true);
     } else { //nahravka je v recorded
       LMMedia.WaveFormatExtensible.WriteHeaderEnd(recordedStream);
     }
     recordStartPar = null;
     trace("recordEnd, end");
   } catch (Exception exp) {
     error("recordEnd", exp);
   }
 }
Ejemplo n.º 2
0
Archivo: Host.cs Proyecto: PavelPZ/REW
    public void recordStart(ScriptObject so) {
      try {
        trace("recordStart begin");
        player.Stop(); url = null;
        recordStartPar = new RecordStartPar {
          toDisc = (bool)so.GetProperty("toDisc"),
          //slOldBrowser = (bool)so.GetProperty("slOldBrowser"),
          toDiscFileUrl = (string)so.GetProperty("toDiscFileUrl"),
        };
        recordedBytes = 0;
        //if (recordStartPar.slOldBrowser && recordStartPar.toDisc) recordStartPar.toDiscLib = new uploadChunk.lib(null, () => Recorder.audioFormat, recordStartPar.toDiscFileUrl);
        if (recordedStream == null) recordedStream = new MemoryStream(); else recordedStream.SetLength(0);
        LMMedia.Recorder.RecordStart(recordStartPar, buf => {
          recordedBytes += buf.Length;
          if (OnRecordedMilisecs != null) Deployment.Current.Dispatcher.BeginInvoke(() => OnRecordedMilisecs(null, new NumberEventArgument { Value = (int)((long)8 * 1000 * recordedBytes / Recorder.audioFormat.SamplesPerSecond / Recorder.audioFormat.BitsPerSample) }));
          if (recordStartPar.toDisc) { //zapis na disk
            //if (recordStartPar.slOldBrowser) { //stary browser uploaduje na disk PCM data a po ukonceni provede MP3 kompresi
            //  recordStartPar.toDiscLib.uploadChunk(buf);
            //} else { //novy browser posle PCM do JS, kde se vse zpravuje podobne, jako pro Chrome nebo FF
            if (recordedStream.Position == 0) {
              var wr = new BinaryWriter(recordedStream);
              wr.Write((UInt16)Recorder.audioFormat.SamplesPerSecond); wr.Write((UInt16)Recorder.audioFormat.BitsPerSample); wr.Write((UInt16)Recorder.audioFormat.Channels);
            }
            recordedStream.Write(buf, 0, buf.Length);

            //var dump = buf.Take(10).Select(b => b.ToString()).Aggregate((r, i) => r + "," + i);

            Deployment.Current.Dispatcher.BeginInvoke(() => onPCMData(false));
            //XXX
            //trace("recordStart data " + buf.Take(10).Select(b => b.ToString()).Aggregate((r, i) => r + "," + i));
            //UInt16[] pcm = new UInt16[buf.Length / 2];
            //for (var i = 0; i < pcm.Length; i++) pcm[i] = BitConverter.ToUInt16(buf, i * 2);
            //swap double bytes
            //var bytes = buf.Select(b => Convert.ToChar(b)).ToArray();
            //for (var i = 0; i < bytes.Length / 2; i++) {
            //  var b = bytes[i * 2]; bytes[i * 2] = bytes[i * 2 + 1]; bytes[i * 2 + 1] = b;
            //}
            //var str = new string(bytes);
            //  OnPCMData(null, new PCMEventArgument {
            //    //Value = new List<byte>(buf),
            //    //Value = ByteArrayToHex(buf),
            //    BitsPerSample = Recorder.audioFormat.BitsPerSample,
            //    SamplesPerSecond = Recorder.audioFormat.SamplesPerSecond
            //  });
            //});
            //}
          } else { //zapis do pameti
            if (recordedStream.Position == 0) LMMedia.WaveFormatExtensible.WriteHeaderStart(recordedStream, Recorder.audioFormat);
            recordedStream.Write(buf, 0, buf.Length);
          }
        });
        trace("recordStart end");
      } catch (Exception exp) {
        error("recordStart", exp);
      }
    }