/// <summary> /// 配置分析的参数 /// </summary> /// <param name="refWaveform">参考波形</param> public void SetAnalyzeParam(MultiToneWaveform refWaveform) { analyzer.SetReferenceWaveform(refWaveform.GetRawWaveform() as ManagedAudioLibrary.MultiToneWaveform); this.refWaveform = refWaveform; this.RefWaveform = refWaveform; // analyzer.set IsAnalyzeParamSet = true; }
/// <summary> /// 多音色波形生成 /// </summary> /// <param name="sampleRate">采样率</param> /// <param name="waveLength">波形长度</param> /// <param name="amplitude">波幅</param> /// <param name="frequencyMin">最低频率</param> /// <param name="frequencyMax">最高频率</param> /// <param name="frequencyPoints">频率个数</param> /// <param name="isLog">是否对数波形</param> /// <param name="optimizeCrestFactor">是否优化参数</param> /// <returns>波形数据</returns> public static double[] MultiToneWaveform(double sampleRate, uint waveLength, double amplitude, double frequencyMin, double frequencyMax, ushort frequencyPoints, bool isLog = false, bool optimizeCrestFactor = false) { MultiToneWaveform multiToneWaveform = new MultiToneWaveform(); multiToneWaveform.CreateData(amplitude, frequencyMin, frequencyMax, frequencyPoints, waveLength, isLog, optimizeCrestFactor, sampleRate); double[] waveData = new double[multiToneWaveform.GetTotalPoints()]; multiToneWaveform.GetCopyOfData(waveData); return(waveData); }
public void Start() { if (null == tableLayoutPanel_waveConfig.Controls[0]) { return; } double sampleRate = (double)numericUpDown_sampleRate.Value; Generator waveGenerator = tableLayoutPanel_waveConfig.Controls[0] as Generator; AITask.AITask input = _globalInfo.AITask; AOTask.AOTask output = _globalInfo.AOTask; output.SetUpdateRate(sampleRate); input.SetSampleRate(sampleRate); double channelRange = waveGenerator.GetAmplitude(); output.AddChannel(comboBox_aoChannel.SelectedIndex, -1 * channelRange, channelRange); input.AddChannel(comboBox_testChannel.SelectedIndex, -1 * channelRange, channelRange); double[] outData = waveGenerator.Generate(); output.SetSamplesToUpdate(outData.Length); double outTime = outData.Length / output.GetUpdateRate(); input.SetSamplesToAcquire((int)(outTime * input.GetSampleRate() * GlobalInfo.ExtraReadTime)); output.WriteData(outData, -1); input.Start(); output.Start(); _testData = new double[input.GetSamplesToAcquire()]; input.ReadData(ref _testData, _testData.Length, GlobalInfo.ReadTimeOut); // easyChart_waveform.Plot(_testData); _globalInfo.Mainform.Invoke(new Action <double[], double, double>(easyChart_waveform.Plot), _testData, 0, 1); input.Stop(); output.Stop(); _refWaveform = waveGenerator.GetRefWaveform() as MultiToneWaveform; // double peakToPeak, acRms, dcRms, max, min, tdPlusN; // double[] acPart, powerSpectrum, phaseSpectrum; // SeeSharpTools.JY.Audio.AudioAnalyzer.AnalyzeMultiToneWaveform(readWaveform, _refWaveform, _globalInfo.AITask.GetSampleRate(), // out peakToPeak, out acRms, out dcRms, out max, out min, out tdPlusN, out acPart, out powerSpectrum, out phaseSpectrum); _analyzeSize = _refWaveform.GetTotalPoints(); }