// read time spectrum processor - iterface of this form public void ProcessData(double[] specData, double[] samples) { if (pause) { return; } //if (InvokeRequired) // BeginInvoke(new SpecProcessorFunc(ArchiveData), new object[] { specData }); //else if (chkNoiseReducer.Checked) { noiseReduction.ProcessData(specData, samples); } noiseAnalyser.ProcessData(specData, samples); IntensityAnalyser.ProcessData(specData, samples); // تشخیص حرف تلفظ شده از طریق داده های اسپکتروم if (noiseAnalyser.IsSpeaking) { detector.Detect(specData, 0, noiseAnalyser.NoiseLevel, noiseAnalyser.NoiseLevel); } ArchiveData(specData, samples); }
// دریافت فرکانسهای بدست آمده از نمونه های صوتی 8192 تایی // جهت تشخیص زیر و بمی private void New8192FourierFrequencyArrived(double[] data, double[] samples) { noiseFilterSpeaking.ProcessData(data, samples); noiseFilterVowelChecker.ProcessData(data, samples); // اگر حرف صدادار تلفظ شده بود if (noiseFilterVowelChecker.IsSpeaking) { // اسپکتروم باید نرمال شود normalizerFilter.ProcessData(data, samples); // زیری و بمی با استفاده از اسپکتروم نرمال شده tempoFilter.ProcessData(data, samples); } else { // حروف صدادار وجود ندارد و باید ریست شود tempoFilter.Reset(); } }
// static NoiseAnalyserFilter noiseFilterVowelChecker = new NoiseAnalyserFilter(7, 50, 3); public static void DrawIntensity(int zoom, Bitmap bmp, IntensityAnalyserFilter filter) { Graphics g = Graphics.FromImage(bmp); Point[] linePoints = new Point[Math.Min(800 / zoom, Math.Min(GramUtils.Archive.Count, 800))]; // g.FillRectangle(Brushes.White, 0, 0, 1024, 800); int from = Math.Max(GramUtils.Archive.Count - 800, 0); int j = 0; float step = 1; for (int row = GramUtils.Archive.Count - 1; row >= from; row--) { // zoom = int.Parse(cmbZoom.SelectedItem.ToString().Replace("x", "")); //int amp = int.Parse(cmdAmp.SelectedItem.ToString().Replace("x", "")); // for (int x = 0; x < GramUtils.Archive[row].Length / 2; x++) // { if ((j + 1) * zoom >= 800) { break; } filter.ProcessData(null, SampleArchive[row]); linePoints[j].X = (int)(filter.Avg * 1000.0); linePoints[j].Y = (int)(j * zoom); ; /// for (int hj = (int)(j * zoom); hj < (j * zoom) + zoom; hj++) //bmp.SetPixel((int)(filter.avg * 500.0), (j * zoom), Color.Blue); //} j++; } linePoints[0].X = 0; linePoints[linePoints.Length - 1].X = 0; g.DrawPolygon(Pens.Blue, linePoints); g.Dispose(); }