使用Tone.JS收听代码

音频在代码中的集成已经经历了许多演变,并以引人入胜的方式不断增长。 我们从Internet Explorer 4的“ bgsound”标签开始,

 

然后毕业于Netscape的’embed’标签,最后是Adobe Flash。 最终,HTML5引入了

  

该标签主要用于播放或暂停预加载的音乐,并且在引入Web Audio API之前非常有效。 Web Audio的发展彻底改变了JavaScript中的音频功能,而所有这些功能都从一个称为AudioContext()的东西开始。

  var audioContext =新的AudioContext( 选项

这个“音频上下文”基本上是我们代码中音频的任何合成和处理的包装。 它使我们可以使用诸如“ createOscillator”功能的工具,该功能为我们提供了基本的振荡器。 该振荡器本质上是音频波形,可听地表示为单个正弦波。

一旦创建了该振荡器实例,我们就可以通过一系列不同的效果来传递它,例如失真,延迟,混响或调制,并且可以将音调的频率更改为在20Hz到20,000Hz之间的任意位置。 20kHz是人类可以听到的最高频率范围,因此,除非我们只为狗制作音乐,否则我们实际上并不关心更高的东西。

作为一名音乐家和开发人员,我很快被Web Audio吸引住了,很高兴能够使用Javascript中的音频创建和操作工具。 但是,与Web Audio API一样令人惊讶的是,我遇到了一个问题。 由于无法访问漂亮的地面振荡器,因此我很难创建专注于音乐的应用程序。 作为开发人员,在音乐环境中考虑代码变得充满挑战。 我会发现自己花了太多时间试图通过从头修改和组合简单的振荡器来构建合成器。

当实现我心目中的音乐特征的时候,我的最初观点或灵感将早已荡然无存。 需要一种更简化的方式来实现我想要的音乐性,同时又不被较低级别的音频合成方面所困扰。 输入Tone.JS; 由开发人员和作曲家Yotam Mann创建的一种音乐性的音频合成API。

Tone.JS包装了Web Audio提供给我们的音频上下文,并从一开始就扩展了我们的可能性。 它为开发人员提供了不同的单声道和和弦合成器,以及许多不同的效果,这些效果远比仅通过Web Audio提供的效果更具模块化。 我们可以调整幅度包络,影响音符进入和衰减的强度。 Tone.JS还为我们提供了对triggerAttack()和triggerRelease()函数的访问权限,这些函数规定了音符开始和停止的时间。 攻击和释放功能与幅度包络设置配合使用,可以非常自然地表现较早的模拟合成器。

  bassSynth.triggerAttack(); 
bassSynth.triggerRelease();

Tone.JS的这些功能使开发人员在创建基本的合成器和效果时具有很大的灵活性。 但是,TJS在Tone.Transport的基础上又迈出了一步。 传输本质上提供了一个基于速​​度的网格,可以根据开发阶段或用户设置的特定时间触发和循环音乐事件。 借助此功能,世界分层和电子音乐可以在代码中活跃起来。 查看“学习音乐”应用程序以及该琶音器以供参考。

此外,Web Audio允许我们访问用户的本地麦克风(当然需要获得许可),因此这些音频处理中的任何一个都可以应用于现场人声/乐器。

因此,如果您是想要在项目中应用音频或音乐环境的开发人员,那么Tone.JS基本上就是您的一站式商店。 如果您需要进一步的证明来强调该库的强大功能,请查看音乐播客Sound Explorer展示的Inside Music,开发人员可以在其中使用Phoenix和Perfume Genius等乐队提供的音频茎,并创建3D虚拟现实。音乐环境。