18.4.3 配置
如果要使AudioInput实例自动将其事件同步到主UI线程,设置ThreadInvoking为真,但请确保AudioInput实例具有有效的父级控件。
ThreadInvoking默认为假,所以如果您在DataGenerated事件处理程序中更新GUI,请不要忘记调用Control.Invoke方法。
如果要使用其他Windows的录制设备而不是默认录像设备,请设置RecordingDevice属性。您可以使用AudioInput的静态方法GetRecordingDevices获取所有可用的录制设备。
可以通过Volume属性来控制音量。有效值为0到100,其中0表示静音,100为最大音量。当AudioInput实例启用(即生成样本)时,您也可以设置音量。
如果要使用差异采样率而非默认采样率(44100Hz),请设置SamplesPerSecond属性。在启用AudioInput实例时设置此属性不起作用。
使用单声道音频而非立体声(默认),请将IsStereo设置为假。在启用AudioInput实例时设置此属性不起作用。
如果您更喜欢每个采样8位而不是16位(默认值),请设置BitsPerSample属性8。有效值为8和16(默认值)。这种限制来自PCM波形。在启用AudioInput实例时设置此属性不起作用。
18.4.4 启动
启动AudioInput实例时,您可以设置IsInputEnabled属性为真或调用Start方法。当DataGenerated事件为您提供一组新的音频样本时,您可以使用LightningChartUltimate实例渲染它们。
若想停止AudioInput实例,设置IsInputEnabled为假或调用RequestStop方法。RequestStop方法不会立即停止。它只会给AudioInput实例发送信号以尽快停止。如果您需要等到一切都停止,那么等待Stopped事件被触发。你需要订阅它。
本章介绍AudioInput类的WPF版本的用法。AudioInput的WPF版本工作原理与WinForms版本基本相同。但是,有一些WPF用户需要了解的内容,本章将介绍这些内容。
在代码隐藏中手动创建一个新的AudioInput实例,或者通过将其从VisualStudio的工具箱拖放到您的窗口、用户控件等上。
如果您不需要显示GUI(即您使用自己的或您的源代码控制AudioInput对象),则使用Arction.WPF.SignalTools命名空间中的AudioInput。这个特定的类派生自FrameworkElement,它的所有属性都是可绑定的。为方便起见,在安装LightningChartUltimate SDK之后,还可以从VisualStudio的工具箱中找到Arction.WPF.SignalTools.AudioInput,以便将其放在Windows、用户控件等上,然后将元素移动到XAML代码所需的位置。必要的XML命名空间将以这种方式自动添加。
AudioInput还有一个现成的GUI。可以从Arction.WPF.SignalTools.GUI命名空间中找到它。您也可以在安装LightningChartUltimate SDK后从VisualStudio的工具箱中找到它。请注意,这只是Arction.WPF.SignalTools.AudioInput类的GUI,但它包含一个Arction.WPF.SignalTools.AudioInput类的实例,您可以通过Input属性访问它。即您不必创建一个新的单独的Arction.WPF.SignalTools.AudioInput实例。
建议设置LicenseKey属性,以便您的AudioInput实例使用显式许可证密钥,而不用试图从Windows注册表中找到一个。请注意,如果您使用试用版/许可证,则可以将LicenseKey属性保留为其默认值。
AudioOutput组件允许用户将System.Double信号数据转换为音频流,然后通过扬声器播放,或发送到声音设备的Line-out接口。
平衡- 获取或设置音频播放平衡。有效值介于-100到100.-100之间,这意味着音频只能通过左侧扬声器播放。0表示两个扬声器输出音频。100表示该音频仅通过右侧扬声器播放。
BitsPerSample -获取或设置每个样本分配多少比特。支持的数值为8和16。如果使用其他值,16则会被取代。当IsOutputEnabled为false值时,是可设置的状态。
IsOutputEnabled -获取或设置此实例的状态(即启动或停止)。设置此属性为true值与调用Start的方法相同,其中false值与调用Stop的方法相同。
IsStereo -获取或设置是使用两个通道(立体声)还是仅使用一个(单声道)。这是可以进行设定的。
IsOutputEnabled的值为false。
LicenseKey -以常规或加密格式,获取或设置许可证密钥字符串。
PlaybackDevice -获取或设置当前播放设备。IsOutputEnabled的值为false时可进行设置。
通过将此属性的值设置为NULL,则能够使用Windows的默认播放设备。
SamplesPerSecond -获取或设置采样频率。IsOutputEnabled的值为false时可设置。
音量- 获取或设置音量(0-100)。IsOutputEnabled的值为false时可设置。
频谱计算器组件能够在时域和频域之间进行转换。
图20-1。源信号数据(顶部)转换为频域(底部)的示例。信号采样频率=300
Hz,因此频率刻度为300/2= 150 Hz。强正弦基线为10Hz(10周期/秒)。将100Hz的较小信号作为一种噪音的方式进行添加。在功率谱中能够发现两个尖峰。
我们有以下公共方法供您参考:
•CalculateForward(double[] samples,outdouble []fftData):将时域信号数据转换为频域使用FFT。fftData的输出值还包含负值。输入和输出数据数组的长度必须相等。长度是数据的分辨率,从0Hz扩展到采样频率/2,其中输出值间隔相等。
•CalculateForward(float[] samples,outfloat [] fftData):与以前的方法一样,但是仅针对对于单个精度浮点值。
•CalculateBackward(double[] fftData,outdouble [] samples):将频域数据转换为
时域。从FFT数据中获取信号样本,样本计数等于输入fftData的长度值。
•CalculateBackward(float[] fftData,outfloat [] samples:像以前的方法一样,但是是针对单个精度浮点值而言。
•PowerSpectrum(double[] samples,outdouble [] fftData):用于计算信号的功率谱数据。与CalculateForward相同,但具有绝对的输出值。
•PowerSpectrum(float[] samples,outfloat [] fftData):与以前的方法一样,但是是针对单个精度浮点值而言。
•PowerSpectrumOverlapped(double[] samples,intfftWindowLength,doubleoverlapPercent,outdouble[] fftData,outintprocessedSampleCount):通过移动来计算功率谱。从计算窗口内源信号采样数据,并以重叠的百分比表示。信号数据必须比给定的FFT窗口长。输出FFT数据是fftWindowLength的长度,所以不一定要与源数据的长度相同。输出的数据为绝对值。
•PowerSpectrumOverlapped(float[] samples,intfftWindowLength,doubleoverlapPercent,outfloat[] fftData,outint processedSampleCount)