static ShazamResult CaptureAndTag() { var analysis = new Analysis(); var finder = new LandmarkFinder(analysis); using (var capture = new WasapiCapture()) { var captureBuf = new BufferedWaveProvider(capture.WaveFormat) { ReadFully = false }; capture.DataAvailable += (s, e) => { captureBuf.AddSamples(e.Buffer, 0, e.BytesRecorded); }; capture.StartRecording(); using (var resampler = new MediaFoundationResampler(captureBuf, new WaveFormat(Analysis.SAMPLE_RATE, 16, 1))) { var sampleProvider = resampler.ToSampleProvider(); var retryMs = 3000; var tagId = Guid.NewGuid().ToString(); while (true) { while (captureBuf.BufferedDuration.TotalSeconds < 1) { Thread.Sleep(100); } analysis.ReadChunk(sampleProvider); if (analysis.StripeCount > 2 * LandmarkFinder.RADIUS_TIME) { finder.Find(analysis.StripeCount - LandmarkFinder.RADIUS_TIME - 1); } if (analysis.ProcessedMs >= retryMs) { //new Painter(analysis, finder).Paint("c:/temp/spectro.png"); //new Synthback(analysis, finder).Synth("c:/temp/synthback.raw"); var sigBytes = Sig.Write(Analysis.SAMPLE_RATE, analysis.ProcessedSamples, finder); var result = ShazamApi.SendRequest(tagId, analysis.ProcessedMs, sigBytes).GetAwaiter().GetResult(); if (result.Success) { return(result); } retryMs = result.RetryMs; if (retryMs == 0) { return(result); } } } } } }
private void writeObjects(Stream writer) { int count = _xref.Entries.Count; byte[] endObj = System.Text.Encoding.ASCII.GetBytes("\nendobj\n"); SaveParameters param = new SaveParameters(); param.Stream = writer; param.WriteInheritableObjects = false; param.Buffer = new MemoryStream(4096); param.StringBuffer = new MemoryStream(1024); param.Compression = _compression; param.Encryptor = _xref.Encryptor; if (_xref.Encryptor != null) { count--; } for (int i = 1; i < count; ++i) { Entry entry = _xref.Entries[i]; entry.Offset = (int)writer.Position; string startObj = i.ToString() + " 0 obj\n"; writer.Write(System.Text.Encoding.ASCII.GetBytes(startObj), 0, startObj.Length); param.ObjNo = i; // Если словарь подписи, то находим запись ByteRange и ее офсет if (entry.Object.ObjNo == _signature) { _byteRangeOffset = Sig.Write(param, entry.Object as PDFDictionary, out _byteRange); } else { entry.Object.Write(param); } writer.Write(endObj, 0, endObj.Length); } if (_xref.Encryptor != null) { param.Encryptor = null; param.WriteInheritableObjects = true; Entry entry = _xref.Entries[count]; entry.Offset = (int)writer.Position; string startObj = count.ToString() + " 0 obj\n"; writer.Write(System.Text.Encoding.ASCII.GetBytes(startObj), 0, startObj.Length); entry.Object.Write(param); writer.Write(endObj, 0, endObj.Length); } param.Buffer.Dispose(); param.StringBuffer.Dispose(); }