SawtoothOscillator1 和 SawtoothOscillator2 可以在 OscillatorCompare 程序并行相比。 网页有两对滑块控件更改的频率和每个振荡器的卷。 该频率的滑块控件生成仅
24 至 132 的整数值。 我借来的音乐设备数字接口 (MIDI) 标准用于表示球场的代码从这些值。 24
的值对应于 C 低于中间 C,变桨科学记数法叫做 C 1 (八度 1 C),并有约 32.7 赫兹频率,其中的三个八度。 132 的值对应于 C 10、 中东-C,以上六个八度和约 16,744
Hz 的频率。 关于这些滑块工具提示转换器科学音调符号和等效频率显示的当前值。
因为我在尝试用这些两个振子,我听不清的区别。 我还在直观地检查所产生的波形,另一台计算机上安装软件示波器和我也看不到任何差异。 这表明我的
SetFrequency-比率方法实现智能化,当然我们应该期望在一个系统中复杂的 DirectX。 我怀疑插上重新取样后的波形数据以移频正在执行。 如果你感到紧张,您可以设置
BASE_FREQ 非常低 — — 例如,至 20 赫兹 — — 和类将生成详细的波形,由组成的 2,205 样品。 您还可以尝试以较高的值:例如,8,820 Hz 将导致波形的只是五个样品要生成
! 当然,这有一个有些不同的声音,因为插值的波形介于之间锯齿波和三角波,但由此产生的波形是仍平稳无"锯齿"。
这并不意味着一切正常福。 与任一锯齿振荡器、
顶几个八度获得相当混乱。 波形的采样往往会发出高过之前,听到的一种低频率色彩和,打算在将来更充分调查。
压低音量 !
SetVolume 方法定义的 IXAudio2Voice 和 IXAudio2SourceVoice 的继承记录作为浮点乘数,可以设置为值范围从-2 ^24 至 2 ^24,这等于 16777216。
现实生活中,但是,您可能要将音量上一个 IXAudio2SourceVoice 对象保持为 0 和 1 之间的值。 值对应于沉默的
0 和 1 对应于没有增益或衰减。 请记住无论波形的源关联的 IXAudio2SourceVoice — — 正在通过算法生成还是来自的音频文件 — — 它可能已很有可能接近的-32768
和 32767 的最小和最大值的 16 位样本。 如果您尝试放大这些波形音量级别大于 1 时,样品将超过一个 16 位整数的宽度和将剪切的最小和最大值。 将导致失真和噪声。
当你开始组合 IXAudio2SourceVoice 的多个实例时,这一点非常重要。 这些多个实例的波形都被加在一起的混合。 如果您允许每个这些实例以拥有量的
1,声音的总和很可能导致超出 16 位整数的大小的样本。 偶尔可能发生此错误 — — 只间歇性的失真导致 — — 或慢性病,结果一件很麻烦的。
当使用多个生成完整 16 位宽波形的 IXAudio2SourceVoice 实例,一项安全措施将每个振荡器的卷设置为的声音数除以 1。 保证总和不能超过
16 位的值。 此外可以通过掌握的声音作出整体的卷调整。 你还可能想要看看
XAudio2CreateVolumeMeter 函数,它使您可以创建一个音频处理对象,可以帮助监视卷用于调试目的。
我们第一次的乐器
它是常见的乐器上片有钢琴式键盘,但我过了很久最近由类型的按钮键盘手风琴等俄罗斯巴彦 (其中我所熟悉的俄罗斯作曲家 Sofia Gubaidulina 工作) 上找到。 因为每个键是一个按钮,而不是长的杠杆,太多钥匙能装在
tablet 屏幕,在有限的空间内所示图 3。
.png)
图 3 ChromaticButtonKeyboard 程序
底部两行重复前两行上的键和提供,以纾缓共同和弦和旋律序列的指法。 否则,每个组的前三行中的
12 键提供所有备注的倍频程,一般按升序从左到右。 在这里的总范围是大小的四个八度,这是大小的两次什么你与钢琴键盘相同。
真正的巴彦有额外的倍频程,但我不能使按钮太小,不适合。 源代码中允许您设置常数来尝试这额外的倍频程,或消除另一个倍频程,并使按钮甚至更大。
因为我不能说这个计划听起来像是在现实世界中存在的任何文书,我只是叫它 ChromaticButton-键盘。 密钥是为
Key,从 ContentControl 派生,但执行一些触摸处理,以维持一个 IsPressed 属性,生成一个 IsPressedChanged 事件的自定义控件的实例。 当你扫你的手指在键盘处理此控件中的触摸和触摸处理的普通按钮
(其中也有一个 IsPressed 属性) 之间的差异是明显:标准按钮将设置 IsPressed 属性设置为 true 只手指按时发生在表面的按钮,此自定义键控制认为如果手指扫在从一侧按键。
该程序创建六个是从较早的项目几乎完全相同的 SawtoothOscillator1 类的 SawtoothOscillator 类的实例。如果您的触摸屏支持,您可以播放六同时注意到。 有没有回调,并由调用
SetFrequencyRatio 方法控制振荡器的频率。
要跟踪哪些振荡器可用以及哪个振荡器正在玩的 MainPage.xaml.h 文件定义了两个标准的集合对象作为字段: